| @@ -2030,6 +2030,7 @@ static int stream_component_open(VideoState *is, int stream_index) | |||||
| SDL_AudioSpec wanted_spec, spec; | SDL_AudioSpec wanted_spec, spec; | ||||
| AVDictionary *opts; | AVDictionary *opts; | ||||
| AVDictionaryEntry *t = NULL; | AVDictionaryEntry *t = NULL; | ||||
| int ret = 0; | |||||
| if (stream_index < 0 || stream_index >= ic->nb_streams) | if (stream_index < 0 || stream_index >= ic->nb_streams) | ||||
| return -1; | return -1; | ||||
| @@ -2052,11 +2053,13 @@ static int stream_component_open(VideoState *is, int stream_index) | |||||
| if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) | if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) | ||||
| av_dict_set(&opts, "refcounted_frames", "1", 0); | av_dict_set(&opts, "refcounted_frames", "1", 0); | ||||
| if (!codec || | if (!codec || | ||||
| avcodec_open2(avctx, codec, &opts) < 0) | |||||
| return -1; | |||||
| (ret = avcodec_open2(avctx, codec, &opts)) < 0) { | |||||
| goto fail; | |||||
| } | |||||
| if ((t = av_dict_get(opts, "", NULL, AV_DICT_IGNORE_SUFFIX))) { | if ((t = av_dict_get(opts, "", NULL, AV_DICT_IGNORE_SUFFIX))) { | ||||
| av_log(NULL, AV_LOG_ERROR, "Option %s not found.\n", t->key); | av_log(NULL, AV_LOG_ERROR, "Option %s not found.\n", t->key); | ||||
| return AVERROR_OPTION_NOT_FOUND; | |||||
| ret = AVERROR_OPTION_NOT_FOUND; | |||||
| goto fail; | |||||
| } | } | ||||
| /* prepare audio output */ | /* prepare audio output */ | ||||
| @@ -2067,7 +2070,8 @@ static int stream_component_open(VideoState *is, int stream_index) | |||||
| avctx->channel_layout = av_get_default_channel_layout(avctx->channels); | avctx->channel_layout = av_get_default_channel_layout(avctx->channels); | ||||
| if (!avctx->channel_layout) { | if (!avctx->channel_layout) { | ||||
| fprintf(stderr, "unable to guess channel layout\n"); | fprintf(stderr, "unable to guess channel layout\n"); | ||||
| return -1; | |||||
| ret = AVERROR_INVALIDDATA; | |||||
| goto fail; | |||||
| } | } | ||||
| if (avctx->channels == 1) | if (avctx->channels == 1) | ||||
| is->sdl_channel_layout = AV_CH_LAYOUT_MONO; | is->sdl_channel_layout = AV_CH_LAYOUT_MONO; | ||||
| @@ -2084,7 +2088,8 @@ static int stream_component_open(VideoState *is, int stream_index) | |||||
| wanted_spec.userdata = is; | wanted_spec.userdata = is; | ||||
| if (SDL_OpenAudio(&wanted_spec, &spec) < 0) { | if (SDL_OpenAudio(&wanted_spec, &spec) < 0) { | ||||
| fprintf(stderr, "SDL_OpenAudio: %s\n", SDL_GetError()); | fprintf(stderr, "SDL_OpenAudio: %s\n", SDL_GetError()); | ||||
| return -1; | |||||
| ret = AVERROR_UNKNOWN; | |||||
| goto fail; | |||||
| } | } | ||||
| is->audio_hw_buf_size = spec.size; | is->audio_hw_buf_size = spec.size; | ||||
| is->sdl_sample_fmt = AV_SAMPLE_FMT_S16; | is->sdl_sample_fmt = AV_SAMPLE_FMT_S16; | ||||
| @@ -2129,7 +2134,11 @@ static int stream_component_open(VideoState *is, int stream_index) | |||||
| default: | default: | ||||
| break; | break; | ||||
| } | } | ||||
| return 0; | |||||
| fail: | |||||
| av_dict_free(&opts); | |||||
| return ret; | |||||
| } | } | ||||
| static void stream_component_close(VideoState *is, int stream_index) | static void stream_component_close(VideoState *is, int stream_index) | ||||