[NUT] (ods15): r108 - in /trunk/libnut: demuxer.c priv.h

Author: ods15 Date: Thu Mar 16 07:53:52 2006 New Revision: 108 Log: some fixes Modified: trunk/libnut/demuxer.c trunk/libnut/priv.h Modified: trunk/libnut/demuxer.c ============================================================================== --- trunk/libnut/demuxer.c (original) +++ trunk/libnut/demuxer.c Thu Mar 16 07:53:52 2006 @@ -1014,7 +1014,6 @@ if (saw_syncpoint) { int dont_flush = 0; int header_size = bctello(nut->i) - buf_before; - nut->i->buf_ptr -= header_size; if (stopper) { if ((!stopper_syncpoint && buf_before > (stopper->pos >> 1) - (stopper->back_ptr>>1) + 15) || stopper_syncpoint == buf_before) { int n = 1; @@ -1029,6 +1028,7 @@ dont_flush = 1; // give it a chance, we might be able to do this in a single seek } } + nut->i->buf_ptr -= header_size; if (!dont_flush) flush_buf(nut->i); // flush at every syncpoint nut->i->buf_ptr += header_size; } @@ -1068,7 +1068,7 @@ } } // dts higher than requested pts - if (end && nut->sc[pd.stream].last_dts != -1 && nut->sc[pd.stream].last_dts > pts[pd.stream]>>1) break; + if (end && peek_dts(nut->sc[pd.stream].sh.decode_delay, nut->sc[pd.stream].pts_cache, pd.pts) > (int64_t)(pts[pd.stream]>>1)) break; CHECK(skip_buffer(nut->i, pd.len)); push_frame(nut, &pd); Modified: trunk/libnut/priv.h ============================================================================== --- trunk/libnut/priv.h (original) +++ trunk/libnut/priv.h Thu Mar 16 07:53:52 2006 @@ -180,7 +180,7 @@ return 0; } -static inline int get_dts(int d, int64_t * pts_cache, int pts) { +static inline int64_t get_dts(int d, int64_t * pts_cache, int64_t pts) { while (d--) { int64_t t = pts_cache[d]; if (t < pts) { @@ -191,6 +191,11 @@ return pts; } +static inline int64_t peek_dts(int d, int64_t * pts_cache, int64_t pts) { + while (d--) if (pts_cache[d] < pts) pts = pts_cache[d]; + return pts; +} + #define bctello(bc) ((bc)->file_pos + ((bc)->buf_ptr - (bc)->buf)) #define TO_PTS(prefix, pts) \
participants (1)
-
syncmail@mplayerhq.hu