Merge pull request #206 from stanionascu/keep-track-order

When a file with multiple video tracks is added (e.g. with Dolby Vision), tsMuxer swaps the order of the video tracks in the output.
This change, prevents such behavior and maintains the order of the inserted tracks.
master
Dan 2020-03-05 11:39:36 +00:00 committed by GitHub
commit 680391580b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 14 additions and 27 deletions

View File

@ -84,6 +84,8 @@ if (PkgConfig_FOUND)
if (NOT WIN32)
pkg_check_modules_with_static (FREETYPE2 REQUIRED freetype2)
endif()
else()
find_package(ZLIB REQUIRED)
endif()
target_include_directories(tsmuxer PRIVATE

View File

@ -661,13 +661,7 @@ DetectStreamRez METADemuxer::DetectStreamReader(BufferedReaderManager& readManag
trackRez.isSecondary = true;
}
if (trackRez.codecInfo.programName == "V_MS/VFW/WVC1" || trackRez.codecInfo.programName == "V_MPEG-2" ||
trackRez.codecInfo.programName == "V_MPEG4/ISO/AVC" ||
trackRez.codecInfo.programName == "V_MPEG4/ISO/MVC" ||
trackRez.codecInfo.programName == "V_MPEGH/ISO/HEVC")
addTrack(streams, trackRez, true);
else
addTrack(streams, trackRez, false);
addTrack(streams, trackRez);
}
chapters = demuxer->getChapters();
if (calcDuration)
@ -691,7 +685,7 @@ DetectStreamRez METADemuxer::DetectStreamReader(BufferedReaderManager& readManag
containerType = AbstractStreamReader::ctSRT;
CheckStreamRez trackRez = detectTrackReader(tmpBuffer, len, containerType, 0, 0);
addTrack(streams, trackRez, false);
addTrack(streams, trackRez);
delete[] tmpBuffer;
}
@ -702,32 +696,23 @@ DetectStreamRez METADemuxer::DetectStreamReader(BufferedReaderManager& readManag
return rez;
}
void METADemuxer::addTrack(vector<CheckStreamRez>& rez, CheckStreamRez trackRez, bool insToBegin)
void METADemuxer::addTrack(vector<CheckStreamRez>& rez, CheckStreamRez trackRez)
{
if (trackRez.codecInfo.codecID == h264DepCodecInfo.codecID && trackRez.multiSubStream)
{
// split combined MVC/AVC track to substreams
if (insToBegin)
rez.insert(rez.begin(), trackRez);
else
rez.push_back(trackRez);
rez.push_back(trackRez);
trackRez.codecInfo = h264CodecInfo;
int postfixPos = trackRez.streamDescr.find("3d-pg");
if (postfixPos != string::npos)
trackRez.streamDescr = trackRez.streamDescr.substr(0, postfixPos);
if (insToBegin)
rez.insert(rez.begin() + 1, trackRez);
else
rez.push_back(trackRez);
rez.push_back(trackRez);
}
else
{
if (insToBegin)
rez.insert(rez.begin(), trackRez);
else
rez.push_back(trackRez);
rez.push_back(trackRez);
}
}

View File

@ -217,7 +217,7 @@ class METADemuxer : public AbstractDemuxer
int addPGSubStream(const std::string& codec, const std::string& _codecStreamName,
const std::map<std::string, std::string>& addParams, MPLSStreamInfo* subStream);
static void addTrack(std::vector<CheckStreamRez>& rez, CheckStreamRez trackRez, bool insToBegin);
static void addTrack(std::vector<CheckStreamRez>& rez, CheckStreamRez trackRez);
std::vector<MPLSPlayItem> mergePlayItems(const std::vector<MPLSParser>& mplsInfoList);
};

View File

@ -2717,6 +2717,7 @@ void TsMuxerWindow::writeSettings()
settings->setValue("hdmvPES", ui->checkBoxNewAudioPes->isChecked());
if (ui->checkBoxCrop->isEnabled())
settings->setValue("restoreCropEnabled", ui->checkBoxCrop->isChecked());
settings->setValue("inputDir", lastInputDir);
settings->setValue("outputDir", lastOutputDir);
settings->setValue("useBlankPL", ui->checkBoxBlankPL->isChecked());
settings->setValue("blankPLNum", ui->BlackplaylistCombo->value());
@ -2799,16 +2800,15 @@ bool TsMuxerWindow::readSettings()
bool TsMuxerWindow::readGeneralSettings(const QString &prefix)
{
settings->beginGroup(prefix);
QString outputDir = settings->value("outputDir").toString();
if (!outputDir.isEmpty())
lastOutputDir = outputDir;
else
if (!settings->contains("outputDir"))
{
settings->endGroup();
return false;
}
lastInputDir = settings->value("inputDir").toString();
lastOutputDir = settings->value("outputDir").toString();
// ui->checkBoxuseAsynIO->setChecked(settings->value("asyncIO").toBool());
ui->checkBoxSound->setChecked(settings->value("soundEnabled").toBool());
ui->checkBoxNewAudioPes->setChecked(settings->value("hdmvPES").toBool());