diff options
author | Anton Khirnov <anton@khirnov.net> | 2011-05-25 16:59:51 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2011-07-13 23:17:42 +0200 |
commit | 3009f521f390b2bd440d9747a9c6baf648b2087a (patch) | |
tree | e4bb7ff1c0a7f595b1e29a0b6bc92fd2bb91b086 /ffplay.c | |
parent | 8c8eab8bfed74cceb4a04f982f349c7c17f5eb6f (diff) | |
download | ffmpeg-3009f521f390b2bd440d9747a9c6baf648b2087a.tar.gz |
ffplay: use new avcodec_open2 and avformat_find_stream_info API.
Diffstat (limited to 'ffplay.c')
-rw-r--r-- | ffplay.c | 38 |
1 files changed, 18 insertions, 20 deletions
@@ -2130,11 +2130,15 @@ static int stream_component_open(VideoState *is, int stream_index) AVCodecContext *avctx; AVCodec *codec; SDL_AudioSpec wanted_spec, spec; + AVDictionary *opts; + AVDictionaryEntry *t = NULL; if (stream_index < 0 || stream_index >= ic->nb_streams) return -1; avctx = ic->streams[stream_index]->codec; + opts = filter_codec_opts(codec_opts, avctx->codec_id, 0); + /* prepare audio output */ if (avctx->codec_type == AVMEDIA_TYPE_AUDIO) { if (avctx->channels > 0) { @@ -2159,11 +2163,13 @@ static int stream_component_open(VideoState *is, int stream_index) avctx->error_concealment= error_concealment; avctx->thread_count= thread_count; - set_context_opts(avctx, avcodec_opts[avctx->codec_type], 0, codec); - if (!codec || - avcodec_open(avctx, codec) < 0) + avcodec_open2(avctx, codec, &opts) < 0) return -1; + if ((t = av_dict_get(opts, "", NULL, AV_DICT_IGNORE_SUFFIX))) { + av_log(NULL, AV_LOG_ERROR, "Option %s not found.\n", t->key); + return AVERROR_OPTION_NOT_FOUND; + } /* prepare audio output */ if (avctx->codec_type == AVMEDIA_TYPE_AUDIO) { @@ -2313,6 +2319,8 @@ static int decode_thread(void *arg) int eof=0; int pkt_in_play_range = 0; AVDictionaryEntry *t; + AVDictionary **opts; + int orig_nb_streams; memset(st_index, -1, sizeof(st_index)); is->video_stream = -1; @@ -2338,29 +2346,19 @@ static int decode_thread(void *arg) if(genpts) ic->flags |= AVFMT_FLAG_GENPTS; - /* Set AVCodecContext options so they will be seen by av_find_stream_info() */ - for (i = 0; i < ic->nb_streams; i++) { - AVCodecContext *dec = ic->streams[i]->codec; - switch (dec->codec_type) { - case AVMEDIA_TYPE_AUDIO: - set_context_opts(dec, avcodec_opts[AVMEDIA_TYPE_AUDIO], - AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_DECODING_PARAM, - NULL); - break; - case AVMEDIA_TYPE_VIDEO: - set_context_opts(dec, avcodec_opts[AVMEDIA_TYPE_VIDEO], - AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM, - NULL); - break; - } - } + opts = setup_find_stream_info_opts(ic); + orig_nb_streams = ic->nb_streams; - err = av_find_stream_info(ic); + err = avformat_find_stream_info(ic, opts); if (err < 0) { fprintf(stderr, "%s: could not find codec parameters\n", is->filename); ret = -1; goto fail; } + for (i = 0; i < orig_nb_streams; i++) + av_dict_free(&opts[i]); + av_freep(&opts); + if(ic->pb) ic->pb->eof_reached= 0; //FIXME hack, ffplay maybe should not use url_feof() to test for the end |