From 4e0564307f3d700c4a11dad7e84997ca988715ff Mon Sep 17 00:00:00 2001 From: Cacsjep Date: Fri, 29 Mar 2024 07:38:32 +0100 Subject: [PATCH] add SetExtraData --- codec_parameters.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/codec_parameters.go b/codec_parameters.go index f77b20a..536539a 100644 --- a/codec_parameters.go +++ b/codec_parameters.go @@ -3,6 +3,10 @@ package astiav //#cgo pkg-config: libavcodec //#include import "C" +import ( + "fmt" + "unsafe" +) // https://github.com/FFmpeg/FFmpeg/blob/n5.0/libavcodec/codec_par.h#L52 type CodecParameters struct { @@ -141,6 +145,27 @@ func (cp *CodecParameters) SetSampleAspectRatio(r Rational) { cp.c.sample_aspect_ratio = r.c } +func (cp *CodecParameters) SetExtraData(extraData []byte) error { + if len(extraData) == 0 { + return nil + } + + if cp.c.extradata != nil { + C.av_freep(unsafe.Pointer(&cp.c.extradata)) + cp.c.extradata_size = 0 + } + + extradataSize := len(extraData) + cp.c.extradata = (*C.uint8_t)(C.av_mallocz(C.size_t(extradataSize + C.AV_INPUT_BUFFER_PADDING_SIZE))) + if cp.c.extradata == nil { + return fmt.Errorf("failed to allocate extradata") + } + + C.memcpy(unsafe.Pointer(cp.c.extradata), unsafe.Pointer(&extraData[0]), C.size_t(extradataSize)) + cp.c.extradata_size = C.int(extradataSize) + return nil +} + func (cp *CodecParameters) SampleFormat() SampleFormat { return SampleFormat(cp.c.format) }