summaryrefslogtreecommitdiff
path: root/libavformat/dashdec.c
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2020-03-21 18:31:06 +0100
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-07-07 21:48:46 +0200
commitc3ba8f0d7e2932174239d31216f913febc20dc0d (patch)
tree33ccac4e6756fbc747d38f0618866a6c9e5af6e4 /libavformat/dashdec.c
parent2ca36ef08bf6a1bf8e9ceb26d55695e92b28cdaf (diff)
avformat/dashdec: Simplify cleanup after read_header failure
by setting the FF_FMT_INIT_CLEANUP flag. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Diffstat (limited to 'libavformat/dashdec.c')
-rw-r--r--libavformat/dashdec.c34
1 files changed, 13 insertions, 21 deletions
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,