mirror of
https://github.com/asticode/go-astiav.git
synced 2025-10-13 11:53:44 +08:00
Now compatible with n6.1.1
This commit is contained in:
50
packet_side_data.go
Normal file
50
packet_side_data.go
Normal file
@@ -0,0 +1,50 @@
|
||||
package astiav
|
||||
|
||||
//#cgo pkg-config: libavcodec
|
||||
//#include <libavcodec/avcodec.h>
|
||||
import "C"
|
||||
import (
|
||||
"errors"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
// https://github.com/FFmpeg/FFmpeg/blob/n6.1.1/libavcodec/packet.h#L342
|
||||
type PacketSideData struct {
|
||||
sd **C.struct_AVPacketSideData
|
||||
size *C.int
|
||||
}
|
||||
|
||||
func newPacketSideDataFromC(sd **C.struct_AVPacketSideData, size *C.int) *PacketSideData {
|
||||
return &PacketSideData{
|
||||
sd: sd,
|
||||
size: size,
|
||||
}
|
||||
}
|
||||
|
||||
func (d *PacketSideData) Add(t PacketSideDataType, b []byte) error {
|
||||
if len(b) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
sd := C.av_packet_side_data_new(d.sd, d.size, (C.enum_AVPacketSideDataType)(t), C.size_t(len(b)), 0)
|
||||
if sd == nil {
|
||||
return errors.New("astiav: nil pointer")
|
||||
}
|
||||
|
||||
C.memcpy(unsafe.Pointer(sd.data), unsafe.Pointer(&b[0]), C.size_t(len(b)))
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *PacketSideData) Get(t PacketSideDataType) []byte {
|
||||
return bytesFromC(func(size *C.size_t) *C.uint8_t {
|
||||
if d.sd == nil || d.size == nil {
|
||||
return nil
|
||||
}
|
||||
sd := C.av_packet_side_data_get(*d.sd, *d.size, (C.enum_AVPacketSideDataType)(t))
|
||||
if sd == nil {
|
||||
return nil
|
||||
}
|
||||
*size = sd.size
|
||||
return sd.data
|
||||
})
|
||||
}
|
Reference in New Issue
Block a user