[Swfdec] 3 commits - libswfdec/swfdec_as_interpret.c libswfdec/swfdec_codec_audio.h test/swfdec-extract.c
Benjamin Otte
company at kemper.freedesktop.org
Mon Oct 15 12:12:01 PDT 2007
libswfdec/swfdec_as_interpret.c | 1
libswfdec/swfdec_codec_audio.h | 2 -
test/swfdec-extract.c | 43 ++++++++++++++++++++++++++--------------
3 files changed, 30 insertions(+), 16 deletions(-)
New commits:
commit e1267777e2a617fcafb578fa411a5c739ef51253
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Oct 15 21:11:57 2007 +0200
indent
diff --git a/libswfdec/swfdec_codec_audio.h b/libswfdec/swfdec_codec_audio.h
index 157eadf..8a0f4f1 100644
--- a/libswfdec/swfdec_codec_audio.h
+++ b/libswfdec/swfdec_codec_audio.h
@@ -49,7 +49,7 @@ struct _SwfdecAudioDecoder {
SwfdecAudioDecoder * swfdec_audio_decoder_new (SwfdecAudioCodec codec,
SwfdecAudioFormat format);
void swfdec_audio_decoder_free (SwfdecAudioDecoder * decoder);
-SwfdecAudioFormat swfdec_audio_decoder_get_format (SwfdecAudioDecoder * decoder);
+SwfdecAudioFormat swfdec_audio_decoder_get_format (SwfdecAudioDecoder * decoder);
void swfdec_audio_decoder_push (SwfdecAudioDecoder * decoder,
SwfdecBuffer * buffer);
SwfdecBuffer * swfdec_audio_decoder_pull (SwfdecAudioDecoder * decoder);
commit 2fad068e134ad983a46a46725dc2a449b178d6ce
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Oct 15 21:11:46 2007 +0200
fix to work with new audio stuff
diff --git a/test/swfdec-extract.c b/test/swfdec-extract.c
index 1466de6..07dce11 100644
--- a/test/swfdec-extract.c
+++ b/test/swfdec-extract.c
@@ -44,20 +44,36 @@
#include <libswfdec/swfdec_swf_instance.h>
static SwfdecBuffer *
-encode_wav (SwfdecBuffer *buffer)
+encode_wav (SwfdecBuffer *buffer, SwfdecAudioFormat format)
{
SwfdecBuffer *wav = swfdec_buffer_new_and_alloc (buffer->length + 44);
unsigned char *data;
guint i;
data = wav->data;
+ /* FIXME: too much magic in this memmove */
memmove (data, "RIFF----WAVEfmt \020\0\0\0"
- "\001\0\002\0D\254\0\0\020\261\002\0\004\0\020\0data", 40);
- *(gint32 *) &data[4] = GUINT32_TO_LE (buffer->length + 36);
- *(gint32 *) &data[40] = GUINT32_TO_LE (buffer->length);
+ "\001\0ccRRRRbbbbAAbbdata", 40);
+ *(guint32 *) &data[4] = GUINT32_TO_LE (buffer->length + 36);
+ *(guint16 *) &data[22] = GUINT16_TO_LE (swfdec_audio_format_get_channels (format));
+ *(guint32 *) &data[24] = GUINT32_TO_LE (swfdec_audio_format_get_rate (format));
+ /* bits per sample */
+ i = swfdec_audio_format_is_16bit (format) ? 2 : 1;
+ *(guint16 *) &data[34] = GUINT16_TO_LE (i * 8);
+ /* block align */
+ i *= swfdec_audio_format_get_channels (format);
+ *(guint16 *) &data[32] = GUINT16_TO_LE (i);
+ /* bytes per second */
+ i *= swfdec_audio_format_get_rate (format);
+ *(guint32 *) &data[28] = GUINT32_TO_LE (i);
+ *(guint32 *) &data[40] = GUINT32_TO_LE (buffer->length);
data += 44;
- for (i = 0; i < buffer->length; i += 2) {
- *(gint16 *) (data + i) = GINT16_TO_LE (*(gint16* )(buffer->data + i));
+ if (swfdec_audio_format_is_16bit (format)) {
+ for (i = 0; i < buffer->length; i += 2) {
+ *(gint16 *) (data + i) = GINT16_TO_LE (*(gint16* )(buffer->data + i));
+ }
+ } else {
+ memcpy (data, buffer->data, buffer->length);
}
return wav;
}
@@ -66,17 +82,16 @@ static gboolean
export_sound (SwfdecSound *sound, const char *filename)
{
GError *error = NULL;
- SwfdecBuffer *wav;
- gint16 tmp[2];
+ SwfdecBuffer *wav, *buffer;
+ SwfdecAudioFormat format;
/* try to render the sound, that should decode it. */
- swfdec_sound_render (sound, tmp, 0, 1);
-
- if (sound->decoded == NULL) {
- g_printerr ("not a sound event. For extraction of streams extract the sprite.\n");
+ buffer = swfdec_sound_get_decoded (sound, &format);
+ if (buffer == NULL) {
+ g_printerr ("Couldn't decode sound. For extraction of streams extract the sprite.\n");
return FALSE;
}
- wav = encode_wav (sound->decoded);
+ wav = encode_wav (buffer, format);
if (!g_file_set_contents (filename, (char *) wav->data,
wav->length, &error)) {
g_printerr ("Couldn't save sound to file \"%s\": %s\n", filename, error->message);
@@ -133,7 +148,7 @@ export_sprite_sound (SwfdecSprite *sprite, const char *filename)
}
buffer = swfdec_buffer_queue_pull (queue, depth);
swfdec_buffer_queue_unref (queue);
- wav = encode_wav (buffer);
+ wav = encode_wav (buffer, swfdec_audio_format_new (44100, 2, TRUE));
swfdec_buffer_unref (buffer);
if (!g_file_set_contents (filename, (char *) wav->data,
wav->length, &error)) {
commit 7477b57ae166cf3a1f08550637c20d4215fe3341
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Oct 15 20:00:42 2007 +0200
Pop ction appeared twice in list
diff --git a/libswfdec/swfdec_as_interpret.c b/libswfdec/swfdec_as_interpret.c
index f2022b4..e11397f 100644
--- a/libswfdec/swfdec_as_interpret.c
+++ b/libswfdec/swfdec_as_interpret.c
@@ -2795,7 +2795,6 @@ const SwfdecActionSpec swfdec_as_actions[256] = {
[SWFDEC_AS_ACTION_ASCII_TO_CHAR] = { "AsciiToChar", NULL, 1, 1, { NULL, swfdec_action_ascii_to_char_5, swfdec_action_ascii_to_char_5, swfdec_action_ascii_to_char, swfdec_action_ascii_to_char } },
[SWFDEC_AS_ACTION_GET_TIME] = { "GetTime", NULL, 0, 1, { NULL, swfdec_action_get_time, swfdec_action_get_time, swfdec_action_get_time, swfdec_action_get_time } },
[SWFDEC_AS_ACTION_MB_STRING_EXTRACT] = { "MBStringExtract", NULL, 3, 1, { NULL, swfdec_action_string_extract, swfdec_action_string_extract, swfdec_action_string_extract, swfdec_action_string_extract } },
- [SWFDEC_AS_ACTION_POP] = { "Pop", NULL, 1, 0, { NULL, swfdec_action_pop, swfdec_action_pop, swfdec_action_pop, swfdec_action_pop } },
[SWFDEC_AS_ACTION_MB_CHAR_TO_ASCII] = { "MBCharToAscii", NULL },
[SWFDEC_AS_ACTION_MB_ASCII_TO_CHAR] = { "MBAsciiToChar", NULL, 1, 1, { NULL, swfdec_action_mb_ascii_to_char_5, swfdec_action_mb_ascii_to_char_5, swfdec_action_ascii_to_char, swfdec_action_ascii_to_char } },
/* version 5 */
More information about the Swfdec
mailing list