summaryrefslogtreecommitdiff
path: root/libavcodec/dump_extradata_bsf.c
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2019-07-13 04:55:50 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2019-07-14 22:17:43 +0200
commit3469cfab4adb242fa2116f4858f0768cec400afa (patch)
treeae5396f06ba149258bd8ada77054172bccaebbc0 /libavcodec/dump_extradata_bsf.c
parent97698b15a2b5cfc4632ee89d8c53137a41b3752c (diff)
dump_extra: Don't add extradata if it already exists
The dump_extra bitstream filter currently simply adds the extradata to the packets indicated by the user without checking whether said extradata already exists in the packets. Besides wasting space duplicated extradata in the same packet/access unit is also forbidden for some codecs, e.g. MPEG-2. This check has been added to be able to use the mpeg2_qsv encoder (which only adds the sequence headers to the first packet) in broadcast scenarios where repeating sequence headers are required. The check used here is not perfect: E.g. dump_extra would add the extradata to a H.264 access unit consisting of an access unit delimiter, SPS, PPS and slices. Fixes #8007. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavcodec/dump_extradata_bsf.c')
-rw-r--r--libavcodec/dump_extradata_bsf.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/libavcodec/dump_extradata_bsf.c b/libavcodec/dump_extradata_bsf.c
index 7112cd6bd4..b641508234 100644
--- a/libavcodec/dump_extradata_bsf.c
+++ b/libavcodec/dump_extradata_bsf.c
@@ -50,7 +50,9 @@ static int dump_extradata(AVBSFContext *ctx, AVPacket *out)
if (ctx->par_in->extradata &&
(s->freq == DUMP_FREQ_ALL ||
- (s->freq == DUMP_FREQ_KEYFRAME && in->flags & AV_PKT_FLAG_KEY))) {
+ (s->freq == DUMP_FREQ_KEYFRAME && in->flags & AV_PKT_FLAG_KEY)) &&
+ in->size >= ctx->par_in->extradata_size &&
+ memcmp(in->data, ctx->par_in->extradata, ctx->par_in->extradata_size)) {
if (in->size >= INT_MAX - ctx->par_in->extradata_size) {
ret = AVERROR(ERANGE);
goto fail;