summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@gnome.org>2008-12-16 12:34:26 +0100
committerBenjamin Otte <otte@gnome.org>2008-12-16 12:34:26 +0100
commit4e1659795d9a18a9b5a47a4626d89fbb1b2cf9c9 (patch)
treef17fcb5b1e130c86c3ba5e7d844287022b2802a5
parentf13dd37ca4cbf1bc5b80fa2fe215be1bf743d164 (diff)
add API necessary for H264
-rw-r--r--swfdec/swfdec_video_decoder.c32
-rw-r--r--swfdec/swfdec_video_decoder.h7
2 files changed, 39 insertions, 0 deletions
diff --git a/swfdec/swfdec_video_decoder.c b/swfdec/swfdec_video_decoder.c
index c09a2930..527ac1e0 100644
--- a/swfdec/swfdec_video_decoder.c
+++ b/swfdec/swfdec_video_decoder.c
@@ -30,8 +30,17 @@
G_DEFINE_TYPE (SwfdecVideoDecoder, swfdec_video_decoder, G_TYPE_OBJECT)
static void
+swfdec_video_decoder_do_set_codec_data (SwfdecVideoDecoder *decoder,
+ SwfdecBuffer *buffer)
+{
+ SWFDEC_WARNING ("%s does not implement codec data",
+ G_OBJECT_TYPE_NAME (decoder));
+}
+
+static void
swfdec_video_decoder_class_init (SwfdecVideoDecoderClass *klass)
{
+ klass->set_codec_data = swfdec_video_decoder_do_set_codec_data;
}
static void
@@ -65,6 +74,7 @@ swfdec_video_codec_get_format (guint codec)
case SWFDEC_VIDEO_CODEC_H263:
case SWFDEC_VIDEO_CODEC_VP6:
case SWFDEC_VIDEO_CODEC_VP6_ALPHA:
+ case SWFDEC_VIDEO_CODEC_H264:
return SWFDEC_VIDEO_FORMAT_I420;
case SWFDEC_VIDEO_CODEC_UNDEFINED:
case SWFDEC_VIDEO_CODEC_SCREEN:
@@ -142,6 +152,28 @@ swfdec_video_decoder_new (guint codec)
}
/**
+ * swfdec_video_decoder_set_codec_data:
+ * @decoder: a video decoder
+ * @buffer: setup data for the decoder. May be %NULL
+ *
+ * Provides setup data for the video decoder. This function is usually called
+ * on initialization, but can be called at any time. Currently this
+ * functionality is only used for H264.
+ **/
+void
+swfdec_video_decoder_set_codec_data (SwfdecVideoDecoder *decoder, SwfdecBuffer *buffer)
+{
+ SwfdecVideoDecoderClass *klass;
+
+ g_return_if_fail (SWFDEC_IS_VIDEO_DECODER (decoder));
+
+ if (decoder->error)
+ return;
+ klass = SWFDEC_VIDEO_DECODER_GET_CLASS (decoder);
+ klass->set_codec_data (decoder, buffer);
+}
+
+/**
* swfdec_video_decoder_decode:
* @decoder: a #SwfdecVideoDecoder
* @buffer: a #SwfdecBuffer to process
diff --git a/swfdec/swfdec_video_decoder.h b/swfdec/swfdec_video_decoder.h
index 2b1b6636..21248fab 100644
--- a/swfdec/swfdec_video_decoder.h
+++ b/swfdec/swfdec_video_decoder.h
@@ -32,6 +32,7 @@ G_BEGIN_DECLS
#define SWFDEC_VIDEO_CODEC_VP6 4
#define SWFDEC_VIDEO_CODEC_VP6_ALPHA 5
#define SWFDEC_VIDEO_CODEC_SCREEN2 6
+#define SWFDEC_VIDEO_CODEC_H264 7
typedef enum {
SWFDEC_VIDEO_FORMAT_RGBA,
@@ -75,6 +76,9 @@ struct _SwfdecVideoDecoderClass
char ** missing);
SwfdecVideoDecoder * (* create) (guint codec);
+ void (* set_codec_data)
+ (SwfdecVideoDecoder * decoder,
+ SwfdecBuffer * buffer);
void (* decode) (SwfdecVideoDecoder * decoder,
SwfdecBuffer * buffer);
};
@@ -90,6 +94,9 @@ gboolean swfdec_video_decoder_prepare (guint codec,
SwfdecVideoDecoder * swfdec_video_decoder_new (guint codec);
+void swfdec_video_decoder_set_codec_data
+ (SwfdecVideoDecoder * decoder,
+ SwfdecBuffer * buffer);
void swfdec_video_decoder_decode (SwfdecVideoDecoder * decoder,
SwfdecBuffer * buffer);
guint swfdec_video_decoder_get_codec (SwfdecVideoDecoder * decoder);