[Swfdec-commits] 2 commits - swfdec-gtk/swfdec_playback_alsa.c swfdec/swfdec_as_interpret.c

Benjamin Otte company at kemper.freedesktop.org
Mon Sep 1 02:29:11 PDT 2008


 swfdec-gtk/swfdec_playback_alsa.c |   21 ++++++++++++++++++---
 swfdec/swfdec_as_interpret.c      |    9 +++------
 2 files changed, 21 insertions(+), 9 deletions(-)

New commits:
commit e26d6334bf325c564db28a8d3260a04f5a869e76
Author: Riccardo Magliocchetti <riccardo at datahost.it>
Date:   Mon Sep 1 11:26:51 2008 +0200

    don't stop playing sounds on xrun (fixes #17307)

diff --git a/swfdec-gtk/swfdec_playback_alsa.c b/swfdec-gtk/swfdec_playback_alsa.c
index f4711e9..af83c9f 100644
--- a/swfdec-gtk/swfdec_playback_alsa.c
+++ b/swfdec-gtk/swfdec_playback_alsa.c
@@ -105,6 +105,22 @@ write_player (Stream *stream, const snd_pcm_channel_area_t *dst,
   return rendered;
 }
 
+static void swfdec_playback_stream_start (Stream *stream);
+
+static snd_pcm_sframes_t
+swfdec_playback_stream_avail_update (Stream *stream)
+{
+  snd_pcm_sframes_t avail;
+
+  avail = snd_pcm_avail_update (stream->pcm);
+  if (avail == -EPIPE) {
+    /* We don't do a while (avail == -EPIPE) here, we don't want infloops on weird situations */
+    swfdec_playback_stream_start (stream);
+    avail = snd_pcm_avail_update (stream->pcm);
+  }
+  return avail;
+}
+
 static gboolean
 try_write_mmap (Stream *stream)
 {
@@ -113,7 +129,7 @@ try_write_mmap (Stream *stream)
   const snd_pcm_channel_area_t *dst;
 
   do {
-    avail_result = snd_pcm_avail_update (stream->pcm);
+    avail_result = swfdec_playback_stream_avail_update (stream);
     ALSA_ERROR (avail_result, "snd_pcm_avail_update failed", FALSE);
     if (avail_result == 0)
       return TRUE;
@@ -141,7 +157,7 @@ try_write_so_pa_gets_it (Stream *stream)
   snd_pcm_sframes_t avail, step, written;
   gboolean finish = FALSE;
 
-  avail = snd_pcm_avail_update (stream->pcm);
+  avail = swfdec_playback_stream_avail_update (stream);
   ALSA_ERROR (avail, "snd_pcm_avail_update failed", FALSE);
 
   while (avail > 0 && !finish) {
@@ -165,7 +181,6 @@ try_write_so_pa_gets_it (Stream *stream)
 
 #define try_write(stream) ((stream)->write (stream))
 
-static void swfdec_playback_stream_start (Stream *stream);
 static gboolean
 handle_stream (GIOChannel *source, GIOCondition cond, gpointer data)
 {
commit 2c37049d4e44d2e572b83f279befe577784c596f
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Aug 29 23:23:06 2008 +0200

    make getTimer use doubles

diff --git a/swfdec/swfdec_as_interpret.c b/swfdec/swfdec_as_interpret.c
index 5df3d67..b29ca50 100644
--- a/swfdec/swfdec_as_interpret.c
+++ b/swfdec/swfdec_as_interpret.c
@@ -2198,18 +2198,15 @@ static void
 swfdec_action_get_time (SwfdecAsContext *cx, guint action, const guint8 *data, guint len)
 {
   GTimeVal tv;
-  gulong diff;
+  double diff;
 
   swfdec_as_context_get_time (cx, &tv);
   /* we assume here that swfdec_as_context_get_time always returns a tv > start_time */
   diff = tv.tv_sec - cx->start_time.tv_sec;
-  if (diff > G_MAXULONG / 1000 - 1) {
-    SWFDEC_ERROR ("FIXME: time overflow");
-  }
   diff *= 1000;
-  diff = diff + (tv.tv_usec - cx->start_time.tv_usec) / 1000;
+  diff += (tv.tv_usec - cx->start_time.tv_usec) / 1000;
 
-  SWFDEC_AS_VALUE_SET_INT (swfdec_as_stack_push (cx), diff);
+  SWFDEC_AS_VALUE_SET_NUMBER (swfdec_as_stack_push (cx), diff);
 }
 
 static gboolean


More information about the Swfdec-commits mailing list