| <!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> |