summaryrefslogtreecommitdiff
path: root/libavformat/libgme.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 22:26:44 +0200
commit87319ed26fee13c4ad45a1cdc0d4866c7a73f320 (patch)
tree7c1b46724e87b68d3b358a677c07a9b97c47d6e6 /libavformat/libgme.c
parent0d00167b7e314cc40ee2a17b9146f6f0b83cd3be (diff)
avformat/libgme: 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/libgme.c')
-rw-r--r--libavformat/libgme.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/libavformat/libgme.c b/libavformat/libgme.c
index 95323002e6..6a145349a7 100644
--- a/libavformat/libgme.c
+++ b/libavformat/libgme.c
@@ -84,7 +84,8 @@ static int load_metadata(AVFormatContext *s, int64_t *duration)
static int read_close_gme(AVFormatContext *s)
{
GMEContext *gme = s->priv_data;
- gme_delete(gme->music_emu);
+ if (gme->music_emu)
+ gme_delete(gme->music_emu);
return 0;
}
@@ -121,26 +122,21 @@ static int read_header_gme(AVFormatContext *s)
}
if (gme_open_data(buf, sz, &gme->music_emu, gme->sample_rate)) {
+ gme->music_emu = NULL; /* Just for safety */
av_freep(&buf);
return AVERROR_INVALIDDATA;
}
av_freep(&buf);
ret = load_metadata(s, &duration);
- if (ret < 0) {
- read_close_gme(s);
+ if (ret < 0)
return ret;
- }
- if (gme_start_track(gme->music_emu, gme->track_index)) {
- read_close_gme(s);
+ if (gme_start_track(gme->music_emu, gme->track_index))
return AVERROR_UNKNOWN;
- }
st = avformat_new_stream(s, NULL);
- if (!st) {
- read_close_gme(s);
+ if (!st)
return AVERROR(ENOMEM);
- }
avpriv_set_pts_info(st, 64, 1, 1000);
if (duration > 0)
st->duration = duration;
@@ -201,6 +197,7 @@ const AVInputFormat ff_libgme_demuxer = {
.name = "libgme",
.long_name = NULL_IF_CONFIG_SMALL("Game Music Emu demuxer"),
.priv_data_size = sizeof(GMEContext),
+ .flags_internal = FF_FMT_INIT_CLEANUP,
.read_probe = probe_gme,
.read_header = read_header_gme,
.read_packet = read_packet_gme,