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 :