Consider index position when making MP4 files
However, give tag position precedence if both is specified and forced.
This commit is contained in:
parent
554351810a
commit
802e6e2dfb
|
@ -96,7 +96,7 @@ void Mp4Container::internalParseTags()
|
||||||
m_tags.emplace_back(make_unique<Mp4Tag>());
|
m_tags.emplace_back(make_unique<Mp4Tag>());
|
||||||
try {
|
try {
|
||||||
m_tags.back()->parse(*metaAtom);
|
m_tags.back()->parse(*metaAtom);
|
||||||
} catch(NoDataFoundException &) {
|
} catch(const NoDataFoundException &) {
|
||||||
m_tags.pop_back();
|
m_tags.pop_back();
|
||||||
}
|
}
|
||||||
metaAtom = metaAtom->siblingById(Mp4AtomIds::Meta, false);
|
metaAtom = metaAtom->siblingById(Mp4AtomIds::Meta, false);
|
||||||
|
@ -228,7 +228,6 @@ void Mp4Container::internalMakeFile()
|
||||||
}
|
}
|
||||||
|
|
||||||
// define variables needed to parse atoms of original file
|
// define variables needed to parse atoms of original file
|
||||||
//Mp4Atom *level0Atom = firstElement();
|
|
||||||
if(!firstElement()) {
|
if(!firstElement()) {
|
||||||
addNotification(NotificationType::Critical, "No MP4 atoms could be found.", context);
|
addNotification(NotificationType::Critical, "No MP4 atoms could be found.", context);
|
||||||
throw InvalidDataException();
|
throw InvalidDataException();
|
||||||
|
@ -239,8 +238,8 @@ void Mp4Container::internalMakeFile()
|
||||||
const bool writeChunkByChunk = m_tracksAltered;
|
const bool writeChunkByChunk = m_tracksAltered;
|
||||||
// -> whether rewrite is required (always required when forced to rewrite or when tracks have been altered)
|
// -> whether rewrite is required (always required when forced to rewrite or when tracks have been altered)
|
||||||
bool rewriteRequired = fileInfo().isForcingRewrite() || writeChunkByChunk;
|
bool rewriteRequired = fileInfo().isForcingRewrite() || writeChunkByChunk;
|
||||||
// -> use the preferred tag position by default (might be changed later if not forced)
|
// -> use the preferred tag position/index position (force one wins, if both are force tag pos wins; might be changed later if none is forced)
|
||||||
ElementPosition newTagPos = fileInfo().tagPosition();
|
ElementPosition newTagPos = fileInfo().forceTagPosition() || !fileInfo().forceIndexPosition() ? fileInfo().tagPosition() : fileInfo().indexPosition();
|
||||||
// -> current tag position (determined later)
|
// -> current tag position (determined later)
|
||||||
ElementPosition currentTagPos;
|
ElementPosition currentTagPos;
|
||||||
// -> holds new padding (before actual data)
|
// -> holds new padding (before actual data)
|
||||||
|
@ -481,7 +480,7 @@ calculatePadding:
|
||||||
}
|
}
|
||||||
if(rewriteRequired) {
|
if(rewriteRequired) {
|
||||||
// can't put the tags before media data
|
// can't put the tags before media data
|
||||||
if(!firstMovieFragmentAtom && !fileInfo().forceTagPosition() && newTagPos != ElementPosition::AfterData) {
|
if(!firstMovieFragmentAtom && !fileInfo().forceTagPosition() && !fileInfo().forceIndexPosition() && newTagPos != ElementPosition::AfterData) {
|
||||||
// writing tag before media data is not forced, its not a DASH file and tags aren't already at the end
|
// writing tag before media data is not forced, its not a DASH file and tags aren't already at the end
|
||||||
// -> try to put the tags at the end
|
// -> try to put the tags at the end
|
||||||
newTagPos = ElementPosition::AfterData;
|
newTagPos = ElementPosition::AfterData;
|
||||||
|
|
Loading…
Reference in New Issue