mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-24 13:56:33 +02:00
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 <andreas.rheinhardt@gmail.com>
This commit is contained in:
parent
13d72cecd5
commit
5fc3eda8de
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user