added media format MPEG-4 Timed Text
This commit is contained in:
parent
488fce3ab8
commit
19593d4c24
|
@ -188,6 +188,7 @@ const char *MediaFormat::name() const
|
|||
case Mpeg4FineGranularityScalableProfile5: return "MPEG-4 Fine Granularity Scalable Profile L5";
|
||||
default: return "MPEG-4 Visual";
|
||||
}
|
||||
case GeneralMediaFormat::Mpeg4TimedText: return "MPEG-4 Timed Text";
|
||||
case GeneralMediaFormat::Mpc: return "Musepack SV8";
|
||||
case GeneralMediaFormat::Pcm:
|
||||
switch(sub) {
|
||||
|
|
|
@ -12,11 +12,11 @@ namespace Media {
|
|||
*/
|
||||
enum class MediaType
|
||||
{
|
||||
Unknown,
|
||||
Audio,
|
||||
Video,
|
||||
Text,
|
||||
Hint
|
||||
Unknown, /**< the type is unknown */
|
||||
Audio, /**< audio/sound */
|
||||
Video, /**< video */
|
||||
Text, /**< text/subtitle */
|
||||
Hint /**< hint */
|
||||
};
|
||||
|
||||
/*!
|
||||
|
@ -24,7 +24,7 @@ enum class MediaType
|
|||
*/
|
||||
enum class GeneralMediaFormat
|
||||
{
|
||||
Unknown,
|
||||
Unknown, /**< the format is unknown */
|
||||
Aac, /**< Advanced Video Coding */
|
||||
Ac3, /**< Dolby Digital */
|
||||
Ac4, /**< AC-4 */
|
||||
|
@ -50,16 +50,17 @@ enum class GeneralMediaFormat
|
|||
InteractionStream, /**< Interaction Stream */
|
||||
Jpeg, /**< JPEG */
|
||||
OggKate, /**< Karaoke And Text Encapsulation */
|
||||
Opus = 64, /**< Opus */
|
||||
MicrosoftAudioCodecManager = 26, /**< Microsoft Audio Codec Manager (ACM) */
|
||||
Opus, /**< Opus */
|
||||
MicrosoftAudioCodecManager, /**< Microsoft Audio Codec Manager (ACM) */
|
||||
MicrosoftMpeg4, /**< Microsoft MPEG-4 */
|
||||
MicrosoftVideoCodecManager, /**< Microsoft Video Codec Manager (VCM) */
|
||||
DolbyMlp, /** < Dolby MLP */
|
||||
Mpeg1Audio, /**< MPEG-1 Audio */
|
||||
Mpeg1Video, /**< MPEG-1 Vudio */
|
||||
Mpeg2Audio, /**< MPEG-2 Audio */
|
||||
Mpeg2Video, /**< MPEG-2 Vudio */
|
||||
Mpeg4Video, /**< MPEG-4 */
|
||||
Mpeg2Video, /**< MPEG-2 Video */
|
||||
Mpeg4Video, /**< MPEG-4 Video */
|
||||
Mpeg4TimedText, /**< MPEG-4 Timed Text / Streaming text format / Part 17 */
|
||||
Mpc, /**< Musepack */
|
||||
Pcm, /**< Pulse Code Modulation */
|
||||
Png, /**< PNG */
|
||||
|
|
|
@ -51,6 +51,8 @@ MediaFormat fourccToMediaFormat(uint32 fourccId)
|
|||
return GeneralMediaFormat::Mpeg2Video;
|
||||
case Mpeg4Video:
|
||||
return GeneralMediaFormat::Mpeg4Video;
|
||||
case Mpeg4TimedText:
|
||||
return GeneralMediaFormat::Mpeg4TimedText;
|
||||
case Hevc1: case Hevc2:
|
||||
return MediaFormat(GeneralMediaFormat::Hevc);
|
||||
case Avc1: case Avc2: case Avc3: case Avc4: case H264Decoder1: case H264Decoder2:
|
||||
|
|
|
@ -318,6 +318,7 @@ enum KnownValue : uint32 {
|
|||
Mpeg4Decoder2 = 0x53454447,
|
||||
Mpeg4Decoder3 = 0x57563146,
|
||||
Mpeg4Sample = 0x6d703473, /**< MPEG-4 stream (other then video/audio) */
|
||||
Mpeg4TimedText = 0x74783367, /**< MPEG-4 Timed Text / Streaming text format / Part 17 */
|
||||
Mpeg4Video = 0x6d703476, /**< MPEG-4 video */
|
||||
MsMpeg4V1Decoder1 = 0x44495631,
|
||||
MsMpeg4V1Decoder2 = 0x64697631,
|
||||
|
|
|
@ -1265,23 +1265,28 @@ void Mp4Track::internalParseHeader()
|
|||
buff[2] = ((rawLanguage & 0x001F) >> 0x0) + 0x60;
|
||||
m_language = string(buff, 3);
|
||||
// read hdlr atom
|
||||
// track type
|
||||
m_istream->seekg(m_hdlrAtom->startOffset() + 16); // seek to beg, skip size, name, version, flags and reserved bytes
|
||||
string trackTypeStr = reader.readString(4);
|
||||
if(trackTypeStr == "soun") {
|
||||
m_mediaType = MediaType::Audio;
|
||||
} else if(trackTypeStr == "vide") {
|
||||
// -> seek to begin skipping size, name, version, flags and reserved bytes
|
||||
m_istream->seekg(m_hdlrAtom->dataOffset() + 8);
|
||||
// -> track type
|
||||
switch(reader.readUInt32BE()) {
|
||||
case 0x76696465:
|
||||
m_mediaType = MediaType::Video;
|
||||
} else if(trackTypeStr == "hint") {
|
||||
break;
|
||||
case 0x736F756E:
|
||||
m_mediaType = MediaType::Audio;
|
||||
break;
|
||||
case 0x68696E74:
|
||||
m_mediaType = MediaType::Hint;
|
||||
} else if(trackTypeStr == "meta") {
|
||||
break;
|
||||
case 0x6D657461: case 0x74657874:
|
||||
m_mediaType = MediaType::Text;
|
||||
} else {
|
||||
break;
|
||||
default:
|
||||
m_mediaType = MediaType::Unknown;
|
||||
}
|
||||
|
||||
// name
|
||||
m_istream->seekg(12, ios_base::cur); // skip reserved bytes
|
||||
//name = reader.readString(hdlrAtom->size - 16 - 4 - 12);
|
||||
m_name = reader.readTerminatedString(m_hdlrAtom->totalSize() - 12 - 4 - 12, 0);
|
||||
// read stco atom (only chunk count)
|
||||
m_chunkOffsetSize = (m_stcoAtom->id() == Mp4AtomIds::ChunkOffset64) ? 8 : 4;
|
||||
|
|
Loading…
Reference in New Issue