avpacket: Provide an alloc and a free function for the struct
[ffmpeg.git] / libavcodec / avpacket.c
index cec5bf8..a6eb241 100644 (file)
@@ -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;
@@ -343,6 +363,19 @@ fail:
     return ret;
 }
 
+AVPacket *av_packet_clone(AVPacket *src)
+{
+    AVPacket *ret = av_packet_alloc();
+
+    if (!ret)
+        return ret;
+
+    if (av_packet_ref(ret, src))
+        av_packet_free(&ret);
+
+    return ret;
+}
+
 void av_packet_move_ref(AVPacket *dst, AVPacket *src)
 {
     *dst = *src;