diff options
author | James Almer <jamrial@gmail.com> | 2024-02-06 10:05:17 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2024-02-20 11:24:19 -0300 |
commit | 9ba327e70fb60c26f2c55c85cfee7fbcbb7ef61e (patch) | |
tree | b8dfd5fd7e1e517ca3e68536e6fcc0b411e63bfd /libavformat/mov.c | |
parent | ce7b519ab7df16e02894fe6d0de3d2dd758aee02 (diff) | |
download | ffmpeg-9ba327e70fb60c26f2c55c85cfee7fbcbb7ef61e.tar.gz |
avformat/mov: make MOVStreamContext refcounted
This will be useful in the next commit.
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavformat/mov.c')
-rw-r--r-- | libavformat/mov.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/libavformat/mov.c b/libavformat/mov.c index 049f5e200d..6f6513e05d 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -212,6 +212,7 @@ static int mov_read_covr(MOVContext *c, AVIOContext *pb, int type, int len) } st = c->fc->streams[c->fc->nb_streams - 1]; st->priv_data = sc; + sc->refcount = 1; if (st->attached_pic.size >= 8 && id != AV_CODEC_ID_BMP) { if (AV_RB64(st->attached_pic.data) == 0x89504e470d0a1a0a) { @@ -4622,6 +4623,7 @@ static int mov_read_trak(MOVContext *c, AVIOContext *pb, MOVAtom atom) st->codecpar->codec_type = AVMEDIA_TYPE_DATA; sc->ffindex = st->index; c->trak_index = st->index; + sc->refcount = 1; if ((ret = mov_read_default(c, pb, atom)) < 0) return ret; @@ -4909,6 +4911,7 @@ static int heif_add_stream(MOVContext *c, HEIFItem *item) sc = st->priv_data; sc->pb = c->fc->pb; sc->pb_is_copied = 1; + sc->refcount = 1; // Populate the necessary fields used by mov_build_index. sc->stsc_count = 1; @@ -8610,8 +8613,10 @@ static void mov_free_stream_context(AVFormatContext *s, AVStream *st) { MOVStreamContext *sc = st->priv_data; - if (!sc) + if (!sc || --sc->refcount) { + st->priv_data = NULL; return; + } av_freep(&sc->ctts_data); for (int i = 0; i < sc->drefs_count; i++) { |