From 406f0f1bcf4f84dd7d99252a9db774cc6f0c54bc Mon Sep 17 00:00:00 2001 From: Nicolas George Date: Mon, 27 Dec 2010 09:08:36 +0000 Subject: Use av_find_best_stream in ffplay. Originally committed as revision 26105 to svn://svn.ffmpeg.org/ffmpeg/trunk --- ffplay.c | 46 ++++++++++++++++++---------------------------- 1 file changed, 18 insertions(+), 28 deletions(-) (limited to 'ffplay.c') diff --git a/ffplay.c b/ffplay.c index 38a2fe137f..9c48e60e6c 100644 --- a/ffplay.c +++ b/ffplay.c @@ -2398,8 +2398,6 @@ static int decode_thread(void *arg) AVFormatContext *ic; int err, i, ret; int st_index[AVMEDIA_TYPE_NB]; - int st_count[AVMEDIA_TYPE_NB]={0}; - int st_best_packet_count[AVMEDIA_TYPE_NB]; AVPacket pkt1, *pkt = &pkt1; AVFormatParameters params, *ap = ¶ms; int eof=0; @@ -2408,7 +2406,6 @@ static int decode_thread(void *arg) ic = avformat_alloc_context(); memset(st_index, -1, sizeof(st_index)); - memset(st_best_packet_count, -1, sizeof(st_best_packet_count)); is->video_stream = -1; is->audio_stream = -1; is->subtitle_stream = -1; @@ -2464,32 +2461,25 @@ static int decode_thread(void *arg) } } - for(i = 0; i < ic->nb_streams; i++) { - AVStream *st= ic->streams[i]; - AVCodecContext *avctx = st->codec; + for (i = 0; i < ic->nb_streams; i++) ic->streams[i]->discard = AVDISCARD_ALL; - if(avctx->codec_type >= (unsigned)AVMEDIA_TYPE_NB) - continue; - if(st_count[avctx->codec_type]++ != wanted_stream[avctx->codec_type] && wanted_stream[avctx->codec_type] >= 0) - continue; - - if(st_best_packet_count[avctx->codec_type] >= st->codec_info_nb_frames) - continue; - st_best_packet_count[avctx->codec_type]= st->codec_info_nb_frames; - - switch(avctx->codec_type) { - case AVMEDIA_TYPE_AUDIO: - if (!audio_disable) - st_index[AVMEDIA_TYPE_AUDIO] = i; - break; - case AVMEDIA_TYPE_VIDEO: - case AVMEDIA_TYPE_SUBTITLE: - if (!video_disable) - st_index[avctx->codec_type] = i; - break; - default: - break; - } + if (!audio_disable) + st_index[AVMEDIA_TYPE_VIDEO] = + av_find_best_stream(ic, AVMEDIA_TYPE_VIDEO, + wanted_stream[AVMEDIA_TYPE_VIDEO], -1, NULL, 0); + if (!video_disable) { + st_index[AVMEDIA_TYPE_AUDIO] = + av_find_best_stream(ic, AVMEDIA_TYPE_AUDIO, + wanted_stream[AVMEDIA_TYPE_AUDIO], + st_index[AVMEDIA_TYPE_VIDEO], + NULL, 0); + st_index[AVMEDIA_TYPE_SUBTITLE] = + av_find_best_stream(ic, AVMEDIA_TYPE_SUBTITLE, + wanted_stream[AVMEDIA_TYPE_SUBTITLE], + (st_index[AVMEDIA_TYPE_AUDIO] >= 0 ? + st_index[AVMEDIA_TYPE_AUDIO] : + st_index[AVMEDIA_TYPE_VIDEO]), + NULL, 0); } if (show_status) { dump_format(ic, 0, is->filename, 0); -- cgit v1.2.3