This commit ends using separate packets for in- and output. Instead, the input is read directly into the packet destined for output via ff_bsf_get_packet_ref() and only the buffer-related fields are modified; the others are not touched.
Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@gmail.com> --- libavcodec/dump_extradata_bsf.c | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/libavcodec/dump_extradata_bsf.c b/libavcodec/dump_extradata_bsf.c index be5e23ba5b..5df7e064cf 100644 --- a/libavcodec/dump_extradata_bsf.c +++ b/libavcodec/dump_extradata_bsf.c @@ -33,49 +33,44 @@ enum DumpFreq { typedef struct DumpExtradataContext { const AVClass *class; - AVPacket pkt; int freq; } DumpExtradataContext; -static int dump_extradata(AVBSFContext *ctx, AVPacket *out) +static int dump_extradata(AVBSFContext *ctx, AVPacket *pkt) { DumpExtradataContext *s = ctx->priv_data; const AVCodecParameters *par; - AVPacket *in = &s->pkt; int ret = 0; - ret = ff_bsf_get_packet_ref(ctx, in); + ret = ff_bsf_get_packet_ref(ctx, pkt); if (ret < 0) return ret; if ((par = ctx->par_in)->extradata_size && (s->freq == DUMP_FREQ_ALL || - (s->freq == DUMP_FREQ_KEYFRAME && in->flags & AV_PKT_FLAG_KEY)) && - (in->size < par->extradata_size || - memcmp(in->data, par->extradata, par->extradata_size))) { - if (in->size >= INT_MAX - par->extradata_size) { + (s->freq == DUMP_FREQ_KEYFRAME && pkt->flags & AV_PKT_FLAG_KEY)) && + (pkt->size < par->extradata_size || + memcmp(pkt->data, par->extradata, par->extradata_size))) { + AVBufferRef *out = NULL; + + if (pkt->size >= INT_MAX - par->extradata_size) { ret = AVERROR(ERANGE); goto fail; } - ret = av_new_packet(out, in->size + par->extradata_size); + ret = ff_buffer_padded_realloc(&out, pkt->size + par->extradata_size); if (ret < 0) goto fail; - ret = av_packet_copy_props(out, in); - if (ret < 0) { - av_packet_unref(out); - goto fail; - } - memcpy(out->data, par->extradata, par->extradata_size); - memcpy(out->data + par->extradata_size, in->data, in->size); - } else { - av_packet_move_ref(out, in); + memcpy(out->data + par->extradata_size, pkt->data, pkt->size); + + ff_packet_replace_buffer(pkt, out); } fail: - av_packet_unref(in); + if (ret < 0) + av_packet_unref(pkt); return ret; } -- 2.20.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".