1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

Revert "Merge commit '8e2ea691351c5079cdab245ff7bfa5c0f3e3bfe4'"

This reverts commit 1c193ac1f9, reversing
changes made to 7ebc9f8df4.

Several FATE tests started failing after this merge, so it's reverted
until it can be properly fixed.
This commit is contained in:
James Almer 2017-03-23 19:34:00 -03:00
parent 380448194f
commit 40fa9d416a
2 changed files with 13 additions and 119 deletions

View File

@ -178,15 +178,6 @@ struct AVStreamInternal {
enum AVCodecID orig_codec_id;
/* the context for extracting extradata in find_stream_info()
* inited=1/bsf=NULL signals that extracting is not possible (codec not
* supported) */
struct {
AVBSFContext *bsf;
AVPacket *pkt;
int inited;
} extract_extradata;
/**
* Whether the internal avctx needs to be updated from codecpar (after a late change to codecpar)
*/

View File

@ -3370,104 +3370,6 @@ void ff_rfps_calculate(AVFormatContext *ic)
}
}
static int extract_extradata_init(AVStream *st)
{
AVStreamInternal *i = st->internal;
const AVBitStreamFilter *f;
int ret;
f = av_bsf_get_by_name("extract_extradata");
if (!f)
goto finish;
i->extract_extradata.pkt = av_packet_alloc();
if (!i->extract_extradata.pkt)
return AVERROR(ENOMEM);
ret = av_bsf_alloc(f, &i->extract_extradata.bsf);
if (ret < 0)
goto fail;
ret = avcodec_parameters_copy(i->extract_extradata.bsf->par_in,
st->codecpar);
if (ret < 0)
goto fail;
i->extract_extradata.bsf->time_base_in = st->time_base;
/* if init fails here, we assume extracting extradata is just not
* supported for this codec, so we return success */
ret = av_bsf_init(i->extract_extradata.bsf);
if (ret < 0) {
av_bsf_free(&i->extract_extradata.bsf);
ret = 0;
}
finish:
i->extract_extradata.inited = 1;
return 0;
fail:
av_bsf_free(&i->extract_extradata.bsf);
av_packet_free(&i->extract_extradata.pkt);
return ret;
}
static int extract_extradata(AVStream *st, AVPacket *pkt)
{
AVStreamInternal *i = st->internal;
AVPacket *pkt_ref;
int ret;
if (!i->extract_extradata.inited) {
ret = extract_extradata_init(st);
if (ret < 0)
return ret;
}
if (i->extract_extradata.inited && !i->extract_extradata.bsf)
return 0;
pkt_ref = i->extract_extradata.pkt;
ret = av_packet_ref(pkt_ref, pkt);
if (ret < 0)
return ret;
ret = av_bsf_send_packet(i->extract_extradata.bsf, pkt_ref);
if (ret < 0) {
av_packet_unref(pkt_ref);
return ret;
}
while (ret >= 0 && !i->avctx->extradata) {
int extradata_size;
uint8_t *extradata;
ret = av_bsf_receive_packet(i->extract_extradata.bsf, pkt_ref);
if (ret < 0) {
if (ret != AVERROR(EAGAIN) && ret != AVERROR_EOF)
return ret;
continue;
}
extradata = av_packet_get_side_data(pkt_ref, AV_PKT_DATA_NEW_EXTRADATA,
&extradata_size);
if (extradata) {
i->avctx->extradata = av_mallocz(extradata_size + AV_INPUT_BUFFER_PADDING_SIZE);
if (!i->avctx->extradata) {
av_packet_unref(pkt_ref);
return AVERROR(ENOMEM);
}
memcpy(i->avctx->extradata, extradata, extradata_size);
i->avctx->extradata_size = extradata_size;
}
av_packet_unref(pkt_ref);
}
return 0;
}
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)
{
int i, count = 0, ret = 0, j;
@ -3627,10 +3529,8 @@ FF_ENABLE_DEPRECATION_WARNINGS
if (count < fps_analyze_framecount)
break;
}
if (!st->codecpar->extradata &&
!st->internal->avctx->extradata &&
(!st->internal->extract_extradata.inited ||
st->internal->extract_extradata.bsf))
if (st->parser && st->parser->parser->split &&
!st->internal->avctx->extradata)
break;
if (st->first_dts == AV_NOPTS_VALUE &&
!(ic->iformat->flags & AVFMT_NOTIMESTAMPS) &&
@ -3780,10 +3680,17 @@ FF_ENABLE_DEPRECATION_WARNINGS
if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
ff_rfps_add_frame(ic, st, pkt->dts);
#endif
if (!st->internal->avctx->extradata) {
ret = extract_extradata(st, pkt);
if (ret < 0)
goto find_stream_info_err;
if (st->parser && st->parser->parser->split && !avctx->extradata) {
int i = st->parser->parser->split(avctx, pkt->data, pkt->size);
if (i > 0 && i < FF_MAX_EXTRADATA_SIZE) {
avctx->extradata_size = i;
avctx->extradata = av_mallocz(avctx->extradata_size +
AV_INPUT_BUFFER_PADDING_SIZE);
if (!avctx->extradata)
return AVERROR(ENOMEM);
memcpy(avctx->extradata, pkt->data,
avctx->extradata_size);
}
}
/* If still no information, we try to open the codec and to
@ -4043,8 +3950,6 @@ find_stream_info_err:
if (st->info)
av_freep(&st->info->duration_error);
av_freep(&ic->streams[i]->info);
av_bsf_free(&ic->streams[i]->internal->extract_extradata.bsf);
av_packet_free(&ic->streams[i]->internal->extract_extradata.pkt);
}
if (ic->pb)
av_log(ic, AV_LOG_DEBUG, "After avformat_find_stream_info() pos: %"PRId64" bytes read:%"PRId64" seeks:%d frames:%d\n",
@ -4232,8 +4137,6 @@ static void free_stream(AVStream **pst)
av_bsf_free(&st->internal->bsfcs[i]);
av_freep(&st->internal->bsfcs);
}
av_bsf_free(&st->internal->extract_extradata.bsf);
av_packet_free(&st->internal->extract_extradata.pkt);
}
av_freep(&st->internal);