diff --git a/libavformat/isom.h b/libavformat/isom.h index 0360c53f11..4154baf827 100644 --- a/libavformat/isom.h +++ b/libavformat/isom.h @@ -94,6 +94,7 @@ typedef struct MOVSbgp { typedef struct MOVStreamContext { AVIOContext *pb; + int pb_is_copied; int ffindex; ///< AVStream index int next_chunk; unsigned int chunk_count; diff --git a/libavformat/mov.c b/libavformat/mov.c index 6c78adbd2a..7f7c0e13d8 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -2230,8 +2230,10 @@ static int mov_read_trak(MOVContext *c, AVIOContext *pb, MOVAtom atom) "filename='%s', volume='%s', nlvl_from=%d, nlvl_to=%d\n", st->index, dref->path, dref->dir, dref->filename, dref->volume, dref->nlvl_from, dref->nlvl_to); - } else + } else { sc->pb = c->fc->pb; + sc->pb_is_copied = 1; + } if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) { if (!st->sample_aspect_ratio.num && @@ -3071,7 +3073,7 @@ static int mov_read_close(AVFormatContext *s) av_freep(&sc->drefs[j].dir); } av_freep(&sc->drefs); - if (sc->pb && sc->pb != s->pb) + if (!sc->pb_is_copied) avio_close(sc->pb); sc->pb = NULL; av_freep(&sc->chunk_offsets);