diff options
author | wm4 <nfxjfg@googlemail.com> | 2016-02-29 22:48:12 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2016-03-05 09:04:03 +0100 |
commit | 2e2f8534ebde47d3a3909fe64c2e66204bc56874 (patch) | |
tree | 2b7664967b823aab80a7a267810e592b594328ff | |
parent | 7a6cf2771414c7ab8bca0811d589f6091a6e2b71 (diff) | |
download | ffmpeg-2e2f8534ebde47d3a3909fe64c2e66204bc56874.tar.gz |
lavc: factor apply_param_change() AV_EF_EXPLODE handling
Remove the duplicated code for handling failure of apply_param_change().
Signed-off-by: Anton Khirnov <anton@khirnov.net>
-rw-r--r-- | libavcodec/utils.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/libavcodec/utils.c b/libavcodec/utils.c index a9a74230fd..866cdfccc6 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -1390,7 +1390,8 @@ static int apply_param_change(AVCodecContext *avctx, AVPacket *avpkt) if (!(avctx->codec->capabilities & AV_CODEC_CAP_PARAM_CHANGE)) { av_log(avctx, AV_LOG_ERROR, "This decoder does not support parameter " "changes, but PARAM_CHANGE side data was sent to it.\n"); - return AVERROR(EINVAL); + ret = AVERROR(EINVAL); + goto fail2; } if (size < 4) @@ -1425,13 +1426,20 @@ static int apply_param_change(AVCodecContext *avctx, AVPacket *avpkt) size -= 8; ret = ff_set_dimensions(avctx, avctx->width, avctx->height); if (ret < 0) - return ret; + goto fail2; } return 0; fail: av_log(avctx, AV_LOG_ERROR, "PARAM_CHANGE side data too small.\n"); - return AVERROR_INVALIDDATA; + ret = AVERROR_INVALIDDATA; +fail2: + if (ret < 0) { + av_log(avctx, AV_LOG_ERROR, "Error applying parameter changes.\n"); + if (avctx->err_recognition & AV_EF_EXPLODE) + return ret; + } + return 0; } static int unrefcount_frame(AVCodecInternal *avci, AVFrame *frame) @@ -1492,11 +1500,8 @@ int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *pi avctx->internal->pkt = avpkt; ret = apply_param_change(avctx, avpkt); - if (ret < 0) { - av_log(avctx, AV_LOG_ERROR, "Error applying parameter changes.\n"); - if (avctx->err_recognition & AV_EF_EXPLODE) - return ret; - } + if (ret < 0) + return ret; av_frame_unref(picture); @@ -1560,11 +1565,8 @@ int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx, } ret = apply_param_change(avctx, avpkt); - if (ret < 0) { - av_log(avctx, AV_LOG_ERROR, "Error applying parameter changes.\n"); - if (avctx->err_recognition & AV_EF_EXPLODE) - return ret; - } + if (ret < 0) + return ret; av_frame_unref(frame); |