github.com/bluenviron/mediacommon@v1.9.3/pkg/codecs/mpeg1audio/frame_header_test.go (about) 1 package mpeg1audio 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 ) 8 9 func TestFrameHeaderUnmarshal(t *testing.T) { 10 for _, ca := range []struct { 11 name string 12 enc []byte 13 dec FrameHeader 14 frameLen int 15 sampleCount int 16 }{ 17 { 18 "mpeg-1 layer 2 32k", 19 []byte{ 20 0xff, 0xfd, 0x48, 0x00, 0x00, 21 }, 22 FrameHeader{ 23 Layer: 2, 24 Bitrate: 64000, 25 SampleRate: 32000, 26 ChannelMode: ChannelModeStereo, 27 }, 28 288, 29 1152, 30 }, 31 { 32 "mpeg-1 layer 3 32k", 33 []byte{ 34 0xff, 0xfb, 0x18, 0x64, 0x00, 35 }, 36 FrameHeader{ 37 Layer: 3, 38 Bitrate: 32000, 39 SampleRate: 32000, 40 ChannelMode: ChannelModeJointStereo, 41 }, 42 144, 43 1152, 44 }, 45 { 46 "mpeg-1 layer 3 32k mono", 47 []byte{ 48 0xff, 0xfb, 0x68, 0xc4, 0x00, 49 }, 50 FrameHeader{ 51 Layer: 3, 52 Bitrate: 80000, 53 SampleRate: 32000, 54 ChannelMode: ChannelModeMono, 55 }, 56 360, 57 1152, 58 }, 59 { 60 "mpeg-1 layer 3 44.1k", 61 []byte{ 62 0xff, 0xfa, 0x52, 0x04, 0x00, 63 }, 64 FrameHeader{ 65 Layer: 3, 66 Bitrate: 64000, 67 SampleRate: 44100, 68 Padding: true, 69 ChannelMode: ChannelModeStereo, 70 }, 71 209, 72 1152, 73 }, 74 { 75 "mpeg-1 layer 3 48k", 76 []byte{ 77 0xff, 0xfb, 0x14, 0x64, 0x00, 78 }, 79 FrameHeader{ 80 Layer: 3, 81 Bitrate: 32000, 82 SampleRate: 48000, 83 ChannelMode: ChannelModeJointStereo, 84 }, 85 96, 86 1152, 87 }, 88 { 89 "mpeg-2 layer 2 16khz", 90 []byte{ 91 0xff, 0xf5, 0x88, 0x4, 0x00, 92 }, 93 FrameHeader{ 94 MPEG2: true, 95 Layer: 2, 96 Bitrate: 64000, 97 SampleRate: 16000, 98 ChannelMode: ChannelModeStereo, 99 }, 100 576, 101 1152, 102 }, 103 } { 104 t.Run(ca.name, func(t *testing.T) { 105 var h FrameHeader 106 err := h.Unmarshal(ca.enc) 107 require.NoError(t, err) 108 require.Equal(t, ca.dec, h) 109 require.Equal(t, ca.frameLen, h.FrameLen()) 110 require.Equal(t, ca.sampleCount, h.SampleCount()) 111 }) 112 } 113 } 114 115 func FuzzFrameHeaderUnmarshal(f *testing.F) { 116 f.Fuzz(func(_ *testing.T, b []byte) { 117 var h FrameHeader 118 h.Unmarshal(b) //nolint:errcheck 119 }) 120 }