summaryrefslogtreecommitdiffstats
path: root/libavcodec/extract_extradata_bsf.c
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2018-03-09 14:31:30 -0300
committerJames Almer <jamrial@gmail.com>2018-03-10 19:29:54 -0300
commit2536bd863246218631ab27144d8a3be45036445a (patch)
tree3e59cd579f992a499f0c4cf5b70cf1a987cc6b57 /libavcodec/extract_extradata_bsf.c
parent43205df645bc10bc780c646ca0d652b574535f06 (diff)
downloadffmpeg-streaming-2536bd863246218631ab27144d8a3be45036445a.zip
ffmpeg-streaming-2536bd863246218631ab27144d8a3be45036445a.tar.gz
avcodec/extract_extradata: don't allocate more space than needed when removing NALUs in h264/hevc
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavcodec/extract_extradata_bsf.c')
-rw-r--r--libavcodec/extract_extradata_bsf.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/libavcodec/extract_extradata_bsf.c b/libavcodec/extract_extradata_bsf.c
index fbfd12a..4e2d601 100644
--- a/libavcodec/extract_extradata_bsf.c
+++ b/libavcodec/extract_extradata_bsf.c
@@ -62,7 +62,7 @@ static int extract_extradata_h2645(AVBSFContext *ctx, AVPacket *pkt,
ExtractExtradataContext *s = ctx->priv_data;
H2645Packet h2645_pkt = { 0 };
- int extradata_size = 0;
+ int extradata_size = 0, filtered_size = 0;
const int *extradata_nal_types;
int nb_extradata_nal_types;
int i, has_sps = 0, has_vps = 0, ret = 0;
@@ -90,6 +90,8 @@ static int extract_extradata_h2645(AVBSFContext *ctx, AVPacket *pkt,
} else {
if (nal->type == H264_NAL_SPS) has_sps = 1;
}
+ } else if (s->remove) {
+ filtered_size += nal->raw_size + 3;
}
}
@@ -100,11 +102,13 @@ static int extract_extradata_h2645(AVBSFContext *ctx, AVPacket *pkt,
uint8_t *extradata, *filtered_data;
if (s->remove) {
- filtered_buf = av_buffer_alloc(pkt->size + AV_INPUT_BUFFER_PADDING_SIZE);
+ filtered_buf = av_buffer_alloc(filtered_size + AV_INPUT_BUFFER_PADDING_SIZE);
if (!filtered_buf) {
ret = AVERROR(ENOMEM);
goto fail;
}
+ memset(filtered_buf->data + filtered_size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
+
filtered_data = filtered_buf->data;
}
@@ -137,9 +141,7 @@ static int extract_extradata_h2645(AVBSFContext *ctx, AVPacket *pkt,
av_buffer_unref(&pkt->buf);
pkt->buf = filtered_buf;
pkt->data = filtered_buf->data;
- pkt->size = filtered_data - filtered_buf->data;
-
- memset(pkt->data + pkt->size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
+ pkt->size = filtered_size;
}
}
OpenPOWER on IntegriCloud