Packet FromData() now handles empty data

This commit is contained in:
Quentin Renard
2022-10-21 14:57:59 +02:00
parent 7a047cd37a
commit 1845a75110
2 changed files with 24 additions and 4 deletions

View File

@@ -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)))
}
// 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
}

View File

@@ -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())
}