summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/bitstream_filters.texi4
-rw-r--r--libavcodec/dump_extradata_bsf.c4
2 files changed, 6 insertions, 2 deletions
diff --git a/doc/bitstream_filters.texi b/doc/bitstream_filters.texi
index a6a5a331f5..14f35893d3 100644
--- a/doc/bitstream_filters.texi
+++ b/doc/bitstream_filters.texi
@@ -103,7 +103,9 @@ DTS-HD.
@section dump_extra
-Add extradata to the beginning of the filtered packets.
+Add extradata to the beginning of the filtered packets except when
+said packets already exactly begin with the extradata that is intended
+to be added.
@table @option
@item freq
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;