diff options
author | Guenter Bartsch <guenter@users.sourceforge.net> | 2002-03-20 23:12:58 +0000 |
---|---|---|
committer | Guenter Bartsch <guenter@users.sourceforge.net> | 2002-03-20 23:12:58 +0000 |
commit | d1eca278036b0abedb86545257a7c1b026d1d0d8 (patch) | |
tree | 6340dbab0f37669ddf38f02f09729d6863bf7d7d /src/xine-engine/metronom.c | |
parent | f461a6cb075255690fcab513648911110b63dca6 (diff) | |
download | xine-lib-d1eca278036b0abedb86545257a7c1b026d1d0d8.tar.gz xine-lib-d1eca278036b0abedb86545257a7c1b026d1d0d8.tar.bz2 |
steps towards dvd playback:
- cleanup / more types of discontinuity handling in metronom
- disc detection based on nav-packets
small video_out fix to make exiting xine easier in case it gets stuck
CVS patchset: 1599
CVS date: 2002/03/20 23:12:58
Diffstat (limited to 'src/xine-engine/metronom.c')
-rw-r--r-- | src/xine-engine/metronom.c | 45 |
1 files changed, 19 insertions, 26 deletions
diff --git a/src/xine-engine/metronom.c b/src/xine-engine/metronom.c index 80745a727..f589a9554 100644 --- a/src/xine-engine/metronom.c +++ b/src/xine-engine/metronom.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: metronom.c,v 1.70 2002/03/12 22:23:14 guenter Exp $ + * $Id: metronom.c,v 1.71 2002/03/20 23:12:58 guenter Exp $ */ #ifdef HAVE_CONFIG_H @@ -274,7 +274,7 @@ static int64_t metronom_got_spu_packet (metronom_t *this, int64_t pts, return vpts; } -static void metronom_handle_video_discontinuity (metronom_t *this, int is_stream_start, +static void metronom_handle_video_discontinuity (metronom_t *this, int type, int64_t disc_off) { pthread_mutex_lock (&this->lock); @@ -282,8 +282,8 @@ static void metronom_handle_video_discontinuity (metronom_t *this, int is_stream this->video_discontinuity_count++; pthread_cond_signal (&this->video_discontinuity_reached); - printf ("metronom: video discontinuity #%d, disc_off is %lld\n", - this->video_discontinuity_count, disc_off); + printf ("metronom: video discontinuity #%d, type is %d, disc_off is %lld\n", + this->video_discontinuity_count, type, disc_off); if (this->have_audio) { while (this->audio_discontinuity_count < @@ -304,24 +304,23 @@ static void metronom_handle_video_discontinuity (metronom_t *this, int is_stream if (this->in_discontinuity) this->vpts_offset = this->next_vpts_offset; - if (is_stream_start) { - this->vpts_offset = this->video_vpts; + switch (type) { + case DISC_STREAMSTART: + this->vpts_offset = this->video_vpts; this->in_discontinuity = 0; - } else { + break; + case DISC_ABSOLUTE: + this->next_vpts_offset = this->video_vpts - disc_off; + this->in_discontinuity = 30; + break; + case DISC_RELATIVE: this->next_vpts_offset = this->vpts_offset - disc_off; this->in_discontinuity = 30; + break; } pthread_mutex_unlock (&this->lock); } -static void metronom_video_stream_start (metronom_t *this) { - metronom_handle_video_discontinuity (this, 1, 0); -} - -static void metronom_expect_video_discontinuity (metronom_t *this, int64_t disc_off) { - metronom_handle_video_discontinuity (this, 0, disc_off); -} - static void metronom_got_video_frame (metronom_t *this, vo_frame_t *img) { int64_t vpts; @@ -399,7 +398,7 @@ static void metronom_got_video_frame (metronom_t *this, vo_frame_t *img) { pthread_mutex_unlock (&this->lock); } -static void metronom_expect_audio_discontinuity (metronom_t *this, +static void metronom_handle_audio_discontinuity (metronom_t *this, int type, int64_t disc_off) { pthread_mutex_lock (&this->lock); @@ -407,8 +406,8 @@ static void metronom_expect_audio_discontinuity (metronom_t *this, this->audio_discontinuity_count++; pthread_cond_signal (&this->audio_discontinuity_reached); - printf ("metronom: audio discontinuity #%d, disc_off %lld\n", - this->audio_discontinuity_count, disc_off); + printf ("metronom: audio discontinuity #%d, type is %d, disc_off %lld\n", + this->audio_discontinuity_count, type, disc_off); while ( this->audio_discontinuity_count > this->video_discontinuity_count ) { @@ -429,10 +428,6 @@ static void metronom_expect_audio_discontinuity (metronom_t *this, pthread_mutex_unlock (&this->lock); } -static void metronom_audio_stream_start (metronom_t *this) { - metronom_expect_audio_discontinuity (this, 0); -} - static int64_t metronom_got_audio_samples (metronom_t *this, int64_t pts, int nsamples) { @@ -587,10 +582,8 @@ metronom_t * metronom_init (int have_audio, void *xine) { this->got_video_frame = metronom_got_video_frame; this->got_audio_samples = metronom_got_audio_samples; this->got_spu_packet = metronom_got_spu_packet; - this->audio_stream_start = metronom_audio_stream_start; - this->video_stream_start = metronom_video_stream_start; - this->expect_audio_discontinuity = metronom_expect_audio_discontinuity; - this->expect_video_discontinuity = metronom_expect_video_discontinuity; + this->handle_audio_discontinuity = metronom_handle_audio_discontinuity; + this->handle_video_discontinuity = metronom_handle_video_discontinuity; this->set_av_offset = metronom_set_av_offset; this->get_av_offset = metronom_get_av_offset; this->start_clock = metronom_start_clock; |