Mercurial > mplayer.hg
diff libmpdemux/demuxer.c @ 30378:8339bca8e4b4
Move the resync-related code into more consistent places instead of having it
scattered all over the place with half of it forgotten in some places.
author | reimar |
---|---|
date | Sun, 24 Jan 2010 15:16:39 +0000 |
parents | 4977e04f3a18 |
children | 0140d505dd91 |
line wrap: on
line diff
--- a/libmpdemux/demuxer.c Sun Jan 24 12:55:05 2010 +0000 +++ b/libmpdemux/demuxer.c Sun Jan 24 15:16:39 2010 +0000 @@ -1183,6 +1183,20 @@ return res; } +static void demux_resync(demuxer_t *demuxer) +{ + sh_video_t *sh_video = demuxer->video->sh; + sh_audio_t *sh_audio = demuxer->audio->sh; + demux_control(demuxer, DEMUXER_CTRL_RESYNC, NULL); + if (sh_video) { + ds_fill_buffer(demuxer->video); + resync_video_stream(sh_video); + } + if (sh_audio) { + ds_fill_buffer(demuxer->audio); + resync_audio_stream(sh_audio); + } +} void demux_flush(demuxer_t *demuxer) { @@ -1196,8 +1210,6 @@ { demux_stream_t *d_audio = demuxer->audio; demux_stream_t *d_video = demuxer->video; - sh_audio_t *sh_audio = d_audio->sh; - sh_video_t *sh_video = d_video->sh; double tmp = 0; double pts; @@ -1214,17 +1226,11 @@ } demux_flush(demuxer); - // clear demux buffers: - if (sh_audio) - sh_audio->a_buffer_len = 0; demuxer->stream->eof = 0; demuxer->video->eof = 0; demuxer->audio->eof = 0; - if (sh_video) - sh_video->timer = 0; // !!!!!! - if (flags & SEEK_ABSOLUTE) pts = 0.0f; else { @@ -1243,7 +1249,7 @@ if (stream_control(demuxer->stream, STREAM_CTRL_SEEK_TO_TIME, &pts) != STREAM_UNSUPPORTED) { - demux_control(demuxer, DEMUXER_CTRL_RESYNC, NULL); + demux_resync(demuxer); return 1; } @@ -1251,8 +1257,7 @@ if (demuxer->desc->seek) demuxer->desc->seek(demuxer, rel_seek_secs, audio_delay, flags); - if (sh_audio) - resync_audio_stream(sh_audio); + demux_resync(demuxer); return 1; } @@ -1475,8 +1480,6 @@ { int ris; int current, total; - sh_video_t *sh_video = demuxer->video->sh; - sh_audio_t *sh_audio = demuxer->audio->sh; if (!demuxer->num_chapters || !demuxer->chapters) { if (!mode) { @@ -1491,17 +1494,9 @@ ris = stream_control(demuxer->stream, STREAM_CTRL_SEEK_TO_CHAPTER, &chapter); - if (ris != STREAM_UNSUPPORTED) - demux_control(demuxer, DEMUXER_CTRL_RESYNC, NULL); - if (sh_video) { - ds_fill_buffer(demuxer->video); - resync_video_stream(sh_video); - } - if (sh_audio) { - ds_fill_buffer(demuxer->audio); - resync_audio_stream(sh_audio); - } + demux_resync(demuxer); + // exit status may be ok, but main() doesn't have to seek itself // (because e.g. dvds depend on sectors, not on pts) *seek_pts = -1.0; @@ -1525,6 +1520,9 @@ return ris != STREAM_UNSUPPORTED ? chapter : -1; } else { // chapters structure is set in the demuxer + sh_video_t *sh_video = demuxer->video->sh; + sh_audio_t *sh_audio = demuxer->audio->sh; + total = demuxer->num_chapters; if (mode == 1) //absolute seeking @@ -1659,8 +1657,6 @@ int demuxer_set_angle(demuxer_t *demuxer, int angle) { int ris, angles = -1; - sh_video_t *sh_video = demuxer->video->sh; - sh_audio_t *sh_audio = demuxer->audio->sh; angles = demuxer_angles_count(demuxer); if ((angles < 1) || (angle > angles)) @@ -1672,16 +1668,7 @@ if (ris == STREAM_UNSUPPORTED) return -1; - demux_control(demuxer, DEMUXER_CTRL_RESYNC, NULL); - if (sh_video) { - ds_fill_buffer(demuxer->video); - resync_video_stream(sh_video); - } - - if (sh_audio) { - ds_fill_buffer(demuxer->audio); - resync_audio_stream(sh_audio); - } + demux_resync(demuxer); return angle; }