mirror of
https://github.com/asticode/go-astiav.git
synced 2025-11-01 03:52:47 +08:00
Packet FromData() now handles empty data
This commit is contained in:
21
packet.go
21
packet.go
@@ -136,14 +136,27 @@ func (p *Packet) RescaleTs(src, dst Rational) {
|
||||
C.av_packet_rescale_ts(p.c, src.c, dst.c)
|
||||
}
|
||||
|
||||
func (p *Packet) FromData(data []byte) error {
|
||||
func (p *Packet) FromData(data []byte) (err error) {
|
||||
// Create buf
|
||||
buf := (*C.uint8_t)(C.av_malloc(C.size_t(len(data))))
|
||||
if buf == nil {
|
||||
return errors.New("astiav: allocating buffer failed")
|
||||
err = errors.New("astiav: allocating buffer failed")
|
||||
return
|
||||
}
|
||||
|
||||
// Make sure to free buf in case of error
|
||||
defer func() {
|
||||
if err != nil {
|
||||
C.av_freep(unsafe.Pointer(&buf))
|
||||
}
|
||||
}()
|
||||
|
||||
// Copy
|
||||
if len(data) > 0 {
|
||||
C.memcpy(unsafe.Pointer(buf), unsafe.Pointer(&data[0]), C.size_t(len(data)))
|
||||
}
|
||||
C.memcpy(unsafe.Pointer(buf), unsafe.Pointer(&data[0]), C.size_t(len(data)))
|
||||
|
||||
// From data
|
||||
return newError(C.av_packet_from_data(p.c, buf, C.int(len(data))))
|
||||
err = newError(C.av_packet_from_data(p.c, buf, C.int(len(data))))
|
||||
return
|
||||
}
|
||||
|
||||
@@ -107,4 +107,11 @@ func TestPacket(t *testing.T) {
|
||||
b = []byte{1, 2, 3, 4}
|
||||
require.NoError(t, pkt5.AddSideData(astiav.PacketSideDataTypeAudioServiceType, b))
|
||||
require.Equal(t, b, pkt5.SideData(astiav.PacketSideDataTypeAudioServiceType))
|
||||
|
||||
pkt6 := astiav.AllocPacket()
|
||||
require.NotNil(t, pkt6)
|
||||
defer pkt6.Free()
|
||||
b = []byte{}
|
||||
require.NoError(t, pkt6.FromData(b))
|
||||
require.Equal(t, b, pkt6.Data())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user