Pave the way for having the size of the AVPacket struct not part
of the ABI.
---
 libavcodec/avcodec.h  | 22 ++++++++++++++++++++++
 libavcodec/avpacket.c | 20 ++++++++++++++++++++
 2 files changed, 42 insertions(+)

diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index a370e3e..9e6b0de 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -3413,6 +3413,28 @@ void avsubtitle_free(AVSubtitle *sub);
  */
 
 /**
+ * Allocate an AVPacket and set its fields to default values.  The resulting
+ * struct must be freed using av_packet_free().
+ *
+ * @return An AVPacket filled with default values or NULL on failure.
+ *
+ * @note this only allocates the AVPacket itself, not the data buffers. Those
+ * must be allocated through other means such as av_new_packet.
+ *
+ * @see av_new_packet
+ */
+AVPacket *av_packet_alloc(void);
+
+/**
+ * Free the packet, if the packet is reference counted, it will be
+ * unreferenced first.
+ *
+ * @param packet packet to be freed. The pointer will be set to NULL.
+ * @note passing NULL is a no-op.
+ */
+void av_packet_free(AVPacket **pkt);
+
+/**
  * Initialize optional fields of a packet with default values.
  *
  * Note, this does not touch the data and size members, which have to be
diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c
index cec5bf8..01a250a 100644
--- a/libavcodec/avpacket.c
+++ b/libavcodec/avpacket.c
@@ -46,6 +46,26 @@ FF_ENABLE_DEPRECATION_WARNINGS
     pkt->side_data_elems      = 0;
 }
 
+AVPacket *av_packet_alloc(void)
+{
+    AVPacket *pkt = av_mallocz(sizeof(AVPacket));
+    if (!pkt)
+        return pkt;
+
+    av_packet_unref(pkt);
+
+    return pkt;
+}
+
+void av_packet_free(AVPacket **pkt)
+{
+    if (!pkt || !*pkt)
+        return;
+
+    av_packet_unref(*pkt);
+    av_freep(pkt);
+}
+
 static int packet_alloc(AVBufferRef **buf, int size)
 {
     int ret;
-- 
2.5.0

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to