diff options
author | Anton Khirnov <anton@khirnov.net> | 2020-06-05 11:24:19 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2020-09-28 11:33:36 +0200 |
commit | 16f8b96dfa10b6b21ed1b2fbb8d356d7672c7251 (patch) | |
tree | f6eb144f8744daaf329c57cee3fe118b74ecd58e /libavcodec/mpegpicture.c | |
parent | eff289ce9f030f023e218ee7ce354d4f0e035b6d (diff) | |
download | ffmpeg-16f8b96dfa10b6b21ed1b2fbb8d356d7672c7251.tar.gz |
mpegvideo: use av_buffer_replace() to simplify code
Diffstat (limited to 'libavcodec/mpegpicture.c')
-rw-r--r-- | libavcodec/mpegpicture.c | 36 |
1 files changed, 14 insertions, 22 deletions
diff --git a/libavcodec/mpegpicture.c b/libavcodec/mpegpicture.c index 83426bbda6..13c11ec492 100644 --- a/libavcodec/mpegpicture.c +++ b/libavcodec/mpegpicture.c @@ -315,30 +315,22 @@ void ff_mpeg_unref_picture(AVCodecContext *avctx, Picture *pic) int ff_update_picture_tables(Picture *dst, Picture *src) { - int i; - -#define UPDATE_TABLE(table) \ -do { \ - if (src->table && \ - (!dst->table || dst->table->buffer != src->table->buffer)) { \ - av_buffer_unref(&dst->table); \ - dst->table = av_buffer_ref(src->table); \ - if (!dst->table) { \ - ff_free_picture_tables(dst); \ - return AVERROR(ENOMEM); \ - } \ - } \ -} while (0) + int i, ret; - UPDATE_TABLE(mb_var_buf); - UPDATE_TABLE(mc_mb_var_buf); - UPDATE_TABLE(mb_mean_buf); - UPDATE_TABLE(mbskip_table_buf); - UPDATE_TABLE(qscale_table_buf); - UPDATE_TABLE(mb_type_buf); + ret = av_buffer_replace(&dst->mb_var_buf, src->mb_var_buf); + ret |= av_buffer_replace(&dst->mc_mb_var_buf, src->mc_mb_var_buf); + ret |= av_buffer_replace(&dst->mb_mean_buf, src->mb_mean_buf); + ret |= av_buffer_replace(&dst->mbskip_table_buf, src->mbskip_table_buf); + ret |= av_buffer_replace(&dst->qscale_table_buf, src->qscale_table_buf); + ret |= av_buffer_replace(&dst->mb_type_buf, src->mb_type_buf); for (i = 0; i < 2; i++) { - UPDATE_TABLE(motion_val_buf[i]); - UPDATE_TABLE(ref_index_buf[i]); + ret |= av_buffer_replace(&dst->motion_val_buf[i], src->motion_val_buf[i]); + ret |= av_buffer_replace(&dst->ref_index_buf[i], src->ref_index_buf[i]); + } + + if (ret < 0) { + ff_free_picture_tables(dst); + return ret; } dst->mb_var = src->mb_var; |