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  }