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
commit
680391580b
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
||||
|
|
|
@ -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());
|
||||
|
|
Loading…
Reference in New Issue