summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiguel Freitas <miguelfreitas@users.sourceforge.net>2002-04-07 12:09:38 +0000
committerMiguel Freitas <miguelfreitas@users.sourceforge.net>2002-04-07 12:09:38 +0000
commita9792bf33ed79c9ec40cb8a391c3f8434e42acd2 (patch)
tree93012f4a3b6e041bb6ad4935b636d7f8dd4fac54
parenteb5dd4849586bdd496d7a03657f5cf924e6822c0 (diff)
downloadxine-lib-a9792bf33ed79c9ec40cb8a391c3f8434e42acd2.tar.gz
xine-lib-a9792bf33ed79c9ec40cb8a391c3f8434e42acd2.tar.bz2
fix bug where metronom_got_audio_samples() is called before
in_discontinuity was set. CVS patchset: 1693 CVS date: 2002/04/07 12:09:38
-rw-r--r--src/xine-engine/metronom.c15
-rw-r--r--src/xine-engine/metronom.h3
2 files changed, 16 insertions, 2 deletions
diff --git a/src/xine-engine/metronom.c b/src/xine-engine/metronom.c
index e660815e6..5e00d273d 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.78 2002/04/01 12:09:10 miguelfreitas Exp $
+ * $Id: metronom.c,v 1.79 2002/04/07 12:09:38 miguelfreitas Exp $
*/
#ifdef HAVE_CONFIG_H
@@ -325,6 +325,10 @@ static void metronom_handle_video_discontinuity (metronom_t *this, int type,
this->in_discontinuity = 30;
break;
}
+
+ this->discontinuity_handled_count++;
+ pthread_cond_signal (&this->video_discontinuity_reached);
+
pthread_mutex_unlock (&this->lock);
}
@@ -436,6 +440,14 @@ static void metronom_handle_audio_discontinuity (metronom_t *this, int type,
}
/* next_vpts_offset, in_discontinuity is handled in expect_video_discontinuity */
+ while ( this->audio_discontinuity_count >
+ this->discontinuity_handled_count ) {
+
+ printf ("metronom: waiting for in_discontinuity update #%d\n",
+ this->audio_discontinuity_count);
+
+ pthread_cond_wait (&this->video_discontinuity_reached, &this->lock);
+ }
this->audio_samples = 0;
this->audio_drift_step = 0;
@@ -699,6 +711,7 @@ metronom_t * metronom_init (int have_audio, void *xine) {
this->video_drift = 0;
this->video_drift_step = 0;
this->video_discontinuity_count = 0;
+ this->discontinuity_handled_count = 0;
pthread_cond_init (&this->video_discontinuity_reached, NULL);
/* initialize audio stuff */
diff --git a/src/xine-engine/metronom.h b/src/xine-engine/metronom.h
index f470eb00e..4fb0c7667 100644
--- a/src/xine-engine/metronom.h
+++ b/src/xine-engine/metronom.h
@@ -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.h,v 1.28 2002/04/01 12:09:10 miguelfreitas Exp $
+ * $Id: metronom.h,v 1.29 2002/04/07 12:09:38 miguelfreitas Exp $
*
* metronom: general pts => virtual calculation/assoc
*
@@ -232,6 +232,7 @@ struct metronom_s {
int have_audio;
int video_discontinuity_count;
int audio_discontinuity_count;
+ int discontinuity_handled_count;
pthread_cond_t video_discontinuity_reached;
pthread_cond_t audio_discontinuity_reached;
pthread_cond_t cancel;