diff --git a/libavformat/dashdec.c b/libavformat/dashdec.c index bc27c96c97..11966f905c 100644 --- a/libavformat/dashdec.c +++ b/libavformat/dashdec.c @@ -2037,8 +2037,6 @@ static int copy_init_section(struct representation *rep_dest, struct representat return 0; } -static int dash_close(AVFormatContext *s); - static void move_metadata(AVStream *st, const char *key, char **value) { if (*value) { @@ -2059,10 +2057,10 @@ static int dash_read_header(AVFormatContext *s) c->interrupt_callback = &s->interrupt_callback; if ((ret = save_avio_options(s)) < 0) - goto fail; + return ret; if ((ret = parse_manifest(s, s->url, s->pb)) < 0) - goto fail; + return ret; /* If this isn't a live stream, fill the total duration of the * stream. */ @@ -2081,12 +2079,12 @@ static int dash_read_header(AVFormatContext *s) if (i > 0 && c->is_init_section_common_video) { ret = copy_init_section(rep, c->videos[0]); if (ret < 0) - goto fail; + return ret; } ret = open_demux_for_component(s, rep); if (ret) - goto fail; + return ret; rep->stream_index = stream_index; ++stream_index; } @@ -2099,12 +2097,12 @@ static int dash_read_header(AVFormatContext *s) if (i > 0 && c->is_init_section_common_audio) { ret = copy_init_section(rep, c->audios[0]); if (ret < 0) - goto fail; + return ret; } ret = open_demux_for_component(s, rep); if (ret) - goto fail; + return ret; rep->stream_index = stream_index; ++stream_index; } @@ -2117,27 +2115,23 @@ static int dash_read_header(AVFormatContext *s) if (i > 0 && c->is_init_section_common_subtitle) { ret = copy_init_section(rep, c->subtitles[0]); if (ret < 0) - goto fail; + return ret; } ret = open_demux_for_component(s, rep); if (ret) - goto fail; + return ret; rep->stream_index = stream_index; ++stream_index; } - if (!stream_index) { - ret = AVERROR_INVALIDDATA; - goto fail; - } + if (!stream_index) + return AVERROR_INVALIDDATA; /* Create a program */ program = av_new_program(s, 0); - if (!program) { - ret = AVERROR(ENOMEM); - goto fail; - } + if (!program) + return AVERROR(ENOMEM); for (i = 0; i < c->n_videos; i++) { rep = c->videos[i]; @@ -2165,9 +2159,6 @@ static int dash_read_header(AVFormatContext *s) } return 0; -fail: - dash_close(s); - return ret; } static void recheck_discard_flags(AVFormatContext *s, struct representation **p, int n) @@ -2402,6 +2393,7 @@ const AVInputFormat ff_dash_demuxer = { .long_name = NULL_IF_CONFIG_SMALL("Dynamic Adaptive Streaming over HTTP"), .priv_class = &dash_class, .priv_data_size = sizeof(DASHContext), + .flags_internal = FF_FMT_INIT_CLEANUP, .read_probe = dash_probe, .read_header = dash_read_header, .read_packet = dash_read_packet,