Mercurial > mplayer.hg
comparison mencoder.c @ 15994:13ae8ec083f6
-delay for MEncoder, step 3.
author | ods15 |
---|---|
date | Sun, 17 Jul 2005 19:26:49 +0000 |
parents | 4cc096594a6a |
children | c3755444496d |
comparison
equal
deleted
inserted
replaced
15993:4cc096594a6a | 15994:13ae8ec083f6 |
---|---|
237 unsigned char* start; | 237 unsigned char* start; |
238 int in_size; | 238 int in_size; |
239 float frame_time; | 239 float frame_time; |
240 int already_read; | 240 int already_read; |
241 } s_frame_data; | 241 } s_frame_data; |
242 | |
243 /// Returns a_pts | |
244 static float calc_a_pts(demux_stream_t *d_audio); | |
242 | 245 |
243 #ifdef USE_EDL | 246 #ifdef USE_EDL |
244 #include "edl.h" | 247 #include "edl.h" |
245 static edl_record_ptr edl_records = NULL; ///< EDL entries memory area | 248 static edl_record_ptr edl_records = NULL; ///< EDL entries memory area |
246 static edl_record_ptr next_edl_record = NULL; ///< only for traversing edl_records | 249 static edl_record_ptr next_edl_record = NULL; ///< only for traversing edl_records |
1605 } | 1608 } |
1606 #endif | 1609 #endif |
1607 return timeleft; | 1610 return timeleft; |
1608 } | 1611 } |
1609 | 1612 |
1613 static float calc_a_pts(demux_stream_t *d_audio) { | |
1614 sh_audio_t * sh_audio = d_audio ? d_audio->sh : NULL; | |
1615 float a_pts = 0.; | |
1616 if (sh_audio) | |
1617 a_pts = d_audio->pts + (ds_tell_pts(d_audio) - sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; | |
1618 return a_pts; | |
1619 } | |
1620 | |
1610 #ifdef USE_EDL | 1621 #ifdef USE_EDL |
1611 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) { | 1622 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) { |
1612 sh_audio_t * sh_audio = d_audio->sh; | 1623 sh_audio_t * sh_audio = d_audio->sh; |
1613 sh_video_t * sh_video = demuxer->video ? demuxer->video->sh : NULL; | 1624 sh_video_t * sh_video = demuxer->video ? demuxer->video->sh : NULL; |
1614 vf_instance_t * vfilter = sh_video ? sh_video->vfilter : NULL; | 1625 vf_instance_t * vfilter = sh_video ? sh_video->vfilter : NULL; |
1642 frame_data->in_size = video_read_frame(sh_video, &frame_data->frame_time, &frame_data->start, force_fps); | 1653 frame_data->in_size = video_read_frame(sh_video, &frame_data->frame_time, &frame_data->start, force_fps); |
1643 if(frame_data->in_size<0) return 2; | 1654 if(frame_data->in_size<0) return 2; |
1644 sh_video->timer += frame_data->frame_time; | 1655 sh_video->timer += frame_data->frame_time; |
1645 | 1656 |
1646 if (sh_audio) { | 1657 if (sh_audio) { |
1647 a_pts = d_audio->pts + (ds_tell_pts(d_audio) - sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; | 1658 a_pts = calc_a_pts(d_audio); |
1648 while (sh_video->pts - frame_data->frame_time > a_pts) { | 1659 while (sh_video->pts - frame_data->frame_time > a_pts) { |
1649 int len; | 1660 int len; |
1650 if (samplesize) { | 1661 if (samplesize) { |
1651 len = avg * (sh_video->pts - frame_data->frame_time - a_pts); | 1662 len = avg * (sh_video->pts - frame_data->frame_time - a_pts); |
1652 len/= samplesize; if(len<1) len=1; | 1663 len/= samplesize; if(len<1) len=1; |
1655 } else { | 1666 } else { |
1656 unsigned char * crap; | 1667 unsigned char * crap; |
1657 len = ds_get_packet(sh_audio->ds, &crap); | 1668 len = ds_get_packet(sh_audio->ds, &crap); |
1658 } | 1669 } |
1659 if (len <= 0) break; // EOF of audio. | 1670 if (len <= 0) break; // EOF of audio. |
1660 a_pts = d_audio->pts + (ds_tell_pts(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; | 1671 a_pts = calc_a_pts(d_audio); |
1661 } | 1672 } |
1662 } | 1673 } |
1663 | 1674 |
1664 if (done) { | 1675 if (done) { |
1665 frame_data->already_read = 1; | 1676 frame_data->already_read = 1; |