[nut]: r269 - trunk/libnut/demuxer.c

Author: ods15 Date: Sat Dec 23 10:02:48 2006 New Revision: 269 Modified: trunk/libnut/demuxer.c Log: make add_syncpoint() handle seen_next via pts_valid flag. Modified: trunk/libnut/demuxer.c ============================================================================== --- trunk/libnut/demuxer.c (original) +++ trunk/libnut/demuxer.c Sat Dec 23 10:02:48 2006 @@ -414,6 +414,8 @@ int i, j, err = 0; assert(nut->dopts.cache_syncpoints & 1 || !pts); // pts information is never stored with no syncpoint cache + if (nut->dopts.cache_syncpoints & 1 && sp.pts_valid) assert(pts && eor); // code sanity check + for (i = sl->len; i--; ) { // more often than not, we're adding at end of list if (sl->s[i].pos > sp.pos) continue; if (sp.pos < sl->s[i].pos + 16) { // syncpoint already in list @@ -422,7 +424,7 @@ sl->s[i].pts = sp.pts; assert(!sl->s[i].back_ptr || sl->s[i].back_ptr == sp.back_ptr); sl->s[i].back_ptr = sp.back_ptr; - if (pts) { + if (nut->dopts.cache_syncpoints & 1 && sp.pts_valid) { for (j = 0; j < nut->stream_count; j++) { assert(!sl->s[i].pts_valid || sl->pts[i * nut->stream_count + j] == pts[j]); sl->pts[i * nut->stream_count + j] = pts[j]; @@ -431,6 +433,7 @@ } sl->s[i].pts_valid = 1; } + if (sp.pts_valid && i) sl->s[i-1].seen_next = 1; if (out) *out = i; return 0; } @@ -447,14 +450,17 @@ } memmove(sl->s + i + 1, sl->s + i, (sl->len - i) * sizeof(syncpoint_t)); sl->s[i] = sp; - assert(sl->s[i].pts_valid == !!pts); + if (sl->s[i].pts_valid) { + if (!(nut->dopts.cache_syncpoints & 1)) sl->s[i].pts_valid = 0; // pts_valid is not really true, only used for seen_next + if (i) sl->s[i-1].seen_next = 1; + } if (nut->dopts.cache_syncpoints & 1) { memmove(sl->pts + (i + 1) * nut->stream_count, sl->pts + i * nut->stream_count, (sl->len - i) * nut->stream_count * sizeof(uint64_t)); memmove(sl->eor + (i + 1) * nut->stream_count, sl->eor + i * nut->stream_count, (sl->len - i) * nut->stream_count * sizeof(uint64_t)); for (j = 0; j < nut->stream_count; j++) { - sl->pts[i * nut->stream_count + j] = pts ? pts[j] : 0; - sl->eor[i * nut->stream_count + j] = eor ? eor[j] : 0; + sl->pts[i * nut->stream_count + j] = sl->s[i].pts_valid ? pts[j] : 0; + sl->eor[i * nut->stream_count + j] = sl->s[i].pts_valid ? eor[j] : 0; } } @@ -493,7 +499,7 @@ set_global_pts(nut, s.pts); s.seen_next = 0; - s.pts_valid = 0; + s.pts_valid = !after_seek; if (nut->dopts.cache_syncpoints & 1) { int i; uint64_t pts[nut->stream_count]; @@ -504,16 +510,9 @@ eor[i] = nut->sc[i].eor; nut->sc[i].eor = 0; } - if (after_seek) CHECK(add_syncpoint(nut, s, NULL, NULL, NULL)); - else { - s.pts_valid = 1; - CHECK(add_syncpoint(nut, s, pts, eor, &i)); - nut->syncpoints.s[i - 1].seen_next = 1; - } + CHECK(add_syncpoint(nut, s, pts, eor, NULL)); } else if (nut->dopts.cache_syncpoints) { // we're seeking, we need syncpoint cache - int i; - CHECK(add_syncpoint(nut, s, NULL, NULL, &i)); - if (!after_seek) nut->syncpoints.s[i - 1].seen_next = 1; + CHECK(add_syncpoint(nut, s, NULL, NULL, NULL)); } err_out: return err;
participants (1)
-
ods15