Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

// META: global=window,dedicatedworker
const VIDEO_COLOR_SPACE_SETS = {
primaries: ['bt709', 'bt470bg', 'smpte170m', 'bt2020', 'smpte432'],
transfer: ['bt709', 'smpte170m', 'iec61966-2-1', 'linear', 'pq', 'hlg'],
matrix: ['rgb', 'bt709', 'bt470bg', 'smpte170m', 'bt2020-ncl'],
fullRange: [true, false],
};
function generateAllCombinations() {
const keys = Object.keys(VIDEO_COLOR_SPACE_SETS);
let colorSpaces = [];
generateAllCombinationsHelper(keys, 0, {}, colorSpaces);
return colorSpaces;
}
function generateAllCombinationsHelper(keys, keyIndex, colorSpace, results) {
if (keyIndex >= keys.length) {
// Push the copied object since the colorSpace will be reused.
results.push(Object.assign({}, colorSpace));
return;
}
const prop = keys[keyIndex];
// case 1: Skip this property.
generateAllCombinationsHelper(keys, keyIndex + 1, colorSpace, results);
// case 2: Set this property with a valid value.
for (const val of VIDEO_COLOR_SPACE_SETS[prop]) {
colorSpace[prop] = val;
generateAllCombinationsHelper(keys, keyIndex + 1, colorSpace, results);
delete colorSpace[prop];
}
}
test(t => {
let colorSpaces = generateAllCombinations();
for (const colorSpace of colorSpaces) {
let vcs = new VideoColorSpace(colorSpace);
let json = vcs.toJSON();
for (const k of Object.keys(json)) {
assert_equals(
json[k],
colorSpace.hasOwnProperty(k) ? colorSpace[k] : null
);
}
}
}, 'Test VideoColorSpace toJSON() works.');