diff options
author | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2020-03-21 18:31:06 +0100 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2021-07-07 22:26:44 +0200 |
commit | 87319ed26fee13c4ad45a1cdc0d4866c7a73f320 (patch) | |
tree | 7c1b46724e87b68d3b358a677c07a9b97c47d6e6 | |
parent | 0d00167b7e314cc40ee2a17b9146f6f0b83cd3be (diff) | |
download | ffmpeg-87319ed26fee13c4ad45a1cdc0d4866c7a73f320.tar.gz |
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>
-rw-r--r-- | libavformat/libgme.c | 17 |
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, |