Skip to content

Commit b9625c7

Browse files
authored
fix: Fix audio selection by channel count (#8286)
One of unit tests indicated that when we have channel count preference, but don't have direct match, we should select variants with largest channel count less than config. Test was falsy positive, as we don't have logic to satisfy that scenario.
1 parent 47eeb46 commit b9625c7

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

lib/media/preference_based_criteria.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,11 +240,27 @@ shaka.media.PreferenceBasedCriteria = class {
240240
*/
241241
static filterVariantsByAudioChannelCount_(variants, channelCount) {
242242
return variants.filter((variant) => {
243+
// Filter variants with channel count less than or equal to desired value.
243244
if (variant.audio && variant.audio.channelsCount &&
244-
variant.audio.channelsCount != channelCount) {
245+
variant.audio.channelsCount > channelCount) {
245246
return false;
246247
}
247248
return true;
249+
}).sort((v1, v2) => {
250+
// We need to sort variants list by channels count, so the most close one
251+
// to desired value will be first on the list. It's important for the call
252+
// to shaka.media.AdaptationSet, which will base set of variants based on
253+
// first variant.
254+
if (!v1.audio && !v2.audio) {
255+
return 0;
256+
}
257+
if (!v1.audio) {
258+
return -1;
259+
}
260+
if (!v2.audio) {
261+
return 1;
262+
}
263+
return (v2.audio.channelsCount || 0) - (v1.audio.channelsCount || 0);
248264
});
249265
}
250266

test/media/adaptation_set_criteria_unit.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -706,13 +706,18 @@ describe('AdaptationSetCriteria', () => {
706706
});
707707
});
708708
manifest.addVariant(2, (variant) => {
709+
variant.addAudio(30, (stream) => {
710+
stream.channelsCount = 4;
711+
});
712+
});
713+
manifest.addVariant(3, (variant) => {
709714
variant.addAudio(20, (stream) => {
710715
stream.channelsCount = 8;
711716
});
712717
});
713-
manifest.addVariant(3, (variant) => {
718+
manifest.addVariant(4, (variant) => {
714719
variant.addAudio(30, (stream) => {
715-
stream.channelsCount = 2;
720+
stream.channelsCount = 4;
716721
});
717722
});
718723
});
@@ -733,8 +738,8 @@ describe('AdaptationSetCriteria', () => {
733738
const set = builder.create(manifest.variants);
734739

735740
checkSet(set, [
736-
manifest.variants[0],
737-
manifest.variants[2],
741+
manifest.variants[1],
742+
manifest.variants[3],
738743
]);
739744
});
740745

0 commit comments

Comments
 (0)