[SCM] libav/experimental: AVFrame: factor out freeing the side data

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Aug 10 16:03:29 UTC 2014


The following commit has been merged in the experimental branch:
commit 44671b57866aab8dd36715ff010e985e25baaf19
Author: Roman Savchenko <gmstima at gmail.com>
Date:   Wed Jun 18 08:11:05 2014 +0200

    AVFrame: factor out freeing the side data
    
    Signed-off-by: Anton Khirnov <anton at khirnov.net>

diff --git a/libavutil/frame.c b/libavutil/frame.c
index 9539d90..4b44075 100644
--- a/libavutil/frame.c
+++ b/libavutil/frame.c
@@ -47,6 +47,15 @@ static void get_frame_defaults(AVFrame *frame)
 #endif
 }
 
+static void free_side_data(AVFrameSideData **ptr_sd)
+{
+    AVFrameSideData *sd = *ptr_sd;
+
+    av_freep(&sd->data);
+    av_dict_free(&sd->metadata);
+    av_freep(ptr_sd);
+}
+
 AVFrame *av_frame_alloc(void)
 {
     AVFrame *frame = av_mallocz(sizeof(*frame));
@@ -278,9 +287,7 @@ void av_frame_unref(AVFrame *frame)
     int i;
 
     for (i = 0; i < frame->nb_side_data; i++) {
-        av_freep(&frame->side_data[i]->data);
-        av_dict_free(&frame->side_data[i]->metadata);
-        av_freep(&frame->side_data[i]);
+        free_side_data(&frame->side_data[i]);
     }
     av_freep(&frame->side_data);
 
@@ -396,9 +403,7 @@ int av_frame_copy_props(AVFrame *dst, const AVFrame *src)
                                                          sd_src->size);
         if (!sd_dst) {
             for (i = 0; i < dst->nb_side_data; i++) {
-                av_freep(&dst->side_data[i]->data);
-                av_dict_free(&dst->side_data[i]->metadata);
-                av_freep(&dst->side_data[i]);
+                free_side_data(&dst->side_data[i]);
             }
             av_freep(&dst->side_data);
             return AVERROR(ENOMEM);
@@ -548,9 +553,7 @@ void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type)
     for (i = 0; i < frame->nb_side_data; i++) {
         AVFrameSideData *sd = frame->side_data[i];
         if (sd->type == type) {
-            av_freep(&sd->data);
-            av_dict_free(&sd->metadata);
-            av_freep(&frame->side_data[i]);
+            free_side_data(&frame->side_data[i]);
             frame->side_data[i] = frame->side_data[frame->nb_side_data - 1];
             frame->nb_side_data--;
         }

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list