mirror of
https://github.com/asticode/go-astiav.git
synced 2025-11-01 12:02:48 +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)
|
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
|
// Create buf
|
||||||
buf := (*C.uint8_t)(C.av_malloc(C.size_t(len(data))))
|
buf := (*C.uint8_t)(C.av_malloc(C.size_t(len(data))))
|
||||||
if buf == nil {
|
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
|
// 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}
|
b = []byte{1, 2, 3, 4}
|
||||||
require.NoError(t, pkt5.AddSideData(astiav.PacketSideDataTypeAudioServiceType, b))
|
require.NoError(t, pkt5.AddSideData(astiav.PacketSideDataTypeAudioServiceType, b))
|
||||||
require.Equal(t, b, pkt5.SideData(astiav.PacketSideDataTypeAudioServiceType))
|
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