packet: Add memory management *Packet functions (#128)

This commit is contained in:
Dmitrii Okunev
2025-02-09 13:23:55 +00:00
committed by GitHub
parent 5ed56d0858
commit 30a782ddf4
2 changed files with 37 additions and 0 deletions

View File

@@ -120,6 +120,25 @@ func (p *Packet) Clone() *Packet {
return newPacketFromC(C.av_packet_clone(p.c)) return newPacketFromC(C.av_packet_clone(p.c))
} }
// https://ffmpeg.org/doxygen/7.0/group__lavc__packet.html#gade00f67930f4e2a3401b67b701d5b3a2
func (p *Packet) CopyProperties(src *Packet) error {
return newError(C.av_packet_copy_props(p.c, src.c))
}
// https://ffmpeg.org/doxygen/7.0/group__lavc__packet.html#ga8a6deff6c1809029037ffd760db3e0d4
func (p *Packet) MakeReferenceCounted() error {
return newError(C.av_packet_make_refcounted(p.c))
}
// https://ffmpeg.org/doxygen/7.0/group__lavc__packet.html#gaaa304ffdab83984ac995d134e4298d4b
func (p *Packet) MakeWritable() error {
return newError(C.av_packet_make_writable(p.c))
}
func (p *Packet) IsWritable() bool {
return p.c.buf != nil && C.av_buffer_is_writable(p.c.buf) != 0
}
// https://ffmpeg.org/doxygen/7.0/group__lavc__packet.html#gadfa708660b85a56749c753124de2da7d // https://ffmpeg.org/doxygen/7.0/group__lavc__packet.html#gadfa708660b85a56749c753124de2da7d
func (p *Packet) AllocPayload(s int) error { func (p *Packet) AllocPayload(s int) error {
return newError(C.av_new_packet(p.c, C.int(s))) return newError(C.av_new_packet(p.c, C.int(s)))

View File

@@ -85,4 +85,22 @@ func TestPacket(t *testing.T) {
b = []byte{} b = []byte{}
require.NoError(t, pkt6.FromData(b)) require.NoError(t, pkt6.FromData(b))
require.Equal(t, b, pkt6.Data()) require.Equal(t, b, pkt6.Data())
pkt7 := AllocPacket()
require.NotNil(t, pkt7)
defer pkt7.Free()
require.NotEqual(t, pkt2.Dts(), pkt7.Dts())
require.NoError(t, pkt7.CopyProperties(pkt2))
require.Equal(t, pkt2.Dts(), pkt7.Dts())
pkt8 := pkt2.Clone()
defer pkt8.Free()
require.False(t, pkt8.IsWritable())
require.NoError(t, pkt8.MakeWritable())
require.True(t, pkt8.IsWritable())
pkt9 := pkt2.Clone()
defer pkt9.Free()
require.NoError(t, pkt9.MakeReferenceCounted())
} }