Added mono/stereo/surround/Xch track selectors for audio tracks

This commit is contained in:
Thulinma 2020-10-12 16:36:05 +02:00
parent b0c8bdfa21
commit ffcc2b3473

View file

@ -828,11 +828,10 @@ std::set<size_t> Util::findTracks(const DTSC::Meta &M, const JSON::Value &capa,
//audio channel matching //audio channel matching
if (!trackType.size() || trackType == "audio"){ if (!trackType.size() || trackType == "audio"){
if (trackLow == "surround"){ if (trackLow == "surround"){
std::set<size_t> validTracks = getSupportedTracks(M, capa); std::set<size_t> validTracks = capa?getSupportedTracks(M, capa):M.getValidTracks();
for (std::set<size_t>::iterator it = validTracks.begin(); it != validTracks.end(); it++){ for (std::set<size_t>::iterator it = validTracks.begin(); it != validTracks.end(); it++){
const DTSC::Track &Trk = M.tracks.at(*it); if (!trackType.size() || M.getType(*it) == trackType || M.getCodec(*it) == trackType){
if (!trackType.size() || Trk.type == trackType || Trk.codec == trackType){ if (M.getChannels(*it) > 2){result.insert(*it);}
if (Trk.channels > 2){result.insert(*it);}
} }
} }
return result; return result;
@ -842,15 +841,12 @@ std::set<size_t> Util::findTracks(const DTSC::Meta &M, const JSON::Value &capa,
if (trackLow == "mono"){targetChannel = 1;} if (trackLow == "mono"){targetChannel = 1;}
if (trackLow == "stereo"){targetChannel = 2;} if (trackLow == "stereo"){targetChannel = 2;}
if (trackLow == "stereo"){targetChannel = 2;} if (trackLow == "stereo"){targetChannel = 2;}
if (trackLow.find("ch") != std::string::npos && sscanf(trackLow.c_str(), "%uch", &channelVal) == 1){ if (trackLow.find("ch") != std::string::npos && sscanf(trackLow.c_str(), "%uch", &channelVal) == 1){targetChannel = channelVal;}
targetChannel = channelVal;
}
if (targetChannel){ if (targetChannel){
std::set<size_t> validTracks = getSupportedTracks(M, capa); std::set<size_t> validTracks = capa?getSupportedTracks(M, capa):M.getValidTracks();
for (std::set<size_t>::iterator it = validTracks.begin(); it != validTracks.end(); it++){ for (std::set<size_t>::iterator it = validTracks.begin(); it != validTracks.end(); it++){
const DTSC::Track &Trk = M.tracks.at(*it); if (!trackType.size() || M.getType(*it) == trackType || M.getCodec(*it) == trackType){
if (!trackType.size() || Trk.type == trackType || Trk.codec == trackType){ if (M.getChannels(*it) == targetChannel){result.insert(*it);}
if (Trk.channels == targetChannel){result.insert(*it);}
} }
} }
return result; return result;