Re: [FFmpeg-devel] [PATCH] avformat/utils: Avoid duplicating extradata from extract_extradata BSF
Andreas Rheinhardt: > Instead move the extradata contained in packet side-data to its > destination. This is possible because the side data already has zeroed > padding. > > Notice that the check for FF_MAX_EXTRADATA_SIZE has been dropped, > because said constant is from libavcodec/internal.h. If libavcodec > wanted to enforce this, it should do so in the extract_extradata BSF > instead. > > Signed-off-by: Andreas Rheinhardt > --- > libavformat/utils.c | 23 --- > 1 file changed, 8 insertions(+), 15 deletions(-) > > diff --git a/libavformat/utils.c b/libavformat/utils.c > index 807d9f10cb..63952e31a0 100644 > --- a/libavformat/utils.c > +++ b/libavformat/utils.c > @@ -3567,9 +3567,6 @@ static int extract_extradata(AVStream *st, const > AVPacket *pkt) > } > > while (ret >= 0 && !sti->avctx->extradata) { > -int extradata_size; > -uint8_t *extradata; > - > ret = av_bsf_receive_packet(sti->extract_extradata.bsf, pkt_ref); > if (ret < 0) { > if (ret != AVERROR(EAGAIN) && ret != AVERROR_EOF) > @@ -3577,19 +3574,15 @@ static int extract_extradata(AVStream *st, const > AVPacket *pkt) > continue; > } > > -extradata = av_packet_get_side_data(pkt_ref, > AV_PKT_DATA_NEW_EXTRADATA, > -&extradata_size); > - > -if (extradata) { > -av_assert0(!sti->avctx->extradata); > -if ((unsigned)extradata_size < FF_MAX_EXTRADATA_SIZE) > -sti->avctx->extradata = av_mallocz(extradata_size + > AV_INPUT_BUFFER_PADDING_SIZE); > -if (!sti->avctx->extradata) { > -av_packet_unref(pkt_ref); > -return AVERROR(ENOMEM); > +for (int i = 0; i < pkt_ref->side_data_elems; i++) { > +AVPacketSideData *side_data = &pkt_ref->side_data[i]; > +if (side_data->type == AV_PKT_DATA_NEW_EXTRADATA) { > +sti->avctx->extradata = side_data->data; > +sti->avctx->extradata_size = side_data->size; > +side_data->data = NULL; > +side_data->size = 0; > +break; > } > -memcpy(sti->avctx->extradata, extradata, extradata_size); > -sti->avctx->extradata_size = extradata_size; > } > av_packet_unref(pkt_ref); > } > Will apply tomorrow unless there are objections. - Andreas ___ 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".
[FFmpeg-devel] [PATCH] avformat/utils: Avoid duplicating extradata from extract_extradata BSF
Instead move the extradata contained in packet side-data to its destination. This is possible because the side data already has zeroed padding. Notice that the check for FF_MAX_EXTRADATA_SIZE has been dropped, because said constant is from libavcodec/internal.h. If libavcodec wanted to enforce this, it should do so in the extract_extradata BSF instead. Signed-off-by: Andreas Rheinhardt --- libavformat/utils.c | 23 --- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/libavformat/utils.c b/libavformat/utils.c index 807d9f10cb..63952e31a0 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -3567,9 +3567,6 @@ static int extract_extradata(AVStream *st, const AVPacket *pkt) } while (ret >= 0 && !sti->avctx->extradata) { -int extradata_size; -uint8_t *extradata; - ret = av_bsf_receive_packet(sti->extract_extradata.bsf, pkt_ref); if (ret < 0) { if (ret != AVERROR(EAGAIN) && ret != AVERROR_EOF) @@ -3577,19 +3574,15 @@ static int extract_extradata(AVStream *st, const AVPacket *pkt) continue; } -extradata = av_packet_get_side_data(pkt_ref, AV_PKT_DATA_NEW_EXTRADATA, -&extradata_size); - -if (extradata) { -av_assert0(!sti->avctx->extradata); -if ((unsigned)extradata_size < FF_MAX_EXTRADATA_SIZE) -sti->avctx->extradata = av_mallocz(extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); -if (!sti->avctx->extradata) { -av_packet_unref(pkt_ref); -return AVERROR(ENOMEM); +for (int i = 0; i < pkt_ref->side_data_elems; i++) { +AVPacketSideData *side_data = &pkt_ref->side_data[i]; +if (side_data->type == AV_PKT_DATA_NEW_EXTRADATA) { +sti->avctx->extradata = side_data->data; +sti->avctx->extradata_size = side_data->size; +side_data->data = NULL; +side_data->size = 0; +break; } -memcpy(sti->avctx->extradata, extradata, extradata_size); -sti->avctx->extradata_size = extradata_size; } av_packet_unref(pkt_ref); } -- 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".