github.com/bluenviron/mediacommon@v1.9.3/pkg/formats/mpegts/opus_access_unit.go (about) 1 package mpegts 2 3 import ( 4 "fmt" 5 ) 6 7 type opusAccessUnit struct { 8 ControlHeader opusControlHeader 9 Packet []byte 10 } 11 12 func (au *opusAccessUnit) unmarshal(buf []byte) (int, error) { 13 n, err := au.ControlHeader.unmarshal(buf) 14 if err != nil { 15 return 0, fmt.Errorf("invalid control header: %w", err) 16 } 17 buf = buf[n:] 18 19 if len(buf) < au.ControlHeader.PayloadSize { 20 return 0, fmt.Errorf("buffer is too small") 21 } 22 23 au.Packet = buf[:au.ControlHeader.PayloadSize] 24 25 return n + au.ControlHeader.PayloadSize, nil 26 } 27 28 func (au *opusAccessUnit) marshalSize() int { 29 return au.ControlHeader.marshalSize() + au.ControlHeader.PayloadSize 30 } 31 32 func (au *opusAccessUnit) marshalTo(buf []byte) (int, error) { 33 if au.ControlHeader.PayloadSize != len(au.Packet) { 34 return 0, fmt.Errorf("invalid packet") 35 } 36 37 n, err := au.ControlHeader.marshalTo(buf) 38 if err != nil { 39 return 0, err 40 } 41 42 n += copy(buf[n:], au.Packet) 43 44 return n, nil 45 }