Commit e58a140c authored by Luca Barbato's avatar Luca Barbato Committed by Vittorio Giovara

avplay: Always free opts

CC: libav-stable@libav.org
Bug-Id: CID 733793
parent cf83c017
...@@ -2030,6 +2030,7 @@ static int stream_component_open(VideoState *is, int stream_index) ...@@ -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) ...@@ -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) (ret = avcodec_open2(avctx, codec, &opts)) < 0) {
return -1; 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) ...@@ -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) ...@@ -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) ...@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment