summaryrefslogtreecommitdiffstats
path: root/mplayer.c
diff options
context:
space:
mode:
authorrtognimp <rtognimp@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-04-24 10:58:40 +0000
committerrtognimp <rtognimp@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-04-24 10:58:40 +0000
commit6c4d9bfe5127da2a4e2afbe1d6e585ebeb7c5949 (patch)
tree6057e1a4875492c40543d4ac2e43adbbd53afff2 /mplayer.c
parent4b45ec30e4b8ced93aa10792aa18a8f96b3cd104 (diff)
downloadmpv-6c4d9bfe5127da2a4e2afbe1d6e585ebeb7c5949.tar.bz2
mpv-6c4d9bfe5127da2a4e2afbe1d6e585ebeb7c5949.tar.xz
4 - Implement a better way to calculate current audio pts and use it for
audio decoded with ad_libvorbis, ad_ffmpeg and ad_faad. Patch by Uoti Urpala git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@18243 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'mplayer.c')
-rw-r--r--mplayer.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/mplayer.c b/mplayer.c
index ea1999bb63..d129e2ef15 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -3874,6 +3874,7 @@ if(time_frame>0.001 && !(vo_flags&256)){
delay=sh_audio->delay;
delay+=(float)sh_audio->a_buffer_len/(float)sh_audio->o_bps;
}
+ delay += sh_audio->a_out_buffer_len*playback_speed/(float)ao_data.bps;
#if 0
if(pts_from_bps){
@@ -3890,16 +3891,15 @@ if(time_frame>0.001 && !(vo_flags&256)){
#endif
{
// PTS = (last timestamp) + (bytes after last timestamp)/(bytes per sec)
- a_pts=d_audio->pts;
- if(!delay_corrected) if(a_pts) delay_corrected=1;
-#if 0
- mp_msg(MSGT_FIXME, MSGL_FIXME, "\n#X# pts=%5.3f ds_pts=%5.3f buff=%5.3f total=%5.3f\n",
- a_pts,
- ds_tell_pts(d_audio)/(float)sh_audio->i_bps,
- -sh_audio->a_in_buffer_len/(float)sh_audio->i_bps,
- a_pts+(ds_tell_pts(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps);
-#endif
- a_pts+=(ds_tell_pts(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps - sh_audio->a_out_buffer_len*playback_speed/(float)ao_data.bps;
+ a_pts = sh_audio->pts;
+ if (a_pts == MP_NOPTS_VALUE) {
+ // Decoder doesn't support tracking timestamps or demuxer doesn't
+ // set them properly in individual packets, use old inaccurate method
+ a_pts=d_audio->pts;
+ a_pts+=(ds_tell_pts(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps;
+ }
+ else
+ a_pts += sh_audio->pts_bytes / (float)sh_audio->o_bps;
}
v_pts=sh_video ? sh_video->pts : d_video->pts;