[FFmpeg-cvslog] avcodec/h264_picture: split copying H264Picture some fields into a separate function

James Almer git at videolan.org
Tue Aug 10 21:18:36 EEST 2021


ffmpeg | branch: master | James Almer <jamrial at gmail.com> | Sun Aug  8 18:17:24 2021 -0300| [ab448a7f9bca0f92fe2ebd147d39d19e47b9128e] | committer: James Almer

avcodec/h264_picture: split copying H264Picture some fields into a separate function

Signed-off-by: James Almer <jamrial at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ab448a7f9bca0f92fe2ebd147d39d19e47b9128e
---

 libavcodec/h264_picture.c | 57 +++++++++++++++++++++++++++--------------------
 1 file changed, 33 insertions(+), 24 deletions(-)

diff --git a/libavcodec/h264_picture.c b/libavcodec/h264_picture.c
index eec5e9fb9a..f61bdc0cbe 100644
--- a/libavcodec/h264_picture.c
+++ b/libavcodec/h264_picture.c
@@ -63,6 +63,38 @@ void ff_h264_unref_picture(H264Context *h, H264Picture *pic)
     memset((uint8_t*)pic + off, 0, sizeof(*pic) - off);
 }
 
+static void h264_copy_picture_params(H264Picture *dst, const H264Picture *src)
+{
+    dst->qscale_table = src->qscale_table;
+    dst->mb_type      = src->mb_type;
+    dst->pps          = src->pps;
+
+    for (int i = 0; i < 2; i++) {
+        dst->motion_val[i] = src->motion_val[i];
+        dst->ref_index[i]  = src->ref_index[i];
+    }
+
+    for (int i = 0; i < 2; i++)
+        dst->field_poc[i] = src->field_poc[i];
+
+    memcpy(dst->ref_poc,   src->ref_poc,   sizeof(src->ref_poc));
+    memcpy(dst->ref_count, src->ref_count, sizeof(src->ref_count));
+
+    dst->poc           = src->poc;
+    dst->frame_num     = src->frame_num;
+    dst->mmco_reset    = src->mmco_reset;
+    dst->long_ref      = src->long_ref;
+    dst->mbaff         = src->mbaff;
+    dst->field_picture = src->field_picture;
+    dst->reference     = src->reference;
+    dst->recovered     = src->recovered;
+    dst->invalid_gap   = src->invalid_gap;
+    dst->sei_recovery_frame_cnt = src->sei_recovery_frame_cnt;
+    dst->mb_width      = src->mb_width;
+    dst->mb_height     = src->mb_height;
+    dst->mb_stride     = src->mb_stride;
+}
+
 int ff_h264_ref_picture(H264Context *h, H264Picture *dst, H264Picture *src)
 {
     int ret, i;
@@ -83,9 +115,6 @@ int ff_h264_ref_picture(H264Context *h, H264Picture *dst, H264Picture *src)
         ret = AVERROR(ENOMEM);
         goto fail;
     }
-    dst->qscale_table = src->qscale_table;
-    dst->mb_type      = src->mb_type;
-    dst->pps          = src->pps;
 
     for (i = 0; i < 2; i++) {
         dst->motion_val_buf[i] = av_buffer_ref(src->motion_val_buf[i]);
@@ -94,8 +123,6 @@ int ff_h264_ref_picture(H264Context *h, H264Picture *dst, H264Picture *src)
             ret = AVERROR(ENOMEM);
             goto fail;
         }
-        dst->motion_val[i] = src->motion_val[i];
-        dst->ref_index[i]  = src->ref_index[i];
     }
 
     if (src->hwaccel_picture_private) {
@@ -107,25 +134,7 @@ int ff_h264_ref_picture(H264Context *h, H264Picture *dst, H264Picture *src)
         dst->hwaccel_picture_private = dst->hwaccel_priv_buf->data;
     }
 
-    for (i = 0; i < 2; i++)
-        dst->field_poc[i] = src->field_poc[i];
-
-    memcpy(dst->ref_poc,   src->ref_poc,   sizeof(src->ref_poc));
-    memcpy(dst->ref_count, src->ref_count, sizeof(src->ref_count));
-
-    dst->poc           = src->poc;
-    dst->frame_num     = src->frame_num;
-    dst->mmco_reset    = src->mmco_reset;
-    dst->long_ref      = src->long_ref;
-    dst->mbaff         = src->mbaff;
-    dst->field_picture = src->field_picture;
-    dst->reference     = src->reference;
-    dst->recovered     = src->recovered;
-    dst->invalid_gap   = src->invalid_gap;
-    dst->sei_recovery_frame_cnt = src->sei_recovery_frame_cnt;
-    dst->mb_width      = src->mb_width;
-    dst->mb_height     = src->mb_height;
-    dst->mb_stride     = src->mb_stride;
+    h264_copy_picture_params(dst, src);
 
     return 0;
 fail:



More information about the ffmpeg-cvslog mailing list