[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