Re: [FFmpeg-devel] [PATCH] avformat/utils: Avoid duplicating extradata from extract_extradata BSF

2020-09-10 Thread Andreas Rheinhardt
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

2020-09-07 Thread 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);
 }
-- 
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".