diff options
author | Luca Barbato <lu_zero@gentoo.org> | 2012-09-04 16:05:28 +0200 |
---|---|---|
committer | Luca Barbato <lu_zero@gentoo.org> | 2012-09-14 14:26:27 +0200 |
commit | 44272c1cccfb92415801ae60693a7ed04e458916 (patch) | |
tree | f6020b3ce581f9e012308d7f6c81cf383cf223bc /libavformat/utils.c | |
parent | 4d1f443c3d579cf9495c7a289282634908f6a538 (diff) | |
download | ffmpeg-44272c1cccfb92415801ae60693a7ed04e458916.tar.gz |
avformat: refactor avformat_close_input
Do not crash if the input format is not allocated yet.
Diffstat (limited to 'libavformat/utils.c')
-rw-r--r-- | libavformat/utils.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/libavformat/utils.c b/libavformat/utils.c index 3a829a9d27..c0da7f2fb9 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -2702,12 +2702,21 @@ void av_close_input_file(AVFormatContext *s) void avformat_close_input(AVFormatContext **ps) { AVFormatContext *s = *ps; - AVIOContext *pb = (s->iformat->flags & AVFMT_NOFILE) || (s->flags & AVFMT_FLAG_CUSTOM_IO) ? - NULL : s->pb; + AVIOContext *pb = s->pb; + + if ((s->iformat && s->iformat->flags & AVFMT_NOFILE) && + (s->flags & AVFMT_FLAG_CUSTOM_IO)) + pb = NULL; + flush_packet_queue(s); - if (s->iformat->read_close) - s->iformat->read_close(s); + + if (s->iformat) { + if (s->iformat->read_close) + s->iformat->read_close(s); + } + avformat_free_context(s); + *ps = NULL; avio_close(pb); |