This change breaks the compiling of gst-libav ( https://gitlab.freedesktop.org/gstreamer/gst-libav), I filed https://trac.ffmpeg.org/ticket/8988 to track this regression.
Thanks Haihao > Those are private fields, no reason to have them exposed in a public > header. Since there are some (semi-)public fields located after these, > even though this section is supposed to be private, keep some dummy > padding there until the next major bump to preserve ABI compatibility. > --- > libavformat/ape.c | 2 +- > libavformat/asfdec_f.c | 4 +- > libavformat/asfdec_o.c | 6 +- > libavformat/avformat.h | 10 +- > libavformat/avidec.c | 100 ++++++++++---------- > libavformat/bink.c | 10 +- > libavformat/cafdec.c | 22 ++--- > libavformat/cinedec.c | 2 +- > libavformat/dhav.c | 4 +- > libavformat/flacdec.c | 8 +- > libavformat/flic.c | 6 +- > libavformat/flvdec.c | 10 +- > libavformat/gxf.c | 6 +- > libavformat/ifv.c | 8 +- > libavformat/img2dec.c | 2 +- > libavformat/internal.h | 5 + > libavformat/jvdec.c | 28 +++--- > libavformat/matroskadec.c | 40 ++++---- > libavformat/mlvdec.c | 20 ++-- > libavformat/mov.c | 190 +++++++++++++++++++------------------- > libavformat/mp3dec.c | 6 +- > libavformat/mpc.c | 4 +- > libavformat/mpc8.c | 4 +- > libavformat/mux.c | 2 +- > libavformat/mvdec.c | 4 +- > libavformat/nsvdec.c | 4 +- > libavformat/nutdec.c | 6 +- > libavformat/nutenc.c | 12 +-- > libavformat/rl2.c | 8 +- > libavformat/rpl.c | 4 +- > libavformat/segafilm.c | 2 +- > libavformat/tta.c | 8 +- > libavformat/utils.c | 46 ++++----- > libavformat/vocdec.c | 8 +- > 34 files changed, 304 insertions(+), 297 deletions(-) > > diff --git a/libavformat/ape.c b/libavformat/ape.c > index d92cb2867d..33b7237fb0 100644 > --- a/libavformat/ape.c > +++ b/libavformat/ape.c > @@ -469,7 +469,7 @@ static int ape_read_seek(AVFormatContext *s, int > stream_index, int64_t timestamp > if (index < 0) > return -1; > > - if ((ret = avio_seek(s->pb, st->index_entries[index].pos, SEEK_SET)) < 0) > + if ((ret = avio_seek(s->pb, st->internal->index_entries[index].pos, > SEEK_SET)) < 0) > return ret; > ape->currentframe = index; > return 0; > diff --git a/libavformat/asfdec_f.c b/libavformat/asfdec_f.c > index b92434db9e..deb7c266ed 100644 > --- a/libavformat/asfdec_f.c > +++ b/libavformat/asfdec_f.c > @@ -1678,11 +1678,11 @@ static int asf_read_seek(AVFormatContext *s, int > stream_index, > asf->index_read = -1; > } > > - if (asf->index_read > 0 && st->index_entries) { > + if (asf->index_read > 0 && st->internal->index_entries) { > int index = av_index_search_timestamp(st, pts, flags); > if (index >= 0) { > /* find the position */ > - uint64_t pos = st->index_entries[index].pos; > + uint64_t pos = st->internal->index_entries[index].pos; > > /* do the seek */ > av_log(s, AV_LOG_DEBUG, "SEEKTO: %"PRId64"\n", pos); > diff --git a/libavformat/asfdec_o.c b/libavformat/asfdec_o.c > index 1b10e47907..b142f83541 100644 > --- a/libavformat/asfdec_o.c > +++ b/libavformat/asfdec_o.c > @@ -1640,11 +1640,11 @@ static int asf_read_seek(AVFormatContext *s, int > stream_index, > ASFContext *asf = s->priv_data; > int idx, ret; > > - if (s->streams[stream_index]->nb_index_entries && asf->is_simple_index) { > + if (s->streams[stream_index]->internal->nb_index_entries && asf- > >is_simple_index) { > idx = av_index_search_timestamp(s->streams[stream_index], timestamp, > flags); > - if (idx < 0 || idx >= s->streams[stream_index]->nb_index_entries) > + if (idx < 0 || idx >= s->streams[stream_index]->internal- > >nb_index_entries) > return AVERROR_INVALIDDATA; > - avio_seek(s->pb, s->streams[stream_index]->index_entries[idx].pos, > SEEK_SET); > + avio_seek(s->pb, s->streams[stream_index]->internal- > >index_entries[idx].pos, SEEK_SET); > } else { > if ((ret = ff_seek_frame_binary(s, stream_index, timestamp, flags)) < > 0) > return ret; > diff --git a/libavformat/avformat.h b/libavformat/avformat.h > index 1253021452..dbef1b21dd 100644 > --- a/libavformat/avformat.h > +++ b/libavformat/avformat.h > @@ -1065,10 +1065,12 @@ typedef struct AVStream { > #define MAX_REORDER_DELAY 16 > int64_t pts_buffer[MAX_REORDER_DELAY+1]; > > - AVIndexEntry *index_entries; /**< Only used if the format does not > - support seeking natively. */ > - int nb_index_entries; > - unsigned int index_entries_allocated_size; > +#if LIBAVFORMAT_VERSION_MAJOR < 59 > + // kept for ABI compatibility only, do not access in any way > + void *unused2; > + int unused3; > + unsigned int unused4; > +#endif > > /** > * Stream Identifier > diff --git a/libavformat/avidec.c b/libavformat/avidec.c > index 89a9443821..80e5563bc6 100644 > --- a/libavformat/avidec.c > +++ b/libavformat/avidec.c > @@ -272,7 +272,7 @@ static void clean_index(AVFormatContext *s) > for (i = 0; i < s->nb_streams; i++) { > AVStream *st = s->streams[i]; > AVIStream *ast = st->priv_data; > - int n = st->nb_index_entries; > + int n = st->internal->nb_index_entries; > int max = ast->sample_size; > int64_t pos, size, ts; > > @@ -282,9 +282,9 @@ static void clean_index(AVFormatContext *s) > while (max < 1024) > max += max; > > - pos = st->index_entries[0].pos; > - size = st->index_entries[0].size; > - ts = st->index_entries[0].timestamp; > + pos = st->internal->index_entries[0].pos; > + size = st->internal->index_entries[0].size; > + ts = st->internal->index_entries[0].timestamp; > > for (j = 0; j < size; j += max) > av_add_index_entry(st, pos + j, ts + j, FFMIN(max, size - j), 0, > @@ -432,12 +432,12 @@ static int calculate_bitrate(AVFormatContext *s) > int64_t len = 0; > AVStream *st = s->streams[i]; > > - if (!st->nb_index_entries) > + if (!st->internal->nb_index_entries) > continue; > > - for (j = 0; j < st->nb_index_entries; j++) > - len += st->index_entries[j].size; > - maxpos = FFMAX(maxpos, st->index_entries[j-1].pos); > + for (j = 0; j < st->internal->nb_index_entries; j++) > + len += st->internal->index_entries[j].size; > + maxpos = FFMAX(maxpos, st->internal->index_entries[j-1].pos); > lensum += len; > } > if (maxpos < av_rescale(avi->io_fsize, 9, 10)) // index does not cover > the whole file > @@ -451,12 +451,12 @@ static int calculate_bitrate(AVFormatContext *s) > int64_t duration; > int64_t bitrate; > > - for (j = 0; j < st->nb_index_entries; j++) > - len += st->index_entries[j].size; > + for (j = 0; j < st->internal->nb_index_entries; j++) > + len += st->internal->index_entries[j].size; > > - if (st->nb_index_entries < 2 || st->codecpar->bit_rate > 0) > + if (st->internal->nb_index_entries < 2 || st->codecpar->bit_rate > 0) > continue; > - duration = st->index_entries[j-1].timestamp - st- > >index_entries[0].timestamp; > + duration = st->internal->index_entries[j-1].timestamp - st->internal- > >index_entries[0].timestamp; > bitrate = av_rescale(8*len, st->time_base.den, duration * st- > >time_base.num); > if (bitrate > 0) { > st->codecpar->bit_rate = bitrate; > @@ -1034,7 +1034,7 @@ end_of_header: > > for (i = 0; i < s->nb_streams; i++) { > AVStream *st = s->streams[i]; > - if (st->nb_index_entries) > + if (st->internal->nb_index_entries) > break; > } > // DV-in-AVI cannot be non-interleaved, if set this must be > @@ -1316,8 +1316,8 @@ start_sync: > > if (size) { > uint64_t pos = avio_tell(pb) - 8; > - if (!st->index_entries || !st->nb_index_entries || > - st->index_entries[st->nb_index_entries - 1].pos < > pos) { > + if (!st->internal->index_entries || !st->internal- > >nb_index_entries || > + st->internal->index_entries[st->internal- > >nb_index_entries - 1].pos < pos) { > av_add_index_entry(st, pos, ast->frame_offset, size, > 0, AVINDEX_KEYFRAME); > } > @@ -1347,10 +1347,10 @@ static int ni_prepare_read(AVFormatContext *s) > int64_t ts = ast->frame_offset; > int64_t last_ts; > > - if (!st->nb_index_entries) > + if (!st->internal->nb_index_entries) > continue; > > - last_ts = st->index_entries[st->nb_index_entries - 1].timestamp; > + last_ts = st->internal->index_entries[st->internal->nb_index_entries > - 1].timestamp; > if (!ast->remaining && ts > last_ts) > continue; > > @@ -1379,11 +1379,11 @@ static int ni_prepare_read(AVFormatContext *s) > } else { > i = av_index_search_timestamp(best_st, best_ts, AVSEEK_FLAG_ANY); > if (i >= 0) > - best_ast->frame_offset = best_st->index_entries[i].timestamp; > + best_ast->frame_offset = best_st->internal- > >index_entries[i].timestamp; > } > > if (i >= 0) { > - int64_t pos = best_st->index_entries[i].pos; > + int64_t pos = best_st->internal->index_entries[i].pos; > pos += best_ast->packet_size - best_ast->remaining; > if (avio_seek(s->pb, pos + 8, SEEK_SET) < 0) > return AVERROR_EOF; > @@ -1393,7 +1393,7 @@ static int ni_prepare_read(AVFormatContext *s) > avi->stream_index = best_stream_index; > if (!best_ast->remaining) > best_ast->packet_size = > - best_ast->remaining = best_st->index_entries[i].size; > + best_ast->remaining = best_st->internal->index_entries[i].size; > } > else > return AVERROR_EOF; > @@ -1483,15 +1483,15 @@ resync: > pkt->dts /= ast->sample_size; > pkt->stream_index = avi->stream_index; > > - if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && st- > >index_entries) { > + if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && st- > >internal->index_entries) { > AVIndexEntry *e; > int index; > > index = av_index_search_timestamp(st, ast->frame_offset, > AVSEEK_FLAG_ANY); > - e = &st->index_entries[index]; > + e = &st->internal->index_entries[index]; > > if (index >= 0 && e->timestamp == ast->frame_offset) { > - if (index == st->nb_index_entries-1) { > + if (index == st->internal->nb_index_entries-1) { > int key=1; > uint32_t state=-1; > if (st->codecpar->codec_id == AV_CODEC_ID_MPEG4) { > @@ -1527,7 +1527,7 @@ resync: > } > ast->seek_pos= 0; > > - if (!avi->non_interleaved && st->nb_index_entries>1 && avi- > >index_loaded>1) { > + if (!avi->non_interleaved && st->internal->nb_index_entries>1 && avi- > >index_loaded>1) { > int64_t dts= av_rescale_q(pkt->dts, st->time_base, > AV_TIME_BASE_Q); > > if (avi->dts_max < dts) { > @@ -1627,8 +1627,8 @@ static int avi_read_idx1(AVFormatContext *s, int size) > if (!anykey) { > for (index = 0; index < s->nb_streams; index++) { > st = s->streams[index]; > - if (st->nb_index_entries) > - st->index_entries[0].flags |= AVINDEX_KEYFRAME; > + if (st->internal->nb_index_entries) > + st->internal->index_entries[0].flags |= AVINDEX_KEYFRAME; > } > } > return 0; > @@ -1653,16 +1653,16 @@ static int check_stream_max_drift(AVFormatContext *s) > for (i = 0; i < s->nb_streams; i++) { > AVStream *st = s->streams[i]; > AVIStream *ast = st->priv_data; > - int n = st->nb_index_entries; > - while (idx[i] < n && st->index_entries[idx[i]].pos < pos) > + int n = st->internal->nb_index_entries; > + while (idx[i] < n && st->internal->index_entries[idx[i]].pos < > pos) > idx[i]++; > if (idx[i] < n) { > int64_t dts; > - dts = av_rescale_q(st->index_entries[idx[i]].timestamp / > + dts = av_rescale_q(st->internal- > >index_entries[idx[i]].timestamp / > FFMAX(ast->sample_size, 1), > st->time_base, AV_TIME_BASE_Q); > min_dts = FFMIN(min_dts, dts); > - min_pos = FFMIN(min_pos, st->index_entries[idx[i]].pos); > + min_pos = FFMIN(min_pos, st->internal- > >index_entries[idx[i]].pos); > } > } > for (i = 0; i < s->nb_streams; i++) { > @@ -1671,7 +1671,7 @@ static int check_stream_max_drift(AVFormatContext *s) > > if (idx[i] && min_dts != INT64_MAX / 2) { > int64_t dts; > - dts = av_rescale_q(st->index_entries[idx[i] - 1].timestamp / > + dts = av_rescale_q(st->internal->index_entries[idx[i] - > 1].timestamp / > FFMAX(ast->sample_size, 1), > st->time_base, AV_TIME_BASE_Q); > max_dts = FFMAX(max_dts, dts); > @@ -1700,30 +1700,30 @@ static int guess_ni_flag(AVFormatContext *s) > > for (i = 0; i < s->nb_streams; i++) { > AVStream *st = s->streams[i]; > - int n = st->nb_index_entries; > + int n = st->internal->nb_index_entries; > unsigned int size; > > if (n <= 0) > continue; > > if (n >= 2) { > - int64_t pos = st->index_entries[0].pos; > + int64_t pos = st->internal->index_entries[0].pos; > unsigned tag[2]; > avio_seek(s->pb, pos, SEEK_SET); > tag[0] = avio_r8(s->pb); > tag[1] = avio_r8(s->pb); > avio_rl16(s->pb); > size = avio_rl32(s->pb); > - if (get_stream_idx(tag) == i && pos + size > st- > >index_entries[1].pos) > + if (get_stream_idx(tag) == i && pos + size > st->internal- > >index_entries[1].pos) > last_start = INT64_MAX; > - if (get_stream_idx(tag) == i && size == > st->index_entries[0].size > + 8) > + if (get_stream_idx(tag) == i && size == st->internal- > >index_entries[0].size + 8) > last_start = INT64_MAX; > } > > - if (st->index_entries[0].pos > last_start) > - last_start = st->index_entries[0].pos; > - if (st->index_entries[n - 1].pos < first_end) > - first_end = st->index_entries[n - 1].pos; > + if (st->internal->index_entries[0].pos > last_start) > + last_start = st->internal->index_entries[0].pos; > + if (st->internal->index_entries[n - 1].pos < first_end) > + first_end = st->internal->index_entries[n - 1].pos; > } > avio_seek(s->pb, oldpos, SEEK_SET); > > @@ -1811,20 +1811,20 @@ static int avi_read_seek(AVFormatContext *s, int > stream_index, > timestamp * FFMAX(ast->sample_size, 1), > flags); > if (index < 0) { > - if (st->nb_index_entries > 0) > + if (st->internal->nb_index_entries > 0) > av_log(s, AV_LOG_DEBUG, "Failed to find timestamp %"PRId64 " in > index %"PRId64 " .. %"PRId64 "\n", > timestamp * FFMAX(ast->sample_size, 1), > - st->index_entries[0].timestamp, > - st->index_entries[st->nb_index_entries - 1].timestamp); > + st->internal->index_entries[0].timestamp, > + > st->internal->index_entries[st->internal->nb_index_entries > - 1].timestamp); > return AVERROR_INVALIDDATA; > } > > /* find the position */ > - pos = st->index_entries[index].pos; > - timestamp = st->index_entries[index].timestamp / FFMAX(ast->sample_size, > 1); > + pos = st->internal->index_entries[index].pos; > + timestamp = st->internal->index_entries[index].timestamp / FFMAX(ast- > >sample_size, 1); > > av_log(s, AV_LOG_TRACE, "XX %"PRId64" %d %"PRId64"\n", > - timestamp, index, st->index_entries[index].timestamp); > + timestamp, index, st->internal->index_entries[index].timestamp); > > if (CONFIG_DV_DEMUXER && avi->dv_demux) { > /* One and only one real stream for DV in AVI, and it has video */ > @@ -1855,7 +1855,7 @@ static int avi_read_seek(AVFormatContext *s, int > stream_index, > continue; > } > > - if (st2->nb_index_entries <= 0) > + if (st2->internal->nb_index_entries <= 0) > continue; > > // av_assert1(st2->codecpar->block_align); > @@ -1869,14 +1869,14 @@ static int avi_read_seek(AVFormatContext *s, int > stream_index, > (st2->codecpar->codec_type != > AVMEDIA_TYPE_VIDEO ? AVSEEK_FLAG_ANY : 0)); > if (index < 0) > index = 0; > - ast2->seek_pos = st2->index_entries[index].pos; > + ast2->seek_pos = st2->internal->index_entries[index].pos; > pos_min = FFMIN(pos_min,ast2->seek_pos); > } > for (i = 0; i < s->nb_streams; i++) { > AVStream *st2 = s->streams[i]; > AVIStream *ast2 = st2->priv_data; > > - if (ast2->sub_ctx || st2->nb_index_entries <= 0) > + if (ast2->sub_ctx || st2->internal->nb_index_entries <= 0) > continue; > > index = av_index_search_timestamp( > @@ -1885,9 +1885,9 @@ static int avi_read_seek(AVFormatContext *s, int > stream_index, > flags | AVSEEK_FLAG_BACKWARD | (st2->codecpar->codec_type != > AVMEDIA_TYPE_VIDEO ? AVSEEK_FLAG_ANY : 0)); > if (index < 0) > index = 0; > - while (!avi->non_interleaved && index>0 && st2->index_entries[index- > 1].pos >= pos_min) > + while (!avi->non_interleaved && index>0 && st2->internal- > >index_entries[index-1].pos >= pos_min) > index--; > - ast2->frame_offset = st2->index_entries[index].timestamp; > + ast2->frame_offset = st2->internal->index_entries[index].timestamp; > } > > /* do the seek */ > diff --git a/libavformat/bink.c b/libavformat/bink.c > index 08125ba8f1..99bbd27ef3 100644 > --- a/libavformat/bink.c > +++ b/libavformat/bink.c > @@ -225,8 +225,8 @@ static int read_header(AVFormatContext *s) > return ret; > } > > - if (vst->index_entries) > - avio_seek(pb, vst->index_entries[0].pos + bink->smush_size, > SEEK_SET); > + if (vst->internal->index_entries) > + avio_seek(pb, vst->internal->index_entries[0].pos + > bink->smush_size, > SEEK_SET); > else > avio_skip(pb, 4); > > @@ -256,8 +256,8 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt) > return AVERROR(EIO); > } > > - bink->remain_packet_size = st->index_entries[index_entry].size; > - bink->flags = st->index_entries[index_entry].flags; > + bink->remain_packet_size = st->internal- > >index_entries[index_entry].size; > + bink->flags = st->internal->index_entries[index_entry].flags; > bink->current_track = 0; > } > > @@ -313,7 +313,7 @@ static int read_seek(AVFormatContext *s, int stream_index, > int64_t timestamp, in > return -1; > > /* seek to the first frame */ > - ret = avio_seek(s->pb, vst->index_entries[0].pos + bink->smush_size, > SEEK_SET); > + ret = avio_seek(s->pb, vst->internal->index_entries[0].pos + bink- > >smush_size, SEEK_SET); > if (ret < 0) > return ret; > > diff --git a/libavformat/cafdec.c b/libavformat/cafdec.c > index d0f942f3e4..3bf1fa64bc 100644 > --- a/libavformat/cafdec.c > +++ b/libavformat/cafdec.c > @@ -329,7 +329,7 @@ found_data: > if (caf->bytes_per_packet > 0 && caf->frames_per_packet > 0) { > if (caf->data_size > 0) > st->nb_frames = (caf->data_size / caf->bytes_per_packet) * caf- > >frames_per_packet; > - } else if (st->nb_index_entries && st->duration > 0) { > + } else if (st->internal->nb_index_entries && st->duration > 0) { > if (st->codecpar->sample_rate && caf->data_size / st->duration > > INT64_MAX / st->codecpar->sample_rate / 8) { > av_log(s, AV_LOG_ERROR, "Overflow during bit rate calculation %d > * 8 * %"PRId64"\n", > st->codecpar->sample_rate, caf->data_size / st->duration); > @@ -382,13 +382,13 @@ static int read_packet(AVFormatContext *s, AVPacket > *pkt) > pkt_size = (CAF_MAX_PKT_SIZE / pkt_size) * pkt_size; > pkt_size = FFMIN(pkt_size, left); > pkt_frames = pkt_size / caf->bytes_per_packet; > - } else if (st->nb_index_entries) { > - if (caf->packet_cnt < st->nb_index_entries - 1) { > - pkt_size = st->index_entries[caf->packet_cnt + 1].pos - > st->index_entries[caf->packet_cnt].pos; > - pkt_frames = st->index_entries[caf->packet_cnt + 1].timestamp - > st->index_entries[caf->packet_cnt].timestamp; > - } else if (caf->packet_cnt == st->nb_index_entries - 1) { > - pkt_size = caf->num_bytes - st->index_entries[caf- > >packet_cnt].pos; > - pkt_frames = st->duration - st->index_entries[caf- > >packet_cnt].timestamp; > + } else if (st->internal->nb_index_entries) { > + if (caf->packet_cnt < st->internal->nb_index_entries - 1) { > + pkt_size = st->internal->index_entries[caf->packet_cnt + > 1].pos - st->internal->index_entries[caf->packet_cnt].pos; > + pkt_frames = st->internal->index_entries[caf->packet_cnt + > 1].timestamp - st->internal->index_entries[caf->packet_cnt].timestamp; > + } else if (caf->packet_cnt == st->internal->nb_index_entries - 1) { > + pkt_size = caf->num_bytes - st->internal->index_entries[caf- > >packet_cnt].pos; > + pkt_frames = st->duration - st->internal->index_entries[caf- > >packet_cnt].timestamp; > } else { > return AVERROR(EIO); > } > @@ -427,10 +427,10 @@ static int read_seek(AVFormatContext *s, int > stream_index, > pos = FFMIN(pos, caf->data_size); > packet_cnt = pos / caf->bytes_per_packet; > frame_cnt = caf->frames_per_packet * packet_cnt; > - } else if (st->nb_index_entries) { > + } else if (st->internal->nb_index_entries) { > packet_cnt = av_index_search_timestamp(st, timestamp, flags); > - frame_cnt = st->index_entries[packet_cnt].timestamp; > - pos = st->index_entries[packet_cnt].pos; > + frame_cnt = st->internal->index_entries[packet_cnt].timestamp; > + pos = st->internal->index_entries[packet_cnt].pos; > } else { > return -1; > } > diff --git a/libavformat/cinedec.c b/libavformat/cinedec.c > index 0f2453cdf5..c6c0d927ee 100644 > --- a/libavformat/cinedec.c > +++ b/libavformat/cinedec.c > @@ -291,7 +291,7 @@ static int cine_read_packet(AVFormatContext *avctx, > AVPacket *pkt) > if (cine->pts >= st->duration) > return AVERROR_EOF; > > - avio_seek(pb, st->index_entries[cine->pts].pos, SEEK_SET); > + avio_seek(pb, st->internal->index_entries[cine->pts].pos, SEEK_SET); > n = avio_rl32(pb); > if (n < 8) > return AVERROR_INVALIDDATA; > diff --git a/libavformat/dhav.c b/libavformat/dhav.c > index 5e9abdb611..3e64faf767 100644 > --- a/libavformat/dhav.c > +++ b/libavformat/dhav.c > @@ -441,10 +441,10 @@ static int dhav_read_seek(AVFormatContext *s, int > stream_index, > > if (index < 0) > return -1; > - if (avio_seek(s->pb, st->index_entries[index].pos, SEEK_SET) < 0) > + if (avio_seek(s->pb, st->internal->index_entries[index].pos, SEEK_SET) < > 0) > return -1; > > - pts = st->index_entries[index].timestamp; > + pts = st->internal->index_entries[index].timestamp; > > for (int n = 0; n < s->nb_streams; n++) { > AVStream *st = s->streams[n]; > diff --git a/libavformat/flacdec.c b/libavformat/flacdec.c > index 79c05f14bf..6aca4755a1 100644 > --- a/libavformat/flacdec.c > +++ b/libavformat/flacdec.c > @@ -40,8 +40,8 @@ static void reset_index_position(int64_t metadata_head_size, > AVStream *st) > { > /* the real seek index offset should be the size of metadata blocks with > the offset in the frame blocks */ > int i; > - for(i=0; i<st->nb_index_entries; i++) { > - st->index_entries[i].pos += metadata_head_size; > + for(i=0; i<st->internal->nb_index_entries; i++) { > + st->internal->index_entries[i].pos += metadata_head_size; > } > } > > @@ -319,10 +319,10 @@ static int flac_seek(AVFormatContext *s, int > stream_index, int64_t timestamp, in > } > > index = av_index_search_timestamp(s->streams[0], timestamp, flags); > - if(index<0 || index >= s->streams[0]->nb_index_entries) > + if(index<0 || index >= s->streams[0]->internal->nb_index_entries) > return -1; > > - e = s->streams[0]->index_entries[index]; > + e = s->streams[0]->internal->index_entries[index]; > pos = avio_seek(s->pb, e.pos, SEEK_SET); > if (pos >= 0) { > return 0; > diff --git a/libavformat/flic.c b/libavformat/flic.c > index 4552bff69c..9a7b8081ed 100644 > --- a/libavformat/flic.c > +++ b/libavformat/flic.c > @@ -268,7 +268,7 @@ static int flic_read_seek(AVFormatContext *s, int > stream_index, > int64_t pos, ts; > int index; > > - if (!st->index_entries || stream_index != flic->video_stream_index) > + if (!st->internal->index_entries || stream_index != flic- > >video_stream_index) > return -1; > > index = av_index_search_timestamp(st, pts, flags); > @@ -278,8 +278,8 @@ static int flic_read_seek(AVFormatContext *s, int > stream_index, > if (index < 0) > return -1; > > - pos = st->index_entries[index].pos; > - ts = st->index_entries[index].timestamp; > + pos = st->internal->index_entries[index].pos; > + ts = st->internal->index_entries[index].timestamp; > flic->frame_number = ts; > avio_seek(s->pb, pos, SEEK_SET); > return 0; > diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c > index d480d0bc67..6bddcbb556 100644 > --- a/libavformat/flvdec.c > +++ b/libavformat/flvdec.c > @@ -140,7 +140,7 @@ static void add_keyframes_index(AVFormatContext *s) > av_assert0(flv->last_keyframe_stream_index <= s->nb_streams); > stream = s->streams[flv->last_keyframe_stream_index]; > > - if (stream->nb_index_entries == 0) { > + if (stream->internal->nb_index_entries == 0) { > for (i = 0; i < flv->keyframe_count; i++) { > av_log(s, AV_LOG_TRACE, "keyframe filepositions = %"PRId64" times > = %"PRId64"\n", > flv->keyframe_filepositions[i], flv->keyframe_times[i] * > 1000); > @@ -828,10 +828,10 @@ static void clear_index_entries(AVFormatContext *s, > int64_t pos) > AVStream *st = s->streams[i]; > /* Remove all index entries that point to >= pos */ > out = 0; > - for (j = 0; j < st->nb_index_entries; j++) > - if (st->index_entries[j].pos < pos) > - st->index_entries[out++] = st->index_entries[j]; > - st->nb_index_entries = out; > + for (j = 0; j < st->internal->nb_index_entries; j++) > + if (st->internal->index_entries[j].pos < pos) > + st->internal->index_entries[out++] = st->internal- > >index_entries[j]; > + st->internal->nb_index_entries = out; > } > } > > diff --git a/libavformat/gxf.c b/libavformat/gxf.c > index 49364b7205..96b7035386 100644 > --- a/libavformat/gxf.c > +++ b/libavformat/gxf.c > @@ -572,9 +572,9 @@ static int gxf_seek(AVFormatContext *s, int stream_index, > int64_t timestamp, int > AVSEEK_FLAG_ANY | AVSEEK_FLAG_BACKWARD); > if (idx < 0) > return -1; > - pos = st->index_entries[idx].pos; > - if (idx < st->nb_index_entries - 2) > - maxlen = st->index_entries[idx + 2].pos - pos; > + pos = st->internal->index_entries[idx].pos; > + if (idx < st->internal->nb_index_entries - 2) > + maxlen = st->internal->index_entries[idx + 2].pos - pos; > maxlen = FFMAX(maxlen, 200 * 1024); > res = avio_seek(s->pb, pos, SEEK_SET); > if (res < 0) > diff --git a/libavformat/ifv.c b/libavformat/ifv.c > index f95e9b0e52..e21628f180 100644 > --- a/libavformat/ifv.c > +++ b/libavformat/ifv.c > @@ -195,15 +195,15 @@ static int ifv_read_packet(AVFormatContext *s, AVPacket > *pkt) > > if (ifv->next_video_index < ifv->total_vframes) { > st = s->streams[ifv->video_stream_index]; > - if (ifv->next_video_index < st->nb_index_entries) > - e_next = ev = &st->index_entries[ifv->next_video_index]; > + if (ifv->next_video_index < st->internal->nb_index_entries) > + e_next = ev = &st->internal->index_entries[ifv- > >next_video_index]; > } > > if (ifv->is_audio_present && > ifv->next_audio_index < ifv->total_aframes) { > st = s->streams[ifv->audio_stream_index]; > - if (ifv->next_audio_index < st->nb_index_entries) { > - ea = &st->index_entries[ifv->next_audio_index]; > + if (ifv->next_audio_index < st->internal->nb_index_entries) { > + ea = &st->internal->index_entries[ifv->next_audio_index]; > if (!ev || ea->timestamp < ev->timestamp) > e_next = ea; > } > diff --git a/libavformat/img2dec.c b/libavformat/img2dec.c > index 9a3c9fad02..3f217d5916 100644 > --- a/libavformat/img2dec.c > +++ b/libavformat/img2dec.c > @@ -587,7 +587,7 @@ static int img_read_seek(AVFormatContext *s, int > stream_index, int64_t timestamp > int index = av_index_search_timestamp(st, timestamp, flags); > if(index < 0) > return -1; > - s1->img_number = st->index_entries[index].pos; > + s1->img_number = st->internal->index_entries[index].pos; > return 0; > } > > diff --git a/libavformat/internal.h b/libavformat/internal.h > index 87d62c51b2..ce79da8000 100644 > --- a/libavformat/internal.h > +++ b/libavformat/internal.h > @@ -225,6 +225,11 @@ struct AVStreamInternal { > > } *info; > > + AVIndexEntry *index_entries; /**< Only used if the format does not > + support seeking natively. */ > + int nb_index_entries; > + unsigned int index_entries_allocated_size; > + > int64_t interleaver_chunk_size; > int64_t interleaver_chunk_duration; > > diff --git a/libavformat/jvdec.c b/libavformat/jvdec.c > index 551f8069e6..47d18e2beb 100644 > --- a/libavformat/jvdec.c > +++ b/libavformat/jvdec.c > @@ -92,7 +92,7 @@ static int read_header(AVFormatContext *s) > vst->codecpar->height = avio_rl16(pb); > vst->duration = > vst->nb_frames = > - ast->nb_index_entries = avio_rl16(pb); > + ast->internal->nb_index_entries = avio_rl16(pb); > avpriv_set_pts_info(vst, 64, avio_rl16(pb), 1000); > > avio_skip(pb, 4); > @@ -107,19 +107,19 @@ static int read_header(AVFormatContext *s) > > avio_skip(pb, 10); > > - ast->index_entries = av_malloc(ast->nb_index_entries * > - sizeof(*ast->index_entries)); > - if (!ast->index_entries) > + ast->internal->index_entries = av_malloc(ast->internal->nb_index_entries > * > + sizeof(*ast->internal->index_entries)); > + if (!ast->internal->index_entries) > return AVERROR(ENOMEM); > > - jv->frames = av_malloc(ast->nb_index_entries * sizeof(JVFrame)); > + jv->frames = av_malloc(ast->internal->nb_index_entries * > sizeof(JVFrame)); > if (!jv->frames) { > - av_freep(&ast->index_entries); > + av_freep(&ast->internal->index_entries); > return AVERROR(ENOMEM); > } > - offset = 0x68 + ast->nb_index_entries * 16; > - for (i = 0; i < ast->nb_index_entries; i++) { > - AVIndexEntry *e = ast->index_entries + i; > + offset = 0x68 + ast->internal->nb_index_entries * 16; > + for (i = 0; i < ast->internal->nb_index_entries; i++) { > + AVIndexEntry *e = ast->internal->index_entries + i; > JVFrame *jvf = jv->frames + i; > > /* total frame size including audio, video, palette data and padding > */ > @@ -139,7 +139,7 @@ static int read_header(AVFormatContext *s) > if (s->error_recognition & AV_EF_EXPLODE) { > read_close(s); > av_freep(&jv->frames); > - av_freep(&ast->index_entries); > + av_freep(&ast->internal->index_entries); > return AVERROR_INVALIDDATA; > } > jvf->audio_size = > @@ -170,8 +170,8 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt) > AVStream *ast = s->streams[0]; > int ret; > > - while (!avio_feof(s->pb) && jv->pts < ast->nb_index_entries) { > - const AVIndexEntry *e = ast->index_entries + jv->pts; > + while (!avio_feof(s->pb) && jv->pts < ast->internal->nb_index_entries) { > + const AVIndexEntry *e = ast->internal->index_entries + jv->pts; > const JVFrame *jvf = jv->frames + jv->pts; > > switch (jv->state) { > @@ -244,9 +244,9 @@ static int read_seek(AVFormatContext *s, int stream_index, > return 0; > } > > - if (i < 0 || i >= ast->nb_index_entries) > + if (i < 0 || i >= ast->internal->nb_index_entries) > return 0; > - if (avio_seek(s->pb, ast->index_entries[i].pos, SEEK_SET) < 0) > + if (avio_seek(s->pb, ast->internal->index_entries[i].pos, SEEK_SET) < 0) > return -1; > > jv->state = JV_AUDIO; > diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c > index a183026359..981e044263 100644 > --- a/libavformat/matroskadec.c > +++ b/libavformat/matroskadec.c > @@ -3766,13 +3766,13 @@ static int matroska_read_seek(AVFormatContext *s, int > stream_index, > matroska_parse_cues(matroska); > } > > - if (!st->nb_index_entries) > + if (!st->internal->nb_index_entries) > goto err; > - timestamp = FFMAX(timestamp, st->index_entries[0].timestamp); > + timestamp = FFMAX(timestamp, st->internal->index_entries[0].timestamp); > > - if ((index = av_index_search_timestamp(st, timestamp, flags)) < 0 || > index == st->nb_index_entries - 1) { > - matroska_reset_status(matroska, 0, st->index_entries[st- > >nb_index_entries - 1].pos); > - while ((index = av_index_search_timestamp(st, timestamp, flags)) < 0 > || index == st->nb_index_entries - 1) { > + if ((index = av_index_search_timestamp(st, timestamp, flags)) < 0 || > index == st->internal->nb_index_entries - 1) { > + matroska_reset_status(matroska, 0, st->internal->index_entries[st- > >internal->nb_index_entries - 1].pos); > + while ((index = av_index_search_timestamp(st, timestamp, flags)) < 0 > || index == st->internal->nb_index_entries - 1) { > matroska_clear_queue(matroska); > if (matroska_parse_cluster(matroska) < 0) > break; > @@ -3780,7 +3780,7 @@ static int matroska_read_seek(AVFormatContext *s, int > stream_index, > } > > matroska_clear_queue(matroska); > - if (index < 0 || (matroska->cues_parsing_deferred < 0 && index == st- > >nb_index_entries - 1)) > + if (index < 0 || (matroska->cues_parsing_deferred < 0 && index == st- > >internal->nb_index_entries - 1)) > goto err; > > tracks = matroska->tracks.elem; > @@ -3792,17 +3792,17 @@ static int matroska_read_seek(AVFormatContext *s, int > stream_index, > } > > /* We seek to a level 1 element, so set the appropriate status. */ > - matroska_reset_status(matroska, 0, st->index_entries[index].pos); > + matroska_reset_status(matroska, 0, st->internal- > >index_entries[index].pos); > if (flags & AVSEEK_FLAG_ANY) { > st->internal->skip_to_keyframe = 0; > matroska->skip_to_timecode = timestamp; > } else { > st->internal->skip_to_keyframe = 1; > - matroska->skip_to_timecode = st->index_entries[index].timestamp; > + matroska->skip_to_timecode = st->internal- > >index_entries[index].timestamp; > } > matroska->skip_to_keyframe = 1; > matroska->done = 0; > - ff_update_cur_dts(s, st, st->index_entries[index].timestamp); > + ff_update_cur_dts(s, st, st->internal->index_entries[index].timestamp); > return 0; > err: > // slightly hackish but allows proper fallback to > @@ -3847,8 +3847,8 @@ static CueDesc get_cue_desc(AVFormatContext *s, int64_t > ts, int64_t cues_start) > MatroskaDemuxContext *matroska = s->priv_data; > CueDesc cue_desc; > int i; > - int nb_index_entries = s->streams[0]->nb_index_entries; > - AVIndexEntry *index_entries = s->streams[0]->index_entries; > + int nb_index_entries = s->streams[0]->internal->nb_index_entries; > + AVIndexEntry *index_entries = s->streams[0]->internal->index_entries; > if (ts >= matroska->duration * matroska->time_scale) return (CueDesc) {- > 1, -1, -1, -1}; > for (i = 1; i < nb_index_entries; i++) { > if (index_entries[i - 1].timestamp * matroska->time_scale <= ts && > @@ -3878,11 +3878,11 @@ static int > webm_clusters_start_with_keyframe(AVFormatContext *s) > uint32_t id = matroska->current_id; > int64_t cluster_pos, before_pos; > int index, rv = 1; > - if (s->streams[0]->nb_index_entries <= 0) return 0; > + if (s->streams[0]->internal->nb_index_entries <= 0) return 0; > // seek to the first cluster using cues. > index = av_index_search_timestamp(s->streams[0], 0, 0); > if (index < 0) return 0; > - cluster_pos = s->streams[0]->index_entries[index].pos; > + cluster_pos = s->streams[0]->internal->index_entries[index].pos; > before_pos = avio_tell(s->pb); > while (1) { > uint64_t cluster_id, cluster_length; > @@ -4006,9 +4006,9 @@ static int64_t > webm_dash_manifest_compute_bandwidth(AVFormatContext *s, int64_t > double bandwidth = 0.0; > int i; > > - for (i = 0; i < st->nb_index_entries; i++) { > + for (i = 0; i < st->internal->nb_index_entries; i++) { > int64_t prebuffer_ns = 1000000000; > - int64_t time_ns = st->index_entries[i].timestamp * matroska- > >time_scale; > + int64_t time_ns = st->internal->index_entries[i].timestamp * > matroska->time_scale; > double nano_seconds_per_second = 1000000000.0; > int64_t prebuffered_ns = time_ns + prebuffer_ns; > double prebuffer_bytes = 0.0; > @@ -4146,14 +4146,14 @@ static int webm_dash_manifest_cues(AVFormatContext *s, > int64_t init_range) > > // store cue point timestamps as a comma separated list for checking > subsegment alignment in > // the muxer. assumes that each timestamp cannot be more than 20 > characters long. > - buf = av_malloc_array(s->streams[0]->nb_index_entries, 20); > + buf = av_malloc_array(s->streams[0]->internal->nb_index_entries, 20); > if (!buf) return -1; > strcpy(buf, ""); > - for (i = 0; i < s->streams[0]->nb_index_entries; i++) { > + for (i = 0; i < s->streams[0]->internal->nb_index_entries; i++) { > int ret = snprintf(buf + end, 20, > - "%" PRId64"%s", s->streams[0]- > >index_entries[i].timestamp, > - i != s->streams[0]->nb_index_entries - 1 ? "," : > ""); > - if (ret <= 0 || (ret == 20 && i == s->streams[0]->nb_index_entries - > 1)) { > + "%" PRId64"%s", s->streams[0]->internal- > >index_entries[i].timestamp, > + i != s->streams[0]->internal->nb_index_entries - 1 > ? "," : ""); > + if (ret <= 0 || (ret == 20 && i == s->streams[0]->internal- > >nb_index_entries - 1)) { > av_log(s, AV_LOG_ERROR, "timestamp too long.\n"); > av_free(buf); > return AVERROR_INVALIDDATA; > diff --git a/libavformat/mlvdec.c b/libavformat/mlvdec.c > index f08aabf4e0..1ddef3461e 100644 > --- a/libavformat/mlvdec.c > +++ b/libavformat/mlvdec.c > @@ -191,12 +191,12 @@ static int scan_file(AVFormatContext *avctx, AVStream > *vst, AVStream *ast, int f > } > } else if (vst && type == MKTAG('V', 'I', 'D', 'F') && size >= 4) { > uint64_t pts = avio_rl32(pb); > - ff_add_index_entry(&vst->index_entries, &vst->nb_index_entries, > &vst->index_entries_allocated_size, > + ff_add_index_entry(&vst->internal->index_entries, &vst->internal- > >nb_index_entries, &vst->internal->index_entries_allocated_size, > avio_tell(pb) - 20, pts, file, 0, > AVINDEX_KEYFRAME); > size -= 4; > } else if (ast && type == MKTAG('A', 'U', 'D', 'F') && size >= 4) { > uint64_t pts = avio_rl32(pb); > - ff_add_index_entry(&ast->index_entries, &ast->nb_index_entries, > &ast->index_entries_allocated_size, > + ff_add_index_entry(&ast->internal->index_entries, &ast->internal- > >nb_index_entries, &ast->internal->index_entries_allocated_size, > avio_tell(pb) - 20, pts, file, 0, > AVINDEX_KEYFRAME); > size -= 4; > } else if (vst && type == MKTAG('W','B','A','L') && size >= 28) { > @@ -374,22 +374,22 @@ static int read_header(AVFormatContext *avctx) > } > > if (vst) > - vst->duration = vst->nb_index_entries; > + vst->duration = vst->internal->nb_index_entries; > if (ast) > - ast->duration = ast->nb_index_entries; > + ast->duration = ast->internal->nb_index_entries; > > - if ((vst && !vst->nb_index_entries) || (ast && !ast->nb_index_entries)) { > + if ((vst && !vst->internal->nb_index_entries) || (ast && !ast->internal- > >nb_index_entries)) { > av_log(avctx, AV_LOG_ERROR, "no index entries found\n"); > read_close(avctx); > return AVERROR_INVALIDDATA; > } > > if (vst && ast) > - avio_seek(pb, FFMIN(vst->index_entries[0].pos, ast- > >index_entries[0].pos), SEEK_SET); > + avio_seek(pb, FFMIN(vst->internal->index_entries[0].pos, ast- > >internal->index_entries[0].pos), SEEK_SET); > else if (vst) > - avio_seek(pb, vst->index_entries[0].pos, SEEK_SET); > + avio_seek(pb, vst->internal->index_entries[0].pos, SEEK_SET); > else if (ast) > - avio_seek(pb, ast->index_entries[0].pos, SEEK_SET); > + avio_seek(pb, ast->internal->index_entries[0].pos, SEEK_SET); > > return 0; > } > @@ -415,12 +415,12 @@ static int read_packet(AVFormatContext *avctx, AVPacket > *pkt) > return AVERROR(EIO); > } > > - pb = mlv->pb[st->index_entries[index].size]; > + pb = mlv->pb[st->internal->index_entries[index].size]; > if (!pb) { > ret = FFERROR_REDO; > goto next_packet; > } > - avio_seek(pb, st->index_entries[index].pos, SEEK_SET); > + avio_seek(pb, st->internal->index_entries[index].pos, SEEK_SET); > > avio_skip(pb, 4); // blockType > size = avio_rl32(pb); > diff --git a/libavformat/mov.c b/libavformat/mov.c > index 6103678cdb..57ac212146 100644 > --- a/libavformat/mov.c > +++ b/libavformat/mov.c > @@ -3179,8 +3179,8 @@ static int find_prev_closest_index(AVStream *st, > int64_t* ctts_sample) > { > MOVStreamContext *msc = st->priv_data; > - AVIndexEntry *e_keep = st->index_entries; > - int nb_keep = st->nb_index_entries; > + AVIndexEntry *e_keep = st->internal->index_entries; > + int nb_keep = st->internal->nb_index_entries; > int64_t i = 0; > int64_t index_ctts_count; > > @@ -3193,8 +3193,8 @@ static int find_prev_closest_index(AVStream *st, > timestamp_pts -= msc->dts_shift; > } > > - st->index_entries = e_old; > - st->nb_index_entries = nb_old; > + st->internal->index_entries = e_old; > + st->internal->nb_index_entries = nb_old; > *index = av_index_search_timestamp(st, timestamp_pts, flag | > AVSEEK_FLAG_BACKWARD); > > // Keep going backwards in the index entries until the timestamp is the > same. > @@ -3247,14 +3247,14 @@ static int find_prev_closest_index(AVStream *st, > } > > /* restore AVStream state*/ > - st->index_entries = e_keep; > - st->nb_index_entries = nb_keep; > + st->internal->index_entries = e_keep; > + st->internal->nb_index_entries = nb_keep; > return *index >= 0 ? 0 : -1; > } > > /** > - * Add index entry with the given values, to the end of st->index_entries. > - * Returns the new size st->index_entries if successful, else returns -1. > + * Add index entry with the given values, to the end of st->internal- > >index_entries. > + * Returns the new size st->internal->index_entries if successful, else > returns -1. > * > * This function is similar to ff_add_index_entry in libavformat/utils.c > * except that here we are always unconditionally adding an index entry to > @@ -3268,27 +3268,27 @@ static int64_t add_index_entry(AVStream *st, int64_t > pos, int64_t timestamp, > { > AVIndexEntry *entries, *ie; > int64_t index = -1; > - const size_t min_size_needed = (st->nb_index_entries + 1) * > sizeof(AVIndexEntry); > + const size_t min_size_needed = (st->internal->nb_index_entries + 1) * > sizeof(AVIndexEntry); > > // Double the allocation each time, to lower memory fragmentation. > // Another difference from ff_add_index_entry function. > const size_t requested_size = > - min_size_needed > st->index_entries_allocated_size ? > - FFMAX(min_size_needed, 2 * st->index_entries_allocated_size) : > + min_size_needed > st->internal->index_entries_allocated_size ? > + FFMAX(min_size_needed, 2 * st->internal- > >index_entries_allocated_size) : > min_size_needed; > > - if (st->nb_index_entries + 1U >= UINT_MAX / sizeof(AVIndexEntry)) > + if (st->internal->nb_index_entries + 1U >= UINT_MAX / > sizeof(AVIndexEntry)) > return -1; > > - entries = av_fast_realloc(st->index_entries, > - &st->index_entries_allocated_size, > + entries = av_fast_realloc(st->internal->index_entries, > + &st->internal->index_entries_allocated_size, > requested_size); > if (!entries) > return -1; > > - st->index_entries= entries; > + st->internal->index_entries= entries; > > - index= st->nb_index_entries++; > + index= st->internal->nb_index_entries++; > ie= &entries[index]; > > ie->pos = pos; > @@ -3307,10 +3307,10 @@ static void fix_index_entry_timestamps(AVStream* st, > int end_index, int64_t end_ > int64_t* frame_duration_buffer, > int frame_duration_buffer_size) { > int i = 0; > - av_assert0(end_index >= 0 && end_index <= st->nb_index_entries); > + av_assert0(end_index >= 0 && end_index <= st->internal- > >nb_index_entries); > for (i = 0; i < frame_duration_buffer_size; i++) { > end_ts -= frame_duration_buffer[frame_duration_buffer_size - 1 - i]; > - st->index_entries[end_index - 1 - i].timestamp = end_ts; > + st->internal->index_entries[end_index - 1 - i].timestamp = end_ts; > } > } > > @@ -3362,14 +3362,14 @@ static void mov_estimate_video_delay(MOVContext *c, > AVStream* st) > if (st->codecpar->video_delay <= 0 && msc->ctts_data && > st->codecpar->codec_id == AV_CODEC_ID_H264) { > st->codecpar->video_delay = 0; > - for (ind = 0; ind < st->nb_index_entries && ctts_ind < msc- > >ctts_count; ++ind) { > + for (ind = 0; ind < st->internal->nb_index_entries && ctts_ind < msc- > >ctts_count; ++ind) { > // Point j to the last elem of the buffer and insert the current > pts there. > j = buf_start; > buf_start = (buf_start + 1); > if (buf_start == MAX_REORDER_DELAY + 1) > buf_start = 0; > > - pts_buf[j] = st->index_entries[ind].timestamp + msc- > >ctts_data[ctts_ind].duration; > + pts_buf[j] = st->internal->index_entries[ind].timestamp + msc- > >ctts_data[ctts_ind].duration; > > // The timestamps that are already in the sorted buffer, and are > greater than the > // current pts, are exactly the timestamps that need to be > buffered to output PTS > @@ -3449,7 +3449,7 @@ static void mov_current_sample_set(MOVStreamContext *sc, > int current_sample) > } > > /** > - * Fix st->index_entries, so that it contains only the entries (and the > entries > + * Fix st->internal->index_entries, so that it contains only the entries (and > the entries > * which are needed to decode them) that fall in the edit list time ranges. > * Also fixes the timestamps of the index entries to match the timeline > * specified the edit lists. > @@ -3457,8 +3457,8 @@ static void mov_current_sample_set(MOVStreamContext *sc, > int current_sample) > static void mov_fix_index(MOVContext *mov, AVStream *st) > { > MOVStreamContext *msc = st->priv_data; > - AVIndexEntry *e_old = st->index_entries; > - int nb_old = st->nb_index_entries; > + AVIndexEntry *e_old = st->internal->index_entries; > + int nb_old = st->internal->nb_index_entries; > const AVIndexEntry *e_old_end = e_old + nb_old; > const AVIndexEntry *current = NULL; > MOVStts *ctts_data_old = msc->ctts_data; > @@ -3503,9 +3503,9 @@ static void mov_fix_index(MOVContext *mov, AVStream *st) > current_index_range = msc->index_ranges - 1; > > // Clean AVStream from traces of old index > - st->index_entries = NULL; > - st->index_entries_allocated_size = 0; > - st->nb_index_entries = 0; > + st->internal->index_entries = NULL; > + st->internal->index_entries_allocated_size = 0; > + st->internal->nb_index_entries = 0; > > // Clean ctts fields of MOVStreamContext > msc->ctts_data = NULL; > @@ -3634,7 +3634,7 @@ static void mov_fix_index(MOVContext *mov, AVStream *st) > // Make timestamps strictly monotonically increasing > for audio, by rewriting timestamps for > // discarded packets. > if (frame_duration_buffer) { > - fix_index_entry_timestamps(st, st- > >nb_index_entries, edit_list_dts_counter, > + fix_index_entry_timestamps(st, st->internal- > >nb_index_entries, edit_list_dts_counter, > frame_duration_buffer, > num_discarded_begin); > av_freep(&frame_duration_buffer); > } > @@ -3673,7 +3673,7 @@ static void mov_fix_index(MOVContext *mov, AVStream *st) > // Make timestamps strictly monotonically increasing by > rewriting timestamps for > // discarded packets. > if (frame_duration_buffer) { > - fix_index_entry_timestamps(st, st->nb_index_entries, > edit_list_dts_counter, > + fix_index_entry_timestamps(st, st->internal- > >nb_index_entries, edit_list_dts_counter, > frame_duration_buffer, > num_discarded_begin); > av_freep(&frame_duration_buffer); > } > @@ -3734,8 +3734,8 @@ static void mov_fix_index(MOVContext *mov, AVStream *st) > if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { > if (msc->min_corrected_pts > 0) { > av_log(mov->fc, AV_LOG_DEBUG, "Offset DTS by %"PRId64" to make > first pts zero.\n", msc->min_corrected_pts); > - for (i = 0; i < st->nb_index_entries; ++i) { > - st->index_entries[i].timestamp -= msc->min_corrected_pts; > + for (i = 0; i < st->internal->nb_index_entries; ++i) { > + st->internal->index_entries[i].timestamp -= msc- > >min_corrected_pts; > } > } > } > @@ -3828,17 +3828,17 @@ static void mov_build_index(MOVContext *mov, AVStream > *st) > current_dts -= sc->dts_shift; > last_dts = current_dts; > > - if (!sc->sample_count || st->nb_index_entries) > + if (!sc->sample_count || st->internal->nb_index_entries) > return; > - if (sc->sample_count >= UINT_MAX / sizeof(*st->index_entries) - st- > >nb_index_entries) > + if (sc->sample_count >= UINT_MAX / sizeof(*st->internal- > >index_entries) - st->internal->nb_index_entries) > return; > - if (av_reallocp_array(&st->index_entries, > - st->nb_index_entries + sc->sample_count, > - sizeof(*st->index_entries)) < 0) { > - st->nb_index_entries = 0; > + if (av_reallocp_array(&st->internal->index_entries, > + st->internal->nb_index_entries + sc- > >sample_count, > + sizeof(*st->internal->index_entries)) < 0) { > + st->internal->nb_index_entries = 0; > return; > } > - st->index_entries_allocated_size = (st->nb_index_entries + sc- > >sample_count) * sizeof(*st->index_entries); > + st->internal->index_entries_allocated_size = (st->internal- > >nb_index_entries + sc->sample_count) * sizeof(*st->internal->index_entries); > > if (ctts_data_old) { > // Expand ctts entries such that we have a 1-1 mapping with > samples > @@ -3921,7 +3921,7 @@ static void mov_build_index(MOVContext *mov, AVStream > *st) > av_log(mov->fc, AV_LOG_ERROR, "Sample size %u is too > large\n", sample_size); > return; > } > - e = &st->index_entries[st->nb_index_entries++]; > + e = &st->internal->index_entries[st->internal- > >nb_index_entries++]; > e->pos = current_offset; > e->timestamp = current_dts; > e->size = sample_size; > @@ -3930,7 +3930,7 @@ static void mov_build_index(MOVContext *mov, AVStream > *st) > av_log(mov->fc, AV_LOG_TRACE, "AVIndex stream %d, sample > %u, offset %"PRIx64", dts %"PRId64", " > "size %u, distance %u, keyframe %d\n", > st->index, > current_sample, > current_offset, current_dts, sample_size, > distance, keyframe); > - if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && st- > >nb_index_entries < 100) > + if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && st- > >internal->nb_index_entries < 100) > ff_rfps_add_frame(mov->fc, st, current_dts); > } > > @@ -4002,15 +4002,15 @@ static void mov_build_index(MOVContext *mov, AVStream > *st) > } > > av_log(mov->fc, AV_LOG_TRACE, "chunk count %u\n", total); > - if (total >= UINT_MAX / sizeof(*st->index_entries) - st- > >nb_index_entries) > + if (total >= UINT_MAX / sizeof(*st->internal->index_entries) - st- > >internal->nb_index_entries) > return; > - if (av_reallocp_array(&st->index_entries, > - st->nb_index_entries + total, > - sizeof(*st->index_entries)) < 0) { > - st->nb_index_entries = 0; > + if (av_reallocp_array(&st->internal->index_entries, > + st->internal->nb_index_entries + total, > + sizeof(*st->internal->index_entries)) < 0) { > + st->internal->nb_index_entries = 0; > return; > } > - st->index_entries_allocated_size = (st->nb_index_entries + total) * > sizeof(*st->index_entries); > + st->internal->index_entries_allocated_size = (st->internal- > >nb_index_entries + total) * sizeof(*st->internal->index_entries); > > // populate index > for (i = 0; i < sc->chunk_count; i++) { > @@ -4045,7 +4045,7 @@ static void mov_build_index(MOVContext *mov, AVStream > *st) > } > } > > - if (st->nb_index_entries >= total) { > + if (st->internal->nb_index_entries >= total) { > av_log(mov->fc, AV_LOG_ERROR, "wrong chunk count %u\n", > total); > return; > } > @@ -4053,7 +4053,7 @@ static void mov_build_index(MOVContext *mov, AVStream > *st) > av_log(mov->fc, AV_LOG_ERROR, "Sample size %u is too > large\n", size); > return; > } > - e = &st->index_entries[st->nb_index_entries++]; > + e = &st->internal->index_entries[st->internal- > >nb_index_entries++]; > e->pos = current_offset; > e->timestamp = current_dts; > e->size = size; > @@ -4076,8 +4076,8 @@ static void mov_build_index(MOVContext *mov, AVStream > *st) > } > > // Update start time of the stream. > - if (st->start_time == AV_NOPTS_VALUE && st->codecpar->codec_type == > AVMEDIA_TYPE_VIDEO && st->nb_index_entries > 0) { > - st->start_time = st->index_entries[0].timestamp + sc->dts_shift; > + if (st->start_time == AV_NOPTS_VALUE && st->codecpar->codec_type == > AVMEDIA_TYPE_VIDEO && st->internal->nb_index_entries > 0) { > + st->start_time = st->internal->index_entries[0].timestamp + sc- > >dts_shift; > if (sc->ctts_data) { > st->start_time += sc->ctts_data[0].duration; > } > @@ -4775,7 +4775,7 @@ static int mov_read_trun(MOVContext *c, AVIOContext *pb, > MOVAtom atom) > // A valid index_entry means the trun for the fragment was read > // and it's samples are in index_entries at the given position. > // New index entries will be inserted before the index_entry found. > - index_entry_pos = st->nb_index_entries; > + index_entry_pos = st->internal->nb_index_entries; > for (i = c->frag_index.current + 1; i < c->frag_index.nb_items; i++) { > frag_stream_info = get_frag_stream_info(&c->frag_index, i, frag- > >track_id); > if (frag_stream_info && frag_stream_info->index_entry >= 0) { > @@ -4784,7 +4784,7 @@ static int mov_read_trun(MOVContext *c, AVIOContext *pb, > MOVAtom atom) > break; > } > } > - av_assert0(index_entry_pos <= st->nb_index_entries); > + av_assert0(index_entry_pos <= st->internal->nb_index_entries); > > avio_r8(pb); /* version */ > flags = avio_rb24(pb); > @@ -4835,22 +4835,22 @@ static int mov_read_trun(MOVContext *c, AVIOContext > *pb, MOVAtom atom) > av_log(c->fc, AV_LOG_TRACE, "first sample flags 0x%x\n", > first_sample_flags); > > // realloc space for new index entries > - if((uint64_t)st->nb_index_entries + entries >= UINT_MAX / > sizeof(AVIndexEntry)) { > - entries = UINT_MAX / sizeof(AVIndexEntry) - st->nb_index_entries; > + if((uint64_t)st->internal->nb_index_entries + entries >= UINT_MAX / > sizeof(AVIndexEntry)) { > + entries = UINT_MAX / sizeof(AVIndexEntry) - st->internal- > >nb_index_entries; > av_log(c->fc, AV_LOG_ERROR, "Failed to add index entry\n"); > } > if (entries == 0) > return 0; > > - requested_size = (st->nb_index_entries + entries) * sizeof(AVIndexEntry); > - new_entries = av_fast_realloc(st->index_entries, > - &st->index_entries_allocated_size, > + requested_size = (st->internal->nb_index_entries + entries) * > sizeof(AVIndexEntry); > + new_entries = av_fast_realloc(st->internal->index_entries, > + &st->internal- > >index_entries_allocated_size, > requested_size); > if (!new_entries) > return AVERROR(ENOMEM); > - st->index_entries= new_entries; > + st->internal->index_entries= new_entries; > > - requested_size = (st->nb_index_entries + entries) * sizeof(*sc- > >ctts_data); > + requested_size = (st->internal->nb_index_entries + entries) * sizeof(*sc- > >ctts_data); > old_ctts_allocated_size = sc->ctts_allocated_size; > ctts_data = av_fast_realloc(sc->ctts_data, &sc->ctts_allocated_size, > requested_size); > @@ -4864,12 +4864,12 @@ static int mov_read_trun(MOVContext *c, AVIOContext > *pb, MOVAtom atom) > memset((uint8_t*)(sc->ctts_data) + old_ctts_allocated_size, 0, > sc->ctts_allocated_size - old_ctts_allocated_size); > > - if (index_entry_pos < st->nb_index_entries) { > + if (index_entry_pos < st->internal->nb_index_entries) { > // Make hole in index_entries and ctts_data for new samples > - memmove(st->index_entries + index_entry_pos + entries, > - st->index_entries + index_entry_pos, > - sizeof(*st->index_entries) * > - (st->nb_index_entries - index_entry_pos)); > + memmove(st->internal->index_entries + index_entry_pos + entries, > + st->internal->index_entries + index_entry_pos, > + sizeof(*st->internal->index_entries) * > + (st->internal->nb_index_entries - index_entry_pos)); > memmove(sc->ctts_data + index_entry_pos + entries, > sc->ctts_data + index_entry_pos, > sizeof(*sc->ctts_data) * (sc->ctts_count - index_entry_pos)); > @@ -4878,15 +4878,15 @@ static int mov_read_trun(MOVContext *c, AVIOContext > *pb, MOVAtom atom) > } > } > > - st->nb_index_entries += entries; > - sc->ctts_count = st->nb_index_entries; > + st->internal->nb_index_entries += entries; > + sc->ctts_count = st->internal->nb_index_entries; > > // Record the index_entry position in frag_index of this fragment > if (frag_stream_info) > frag_stream_info->index_entry = index_entry_pos; > > if (index_entry_pos > 0) > - prev_dts = st->index_entries[index_entry_pos-1].timestamp; > + prev_dts = st->internal->index_entries[index_entry_pos-1].timestamp; > > for (i = 0; i < entries && !pb->eof_reached; i++) { > unsigned sample_size = frag->size; > @@ -4935,11 +4935,11 @@ static int mov_read_trun(MOVContext *c, AVIOContext > *pb, MOVAtom atom) > if (prev_dts >= dts) > index_entry_flags |= AVINDEX_DISCARD_FRAME; > > - st->index_entries[index_entry_pos].pos = offset; > - st->index_entries[index_entry_pos].timestamp = dts; > - st->index_entries[index_entry_pos].size= sample_size; > - st->index_entries[index_entry_pos].min_distance= distance; > - st->index_entries[index_entry_pos].flags = index_entry_flags; > + st->internal->index_entries[index_entry_pos].pos = offset; > + st->internal->index_entries[index_entry_pos].timestamp = dts; > + st->internal->index_entries[index_entry_pos].size= sample_size; > + st->internal->index_entries[index_entry_pos].min_distance= distance; > + st->internal->index_entries[index_entry_pos].flags = > index_entry_flags; > > sc->ctts_data[index_entry_pos].count = 1; > sc->ctts_data[index_entry_pos].duration = ctts_duration; > @@ -4966,16 +4966,16 @@ static int mov_read_trun(MOVContext *c, AVIOContext > *pb, MOVAtom atom) > // EOF found before reading all entries. Fix the hole this would > // leave in index_entries and ctts_data > int gap = entries - i; > - memmove(st->index_entries + index_entry_pos, > - st->index_entries + index_entry_pos + gap, > - sizeof(*st->index_entries) * > - (st->nb_index_entries - (index_entry_pos + gap))); > + memmove(st->internal->index_entries + index_entry_pos, > + st->internal->index_entries + index_entry_pos + gap, > + sizeof(*st->internal->index_entries) * > + (st->internal->nb_index_entries - (index_entry_pos + gap))); > memmove(sc->ctts_data + index_entry_pos, > sc->ctts_data + index_entry_pos + gap, > sizeof(*sc->ctts_data) * > (sc->ctts_count - (index_entry_pos + gap))); > > - st->nb_index_entries -= gap; > + st->internal->nb_index_entries -= gap; > sc->ctts_count -= gap; > if (index_entry_pos < sc->current_sample) { > sc->current_sample -= gap; > @@ -4988,11 +4988,11 @@ static int mov_read_trun(MOVContext *c, AVIOContext > *pb, MOVAtom atom) > // fragment that overlap with AVINDEX_DISCARD_FRAME > prev_dts = AV_NOPTS_VALUE; > if (index_entry_pos > 0) > - prev_dts = st->index_entries[index_entry_pos-1].timestamp; > - for (i = index_entry_pos; i < st->nb_index_entries; i++) { > - if (prev_dts < st->index_entries[i].timestamp) > + prev_dts = st->internal->index_entries[index_entry_pos-1].timestamp; > + for (i = index_entry_pos; i < st->internal->nb_index_entries; i++) { > + if (prev_dts < st->internal->index_entries[i].timestamp) > break; > - st->index_entries[i].flags |= AVINDEX_DISCARD_FRAME; > + st->internal->index_entries[i].flags |= AVINDEX_DISCARD_FRAME; > } > > // If a hole was created to insert the new index_entries into, > @@ -7172,9 +7172,9 @@ static void mov_read_chapters(AVFormatContext *s) > > if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { > st->disposition |= AV_DISPOSITION_ATTACHED_PIC | > AV_DISPOSITION_TIMED_THUMBNAILS; > - if (st->nb_index_entries) { > + if (st->internal->nb_index_entries) { > // Retrieve the first frame, if possible > - AVIndexEntry *sample = &st->index_entries[0]; > + AVIndexEntry *sample = &st->internal->index_entries[0]; > if (avio_seek(sc->pb, sample->pos, SEEK_SET) != sample->pos) > { > av_log(s, AV_LOG_ERROR, "Failed to retrieve first > frame\n"); > goto finish; > @@ -7190,9 +7190,9 @@ static void mov_read_chapters(AVFormatContext *s) > st->codecpar->codec_type = AVMEDIA_TYPE_DATA; > st->codecpar->codec_id = AV_CODEC_ID_BIN_DATA; > st->discard = AVDISCARD_ALL; > - for (i = 0; i < st->nb_index_entries; i++) { > - AVIndexEntry *sample = &st->index_entries[i]; > - int64_t end = i+1 < st->nb_index_entries ? st- > >index_entries[i+1].timestamp : st->duration; > + for (i = 0; i < st->internal->nb_index_entries; i++) { > + AVIndexEntry *sample = &st->internal->index_entries[i]; > + int64_t end = i+1 < st->internal->nb_index_entries ? st- > >internal->index_entries[i+1].timestamp : st->duration; > uint8_t *title; > uint16_t ch; > int len, title_len; > @@ -7265,10 +7265,10 @@ static int mov_read_rtmd_track(AVFormatContext *s, > AVStream *st) > int64_t cur_pos = avio_tell(sc->pb); > int hh, mm, ss, ff, drop; > > - if (!st->nb_index_entries) > + if (!st->internal->nb_index_entries) > return -1; > > - avio_seek(sc->pb, st->index_entries->pos, SEEK_SET); > + avio_seek(sc->pb, st->internal->index_entries->pos, SEEK_SET); > avio_skip(s->pb, 13); > hh = avio_r8(s->pb); > mm = avio_r8(s->pb); > @@ -7290,10 +7290,10 @@ static int mov_read_timecode_track(AVFormatContext *s, > AVStream *st) > int64_t cur_pos = avio_tell(sc->pb); > uint32_t value; > > - if (!st->nb_index_entries) > + if (!st->internal->nb_index_entries) > return -1; > > - avio_seek(sc->pb, st->index_entries->pos, SEEK_SET); > + avio_seek(sc->pb, st->internal->index_entries->pos, SEEK_SET); > value = avio_rb32(s->pb); > > if (sc->tmcd_flags & 0x0001) flags |= AV_TIMECODE_FLAG_DROPFRAME; > @@ -7757,8 +7757,8 @@ static AVIndexEntry > *mov_find_next_sample(AVFormatContext *s, AVStream **st) > for (i = 0; i < s->nb_streams; i++) { > AVStream *avst = s->streams[i]; > MOVStreamContext *msc = avst->priv_data; > - if (msc->pb && msc->current_sample < avst->nb_index_entries) { > - AVIndexEntry *current_sample = &avst->index_entries[msc- > >current_sample]; > + if (msc->pb && msc->current_sample < avst->internal- > >nb_index_entries) { > + AVIndexEntry *current_sample = &avst->internal- > >index_entries[msc->current_sample]; > int64_t dts = av_rescale(current_sample->timestamp, AV_TIME_BASE, > msc->time_scale); > av_log(s, AV_LOG_TRACE, "stream %d, sample %d, dts %"PRId64"\n", > i, msc->current_sample, dts); > if (!sample || (!(s->pb->seekable & AVIO_SEEKABLE_NORMAL) && > current_sample->pos < sample->pos) || > @@ -7961,8 +7961,8 @@ static int mov_read_packet(AVFormatContext *s, AVPacket > *pkt) > sc->ctts_sample = 0; > } > } else { > - int64_t next_dts = (sc->current_sample < st->nb_index_entries) ? > - st->index_entries[sc->current_sample].timestamp : st->duration; > + int64_t next_dts = (sc->current_sample < st->internal- > >nb_index_entries) ? > + st->internal->index_entries[sc->current_sample].timestamp : st- > >duration; > > if (next_dts >= pkt->dts) > pkt->duration = next_dts - pkt->dts; > @@ -8043,7 +8043,7 @@ static int mov_seek_stream(AVFormatContext *s, AVStream > *st, int64_t timestamp, > > sample = av_index_search_timestamp(st, timestamp, flags); > av_log(s, AV_LOG_TRACE, "stream %d, timestamp %"PRId64", sample %d\n", > st->index, timestamp, sample); > - if (sample < 0 && st->nb_index_entries && timestamp < st- > >index_entries[0].timestamp) > + if (sample < 0 && st->internal->nb_index_entries && timestamp < st- > >internal->index_entries[0].timestamp) > sample = 0; > if (sample < 0) /* not sure what to do */ > return AVERROR_INVALIDDATA; > @@ -8098,7 +8098,7 @@ static int mov_read_seek(AVFormatContext *s, int > stream_index, int64_t sample_ti > > if (mc->seek_individually) { > /* adjust seek timestamp to found sample timestamp */ > - int64_t seek_timestamp = st->index_entries[sample].timestamp; > + int64_t seek_timestamp = st->internal- > >index_entries[sample].timestamp; > > for (i = 0; i < s->nb_streams; i++) { > int64_t timestamp; > diff --git a/libavformat/mp3dec.c b/libavformat/mp3dec.c > index 5e7f273c6a..53f803ef55 100644 > --- a/libavformat/mp3dec.c > +++ b/libavformat/mp3dec.c > @@ -431,8 +431,8 @@ static int mp3_read_header(AVFormatContext *s) > } > > // the seek index is relative to the end of the xing vbr headers > - for (i = 0; i < st->nb_index_entries; i++) > - st->index_entries[i].pos += avio_tell(s->pb); > + for (i = 0; i < st->internal->nb_index_entries; i++) > + st->internal->index_entries[i].pos += avio_tell(s->pb); > > /* the parameters will be extracted from the compressed bitstream */ > return 0; > @@ -567,7 +567,7 @@ static int mp3_seek(AVFormatContext *s, int stream_index, > int64_t timestamp, > if (ret < 0) > return ret; > > - ie = &st->index_entries[ret]; > + ie = &st->internal->index_entries[ret]; > } else if (fast_seek && st->duration > 0 && filesize > 0) { > if (!mp3->is_cbr) > av_log(s, AV_LOG_WARNING, "Using scaling to seek VBR MP3; may be > imprecise.\n"); > diff --git a/libavformat/mpc.c b/libavformat/mpc.c > index 6a94b5d1d0..31a2072406 100644 > --- a/libavformat/mpc.c > +++ b/libavformat/mpc.c > @@ -194,8 +194,8 @@ static int mpc_read_seek(AVFormatContext *s, int > stream_index, int64_t timestamp > uint32_t lastframe; > > /* if found, seek there */ > - if (index >= 0 && st->index_entries[st->nb_index_entries-1].timestamp >= > timestamp - DELAY_FRAMES){ > - c->curframe = st->index_entries[index].pos; > + if (index >= 0 && st->internal->index_entries[st->internal- > >nb_index_entries-1].timestamp >= timestamp - DELAY_FRAMES){ > + c->curframe = st->internal->index_entries[index].pos; > return 0; > } > /* if timestamp is out of bounds, return error */ > diff --git a/libavformat/mpc8.c b/libavformat/mpc8.c > index dd13bbd0a4..0002e2a9dd 100644 > --- a/libavformat/mpc8.c > +++ b/libavformat/mpc8.c > @@ -310,9 +310,9 @@ static int mpc8_read_seek(AVFormatContext *s, int > stream_index, int64_t timestam > int index = av_index_search_timestamp(st, timestamp, flags); > > if(index < 0) return -1; > - if (avio_seek(s->pb, st->index_entries[index].pos, SEEK_SET) < 0) > + if (avio_seek(s->pb, st->internal->index_entries[index].pos, SEEK_SET) < > 0) > return -1; > - ff_update_cur_dts(s, st, st->index_entries[index].timestamp); > + ff_update_cur_dts(s, st, st->internal->index_entries[index].timestamp); > return 0; > } > > diff --git a/libavformat/mux.c b/libavformat/mux.c > index 8a53f0feeb..1cf885fbea 100644 > --- a/libavformat/mux.c > +++ b/libavformat/mux.c > @@ -1285,7 +1285,7 @@ int av_write_trailer(AVFormatContext *s) > ret = s->pb ? s->pb->error : 0; > for (i = 0; i < s->nb_streams; i++) { > av_freep(&s->streams[i]->priv_data); > - av_freep(&s->streams[i]->index_entries); > + av_freep(&s->streams[i]->internal->index_entries); > } > if (s->oformat->priv_class) > av_opt_free(s->priv_data); > diff --git a/libavformat/mvdec.c b/libavformat/mvdec.c > index d5b400213d..d8f121bea5 100644 > --- a/libavformat/mvdec.c > +++ b/libavformat/mvdec.c > @@ -431,8 +431,8 @@ static int mv_read_packet(AVFormatContext *avctx, AVPacket > *pkt) > int64_t ret; > uint64_t pos; > > - if (frame < st->nb_index_entries) { > - index = &st->index_entries[frame]; > + if (frame < st->internal->nb_index_entries) { > + index = &st->internal->index_entries[frame]; > pos = avio_tell(pb); > if (index->pos > pos) > avio_skip(pb, index->pos - pos); > diff --git a/libavformat/nsvdec.c b/libavformat/nsvdec.c > index eb26b29450..4fab52ed36 100644 > --- a/libavformat/nsvdec.c > +++ b/libavformat/nsvdec.c > @@ -682,10 +682,10 @@ static int nsv_read_seek(AVFormatContext *s, int > stream_index, int64_t timestamp > if(index < 0) > return -1; > > - if (avio_seek(s->pb, st->index_entries[index].pos, SEEK_SET) < 0) > + if (avio_seek(s->pb, st->internal->index_entries[index].pos, SEEK_SET) < > 0) > return -1; > > - nst->frame_offset = st->index_entries[index].timestamp; > + nst->frame_offset = st->internal->index_entries[index].timestamp; > nsv->state = NSV_UNSYNC; > return 0; > } > diff --git a/libavformat/nutdec.c b/libavformat/nutdec.c > index 3779dce2a8..53a052503e 100644 > --- a/libavformat/nutdec.c > +++ b/libavformat/nutdec.c > @@ -1235,15 +1235,15 @@ static int read_seek(AVFormatContext *s, int > stream_index, > return AVERROR(ENOSYS); > } > > - if (st->index_entries) { > + if (st->internal->index_entries) { > int index = av_index_search_timestamp(st, pts, flags); > if (index < 0) > index = av_index_search_timestamp(st, pts, flags ^ > AVSEEK_FLAG_BACKWARD); > if (index < 0) > return -1; > > - pos2 = st->index_entries[index].pos; > - ts = st->index_entries[index].timestamp; > + pos2 = st->internal->index_entries[index].pos; > + ts = st->internal->index_entries[index].timestamp; > } else { > av_tree_find(nut->syncpoints, &dummy, ff_nut_sp_pts_cmp, > (void **) next_node); > diff --git a/libavformat/nutenc.c b/libavformat/nutenc.c > index 6d3bf6c21e..1dcb2be1b1 100644 > --- a/libavformat/nutenc.c > +++ b/libavformat/nutenc.c > @@ -1013,12 +1013,12 @@ static int nut_write_packet(AVFormatContext *s, > AVPacket *pkt) > int index = av_index_search_timestamp(st, dts_tb, > AVSEEK_FLAG_BACKWARD); > if (index >= 0) { > - sp_pos = FFMIN(sp_pos, st->index_entries[index].pos); > - if (!nut->write_index && 2*index > st->nb_index_entries) { > - memmove(st->index_entries, > - st->index_entries + index, > - sizeof(*st->index_entries) * (st- > >nb_index_entries - index)); > - st->nb_index_entries -= index; > + sp_pos = FFMIN(sp_pos, st->internal- > >index_entries[index].pos); > + if (!nut->write_index && 2*index > st->internal- > >nb_index_entries) { > + memmove(st->internal->index_entries, > + st->internal->index_entries + index, > + sizeof(*st->internal->index_entries) * (st- > >internal->nb_index_entries - index)); > + st->internal->nb_index_entries -= index; > } > } > } > diff --git a/libavformat/rl2.c b/libavformat/rl2.c > index cfde23a945..fa1b38b133 100644 > --- a/libavformat/rl2.c > +++ b/libavformat/rl2.c > @@ -237,9 +237,9 @@ static int rl2_read_packet(AVFormatContext *s, > > /** check if there is a valid video or audio entry that can be used */ > for(i=0; i<s->nb_streams; i++){ > - if(rl2->index_pos[i] < s->streams[i]->nb_index_entries > - && s->streams[i]->index_entries[ rl2->index_pos[i] ].pos < > pos){ > - sample = &s->streams[i]->index_entries[ rl2->index_pos[i] ]; > + if(rl2->index_pos[i] < s->streams[i]->internal->nb_index_entries > + && s->streams[i]->internal->index_entries[ rl2->index_pos[i] > ].pos < pos){ > + sample = &s->streams[i]->internal->index_entries[ rl2- > >index_pos[i] ]; > pos= sample->pos; > stream_id= i; > } > @@ -283,7 +283,7 @@ static int rl2_read_seek(AVFormatContext *s, int > stream_index, int64_t timestamp > return -1; > > rl2->index_pos[stream_index] = index; > - timestamp = st->index_entries[index].timestamp; > + timestamp = st->internal->index_entries[index].timestamp; > > for(i=0; i < s->nb_streams; i++){ > AVStream *st2 = s->streams[i]; > diff --git a/libavformat/rpl.c b/libavformat/rpl.c > index 208c50f00c..c79419d558 100644 > --- a/libavformat/rpl.c > +++ b/libavformat/rpl.c > @@ -314,10 +314,10 @@ static int rpl_read_packet(AVFormatContext *s, AVPacket > *pkt) > > stream = s->streams[rpl->chunk_part]; > > - if (rpl->chunk_number >= stream->nb_index_entries) > + if (rpl->chunk_number >= stream->internal->nb_index_entries) > return AVERROR_EOF; > > - index_entry = &stream->index_entries[rpl->chunk_number]; > + index_entry = &stream->internal->index_entries[rpl->chunk_number]; > > if (rpl->frame_in_part == 0) > if (avio_seek(pb, index_entry->pos, SEEK_SET) < 0) > diff --git a/libavformat/segafilm.c b/libavformat/segafilm.c > index 4d14b81d16..ce65ac6db0 100644 > --- a/libavformat/segafilm.c > +++ b/libavformat/segafilm.c > @@ -321,7 +321,7 @@ static int film_read_seek(AVFormatContext *s, int > stream_index, int64_t timestam > if (ret < 0) > return ret; > > - pos = avio_seek(s->pb, st->index_entries[ret].pos, SEEK_SET); > + pos = avio_seek(s->pb, st->internal->index_entries[ret].pos, SEEK_SET); > if (pos < 0) > return pos; > > diff --git a/libavformat/tta.c b/libavformat/tta.c > index 467c24455c..70e98b2937 100644 > --- a/libavformat/tta.c > +++ b/libavformat/tta.c > @@ -155,15 +155,15 @@ static int tta_read_packet(AVFormatContext *s, AVPacket > *pkt) > if (c->currentframe >= c->totalframes) > return AVERROR_EOF; > > - if (st->nb_index_entries < c->totalframes) { > + if (st->internal->nb_index_entries < c->totalframes) { > av_log(s, AV_LOG_ERROR, "Index entry disappeared\n"); > return AVERROR_INVALIDDATA; > } > > - size = st->index_entries[c->currentframe].size; > + size = st->internal->index_entries[c->currentframe].size; > > ret = av_get_packet(s->pb, pkt, size); > - pkt->dts = st->index_entries[c->currentframe++].timestamp; > + pkt->dts = st->internal->index_entries[c->currentframe++].timestamp; > pkt->duration = c->currentframe == c->totalframes ? c->last_frame_size : > c->frame_size; > return ret; > @@ -176,7 +176,7 @@ static int tta_read_seek(AVFormatContext *s, int > stream_index, int64_t timestamp > int index = av_index_search_timestamp(st, timestamp, flags); > if (index < 0) > return -1; > - if (avio_seek(s->pb, st->index_entries[index].pos, SEEK_SET) < 0) > + if (avio_seek(s->pb, st->internal->index_entries[index].pos, SEEK_SET) < > 0) > return -1; > > c->currentframe = index; > diff --git a/libavformat/utils.c b/libavformat/utils.c > index acb9bd1cee..1e53cae103 100644 > --- a/libavformat/utils.c > +++ b/libavformat/utils.c > @@ -1913,11 +1913,11 @@ void ff_reduce_index(AVFormatContext *s, int > stream_index) > AVStream *st = s->streams[stream_index]; > unsigned int max_entries = s->max_index_size / sizeof(AVIndexEntry); > > - if ((unsigned) st->nb_index_entries >= max_entries) { > + if ((unsigned) st->internal->nb_index_entries >= max_entries) { > int i; > - for (i = 0; 2 * i < st->nb_index_entries; i++) > - st->index_entries[i] = st->index_entries[2 * i]; > - st->nb_index_entries = i; > + for (i = 0; 2 * i < st->internal->nb_index_entries; i++) > + st->internal->index_entries[i] = st->internal->index_entries[2 * > i]; > + st->internal->nb_index_entries = i; > } > } > > @@ -1984,8 +1984,8 @@ int av_add_index_entry(AVStream *st, int64_t pos, > int64_t timestamp, > int size, int distance, int flags) > { > timestamp = wrap_timestamp(st, timestamp); > - return ff_add_index_entry(&st->index_entries, &st->nb_index_entries, > - &st->index_entries_allocated_size, pos, > + return ff_add_index_entry(&st->internal->index_entries, &st->internal- > >nb_index_entries, > + &st->internal->index_entries_allocated_size, > pos, > timestamp, size, distance, flags); > } > > @@ -2061,13 +2061,13 @@ void ff_configure_buffers_for_index(AVFormatContext > *s, int64_t time_tolerance) > if (ist1 == ist2) > continue; > > - for (i1 = i2 = 0; i1 < st1->nb_index_entries; i1++) { > - AVIndexEntry *e1 = &st1->index_entries[i1]; > + for (i1 = i2 = 0; i1 < st1->internal->nb_index_entries; i1++) { > + AVIndexEntry *e1 = &st1->internal->index_entries[i1]; > int64_t e1_pts = av_rescale_q(e1->timestamp, st1->time_base, > AV_TIME_BASE_Q); > > skip = FFMAX(skip, e1->size); > - for (; i2 < st2->nb_index_entries; i2++) { > - AVIndexEntry *e2 = &st2->index_entries[i2]; > + for (; i2 < st2->internal->nb_index_entries; i2++) { > + AVIndexEntry *e2 = &st2->internal->index_entries[i2]; > int64_t e2_pts = av_rescale_q(e2->timestamp, st2- > >time_base, AV_TIME_BASE_Q); > if (e2_pts < e1_pts || e2_pts - (uint64_t)e1_pts < > time_tolerance) > continue; > @@ -2099,7 +2099,7 @@ void ff_configure_buffers_for_index(AVFormatContext *s, > int64_t time_tolerance) > > int av_index_search_timestamp(AVStream *st, int64_t wanted_timestamp, int > flags) > { > - return ff_index_search_timestamp(st->index_entries, st->nb_index_entries, > + return ff_index_search_timestamp(st->internal->index_entries, st- > >internal->nb_index_entries, > wanted_timestamp, flags); > } > > @@ -2132,7 +2132,7 @@ int ff_seek_frame_binary(AVFormatContext *s, int > stream_index, > pos_limit = -1; // GCC falsely says it may be uninitialized. > > st = s->streams[stream_index]; > - if (st->index_entries) { > + if (st->internal->index_entries) { > AVIndexEntry *e; > > /* FIXME: Whole function must be checked for non-keyframe entries in > @@ -2140,7 +2140,7 @@ int ff_seek_frame_binary(AVFormatContext *s, int > stream_index, > index = av_index_search_timestamp(st, target_ts, > flags | AVSEEK_FLAG_BACKWARD); > index = FFMAX(index, 0); > - e = &st->index_entries[index]; > + e = &st->internal->index_entries[index]; > > if (e->timestamp <= target_ts || e->pos == e->min_distance) { > pos_min = e->pos; > @@ -2153,9 +2153,9 @@ int ff_seek_frame_binary(AVFormatContext *s, int > stream_index, > > index = av_index_search_timestamp(st, target_ts, > flags & ~AVSEEK_FLAG_BACKWARD); > - av_assert0(index < st->nb_index_entries); > + av_assert0(index < st->internal->nb_index_entries); > if (index >= 0) { > - e = &st->index_entries[index]; > + e = &st->internal->index_entries[index]; > av_assert1(e->timestamp >= target_ts); > pos_max = e->pos; > ts_max = e->timestamp; > @@ -2356,17 +2356,17 @@ static int seek_frame_generic(AVFormatContext *s, int > stream_index, > > index = av_index_search_timestamp(st, timestamp, flags); > > - if (index < 0 && st->nb_index_entries && > - timestamp < st->index_entries[0].timestamp) > + if (index < 0 && st->internal->nb_index_entries && > + timestamp < st->internal->index_entries[0].timestamp) > return -1; > > - if (index < 0 || index == st->nb_index_entries - 1) { > + if (index < 0 || index == st->internal->nb_index_entries - 1) { > AVPacket pkt; > int nonkey = 0; > > - if (st->nb_index_entries) { > - av_assert0(st->index_entries); > - ie = &st->index_entries[st->nb_index_entries - 1]; > + if (st->internal->nb_index_entries) { > + av_assert0(st->internal->index_entries); > + ie = &st->internal->index_entries[st->internal->nb_index_entries > - 1]; > if ((ret = avio_seek(s->pb, ie->pos, SEEK_SET)) < 0) > return ret; > ff_update_cur_dts(s, st, ie->timestamp); > @@ -2403,7 +2403,7 @@ static int seek_frame_generic(AVFormatContext *s, int > stream_index, > if (s->iformat->read_seek) > if (s->iformat->read_seek(s, stream_index, timestamp, flags) >= 0) > return 0; > - ie = &st->index_entries[index]; > + ie = &st->internal->index_entries[index]; > if ((ret = avio_seek(s->pb, ie->pos, SEEK_SET)) < 0) > return ret; > ff_update_cur_dts(s, st, ie->timestamp); > @@ -4341,6 +4341,7 @@ static void free_stream(AVStream **pst) > avcodec_free_context(&st->internal->avctx); > av_bsf_free(&st->internal->bsfc); > av_freep(&st->internal->priv_pts); > + av_freep(&st->internal->index_entries); > av_bsf_free(&st->internal->extract_extradata.bsf); > av_packet_free(&st->internal->extract_extradata.pkt); > > @@ -4353,7 +4354,6 @@ static void free_stream(AVStream **pst) > av_dict_free(&st->metadata); > avcodec_parameters_free(&st->codecpar); > av_freep(&st->probe_data.buf); > - av_freep(&st->index_entries); > #if FF_API_LAVF_AVCTX > FF_DISABLE_DEPRECATION_WARNINGS > avcodec_free_context(&st->codec); > diff --git a/libavformat/vocdec.c b/libavformat/vocdec.c > index fd1ca20c9b..d388fce92e 100644 > --- a/libavformat/vocdec.c > +++ b/libavformat/vocdec.c > @@ -83,14 +83,14 @@ static int voc_read_seek(AVFormatContext *s, int > stream_index, > st = s->streams[stream_index]; > index = av_index_search_timestamp(st, timestamp, flags); > > - if (index >= 0 && index < st->nb_index_entries - 1) { > - AVIndexEntry *e = &st->index_entries[index]; > + if (index >= 0 && index < st->internal->nb_index_entries - 1) { > + AVIndexEntry *e = &st->internal->index_entries[index]; > avio_seek(s->pb, e->pos, SEEK_SET); > voc->pts = e->timestamp; > voc->remaining_size = e->size; > return 0; > - } else if (st->nb_index_entries && st->index_entries[0].timestamp <= > timestamp) { > - AVIndexEntry *e = &st->index_entries[st->nb_index_entries - 1]; > + } else if (st->internal->nb_index_entries && st->internal- > >index_entries[0].timestamp <= timestamp) { > + AVIndexEntry *e = &st->internal->index_entries[st->internal- > >nb_index_entries - 1]; > // prepare context for seek_frame_generic() > voc->pts = e->timestamp; > voc->remaining_size = e->size; _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".