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;