Distinguish text and "meta" tracks in MP4

This commit is contained in:
Martchus 2019-04-19 21:51:13 +02:00
parent 48166bde9e
commit 66895e8e2c
3 changed files with 14 additions and 5 deletions

View File

@ -997,20 +997,22 @@ const char *MediaFormat::extensionName() const
const char *mediaTypeName(MediaType mediaType) const char *mediaTypeName(MediaType mediaType)
{ {
switch (mediaType) { switch (mediaType) {
case MediaType::Unknown:
return "Other";
case MediaType::Audio: case MediaType::Audio:
return "Audio"; return "Audio";
case MediaType::Video: case MediaType::Video:
return "Video"; return "Video";
case MediaType::Text: case MediaType::Text:
return "Subititle"; return "Subititle";
case MediaType::Hint:
return "Hint";
case MediaType::Buttons: case MediaType::Buttons:
return "Buttons"; return "Buttons";
case MediaType::Control: case MediaType::Control:
return "Control"; return "Control";
case MediaType::Unknown: case MediaType::Hint:
return "Other"; return "Hint";
case MediaType::Meta:
return "Meta-data";
} }
return ""; return "";
} }

View File

@ -17,7 +17,8 @@ enum class MediaType : unsigned int {
Text, /**< text/subtitle */ Text, /**< text/subtitle */
Buttons, /**< buttons */ Buttons, /**< buttons */
Control, /**< control */ Control, /**< control */
Hint /**< hint */ Hint, /**< hint */
Meta, /**< (timed) metadata */
}; };
TAG_PARSER_EXPORT const char *mediaTypeName(MediaType mediaType); TAG_PARSER_EXPORT const char *mediaTypeName(MediaType mediaType);

View File

@ -1330,6 +1330,9 @@ void Mp4Track::makeMedia(Diagnostics &diag)
outputStream().write("hint", 4); outputStream().write("hint", 4);
break; break;
case MediaType::Text: case MediaType::Text:
outputStream().write("text", 4);
break;
case MediaType::Meta:
outputStream().write("meta", 4); outputStream().write("meta", 4);
break; break;
default: default:
@ -1601,12 +1604,15 @@ void Mp4Track::internalParseHeader(Diagnostics &diag)
m_mediaType = MediaType::Hint; m_mediaType = MediaType::Hint;
break; break;
case 0x6D657461: case 0x6D657461:
m_mediaType = MediaType::Meta;
break;
case 0x74657874: case 0x74657874:
m_mediaType = MediaType::Text; m_mediaType = MediaType::Text;
break; break;
default: default:
m_mediaType = MediaType::Unknown; m_mediaType = MediaType::Unknown;
} }
// FIXME: save raw media type in next major release so unknown ones can still be written correctly in Mp4Track::makeMedia()
// -> name // -> name
m_istream->seekg(12, ios_base::cur); // skip reserved bytes m_istream->seekg(12, ios_base::cur); // skip reserved bytes
if ((tmp = m_istream->peek()) == m_hdlrAtom->dataSize() - 12 - 4 - 8 - 1) { if ((tmp = m_istream->peek()) == m_hdlrAtom->dataSize() - 12 - 4 - 8 - 1) {