diff --git a/lib/stream.cpp b/lib/stream.cpp index 5f426bda..28a100e8 100644 --- a/lib/stream.cpp +++ b/lib/stream.cpp @@ -821,6 +821,35 @@ std::set Util::findTracks(const DTSC::Meta &M, const JSON::Value &capa, return result; } } + //audio channel matching + if (!trackType.size() || trackType == "audio"){ + if (trackLow == "surround"){ + std::set validTracks = getSupportedTracks(M, capa); + for (std::set::iterator it = validTracks.begin(); it != validTracks.end(); it++){ + const DTSC::Track & Trk = M.tracks.at(*it); + if (!trackType.size() || Trk.type == trackType || Trk.codec == trackType){ + if (Trk.channels > 2){result.insert(*it);} + } + } + return result; + } + unsigned int channelVal; + uint32_t targetChannel = 0; + if (trackLow == "mono"){targetChannel = 1;} + if (trackLow == "stereo"){targetChannel = 2;} + if (trackLow == "stereo"){targetChannel = 2;} + if (trackLow.find("ch") != std::string::npos && sscanf(trackLow.c_str(), "%uch", &channelVal) == 1){targetChannel = channelVal;} + if (targetChannel){ + std::set validTracks = getSupportedTracks(M, capa); + for (std::set::iterator it = validTracks.begin(); it != validTracks.end(); it++){ + const DTSC::Track & Trk = M.tracks.at(*it); + if (!trackType.size() || Trk.type == trackType || Trk.codec == trackType){ + if (Trk.channels == targetChannel){result.insert(*it);} + } + } + return result; + } + } //approx resolution matching if (!trackType.size() || trackType == "video"){ if (trackLow == "highres" || trackLow == "bestres" || trackLow == "maxres"){