diff options
author | Anton Khirnov <anton@khirnov.net> | 2024-12-11 07:57:22 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2024-12-15 14:05:33 +0100 |
commit | 2ac34d085427a65a9724dda475f5971d005ee29d (patch) | |
tree | 48408dd0d83e732af0bf2d392c67e941e5616089 /libavcodec/packet.c | |
parent | 2e956d9c0f98a9b6fe1a0a3a858ab6d1fa4ec500 (diff) | |
download | ffmpeg-2ac34d085427a65a9724dda475f5971d005ee29d.tar.gz |
lavc/packet: add API for an AVPacket-based AVContainerFifo
Diffstat (limited to 'libavcodec/packet.c')
-rw-r--r-- | libavcodec/packet.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/libavcodec/packet.c b/libavcodec/packet.c index 381001fd65..5104eb98b1 100644 --- a/libavcodec/packet.c +++ b/libavcodec/packet.c @@ -23,6 +23,7 @@ #include "libavutil/avassert.h" #include "libavutil/avutil.h" +#include "libavutil/container_fifo.h" #include "libavutil/intreadwrite.h" #include "libavutil/mathematics.h" #include "libavutil/mem.h" @@ -752,3 +753,35 @@ void av_packet_side_data_free(AVPacketSideData **psd, int *pnb_sd) av_freep(psd); *pnb_sd = 0; } + +static void *container_packet_alloc(void *opaque) +{ + return av_packet_alloc(); +} + +static void container_packet_reset(void *opaque, void *obj) +{ + av_packet_unref(obj); +} + +static void container_packet_free(void *opaque, void *obj) +{ + AVPacket *pkt = obj; + av_packet_free(&pkt); +} + +static int container_packet_transfer(void *opaque, void *dst, void *src, unsigned flags) +{ + if (flags & AV_CONTAINER_FIFO_FLAG_REF) + return av_packet_ref(dst, src); + + av_packet_move_ref(dst, src); + return 0; +} + +AVContainerFifo *av_container_fifo_alloc_avpacket(unsigned flags) +{ + return av_container_fifo_alloc(NULL, container_packet_alloc, + container_packet_reset, container_packet_free, + container_packet_transfer, 0); +} |