diff options
author | Anton Khirnov <anton@khirnov.net> | 2023-01-05 10:31:09 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2023-01-10 11:47:29 +0100 |
commit | a1eec66867b40e5e0952a31ee43fdb273af5f5a5 (patch) | |
tree | fefe507e99bc1e023393e581cd514218f639fb46 /libavcodec | |
parent | 5bf8f29135a6fd3fb2e887c7a37f3594eff97db8 (diff) | |
download | ffmpeg-a1eec66867b40e5e0952a31ee43fdb273af5f5a5.tar.gz |
lavc/decode: deduplicate cleanup in ff_decode_receive_frame()
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/decode.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/libavcodec/decode.c b/libavcodec/decode.c index 3e5be501b9..56ba06d5d5 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -685,10 +685,8 @@ int ff_decode_receive_frame(AVCodecContext *avctx, AVFrame *frame) if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) { ret = apply_cropping(avctx, frame); - if (ret < 0) { - av_frame_unref(frame); - return ret; - } + if (ret < 0) + goto fail; } avctx->frame_number++; @@ -706,10 +704,8 @@ int ff_decode_receive_frame(AVCodecContext *avctx, AVFrame *frame) avci->initial_sample_rate = frame->sample_rate ? frame->sample_rate : avctx->sample_rate; ret = av_channel_layout_copy(&avci->initial_ch_layout, &frame->ch_layout); - if (ret < 0) { - av_frame_unref(frame); - return ret; - } + if (ret < 0) + goto fail; break; } } @@ -735,12 +731,15 @@ int ff_decode_receive_frame(AVCodecContext *avctx, AVFrame *frame) " drop count: %d \n", avctx->frame_number, frame->pts, avci->changed_frames_dropped); - av_frame_unref(frame); - return AVERROR_INPUT_CHANGED; + ret = AVERROR_INPUT_CHANGED; + goto fail; } } } return 0; +fail: + av_frame_unref(frame); + return ret; } static void get_subtitle_defaults(AVSubtitle *sub) |