diff options
author | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2021-12-09 12:37:18 +0100 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2021-12-12 16:55:33 +0100 |
commit | 9644ee224f56118e5b1ac4edc1b088a6a6ac2ac7 (patch) | |
tree | 711fe018dc4241f34a5657335b8309730273eb48 /libavcodec | |
parent | dd779749f05fd3a786857b06ee4efc5e193bf90e (diff) | |
download | ffmpeg-9644ee224f56118e5b1ac4edc1b088a6a6ac2ac7.tar.gz |
avcodec/mmaldec: Avoid creating unnecessary reference, simplify code
ffmal_add_packet() basically duplicated the logic in
av_packet_make_refcounted() with the added twist that it always
created a reference even if one is already available.
This commit stops doing this.
Tested-by: Cameron Gutman <aicommander@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/mmaldec.c | 23 |
1 files changed, 6 insertions, 17 deletions
diff --git a/libavcodec/mmaldec.c b/libavcodec/mmaldec.c index b0140170f2..0a1905b3a0 100644 --- a/libavcodec/mmaldec.c +++ b/libavcodec/mmaldec.c @@ -485,29 +485,19 @@ static int ffmmal_add_packet(AVCodecContext *avctx, AVPacket *avpkt, int is_extradata) { MMALDecodeContext *ctx = avctx->priv_data; - AVBufferRef *buf = NULL; + const AVBufferRef *buf = NULL; int size = 0; uint8_t *data = (uint8_t *)""; uint8_t *start; int ret = 0; if (avpkt->size) { - if (avpkt->buf) { - buf = av_buffer_ref(avpkt->buf); - size = avpkt->size; - data = avpkt->data; - } else { - buf = av_buffer_alloc(avpkt->size); - if (buf) { - memcpy(buf->data, avpkt->data, avpkt->size); - size = buf->size; - data = buf->data; - } - } - if (!buf) { - ret = AVERROR(ENOMEM); + ret = av_packet_make_refcounted(avpkt); + if (ret < 0) goto done; - } + buf = avpkt->buf; + data = avpkt->data; + size = avpkt->size; if (!is_extradata) ctx->packets_sent++; } else { @@ -573,7 +563,6 @@ static int ffmmal_add_packet(AVCodecContext *avctx, AVPacket *avpkt, } while (size); done: - av_buffer_unref(&buf); av_packet_unref(avpkt); return ret; } |