github.com/bluenviron/mediacommon@v1.9.3/pkg/codecs/h264/avcc_test.go (about) 1 package h264 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 ) 8 9 var casesAVCC = []struct { 10 name string 11 enc []byte 12 dec [][]byte 13 }{ 14 { 15 "single", 16 []byte{ 17 0x00, 0x00, 0x00, 0x03, 18 0xaa, 0xbb, 0xcc, 19 }, 20 [][]byte{ 21 {0xaa, 0xbb, 0xcc}, 22 }, 23 }, 24 { 25 "multiple", 26 []byte{ 27 0x00, 0x00, 0x00, 0x02, 28 0xaa, 0xbb, 29 0x00, 0x00, 0x00, 0x02, 30 0xcc, 0xdd, 31 0x00, 0x00, 0x00, 0x02, 32 0xee, 0xff, 33 }, 34 [][]byte{ 35 {0xaa, 0xbb}, 36 {0xcc, 0xdd}, 37 {0xee, 0xff}, 38 }, 39 }, 40 } 41 42 func TestAVCCUnmarshal(t *testing.T) { 43 for _, ca := range casesAVCC { 44 t.Run(ca.name, func(t *testing.T) { 45 dec, err := AVCCUnmarshal(ca.enc) 46 require.NoError(t, err) 47 require.Equal(t, ca.dec, dec) 48 }) 49 } 50 } 51 52 // issue mediamtx/2375 53 func TestAVCCUnmarshalEmpty(t *testing.T) { 54 dec, err := AVCCUnmarshal([]byte{ 55 0x0, 0x0, 0x0, 0x0, 56 }) 57 58 require.Equal(t, ErrAVCCNoNALUs, err) 59 require.Equal(t, [][]byte(nil), dec) 60 61 dec, err = AVCCUnmarshal([]byte{ 62 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x1, 0x2, 0x3, 63 }) 64 65 require.NoError(t, err) 66 require.Equal(t, [][]byte{ 67 {1, 2, 3}, 68 }, dec) 69 } 70 71 func TestAVCCMarshal(t *testing.T) { 72 for _, ca := range casesAVCC { 73 t.Run(ca.name, func(t *testing.T) { 74 enc, err := AVCCMarshal(ca.dec) 75 require.NoError(t, err) 76 require.Equal(t, ca.enc, enc) 77 }) 78 } 79 } 80 81 func FuzzAVCCUnmarshal(f *testing.F) { 82 f.Fuzz(func(_ *testing.T, b []byte) { 83 AVCCUnmarshal(b) //nolint:errcheck 84 }) 85 }