summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2020-06-05 11:24:19 +0200
committerAnton Khirnov <anton@khirnov.net>2020-09-28 11:33:36 +0200
commit16f8b96dfa10b6b21ed1b2fbb8d356d7672c7251 (patch)
treef6eb144f8744daaf329c57cee3fe118b74ecd58e
parenteff289ce9f030f023e218ee7ce354d4f0e035b6d (diff)
mpegvideo: use av_buffer_replace() to simplify code
-rw-r--r--libavcodec/mpegpicture.c36
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;