added media format MPEG-4 Timed Text

This commit is contained in:
Martchus 2016-02-20 01:42:01 +01:00
parent 488fce3ab8
commit 19593d4c24
5 changed files with 30 additions and 20 deletions

View File

@ -188,6 +188,7 @@ const char *MediaFormat::name() const
case Mpeg4FineGranularityScalableProfile5: return "MPEG-4 Fine Granularity Scalable Profile L5"; case Mpeg4FineGranularityScalableProfile5: return "MPEG-4 Fine Granularity Scalable Profile L5";
default: return "MPEG-4 Visual"; default: return "MPEG-4 Visual";
} }
case GeneralMediaFormat::Mpeg4TimedText: return "MPEG-4 Timed Text";
case GeneralMediaFormat::Mpc: return "Musepack SV8"; case GeneralMediaFormat::Mpc: return "Musepack SV8";
case GeneralMediaFormat::Pcm: case GeneralMediaFormat::Pcm:
switch(sub) { switch(sub) {

View File

@ -12,11 +12,11 @@ namespace Media {
*/ */
enum class MediaType enum class MediaType
{ {
Unknown, Unknown, /**< the type is unknown */
Audio, Audio, /**< audio/sound */
Video, Video, /**< video */
Text, Text, /**< text/subtitle */
Hint Hint /**< hint */
}; };
/*! /*!
@ -24,7 +24,7 @@ enum class MediaType
*/ */
enum class GeneralMediaFormat enum class GeneralMediaFormat
{ {
Unknown, Unknown, /**< the format is unknown */
Aac, /**< Advanced Video Coding */ Aac, /**< Advanced Video Coding */
Ac3, /**< Dolby Digital */ Ac3, /**< Dolby Digital */
Ac4, /**< AC-4 */ Ac4, /**< AC-4 */
@ -50,16 +50,17 @@ enum class GeneralMediaFormat
InteractionStream, /**< Interaction Stream */ InteractionStream, /**< Interaction Stream */
Jpeg, /**< JPEG */ Jpeg, /**< JPEG */
OggKate, /**< Karaoke And Text Encapsulation */ OggKate, /**< Karaoke And Text Encapsulation */
Opus = 64, /**< Opus */ Opus, /**< Opus */
MicrosoftAudioCodecManager = 26, /**< Microsoft Audio Codec Manager (ACM) */ MicrosoftAudioCodecManager, /**< Microsoft Audio Codec Manager (ACM) */
MicrosoftMpeg4, /**< Microsoft MPEG-4 */ MicrosoftMpeg4, /**< Microsoft MPEG-4 */
MicrosoftVideoCodecManager, /**< Microsoft Video Codec Manager (VCM) */ MicrosoftVideoCodecManager, /**< Microsoft Video Codec Manager (VCM) */
DolbyMlp, /** < Dolby MLP */ DolbyMlp, /** < Dolby MLP */
Mpeg1Audio, /**< MPEG-1 Audio */ Mpeg1Audio, /**< MPEG-1 Audio */
Mpeg1Video, /**< MPEG-1 Vudio */ Mpeg1Video, /**< MPEG-1 Vudio */
Mpeg2Audio, /**< MPEG-2 Audio */ Mpeg2Audio, /**< MPEG-2 Audio */
Mpeg2Video, /**< MPEG-2 Vudio */ Mpeg2Video, /**< MPEG-2 Video */
Mpeg4Video, /**< MPEG-4 */ Mpeg4Video, /**< MPEG-4 Video */
Mpeg4TimedText, /**< MPEG-4 Timed Text / Streaming text format / Part 17 */
Mpc, /**< Musepack */ Mpc, /**< Musepack */
Pcm, /**< Pulse Code Modulation */ Pcm, /**< Pulse Code Modulation */
Png, /**< PNG */ Png, /**< PNG */

View File

@ -51,6 +51,8 @@ MediaFormat fourccToMediaFormat(uint32 fourccId)
return GeneralMediaFormat::Mpeg2Video; return GeneralMediaFormat::Mpeg2Video;
case Mpeg4Video: case Mpeg4Video:
return GeneralMediaFormat::Mpeg4Video; return GeneralMediaFormat::Mpeg4Video;
case Mpeg4TimedText:
return GeneralMediaFormat::Mpeg4TimedText;
case Hevc1: case Hevc2: case Hevc1: case Hevc2:
return MediaFormat(GeneralMediaFormat::Hevc); return MediaFormat(GeneralMediaFormat::Hevc);
case Avc1: case Avc2: case Avc3: case Avc4: case H264Decoder1: case H264Decoder2: case Avc1: case Avc2: case Avc3: case Avc4: case H264Decoder1: case H264Decoder2:

View File

@ -318,6 +318,7 @@ enum KnownValue : uint32 {
Mpeg4Decoder2 = 0x53454447, Mpeg4Decoder2 = 0x53454447,
Mpeg4Decoder3 = 0x57563146, Mpeg4Decoder3 = 0x57563146,
Mpeg4Sample = 0x6d703473, /**< MPEG-4 stream (other then video/audio) */ 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 */ Mpeg4Video = 0x6d703476, /**< MPEG-4 video */
MsMpeg4V1Decoder1 = 0x44495631, MsMpeg4V1Decoder1 = 0x44495631,
MsMpeg4V1Decoder2 = 0x64697631, MsMpeg4V1Decoder2 = 0x64697631,

View File

@ -1265,23 +1265,28 @@ void Mp4Track::internalParseHeader()
buff[2] = ((rawLanguage & 0x001F) >> 0x0) + 0x60; buff[2] = ((rawLanguage & 0x001F) >> 0x0) + 0x60;
m_language = string(buff, 3); m_language = string(buff, 3);
// read hdlr atom // read hdlr atom
// track type // -> seek to begin skipping size, name, version, flags and reserved bytes
m_istream->seekg(m_hdlrAtom->startOffset() + 16); // seek to beg, skip size, name, version, flags and reserved bytes m_istream->seekg(m_hdlrAtom->dataOffset() + 8);
string trackTypeStr = reader.readString(4); // -> track type
if(trackTypeStr == "soun") { switch(reader.readUInt32BE()) {
m_mediaType = MediaType::Audio; case 0x76696465:
} else if(trackTypeStr == "vide") {
m_mediaType = MediaType::Video; m_mediaType = MediaType::Video;
} else if(trackTypeStr == "hint") { break;
case 0x736F756E:
m_mediaType = MediaType::Audio;
break;
case 0x68696E74:
m_mediaType = MediaType::Hint; m_mediaType = MediaType::Hint;
} else if(trackTypeStr == "meta") { break;
case 0x6D657461: case 0x74657874:
m_mediaType = MediaType::Text; m_mediaType = MediaType::Text;
} else { break;
default:
m_mediaType = MediaType::Unknown; m_mediaType = MediaType::Unknown;
} }
// name // name
m_istream->seekg(12, ios_base::cur); // skip reserved bytes 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); m_name = reader.readTerminatedString(m_hdlrAtom->totalSize() - 12 - 4 - 12, 0);
// read stco atom (only chunk count) // read stco atom (only chunk count)
m_chunkOffsetSize = (m_stcoAtom->id() == Mp4AtomIds::ChunkOffset64) ? 8 : 4; m_chunkOffsetSize = (m_stcoAtom->id() == Mp4AtomIds::ChunkOffset64) ? 8 : 4;