|
|
|
@ -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: |
|
|
|
|