Mercurial > mplayer.hg
comparison libmpdemux/demux_audio.c @ 18710:c528c6c518f1
Clean up audio pts handling, make audio pts tracking in the audio-only
case work the same as with video.
author | uau |
---|---|
date | Wed, 14 Jun 2006 19:48:54 +0000 |
parents | 9e2b300db17b |
children | 83c3afeab35d |
comparison
equal
deleted
inserted
replaced
18709:7ca8f5ab5136 | 18710:c528c6c518f1 |
---|---|
618 mp_msg(MSGT_DEMUXER,MSGL_WARN,MSGTR_MPDEMUX_AUDIO_UnknownFormat,priv->frmt); | 618 mp_msg(MSGT_DEMUXER,MSGL_WARN,MSGTR_MPDEMUX_AUDIO_UnknownFormat,priv->frmt); |
619 return 0; | 619 return 0; |
620 } | 620 } |
621 | 621 |
622 resize_demux_packet(dp, l); | 622 resize_demux_packet(dp, l); |
623 ds->pts = priv->last_pts - (ds_tell_pts(demux->audio) - | 623 dp->pts = priv->last_pts; |
624 sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; | |
625 ds_add_packet(ds, dp); | 624 ds_add_packet(ds, dp); |
626 return 1; | 625 return 1; |
627 } | 626 } |
628 | 627 |
629 static void high_res_mp3_seek(demuxer_t *demuxer,float time) { | 628 static void high_res_mp3_seek(demuxer_t *demuxer,float time) { |
665 len = priv->last_pts + len; | 664 len = priv->last_pts + len; |
666 priv->last_pts = 0; | 665 priv->last_pts = 0; |
667 } | 666 } |
668 if(len > 0) | 667 if(len > 0) |
669 high_res_mp3_seek(demuxer,len); | 668 high_res_mp3_seek(demuxer,len); |
670 sh_audio->delay = priv->last_pts - (ds_tell_pts(demuxer->audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; | |
671 return; | 669 return; |
672 } | 670 } |
673 | 671 |
674 base = flags&1 ? demuxer->movi_start : stream_tell(s); | 672 base = flags&1 ? demuxer->movi_start : stream_tell(s); |
675 if(flags&2) | 673 if(flags&2) |
677 else | 675 else |
678 pos = base + (rel_seek_secs*sh_audio->i_bps); | 676 pos = base + (rel_seek_secs*sh_audio->i_bps); |
679 | 677 |
680 if(demuxer->movi_end && pos >= demuxer->movi_end) { | 678 if(demuxer->movi_end && pos >= demuxer->movi_end) { |
681 pos = demuxer->movi_end; | 679 pos = demuxer->movi_end; |
682 //sh_audio->delay = (stream_tell(s) - demuxer->movi_start)/(float)sh_audio->i_bps; | |
683 //return; | |
684 } else if(pos < demuxer->movi_start) | 680 } else if(pos < demuxer->movi_start) |
685 pos = demuxer->movi_start; | 681 pos = demuxer->movi_start; |
686 | 682 |
687 priv->last_pts = (pos-demuxer->movi_start)/(float)sh_audio->i_bps; | 683 priv->last_pts = (pos-demuxer->movi_start)/(float)sh_audio->i_bps; |
688 sh_audio->delay = priv->last_pts - (ds_tell_pts(demuxer->audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; | |
689 | 684 |
690 switch(priv->frmt) { | 685 switch(priv->frmt) { |
691 case WAV: | 686 case WAV: |
692 pos -= (pos - demuxer->movi_start) % | 687 pos -= (pos - demuxer->movi_start) % |
693 (sh_audio->wf->nBlockAlign ? sh_audio->wf->nBlockAlign : | 688 (sh_audio->wf->nBlockAlign ? sh_audio->wf->nBlockAlign : |