# HG changeset patch # User ods15 # Date 1121628409 0 # Node ID 13ae8ec083f67333e2908fd17d3bdce3df2a7431 # Parent 4cc096594a6ae24ad408d279e44a0cefd9f839ee -delay for MEncoder, step 3. diff -r 4cc096594a6a -r 13ae8ec083f6 mencoder.c --- a/mencoder.c Sun Jul 17 19:25:58 2005 +0000 +++ b/mencoder.c Sun Jul 17 19:26:49 2005 +0000 @@ -240,6 +240,9 @@ int already_read; } s_frame_data; +/// Returns a_pts +static float calc_a_pts(demux_stream_t *d_audio); + #ifdef USE_EDL #include "edl.h" static edl_record_ptr edl_records = NULL; ///< EDL entries memory area @@ -1607,6 +1610,14 @@ return timeleft; } +static float calc_a_pts(demux_stream_t *d_audio) { + sh_audio_t * sh_audio = d_audio ? d_audio->sh : NULL; + float a_pts = 0.; + if (sh_audio) + a_pts = d_audio->pts + (ds_tell_pts(d_audio) - sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; + return a_pts; +} + #ifdef USE_EDL static int edl_seek(edl_record_ptr next_edl_record, demuxer_t* demuxer, demux_stream_t *d_audio, muxer_stream_t* mux_a, s_frame_data * frame_data, int framecopy) { sh_audio_t * sh_audio = d_audio->sh; @@ -1644,7 +1655,7 @@ sh_video->timer += frame_data->frame_time; if (sh_audio) { - a_pts = d_audio->pts + (ds_tell_pts(d_audio) - sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; + a_pts = calc_a_pts(d_audio); while (sh_video->pts - frame_data->frame_time > a_pts) { int len; if (samplesize) { @@ -1657,7 +1668,7 @@ len = ds_get_packet(sh_audio->ds, &crap); } if (len <= 0) break; // EOF of audio. - a_pts = d_audio->pts + (ds_tell_pts(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; + a_pts = calc_a_pts(d_audio); } }