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)
{
switch (mediaType) {
case MediaType::Unknown:
return "Other";
case MediaType::Audio:
return "Audio";
case MediaType::Video:
return "Video";
case MediaType::Text:
return "Subititle";
case MediaType::Hint:
return "Hint";
case MediaType::Buttons:
return "Buttons";
case MediaType::Control:
return "Control";
case MediaType::Unknown:
return "Other";
case MediaType::Hint:
return "Hint";
case MediaType::Meta:
return "Meta-data";
}
return "";
}

View File

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

View File

@ -1330,6 +1330,9 @@ void Mp4Track::makeMedia(Diagnostics &diag)
outputStream().write("hint", 4);
break;
case MediaType::Text:
outputStream().write("text", 4);
break;
case MediaType::Meta:
outputStream().write("meta", 4);
break;
default:
@ -1601,12 +1604,15 @@ void Mp4Track::internalParseHeader(Diagnostics &diag)
m_mediaType = MediaType::Hint;
break;
case 0x6D657461:
m_mediaType = MediaType::Meta;
break;
case 0x74657874:
m_mediaType = MediaType::Text;
break;
default:
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
m_istream->seekg(12, ios_base::cur); // skip reserved bytes
if ((tmp = m_istream->peek()) == m_hdlrAtom->dataSize() - 12 - 4 - 8 - 1) {