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  }