aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/packet.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2024-12-11 07:57:22 +0100
committerAnton Khirnov <anton@khirnov.net>2024-12-15 14:05:33 +0100
commit2ac34d085427a65a9724dda475f5971d005ee29d (patch)
tree48408dd0d83e732af0bf2d392c67e941e5616089 /libavcodec/packet.c
parent2e956d9c0f98a9b6fe1a0a3a858ab6d1fa4ec500 (diff)
downloadffmpeg-2ac34d085427a65a9724dda475f5971d005ee29d.tar.gz
lavc/packet: add API for an AVPacket-based AVContainerFifo
Diffstat (limited to 'libavcodec/packet.c')
-rw-r--r--libavcodec/packet.c33
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);
+}