From edf1fb46d2dc56ddc1f3ddf330a0d81de17f4514 Mon Sep 17 00:00:00 2001 From: rtogni Date: Sat, 27 Jan 2007 22:34:27 +0000 Subject: Call real_fix_timestamp() after seeking, to avoid video freezing because of wrong timestamps. Fixes seek_sample2.rmvb and others. Patch by LR ))) hephooey ))(( gmail )( com ((( git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@22036 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/demux_real.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'libmpdemux/demux_real.c') diff --git a/libmpdemux/demux_real.c b/libmpdemux/demux_real.c index 4059b75543..36694c4104 100644 --- a/libmpdemux/demux_real.c +++ b/libmpdemux/demux_real.c @@ -926,9 +926,10 @@ got_video: // this fragment is for new packet, close the old one mp_msg(MSGT_DEMUX,MSGL_DBG2, "closing probably incomplete packet, len: %d \n",dp->len); if(priv->video_after_seek){ - dp->pts=timestamp; priv->kf_base = 0; priv->kf_pts = dp_hdr->timestamp; + dp->pts= + real_fix_timestamp(priv,dp_data,dp_hdr->timestamp,sh_video->frametime,sh_video->format); priv->video_after_seek = 0; } else if (dp_hdr->len >= 3) dp->pts = @@ -963,9 +964,10 @@ got_video: mp_dbg(MSGT_DEMUX,MSGL_DBG2, "fragment (%d bytes) appended, %d bytes left\n",vpkg_offset,len); // we know that this is the last fragment -> we can close the packet! if(priv->video_after_seek){ - dp->pts=timestamp; priv->kf_base = 0; priv->kf_pts = dp_hdr->timestamp; + dp->pts= + real_fix_timestamp(priv,dp_data,dp_hdr->timestamp,sh_video->frametime,sh_video->format); priv->video_after_seek = 0; } else if (dp_hdr->len >= 3) dp->pts = @@ -1004,6 +1006,13 @@ got_video: stream_read(demuxer->stream, dp_data, len); ds->asf_packet=dp; len=0; + if(priv->video_after_seek){ + priv->kf_base = 0; + priv->kf_pts = dp_hdr->timestamp; + dp->pts= + real_fix_timestamp(priv,dp_data,dp_hdr->timestamp,sh_video->frametime,sh_video->format); + priv->video_after_seek = 0; + } break; } // whole packet (not fragmented): @@ -1019,9 +1028,10 @@ got_video: dp_hdr->len=vpkg_length; len-=vpkg_length; stream_read(demuxer->stream, dp_data, vpkg_length); if(priv->video_after_seek){ - dp->pts=timestamp; priv->kf_base = 0; priv->kf_pts = dp_hdr->timestamp; + dp->pts= + real_fix_timestamp(priv,dp_data,dp_hdr->timestamp,sh_video->frametime,sh_video->format); priv->video_after_seek = 0; } else if (dp_hdr->len >= 3) dp->pts = -- cgit v1.2.3