summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@gnome.org>2008-12-16 12:59:13 +0100
committerBenjamin Otte <otte@gnome.org>2008-12-16 12:59:13 +0100
commit07b2fd4007020759e6ff2ad9a0086e245a14e544 (patch)
tree3b677ef588fe3bb342094e5913a1aa4cfe6c16cd
parent65f9f907d95568fe4d2e108b40912d6bed5ee7a9 (diff)
add codec data API to the audio decoder, too
-rw-r--r--swfdec/swfdec_audio_decoder.c31
-rw-r--r--swfdec/swfdec_audio_decoder.h12
2 files changed, 43 insertions, 0 deletions
diff --git a/swfdec/swfdec_audio_decoder.c b/swfdec/swfdec_audio_decoder.c
index 72be7326..c1dbf605 100644
--- a/swfdec/swfdec_audio_decoder.c
+++ b/swfdec/swfdec_audio_decoder.c
@@ -28,8 +28,17 @@
G_DEFINE_TYPE (SwfdecAudioDecoder, swfdec_audio_decoder, G_TYPE_OBJECT)
static void
+swfdec_audio_decoder_do_set_codec_data (SwfdecAudioDecoder *decoder,
+ SwfdecBuffer *buffer)
+{
+ SWFDEC_WARNING ("%s does not implement codec data",
+ G_OBJECT_TYPE_NAME (decoder));
+}
+
+static void
swfdec_audio_decoder_class_init (SwfdecAudioDecoderClass *klass)
{
+ klass->set_codec_data = swfdec_audio_decoder_do_set_codec_data;
}
static void
@@ -117,6 +126,28 @@ swfdec_audio_decoder_new (guint codec, SwfdecAudioFormat format)
}
/**
+ * swfdec_audio_decoder_set_codec_data:
+ * @decoder: an audio decoder
+ * @buffer: setup data for the decoder. May be %NULL
+ *
+ * Provides setup data for the audio decoder. This function is usually called
+ * on initialization, but can be called at any time. Currently this
+ * functionality is only used for AAC audio.
+ **/
+void
+swfdec_audio_decoder_set_codec_data (SwfdecAudioDecoder *decoder, SwfdecBuffer *buffer)
+{
+ SwfdecAudioDecoderClass *klass;
+
+ g_return_if_fail (SWFDEC_IS_AUDIO_DECODER (decoder));
+
+ if (decoder->error)
+ return;
+ klass = SWFDEC_AUDIO_DECODER_GET_CLASS (decoder);
+ klass->set_codec_data (decoder, buffer);
+}
+
+/**
* swfdec_audio_decoder_push:
* @decoder: a #SwfdecAudioDecoder
* @buffer: a #SwfdecBuffer to process or %NULL to flush
diff --git a/swfdec/swfdec_audio_decoder.h b/swfdec/swfdec_audio_decoder.h
index e0e2960b..ee72d3ed 100644
--- a/swfdec/swfdec_audio_decoder.h
+++ b/swfdec/swfdec_audio_decoder.h
@@ -30,8 +30,14 @@ G_BEGIN_DECLS
#define SWFDEC_AUDIO_CODEC_ADPCM 1
#define SWFDEC_AUDIO_CODEC_MP3 2
#define SWFDEC_AUDIO_CODEC_UNCOMPRESSED 3
+#define SWFDEC_AUDIO_CODEC_NELLYMOSER_16KHZ 4
#define SWFDEC_AUDIO_CODEC_NELLYMOSER_8KHZ 5
#define SWFDEC_AUDIO_CODEC_NELLYMOSER 6
+#define SWFDEC_AUDIO_CODEC_ALAW 7
+#define SWFDEC_AUDIO_CODEC_MULAW 8
+#define SWFDEC_AUDIO_CODEC_AAC 10
+#define SWFDEC_AUDIO_CODEC_SPEEX 11
+#define SWFDEC_AUDIO_CODEC_MP3_8KHZ 14
typedef struct _SwfdecAudioDecoder SwfdecAudioDecoder;
@@ -66,6 +72,9 @@ struct _SwfdecAudioDecoderClass
SwfdecAudioDecoder * (* create) (guint codec,
SwfdecAudioFormat format);
+ void (* set_codec_data)
+ (SwfdecAudioDecoder * decoder,
+ SwfdecBuffer * buffer);
void (* push) (SwfdecAudioDecoder * decoder,
SwfdecBuffer * buffer);
SwfdecBuffer * (* pull) (SwfdecAudioDecoder * decoder);
@@ -81,6 +90,9 @@ gboolean swfdec_audio_decoder_prepare (guint codec,
SwfdecAudioDecoder * swfdec_audio_decoder_new (guint codec,
SwfdecAudioFormat format);
+void swfdec_audio_decoder_set_codec_data
+ (SwfdecAudioDecoder * decoder,
+ SwfdecBuffer * buffer);
void swfdec_audio_decoder_push (SwfdecAudioDecoder * decoder,
SwfdecBuffer * buffer);
SwfdecBuffer * swfdec_audio_decoder_pull (SwfdecAudioDecoder * decoder);