github.com/bluenviron/mediacommon@v1.9.3/pkg/formats/mpegts/opus_control_header_test.go (about)

     1  package mpegts
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  )
     8  
     9  var opusControlHeaderCases = []struct {
    10  	name string
    11  	dec  opusControlHeader
    12  	enc  []byte
    13  }{
    14  	{
    15  		"a",
    16  		opusControlHeader{
    17  			PayloadSize:            25348,
    18  			StartTrimFlag:          true,
    19  			ControlExtensionFlag:   true,
    20  			StartTrim:              20,
    21  			ControlExtensionLength: 200,
    22  		},
    23  		[]byte{
    24  			0x7f, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    25  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    26  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    27  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    28  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    29  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    30  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    31  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    32  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    33  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    34  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    35  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    36  			0xff, 0xff, 0xff, 0xff, 0xff, 0x67, 0x00, 0x14,
    37  			0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    38  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    39  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    40  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    41  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    42  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    43  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    44  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    45  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    46  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    47  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    48  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    49  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    50  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    51  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    52  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    53  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    54  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    55  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    56  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    57  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    58  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    59  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    60  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    61  			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    62  			0x00,
    63  		},
    64  	},
    65  	{
    66  		"b",
    67  		opusControlHeader{
    68  			PayloadSize: 25348,
    69  		},
    70  		[]byte{
    71  			0x7f, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    72  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    73  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    74  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    75  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    76  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    77  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    78  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    79  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    80  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    81  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    82  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    83  			0xff, 0xff, 0xff, 0xff, 0xff, 0x67,
    84  		},
    85  	},
    86  	{
    87  		"c",
    88  		opusControlHeader{
    89  			PayloadSize:   25348,
    90  			StartTrimFlag: true,
    91  			EndTrimFlag:   true,
    92  			StartTrim:     456,
    93  			EndTrim:       7123,
    94  		},
    95  		[]byte{
    96  			0x7f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    97  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    98  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    99  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   100  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   101  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   102  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   103  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   104  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   105  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   106  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   107  			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   108  			0xff, 0xff, 0xff, 0xff, 0xff, 0x67, 0x01, 0xc8,
   109  			0x1b, 0xd3,
   110  		},
   111  	},
   112  }
   113  
   114  func TestOpusControlHeaderMarshal(t *testing.T) {
   115  	for _, ca := range opusControlHeaderCases {
   116  		t.Run(ca.name, func(t *testing.T) {
   117  			s := ca.dec.marshalSize()
   118  			buf := make([]byte, s)
   119  			n, err := ca.dec.marshalTo(buf)
   120  			require.NoError(t, err)
   121  			require.Equal(t, s, n)
   122  			require.Equal(t, ca.enc, buf)
   123  		})
   124  	}
   125  }
   126  
   127  func TestOpusControlHeaderUnmarshal(t *testing.T) {
   128  	for _, ca := range opusControlHeaderCases {
   129  		t.Run(ca.name, func(t *testing.T) {
   130  			var h opusControlHeader
   131  			_, err := h.unmarshal(ca.enc)
   132  			require.NoError(t, err)
   133  			require.Equal(t, ca.dec, h)
   134  		})
   135  	}
   136  }
   137  
   138  func FuzzOpusControlHeaderUnmarshal(f *testing.F) {
   139  	f.Fuzz(func(_ *testing.T, b []byte) {
   140  		var h opusControlHeader
   141  		h.unmarshal(b) //nolint:errcheck
   142  	})
   143  }