136 lines
8.5 KiB
HTML
136 lines
8.5 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<script src="video-test.js"></script>
|
|
<script>
|
|
function VPCodecConfigurationRecordToString(set) {
|
|
try {
|
|
return `{ ${set.codecName}, ${set.profile}, ${set.level}, ${set.bitDepth}, ${set.chromaSubsampling}, ${set.colorPrimaries}, ${set.transferCharacteristics}, ${set.matrixCoefficients}, ${set.videoFullRangeFlag}}`;
|
|
} catch(e) {
|
|
return `{ ${set} }`;
|
|
}
|
|
}
|
|
function isEqualVPCodecConfigurationRecord(setA, setB) {
|
|
try {
|
|
return setA.profile == setB.profile &&
|
|
setA.level == setB.level &&
|
|
setA.bitDepth == setB.bitDepth &&
|
|
setA.chromaSubsampling == setB.chromaSubsampling &&
|
|
setA.videoFullRangeFlag == setB.videoFullRangeFlag &&
|
|
setA.colorPrimaries == setB.colorPrimaries &&
|
|
setA.transferCharacteristics == setB.transferCharacteristics &&
|
|
setA.matrixCoefficients == setB.matrixCoefficients;
|
|
} catch(e) {
|
|
return false;
|
|
}
|
|
}
|
|
function makeVPCodecConfigurationRecord(codecName, profile, level, bitDepth, chromaSubsampling, colorPrimaries, transferCharacteristics, matrixCoefficients, videoFullRangeFlag)
|
|
{
|
|
return {
|
|
codecName: codecName,
|
|
profile: profile,
|
|
level: level,
|
|
bitDepth: bitDepth,
|
|
chromaSubsampling: chromaSubsampling,
|
|
videoFullRangeFlag: videoFullRangeFlag,
|
|
colorPrimaries: colorPrimaries,
|
|
transferCharacteristics: transferCharacteristics,
|
|
matrixCoefficients: matrixCoefficients
|
|
};
|
|
}
|
|
function testExpectedVPCodecConfigurationRecord(testFuncString, expected)
|
|
{
|
|
let observed = eval(testFuncString);
|
|
let success = isEqualVPCodecConfigurationRecord(observed, expected);
|
|
reportExpected(success, testFuncString, '===', VPCodecConfigurationRecordToString(expected), VPCodecConfigurationRecordToString(observed));
|
|
}
|
|
window.addEventListener('load', event => {
|
|
testExpected('internals.parseVPCodecParameters("bad-parameter")', null);
|
|
consoleWrite('');
|
|
consoleWrite('Test invalid number of required parameters:')
|
|
testExpected('internals.parseVPCodecParameters("vp09")', null);
|
|
testExpected('internals.parseVPCodecParameters("vp09.00")', null);
|
|
testExpected('internals.parseVPCodecParameters("vp09.00.41")', null);
|
|
consoleWrite('');
|
|
consoleWrite('Test valid default optional parameters:')
|
|
testExpectedVPCodecConfigurationRecord('internals.parseVPCodecParameters("vp09.00.41.08")', makeVPCodecConfigurationRecord('vp09', 0, 41, 8, 1, 1, 1, 1, 0));
|
|
consoleWrite('');
|
|
consoleWrite('Test invalid number of optional parameters:')
|
|
testExpected('internals.parseVPCodecParameters("vp09.02.10.10.01")', null);
|
|
testExpected('internals.parseVPCodecParameters("vp09.02.10.10.01.09")', null);
|
|
testExpected('internals.parseVPCodecParameters("vp09.02.10.10.01.09.16")', null);
|
|
testExpected('internals.parseVPCodecParameters("vp09.02.10.10.01.09.16.09")', null);
|
|
testExpected('internals.parseVPCodecParameters("vp09.02.10.10.01.09.16.09.01.00")', null);
|
|
consoleWrite('');
|
|
consoleWrite('Test valid required and optional parameters:')
|
|
testExpectedVPCodecConfigurationRecord('internals.parseVPCodecParameters("vp09.02.10.10.01.09.16.09.01")', makeVPCodecConfigurationRecord('vp09', 2, 10, 10, 1, 9, 16, 9, 1));
|
|
consoleWrite('');
|
|
consoleWrite('Test invalid codec type');
|
|
testExpected('internals.parseVPCodecParameters("vp10.00.41.08")', null);
|
|
consoleWrite('');
|
|
consoleWrite('Test invalid combination of matrixCoefficients and chromaSubsampling');
|
|
testExpected('internals.parseVPCodecParameters("vp09.00.41.08.01.01.01.00.00")', null);
|
|
consoleWrite('');
|
|
consoleWrite('Test valid profiles:');
|
|
for (let profile of [0, 1, 2, 3])
|
|
testExpectedVPCodecConfigurationRecord(`internals.parseVPCodecParameters("vp09.${profile.toString().padStart(2, '0')}.41.08")`, makeVPCodecConfigurationRecord('vp09', profile, 41, 8, 1, 1, 1, 1, 0));
|
|
consoleWrite('');
|
|
consoleWrite('Test invalid profile:');
|
|
testExpected('internals.parseVPCodecParameters("vp09.04.41.08")', null);
|
|
consoleWrite('');
|
|
consoleWrite('Test valid levels:');
|
|
for (let level of [10, 11, 20, 21, 30, 31, 40, 41, 50, 51, 52, 60, 61, 62])
|
|
testExpectedVPCodecConfigurationRecord(`internals.parseVPCodecParameters("vp09.00.${level.toString().padStart(2, '0')}.08")`, makeVPCodecConfigurationRecord('vp09', 0, level, 8, 1, 1, 1, 1, 0));
|
|
consoleWrite('');
|
|
consoleWrite('Test invalid level:');
|
|
testExpected('internals.parseVPCodecParameters("vp09.00.12.08")', null);
|
|
consoleWrite('');
|
|
consoleWrite('Test valid bitDepths:');
|
|
for (let bitDepth of [8, 10, 12])
|
|
testExpectedVPCodecConfigurationRecord(`internals.parseVPCodecParameters("vp09.00.41.${bitDepth.toString().padStart(2, '0')}")`, makeVPCodecConfigurationRecord('vp09', 0, 41, bitDepth, 1, 1, 1, 1, 0));
|
|
consoleWrite('');
|
|
consoleWrite('Test invalid bitDepth:');
|
|
testExpected('internals.parseVPCodecParameters("vp09.00.41.09")', null);
|
|
consoleWrite('');
|
|
consoleWrite('Test valid chromaSubsampling:');
|
|
for (let chromaSubsampling of [0, 1, 2, 3])
|
|
testExpectedVPCodecConfigurationRecord(`internals.parseVPCodecParameters("vp09.02.10.10.${chromaSubsampling.toString().padStart(2, '0')}.09.16.09.01")`, makeVPCodecConfigurationRecord('vp09', 2, 10, 10, chromaSubsampling, 9, 16, 9, 1));
|
|
consoleWrite('');
|
|
consoleWrite('Test invalid chromaSubsampling:');
|
|
testExpected('internals.parseVPCodecParameters("vp09.02.10.10.04.09.16.09.01")', null);
|
|
consoleWrite('');
|
|
consoleWrite('Test valid colorPrimaries:');
|
|
for (let colorPrimaries of [1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 22])
|
|
testExpectedVPCodecConfigurationRecord(`internals.parseVPCodecParameters("vp09.02.10.10.01.${colorPrimaries.toString().padStart(2, '0')}.16.09.01")`, makeVPCodecConfigurationRecord('vp09', 2, 10, 10, 1, colorPrimaries, 16, 9, 1));
|
|
consoleWrite('');
|
|
consoleWrite('Test invalid colorPrimaries:');
|
|
testExpected('internals.parseVPCodecParameters("vp09.02.10.10.01.03.16.09.01")', null);
|
|
consoleWrite('');
|
|
consoleWrite('Test valid transferCharacteristics:');
|
|
for (let transferCharacteristics of [1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
|
|
testExpectedVPCodecConfigurationRecord(`internals.parseVPCodecParameters("vp09.02.10.10.01.09.${transferCharacteristics.toString().padStart(2, '0')}.09.01")`, makeVPCodecConfigurationRecord('vp09', 2, 10, 10, 1, 9, transferCharacteristics, 9, 1));
|
|
consoleWrite('');
|
|
consoleWrite('Test invalid transferCharacteristics:');
|
|
testExpected('internals.parseVPCodecParameters("vp09.02.10.10.01.09.03.09.01")', null);
|
|
consoleWrite('');
|
|
consoleWrite('Test valid matrixCoefficients:');
|
|
testExpectedVPCodecConfigurationRecord(`internals.parseVPCodecParameters("vp09.02.10.10.03.09.16.00.01")`, makeVPCodecConfigurationRecord('vp09', 2, 10, 10, 3, 9, 16, 0, 1));
|
|
for (let matrixCoefficients of [1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
|
|
testExpectedVPCodecConfigurationRecord(`internals.parseVPCodecParameters("vp09.02.10.10.01.09.16.${matrixCoefficients.toString().padStart(2, '0')}.01")`, makeVPCodecConfigurationRecord('vp09', 2, 10, 10, 1, 9, 16, matrixCoefficients, 1));
|
|
consoleWrite('');
|
|
consoleWrite('Test invalid matrixCoefficients:');
|
|
testExpected('internals.parseVPCodecParameters("vp09.02.10.10.01.09.16.09.03")', null);
|
|
consoleWrite('');
|
|
consoleWrite('Test valid videoFullRangeFlag:');
|
|
testExpectedVPCodecConfigurationRecord(`internals.parseVPCodecParameters("vp09.02.10.10.01.09.16.01.00")`, makeVPCodecConfigurationRecord('vp09', 2, 10, 10, 1, 9, 16, 1, 0));
|
|
testExpectedVPCodecConfigurationRecord(`internals.parseVPCodecParameters("vp09.02.10.10.01.09.16.01.01")`, makeVPCodecConfigurationRecord('vp09', 2, 10, 10, 1, 9, 16, 1, 1));
|
|
consoleWrite('');
|
|
consoleWrite('Test invalid videoFullRangeFlag:');
|
|
testExpected('internals.parseVPCodecParameters("vp09.02.10.10.01.09.16.01.02")', null);
|
|
endTest();
|
|
}, { once: true });
|
|
</script>
|
|
</head>
|
|
<body>
|
|
</body>
|
|
</html> |