mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
lavf: move AVStream.{request_probe,skip_to_keyframe} to AVStreamInternal
Those are private fields, no reason to have them exposed in a public header.
This commit is contained in:
parent
456b170bd7
commit
108864acee
@ -479,7 +479,7 @@ static int asf_read_stream_properties(AVFormatContext *s, int64_t size)
|
||||
if (is_dvr_ms_audio) {
|
||||
// codec_id and codec_tag are unreliable in dvr_ms
|
||||
// files. Set them later by probing stream.
|
||||
st->request_probe = 1;
|
||||
st->internal->request_probe = 1;
|
||||
st->codecpar->codec_tag = 0;
|
||||
}
|
||||
if (st->codecpar->codec_id == AV_CODEC_ID_AAC)
|
||||
|
@ -1109,19 +1109,6 @@ typedef struct AVStream {
|
||||
int64_t interleaver_chunk_size;
|
||||
int64_t interleaver_chunk_duration;
|
||||
|
||||
/**
|
||||
* stream probing state
|
||||
* -1 -> probing finished
|
||||
* 0 -> no probing requested
|
||||
* rest -> perform probing with request_probe being the minimum score to accept.
|
||||
*/
|
||||
int request_probe;
|
||||
/**
|
||||
* Indicates that everything up to the next keyframe
|
||||
* should be discarded.
|
||||
*/
|
||||
int skip_to_keyframe;
|
||||
|
||||
/**
|
||||
* An opaque field for libavformat internal usage.
|
||||
* Must not be accessed in any way by callers.
|
||||
|
@ -901,7 +901,7 @@ static int avi_read_header(AVFormatContext *s)
|
||||
break;
|
||||
case AVMEDIA_TYPE_SUBTITLE:
|
||||
st->codecpar->codec_type = AVMEDIA_TYPE_SUBTITLE;
|
||||
st->request_probe= 1;
|
||||
st->internal->request_probe= 1;
|
||||
avio_skip(pb, size);
|
||||
break;
|
||||
default:
|
||||
|
@ -225,6 +225,19 @@ struct AVStreamInternal {
|
||||
|
||||
} *info;
|
||||
|
||||
/**
|
||||
* stream probing state
|
||||
* -1 -> probing finished
|
||||
* 0 -> no probing requested
|
||||
* rest -> perform probing with request_probe being the minimum score to accept.
|
||||
*/
|
||||
int request_probe;
|
||||
/**
|
||||
* Indicates that everything up to the next keyframe
|
||||
* should be discarded.
|
||||
*/
|
||||
int skip_to_keyframe;
|
||||
|
||||
/**
|
||||
* Number of samples to skip at the start of the frame decoded from the next packet.
|
||||
*/
|
||||
|
@ -3597,7 +3597,7 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, AVBufferRef *buf
|
||||
return res;
|
||||
if (is_keyframe)
|
||||
matroska->skip_to_keyframe = 0;
|
||||
else if (!st->skip_to_keyframe) {
|
||||
else if (!st->internal->skip_to_keyframe) {
|
||||
av_log(matroska->ctx, AV_LOG_ERROR, "File is broken, keyframes not correctly marked!\n");
|
||||
matroska->skip_to_keyframe = 0;
|
||||
}
|
||||
@ -3794,10 +3794,10 @@ static int matroska_read_seek(AVFormatContext *s, int stream_index,
|
||||
/* We seek to a level 1 element, so set the appropriate status. */
|
||||
matroska_reset_status(matroska, 0, st->index_entries[index].pos);
|
||||
if (flags & AVSEEK_FLAG_ANY) {
|
||||
st->skip_to_keyframe = 0;
|
||||
st->internal->skip_to_keyframe = 0;
|
||||
matroska->skip_to_timecode = timestamp;
|
||||
} else {
|
||||
st->skip_to_keyframe = 1;
|
||||
st->internal->skip_to_keyframe = 1;
|
||||
matroska->skip_to_timecode = st->index_entries[index].timestamp;
|
||||
}
|
||||
matroska->skip_to_keyframe = 1;
|
||||
@ -3810,7 +3810,7 @@ err:
|
||||
matroska_reset_status(matroska, 0, -1);
|
||||
matroska->resync_pos = -1;
|
||||
matroska_clear_queue(matroska);
|
||||
st->skip_to_keyframe =
|
||||
st->internal->skip_to_keyframe =
|
||||
matroska->skip_to_keyframe = 0;
|
||||
matroska->done = 0;
|
||||
return -1;
|
||||
|
@ -622,7 +622,7 @@ skip:
|
||||
st->codecpar->channel_layout = AV_CH_LAYOUT_MONO;
|
||||
st->codecpar->sample_rate = 8000;
|
||||
}
|
||||
st->request_probe = request_probe;
|
||||
st->internal->request_probe = request_probe;
|
||||
st->need_parsing = AVSTREAM_PARSE_FULL;
|
||||
|
||||
found:
|
||||
|
@ -882,7 +882,7 @@ static void mpegts_find_stream_type(AVStream *st,
|
||||
st->codecpar->codec_id = types->codec_id;
|
||||
st->internal->need_context_update = 1;
|
||||
}
|
||||
st->request_probe = 0;
|
||||
st->internal->request_probe = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -915,7 +915,7 @@ static int mpegts_set_stream_info(AVStream *st, PESContext *pes,
|
||||
|
||||
mpegts_find_stream_type(st, pes->stream_type, ISO_types);
|
||||
if (pes->stream_type == 4 || pes->stream_type == 0x0f)
|
||||
st->request_probe = 50;
|
||||
st->internal->request_probe = 50;
|
||||
if ((prog_reg_desc == AV_RL32("HDMV") ||
|
||||
prog_reg_desc == AV_RL32("HDPR")) &&
|
||||
st->codecpar->codec_id == AV_CODEC_ID_NONE) {
|
||||
@ -952,12 +952,12 @@ static int mpegts_set_stream_info(AVStream *st, PESContext *pes,
|
||||
st->codecpar->codec_type = old_codec_type;
|
||||
}
|
||||
if ((st->codecpar->codec_id == AV_CODEC_ID_NONE ||
|
||||
(st->request_probe > 0 && st->request_probe < AVPROBE_SCORE_STREAM_RETRY / 5)) &&
|
||||
(st->internal->request_probe > 0 && st->internal->request_probe < AVPROBE_SCORE_STREAM_RETRY / 5)) &&
|
||||
st->probe_packets > 0 &&
|
||||
stream_type == STREAM_TYPE_PRIVATE_DATA) {
|
||||
st->codecpar->codec_type = AVMEDIA_TYPE_DATA;
|
||||
st->codecpar->codec_id = AV_CODEC_ID_BIN_DATA;
|
||||
st->request_probe = AVPROBE_SCORE_STREAM_RETRY / 5;
|
||||
st->internal->request_probe = AVPROBE_SCORE_STREAM_RETRY / 5;
|
||||
}
|
||||
|
||||
/* queue a context update if properties changed */
|
||||
@ -1198,12 +1198,12 @@ static int mpegts_push_data(MpegTSFilter *filter,
|
||||
code != 0x1ff && code != 0x1f2 && /* program_stream_directory, DSMCC_stream */
|
||||
code != 0x1f8) { /* ITU-T Rec. H.222.1 type E stream */
|
||||
pes->state = MPEGTS_PESHEADER;
|
||||
if (pes->st->codecpar->codec_id == AV_CODEC_ID_NONE && !pes->st->request_probe) {
|
||||
if (pes->st->codecpar->codec_id == AV_CODEC_ID_NONE && !pes->st->internal->request_probe) {
|
||||
av_log(pes->stream, AV_LOG_TRACE,
|
||||
"pid=%x stream_type=%x probing\n",
|
||||
pes->pid,
|
||||
pes->stream_type);
|
||||
pes->st->request_probe = 1;
|
||||
pes->st->internal->request_probe = 1;
|
||||
}
|
||||
} else {
|
||||
pes->pes_header_size = 6;
|
||||
@ -1799,7 +1799,7 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type
|
||||
|
||||
av_log(fc, AV_LOG_TRACE, "tag: 0x%02x len=%d\n", desc_tag, desc_len);
|
||||
|
||||
if ((st->codecpar->codec_id == AV_CODEC_ID_NONE || st->request_probe > 0) &&
|
||||
if ((st->codecpar->codec_id == AV_CODEC_ID_NONE || st->internal->request_probe > 0) &&
|
||||
stream_type == STREAM_TYPE_PRIVATE_DATA)
|
||||
mpegts_find_stream_type(st, desc_tag, DESC_types);
|
||||
|
||||
@ -1837,8 +1837,8 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type
|
||||
break;
|
||||
if (mp4_descr_count > 0 &&
|
||||
(st->codecpar->codec_id == AV_CODEC_ID_AAC_LATM ||
|
||||
(st->request_probe == 0 && st->codecpar->codec_id == AV_CODEC_ID_NONE) ||
|
||||
st->request_probe > 0) &&
|
||||
(st->internal->request_probe == 0 && st->codecpar->codec_id == AV_CODEC_ID_NONE) ||
|
||||
st->internal->request_probe > 0) &&
|
||||
mp4_descr->dec_config_descr_len && mp4_descr->es_id == pid) {
|
||||
AVIOContext pb;
|
||||
ffio_init_context(&pb, mp4_descr->dec_config_descr,
|
||||
@ -1847,7 +1847,7 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type
|
||||
ff_mp4_read_dec_config_descr(fc, st, &pb);
|
||||
if (st->codecpar->codec_id == AV_CODEC_ID_AAC &&
|
||||
st->codecpar->extradata_size > 0) {
|
||||
st->request_probe = st->need_parsing = 0;
|
||||
st->internal->request_probe = st->need_parsing = 0;
|
||||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO;
|
||||
st->internal->need_context_update = 1;
|
||||
}
|
||||
@ -1987,10 +1987,10 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type
|
||||
case REGISTRATION_DESCRIPTOR:
|
||||
st->codecpar->codec_tag = bytestream_get_le32(pp);
|
||||
av_log(fc, AV_LOG_TRACE, "reg_desc=%.4s\n", (char *)&st->codecpar->codec_tag);
|
||||
if (st->codecpar->codec_id == AV_CODEC_ID_NONE || st->request_probe > 0) {
|
||||
if (st->codecpar->codec_id == AV_CODEC_ID_NONE || st->internal->request_probe > 0) {
|
||||
mpegts_find_stream_type(st, st->codecpar->codec_tag, REGD_types);
|
||||
if (st->codecpar->codec_tag == MKTAG('B', 'S', 'S', 'D'))
|
||||
st->request_probe = 50;
|
||||
st->internal->request_probe = 50;
|
||||
}
|
||||
break;
|
||||
case 0x52: /* stream identifier descriptor */
|
||||
@ -2143,7 +2143,7 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type
|
||||
st->codecpar->codec_type = AVMEDIA_TYPE_SUBTITLE;
|
||||
st->codecpar->codec_id = AV_CODEC_ID_ARIB_CAPTION;
|
||||
st->codecpar->profile = picked_profile;
|
||||
st->request_probe = 0;
|
||||
st->internal->request_probe = 0;
|
||||
}
|
||||
break;
|
||||
case 0xb0: /* DOVI video stream descriptor */
|
||||
|
@ -365,7 +365,7 @@ static int set_codec_from_probe_data(AVFormatContext *s, AVStream *st,
|
||||
if (fmt_id_type[i].type != AVMEDIA_TYPE_AUDIO &&
|
||||
st->codecpar->sample_rate)
|
||||
continue;
|
||||
if (st->request_probe > score &&
|
||||
if (st->internal->request_probe > score &&
|
||||
st->codecpar->codec_id != fmt_id_type[i].id)
|
||||
continue;
|
||||
st->codecpar->codec_id = fmt_id_type[i].id;
|
||||
@ -675,7 +675,7 @@ static void force_codec_ids(AVFormatContext *s, AVStream *st)
|
||||
|
||||
static int probe_codec(AVFormatContext *s, AVStream *st, const AVPacket *pkt)
|
||||
{
|
||||
if (st->request_probe>0) {
|
||||
if (st->internal->request_probe>0) {
|
||||
AVProbeData *pd = &st->probe_data;
|
||||
int end;
|
||||
av_log(s, AV_LOG_DEBUG, "probing stream %d pp:%d\n", st->index, st->probe_packets);
|
||||
@ -711,7 +711,7 @@ no_packet:
|
||||
|| end) {
|
||||
pd->buf_size = 0;
|
||||
av_freep(&pd->buf);
|
||||
st->request_probe = -1;
|
||||
st->internal->request_probe = -1;
|
||||
if (st->codecpar->codec_id != AV_CODEC_ID_NONE) {
|
||||
av_log(s, AV_LOG_DEBUG, "probed stream %d\n", st->index);
|
||||
} else
|
||||
@ -807,7 +807,7 @@ int ff_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
if (s->internal->raw_packet_buffer_remaining_size <= 0)
|
||||
if ((err = probe_codec(s, st, NULL)) < 0)
|
||||
return err;
|
||||
if (st->request_probe <= 0) {
|
||||
if (st->internal->request_probe <= 0) {
|
||||
avpriv_packet_list_get(&s->internal->raw_packet_buffer,
|
||||
&s->internal->raw_packet_buffer_end, pkt);
|
||||
s->internal->raw_packet_buffer_remaining_size += pkt->size;
|
||||
@ -828,10 +828,10 @@ int ff_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
return ret;
|
||||
for (i = 0; i < s->nb_streams; i++) {
|
||||
st = s->streams[i];
|
||||
if (st->probe_packets || st->request_probe > 0)
|
||||
if (st->probe_packets || st->internal->request_probe > 0)
|
||||
if ((err = probe_codec(s, st, NULL)) < 0)
|
||||
return err;
|
||||
av_assert0(st->request_probe <= 0);
|
||||
av_assert0(st->internal->request_probe <= 0);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
@ -878,7 +878,7 @@ int ff_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
if (s->use_wallclock_as_timestamps)
|
||||
pkt->dts = pkt->pts = av_rescale_q(av_gettime(), AV_TIME_BASE_Q, st->time_base);
|
||||
|
||||
if (!pktl && st->request_probe <= 0)
|
||||
if (!pktl && st->internal->request_probe <= 0)
|
||||
return ret;
|
||||
|
||||
err = avpriv_packet_list_put(&s->internal->raw_packet_buffer,
|
||||
@ -1626,8 +1626,8 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
||||
av_packet_unref(pkt);
|
||||
}
|
||||
if (pkt->flags & AV_PKT_FLAG_KEY)
|
||||
st->skip_to_keyframe = 0;
|
||||
if (st->skip_to_keyframe) {
|
||||
st->internal->skip_to_keyframe = 0;
|
||||
if (st->internal->skip_to_keyframe) {
|
||||
av_packet_unref(pkt);
|
||||
got_packet = 0;
|
||||
}
|
||||
@ -3607,7 +3607,7 @@ FF_DISABLE_DEPRECATION_WARNINGS
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
// only for the split stuff
|
||||
if (!st->parser && !(ic->flags & AVFMT_FLAG_NOPARSE) && st->request_probe <= 0) {
|
||||
if (!st->parser && !(ic->flags & AVFMT_FLAG_NOPARSE) && st->internal->request_probe <= 0) {
|
||||
st->parser = av_parser_init(st->codecpar->codec_id);
|
||||
if (st->parser) {
|
||||
if (st->need_parsing == AVSTREAM_PARSE_HEADERS) {
|
||||
@ -3628,7 +3628,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
||||
ret = avcodec_parameters_to_context(avctx, st->codecpar);
|
||||
if (ret < 0)
|
||||
goto find_stream_info_err;
|
||||
if (st->request_probe <= 0)
|
||||
if (st->internal->request_probe <= 0)
|
||||
st->internal->avctx_inited = 1;
|
||||
|
||||
codec = find_probe_decoder(ic, st, st->codecpar->codec_id);
|
||||
@ -3649,7 +3649,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
||||
}
|
||||
|
||||
// Try to just open decoders, in case this is enough to get parameters.
|
||||
if (!has_codec_parameters(st, NULL) && st->request_probe <= 0) {
|
||||
if (!has_codec_parameters(st, NULL) && st->internal->request_probe <= 0) {
|
||||
if (codec && !avctx->codec)
|
||||
if (avcodec_open2(avctx, codec, options ? &options[i] : &thread_opt) < 0)
|
||||
av_log(ic, AV_LOG_WARNING,
|
||||
|
@ -154,7 +154,7 @@ static int wav_probe(const AVProbeData *p)
|
||||
static void handle_stream_probing(AVStream *st)
|
||||
{
|
||||
if (st->codecpar->codec_id == AV_CODEC_ID_PCM_S16LE) {
|
||||
st->request_probe = AVPROBE_SCORE_EXTENSION;
|
||||
st->internal->request_probe = AVPROBE_SCORE_EXTENSION;
|
||||
st->probe_packets = FFMIN(st->probe_packets, 32);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user