diff options
author | Benjamin Otte <otte@gnome.org> | 2008-12-16 12:34:26 +0100 |
---|---|---|
committer | Benjamin Otte <otte@gnome.org> | 2008-12-16 12:34:26 +0100 |
commit | 4e1659795d9a18a9b5a47a4626d89fbb1b2cf9c9 (patch) | |
tree | f17fcb5b1e130c86c3ba5e7d844287022b2802a5 | |
parent | f13dd37ca4cbf1bc5b80fa2fe215be1bf743d164 (diff) |
add API necessary for H264
-rw-r--r-- | swfdec/swfdec_video_decoder.c | 32 | ||||
-rw-r--r-- | swfdec/swfdec_video_decoder.h | 7 |
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); |