[FFmpeg-devel] [PATCH 5/5] avcodec/utils: simplify, remove duplicate code
Andreas Rheinhardt
andreas.rheinhardt at gmail.com
Thu Apr 30 16:18:15 EEST 2020
lance.lmwang at gmail.com:
> From: Limin Wang <lance.lmwang at gmail.com>
>
> Signed-off-by: Limin Wang <lance.lmwang at gmail.com>
> ---
> libavcodec/utils.c | 29 +++--------------------------
> 1 file changed, 3 insertions(+), 26 deletions(-)
>
> diff --git a/libavcodec/utils.c b/libavcodec/utils.c
> index e77090daef..91b271a717 100644
> --- a/libavcodec/utils.c
> +++ b/libavcodec/utils.c
> @@ -584,37 +584,14 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *code
> avctx->internal = avci;
>
> avci->to_free = av_frame_alloc();
> - if (!avci->to_free) {
> - ret = AVERROR(ENOMEM);
> - goto free_and_end;
> - }
> -
> avci->compat_decode_frame = av_frame_alloc();
> - if (!avci->compat_decode_frame) {
> - ret = AVERROR(ENOMEM);
> - goto free_and_end;
> - }
> -
> avci->buffer_frame = av_frame_alloc();
> - if (!avci->buffer_frame) {
> - ret = AVERROR(ENOMEM);
> - goto free_and_end;
> - }
> -
> avci->buffer_pkt = av_packet_alloc();
> - if (!avci->buffer_pkt) {
> - ret = AVERROR(ENOMEM);
> - goto free_and_end;
> - }
> -
> avci->ds.in_pkt = av_packet_alloc();
> - if (!avci->ds.in_pkt) {
> - ret = AVERROR(ENOMEM);
> - goto free_and_end;
> - }
> -
> avci->last_pkt_props = av_packet_alloc();
> - if (!avci->last_pkt_props) {
> + if (!avci->to_free || !avci->compat_decode_frame ||
> + !avci->buffer_frame || !avci->buffer_pkt ||
> + !avci->ds.in_pkt || !avci->last_pkt_props) {
> ret = AVERROR(ENOMEM);
> goto free_and_end;
> }
>
If you write this in the following way
if (!(avci->to_free = av_frame_alloc()) ||
!(avci->compat_decode_frame = av_frame_alloc()) || ...) {
ret = AVERROR(ENOMEM);
goto free_and_end;
}
then shortcircuit evaluation will make sure that an error is detected
immediately (like now), but without the code duplication.
- Andreas
More information about the ffmpeg-devel
mailing list