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  }