[Swfdec] 3 commits - libswfdec/swfdec_audio_event.c libswfdec/swfdec_sound.c

Pekka Lampila medar at kemper.freedesktop.org
Sun Nov 18 09:42:55 PST 2007


 libswfdec/swfdec_audio_event.c |   24 ++++++++++++------------
 libswfdec/swfdec_sound.c       |    4 ++++
 2 files changed, 16 insertions(+), 12 deletions(-)

New commits:
commit 18c5498527fafbd536c1ba79117f2983469e5cc7
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Sun Nov 18 19:42:39 2007 +0200

    Don't return double from swfdec_audio_event_get_envelop_volume

diff --git a/libswfdec/swfdec_audio_event.c b/libswfdec/swfdec_audio_event.c
index 3c3b603..13fb588 100644
--- a/libswfdec/swfdec_audio_event.c
+++ b/libswfdec/swfdec_audio_event.c
@@ -50,32 +50,32 @@ swfdec_audio_event_iterate (SwfdecAudio *audio, guint remove)
     return 0;
 }
 
-static double
+static guint16
 swfdec_audio_event_get_envelop_volume (SwfdecAudioEvent *event, guint pos,
     guint offset, guint channel)
 {
   double distance;
 
-  g_return_val_if_fail (SWFDEC_IS_AUDIO_EVENT (event), 1);
-  g_return_val_if_fail (pos <= event->n_envelopes, 1);
-  g_return_val_if_fail (channel == 0 || channel == 1, 1);
+  g_return_val_if_fail (SWFDEC_IS_AUDIO_EVENT (event), 32768);
+  g_return_val_if_fail (pos <= event->n_envelopes, 32768);
+  g_return_val_if_fail (channel == 0 || channel == 1, 32768);
 
   if (event->n_envelopes == 0)
-    return 1;
+    return 32768;
 
   if (pos == 0)
-    return event->envelope[pos].volume[channel] / 32768.0;
+    return event->envelope[pos].volume[channel];
 
   if (pos == event->n_envelopes)
-    return event->envelope[pos - 1].volume[channel] / 32768.0;
+    return event->envelope[pos - 1].volume[channel];
 
   distance = event->envelope[pos].offset - event->envelope[pos - 1].offset;
   g_return_val_if_fail (offset >= event->envelope[pos - 1].offset, 1);
   offset -= event->envelope[pos - 1].offset;
   g_return_val_if_fail (offset < distance, 1);
 
-  return (event->envelope[pos - 1].volume[channel] * (1 - offset / distance) +
-      event->envelope[pos].volume[channel] * (offset / distance)) / 32768.0;
+  return event->envelope[pos - 1].volume[channel] * (1 - offset / distance) +
+    event->envelope[pos].volume[channel] * (offset / distance);
 }
 
 static void
@@ -119,13 +119,13 @@ swfdec_audio_event_render (SwfdecAudio *audio, gint16* dest, guint start,
 	event->envelope[pos].offset <= global_offset + (i / 2))
       pos++;
     if (channels == 1) {
-      dest[i] *= swfdec_audio_event_get_envelop_volume (event, pos,
+      dest[i] *= (swfdec_audio_event_get_envelop_volume (event, pos,
 	  global_offset + (i / 2), 0) * 0.5 +
 	  swfdec_audio_event_get_envelop_volume (event, pos,
-	    global_offset + (i / 2), 1) * 0.5;
+	    global_offset + (i / 2), 1) * 0.5) / 32768.0;
     } else {
       dest[i] *= swfdec_audio_event_get_envelop_volume (event, pos,
-	  global_offset + (i / 2), i % 2);
+	  global_offset + (i / 2), i % 2) / 32768.0;
     }
   }
 }
commit c0dcf0bbf9feb29c792e5791595e235210f4261e
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Sun Nov 18 18:08:45 2007 +0200

    Fix yet another oops in the sound envelope code

diff --git a/libswfdec/swfdec_audio_event.c b/libswfdec/swfdec_audio_event.c
index a0d1581..3c3b603 100644
--- a/libswfdec/swfdec_audio_event.c
+++ b/libswfdec/swfdec_audio_event.c
@@ -122,7 +122,7 @@ swfdec_audio_event_render (SwfdecAudio *audio, gint16* dest, guint start,
       dest[i] *= swfdec_audio_event_get_envelop_volume (event, pos,
 	  global_offset + (i / 2), 0) * 0.5 +
 	  swfdec_audio_event_get_envelop_volume (event, pos,
-	    global_offset + (i / 2), 1);
+	    global_offset + (i / 2), 1) * 0.5;
     } else {
       dest[i] *= swfdec_audio_event_get_envelop_volume (event, pos,
 	  global_offset + (i / 2), i % 2);
commit b1b1e84b689c361b69147adc523a50ebc58aeb5a
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Sun Nov 18 18:01:53 2007 +0200

    In StartSound tag loop_count 0 means 1

diff --git a/libswfdec/swfdec_sound.c b/libswfdec/swfdec_sound.c
index 4b97df5..dffe212 100644
--- a/libswfdec/swfdec_sound.c
+++ b/libswfdec/swfdec_sound.c
@@ -348,6 +348,10 @@ swfdec_sound_parse_chunk (SwfdecSwfDecoder *s, SwfdecBits *b, int id)
   }
   if (has_loops) {
     chunk->loop_count = swfdec_bits_get_u16 (b);
+    if (chunk->loop_count == 0) {
+      SWFDEC_ERROR ("loop_count 0 not allowed, setting to 1");
+      chunk->loop_count = 1;
+    }
     SWFDEC_LOG ("  loop_count = %u", chunk->loop_count);
   } else {
     chunk->loop_count = 1;


More information about the Swfdec mailing list