summaryrefslogtreecommitdiff
path: root/libavformat/utils.c
diff options
context:
space:
mode:
authorLuca Barbato <lu_zero@gentoo.org>2012-09-04 16:05:28 +0200
committerLuca Barbato <lu_zero@gentoo.org>2012-09-14 14:26:27 +0200
commit44272c1cccfb92415801ae60693a7ed04e458916 (patch)
treef6020b3ce581f9e012308d7f6c81cf383cf223bc /libavformat/utils.c
parent4d1f443c3d579cf9495c7a289282634908f6a538 (diff)
downloadffmpeg-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.c17
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);