github.com/bluenviron/mediacommon@v1.9.3/pkg/codecs/av1/sequence_header_test.go (about) 1 package av1 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 ) 8 9 func TestSequenceHeaderUnmarshal(t *testing.T) { 10 for _, ca := range []struct { 11 name string 12 byts []byte 13 sh SequenceHeader 14 width int 15 height int 16 }{ 17 { 18 "chrome webrtc", 19 []byte{ 20 8, 0, 0, 0, 66, 167, 191, 228, 96, 13, 0, 64, 21 }, 22 SequenceHeader{ 23 OperatingPointIdc: []uint16{0}, 24 SeqLevelIdx: []uint8{8}, 25 SeqTier: []bool{false}, 26 DecoderModelPresentForThisOp: []bool{false}, 27 InitialDisplayPresentForThisOp: []bool{false}, 28 InitialDisplayDelayMinus1: []uint8{0}, 29 MaxFrameWidthMinus1: 1919, 30 MaxFrameHeightMinus1: 803, 31 SeqChooseScreenContentTools: true, 32 SeqForceScreenContentTools: 2, 33 SeqChooseIntegerMv: true, 34 SeqForceIntegerMv: 2, 35 EnableCdef: true, 36 ColorConfig: SequenceHeader_ColorConfig{ 37 BitDepth: 8, 38 ColorPrimaries: 2, 39 TransferCharacteristics: 2, 40 MatrixCoefficients: 2, 41 SubsamplingX: true, 42 SubsamplingY: true, 43 }, 44 }, 45 1920, 46 804, 47 }, 48 { 49 "av1 sample", 50 []byte{ 51 10, 11, 0, 0, 0, 66, 167, 191, 230, 46, 223, 200, 66, 52 }, 53 SequenceHeader{ 54 OperatingPointIdc: []uint16{0}, 55 SeqLevelIdx: []uint8{8}, 56 SeqTier: []bool{false}, 57 DecoderModelPresentForThisOp: []bool{false}, 58 InitialDisplayPresentForThisOp: []bool{false}, 59 InitialDisplayDelayMinus1: []uint8{0}, 60 MaxFrameWidthMinus1: 1919, 61 MaxFrameHeightMinus1: 817, 62 Use128x128Superblock: true, 63 EnableFilterIntra: true, 64 EnableIntraEdgeFilter: true, 65 EnableMaskedCompound: true, 66 EnableWarpedMotion: true, 67 EnableOrderHint: true, 68 EnableJntComp: true, 69 EnableRefFrameMvs: true, 70 SeqChooseScreenContentTools: true, 71 SeqForceScreenContentTools: 2, 72 SeqChooseIntegerMv: true, 73 OrderHintBitsMinus1: 6, 74 SeqForceIntegerMv: 2, 75 EnableCdef: true, 76 ColorConfig: SequenceHeader_ColorConfig{ 77 BitDepth: 8, 78 ColorPrimaries: 2, 79 TransferCharacteristics: 2, 80 MatrixCoefficients: 2, 81 ColorRange: true, 82 SubsamplingX: true, 83 SubsamplingY: true, 84 }, 85 }, 86 1920, 87 818, 88 }, 89 { 90 "libsvtav1", 91 []byte{ 92 0x8, 0x0, 0x0, 0x0, 0x42, 0xab, 0xbf, 0xc3, 0x71, 0xab, 0xe6, 0x1, 93 }, 94 SequenceHeader{ 95 OperatingPointIdc: []uint16{0}, 96 SeqLevelIdx: []uint8{8}, 97 SeqTier: []bool{false}, 98 DecoderModelPresentForThisOp: []bool{false}, 99 InitialDisplayPresentForThisOp: []bool{false}, 100 InitialDisplayDelayMinus1: []uint8{0}, 101 MaxFrameWidthMinus1: 1919, 102 MaxFrameHeightMinus1: 1079, 103 EnableIntraEdgeFilter: true, 104 EnableInterintraCompound: true, 105 EnableWarpedMotion: true, 106 EnableOrderHint: true, 107 EnableRefFrameMvs: true, 108 SeqChooseScreenContentTools: true, 109 SeqForceScreenContentTools: 2, 110 SeqChooseIntegerMv: true, 111 SeqForceIntegerMv: 2, 112 OrderHintBitsMinus1: 6, 113 EnableCdef: true, 114 EnableRestoration: true, 115 ColorConfig: SequenceHeader_ColorConfig{ 116 BitDepth: 8, 117 ColorPrimaries: 2, 118 TransferCharacteristics: 2, 119 MatrixCoefficients: 2, 120 SubsamplingX: true, 121 SubsamplingY: true, 122 }, 123 }, 124 1920, 125 1080, 126 }, 127 } { 128 t.Run(ca.name, func(t *testing.T) { 129 var sh SequenceHeader 130 err := sh.Unmarshal(ca.byts) 131 require.NoError(t, err) 132 require.Equal(t, ca.sh, sh) 133 require.Equal(t, ca.width, sh.Width()) 134 require.Equal(t, ca.height, sh.Height()) 135 }) 136 } 137 } 138 139 func FuzzSequenceHeaderUnmarshal(f *testing.F) { 140 f.Fuzz(func(_ *testing.T, b []byte) { 141 var sh SequenceHeader 142 sh.Unmarshal(b) //nolint:errcheck 143 }) 144 }