You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-07-16 22:42:38 +02:00
avformat/mov: make MOVStreamContext refcounted
This will be useful in the next commit. Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
@ -166,6 +166,7 @@ typedef struct MOVIndexRange {
|
|||||||
|
|
||||||
typedef struct MOVStreamContext {
|
typedef struct MOVStreamContext {
|
||||||
AVIOContext *pb;
|
AVIOContext *pb;
|
||||||
|
int refcount;
|
||||||
int pb_is_copied;
|
int pb_is_copied;
|
||||||
int ffindex; ///< AVStream index
|
int ffindex; ///< AVStream index
|
||||||
int next_chunk;
|
int next_chunk;
|
||||||
|
@ -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 = c->fc->streams[c->fc->nb_streams - 1];
|
||||||
st->priv_data = sc;
|
st->priv_data = sc;
|
||||||
|
sc->refcount = 1;
|
||||||
|
|
||||||
if (st->attached_pic.size >= 8 && id != AV_CODEC_ID_BMP) {
|
if (st->attached_pic.size >= 8 && id != AV_CODEC_ID_BMP) {
|
||||||
if (AV_RB64(st->attached_pic.data) == 0x89504e470d0a1a0a) {
|
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;
|
st->codecpar->codec_type = AVMEDIA_TYPE_DATA;
|
||||||
sc->ffindex = st->index;
|
sc->ffindex = st->index;
|
||||||
c->trak_index = st->index;
|
c->trak_index = st->index;
|
||||||
|
sc->refcount = 1;
|
||||||
|
|
||||||
if ((ret = mov_read_default(c, pb, atom)) < 0)
|
if ((ret = mov_read_default(c, pb, atom)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
@ -4909,6 +4911,7 @@ static int heif_add_stream(MOVContext *c, HEIFItem *item)
|
|||||||
sc = st->priv_data;
|
sc = st->priv_data;
|
||||||
sc->pb = c->fc->pb;
|
sc->pb = c->fc->pb;
|
||||||
sc->pb_is_copied = 1;
|
sc->pb_is_copied = 1;
|
||||||
|
sc->refcount = 1;
|
||||||
|
|
||||||
// Populate the necessary fields used by mov_build_index.
|
// Populate the necessary fields used by mov_build_index.
|
||||||
sc->stsc_count = 1;
|
sc->stsc_count = 1;
|
||||||
@ -8610,8 +8613,10 @@ static void mov_free_stream_context(AVFormatContext *s, AVStream *st)
|
|||||||
{
|
{
|
||||||
MOVStreamContext *sc = st->priv_data;
|
MOVStreamContext *sc = st->priv_data;
|
||||||
|
|
||||||
if (!sc)
|
if (!sc || --sc->refcount) {
|
||||||
|
st->priv_data = NULL;
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
av_freep(&sc->ctts_data);
|
av_freep(&sc->ctts_data);
|
||||||
for (int i = 0; i < sc->drefs_count; i++) {
|
for (int i = 0; i < sc->drefs_count; i++) {
|
||||||
|
Reference in New Issue
Block a user