Ping. Sorry for the urgency on this, but this is blocking us internally. Thanks
On Mon, Oct 31, 2016 at 10:23 AM, Sasi Inguva <is...@google.com> wrote: > ping. > > Thanks! > > On Wed, Oct 26, 2016 at 11:31 AM, Sasi Inguva <is...@google.com> wrote: > >> According to spec ISO_IEC_15444_12 "For any media stream for which no >> segment index is present, referred to as non‐indexed stream, the media >> stream associated with the first Segment Index box in the segment serves as >> a reference stream in a sense that it also describes the subsegments for >> any non‐indexed media stream." >> >> Signed-off-by: Sasi Inguva <is...@google.com> >> --- >> libavformat/isom.h | 1 + >> libavformat/mov.c | 25 ++++++++++++++++++++++--- >> 2 files changed, 23 insertions(+), 3 deletions(-) >> >> diff --git a/libavformat/isom.h b/libavformat/isom.h >> index 9038057..d684502 100644 >> --- a/libavformat/isom.h >> +++ b/libavformat/isom.h >> @@ -179,6 +179,7 @@ typedef struct MOVStreamContext { >> int32_t *display_matrix; >> uint32_t format; >> >> + int has_sidx; // If there is an sidx entry for this stream. >> struct { >> int use_subsamples; >> uint8_t* auxiliary_info; >> diff --git a/libavformat/mov.c b/libavformat/mov.c >> index 357d800..d9ed5a3 100644 >> --- a/libavformat/mov.c >> +++ b/libavformat/mov.c >> @@ -4202,7 +4202,8 @@ static int mov_read_sidx(MOVContext *c, AVIOContext >> *pb, MOVAtom atom) >> uint8_t version; >> unsigned i, track_id; >> AVStream *st = NULL; >> - MOVStreamContext *sc; >> + AVStream *ref_st; >> + MOVStreamContext *sc, *ref_sc; >> MOVFragmentIndex *index = NULL; >> MOVFragmentIndex **tmp; >> AVRational timescale; >> @@ -4284,9 +4285,26 @@ static int mov_read_sidx(MOVContext *c, >> AVIOContext *pb, MOVAtom atom) >> >> c->fragment_index_data = tmp; >> c->fragment_index_data[c->fragment_index_count++] = index; >> + sc->has_sidx = 1; >> + >> + if (offset == avio_size(pb)) { >> + for (i = 0; i < c->fc->nb_streams; i++) { >> + if (c->fc->streams[i]->id == >> c->fragment_index_data[0]->track_id) >> { >> + ref_st = c->fc->streams[i]; >> + ref_sc = ref_st->priv_data; >> + break; >> + } >> + } >> + for (i = 0; i < c->fc->nb_streams; i++) { >> + st = c->fc->streams[i]; >> + sc = st->priv_data; >> + if (!sc->has_sidx) { >> + st->duration = sc->track_end = >> av_rescale(ref_st->duration, sc->time_scale, ref_sc->time_scale); >> + } >> + } >> >> - if (offset == avio_size(pb)) >> c->fragment_index_complete = 1; >> + } >> >> return 0; >> } >> @@ -5846,13 +5864,14 @@ static int mov_read_packet(AVFormatContext *s, >> AVPacket *pkt) >> static int mov_seek_fragment(AVFormatContext *s, AVStream *st, int64_t >> timestamp) >> { >> MOVContext *mov = s->priv_data; >> + MOVStreamContext *sc = st->priv_data; >> int i, j; >> >> if (!mov->fragment_index_complete) >> return 0; >> >> for (i = 0; i < mov->fragment_index_count; i++) { >> - if (mov->fragment_index_data[i]->track_id == st->id) { >> + if (mov->fragment_index_data[i]->track_id == st->id || >> !sc->has_sidx) { >> MOVFragmentIndex *index = mov->fragment_index_data[i]; >> for (j = index->item_count - 1; j >= 0; j--) { >> if (index->items[j].time <= timestamp) { >> -- >> 2.8.0.rc3.226.g39d4020 >> >> > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel