@@ -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, 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:
Signed-off-by: James Almer <jamrial@gmail.com> --- libavcodec/h264_picture.c | 57 ++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 24 deletions(-)