aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-12-09 12:37:18 +0100
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-12-12 16:55:33 +0100
commit9644ee224f56118e5b1ac4edc1b088a6a6ac2ac7 (patch)
tree711fe018dc4241f34a5657335b8309730273eb48 /libavcodec
parentdd779749f05fd3a786857b06ee4efc5e193bf90e (diff)
downloadffmpeg-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.c23
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;
}