From e70d56b8ad5d77d7e5611b5c4994ae09b115d504 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sat, 26 Dec 2015 19:38:13 +0100 Subject: avformat/img2dec: Reuse main IO context instead of reopening a single file Fixes part of Ticket4849 Signed-off-by: Michael Niedermayer --- libavformat/img2dec.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'libavformat/img2dec.c') diff --git a/libavformat/img2dec.c b/libavformat/img2dec.c index c0e0ef2377..db4b4b75f4 100644 --- a/libavformat/img2dec.c +++ b/libavformat/img2dec.c @@ -391,7 +391,12 @@ int ff_img_read_packet(AVFormatContext *s1, AVPacket *pkt) return AVERROR(EIO); } for (i = 0; i < 3; i++) { - if (avio_open2(&f[i], filename, AVIO_FLAG_READ, + if (s1->pb && + !strcmp(filename_bytes, s->path) && + !s->loop && + !s->split_planes) { + f[i] = s1->pb; + } else if (avio_open2(&f[i], filename, AVIO_FLAG_READ, &s1->interrupt_callback, NULL) < 0) { if (i >= 1) break; @@ -479,7 +484,7 @@ int ff_img_read_packet(AVFormatContext *s1, AVPacket *pkt) ret[i] = avio_read(f[i], pkt->data + pkt->size, size[i]); } } - if (!s->is_pipe) + if (!s->is_pipe && f[i] != s1->pb) avio_closep(&f[i]); if (ret[i] > 0) pkt->size += ret[i]; @@ -508,7 +513,8 @@ int ff_img_read_packet(AVFormatContext *s1, AVPacket *pkt) fail: if (!s->is_pipe) { for (i = 0; i < 3; i++) { - avio_closep(&f[i]); + if (f[i] != s1->pb) + avio_closep(&f[i]); } } return res; -- cgit v1.2.3