X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gst%2Favi%2Fgstavidecoder.c;h=d4cb493f0f11a2f655ed143094ae7f3cde36ecaf;hb=5d25c00e4b613b9cdf2c04fa3a68dffa03834a68;hp=d0e33ba4a1ee12573c35a67454e42ea59cb30140;hpb=d8e18eb071a4c8759498e04da007d12d9d9d7081;p=platform%2Fupstream%2Fgst-plugins-good.git diff --git a/gst/avi/gstavidecoder.c b/gst/avi/gstavidecoder.c index d0e33ba..d4cb493 100644 --- a/gst/avi/gstavidecoder.c +++ b/gst/avi/gstavidecoder.c @@ -31,12 +31,11 @@ static GstElementDetails gst_avi_decoder_details = { "Decoder/Video", "Decodes a .avi file into audio and video", VERSION, - "Erik Walthinsen \n" - "Wim Taymans ", + "Erik Walthinsen \n" "Wim Taymans ", "(C) 1999", }; -static GstCaps* avi_typefind (GstBuffer *buf, gpointer private); +static GstCaps *avi_typefind (GstBuffer * buf, gpointer private); /* typefactory for 'avi' */ static GstTypeDefinition avidefinition = { @@ -47,12 +46,14 @@ static GstTypeDefinition avidefinition = { }; /* AviDecoder signals and args */ -enum { +enum +{ /* FILL ME */ LAST_SIGNAL }; -enum { +enum +{ ARG_0, ARG_BITRATE, ARG_MEDIA_TIME, @@ -61,118 +62,104 @@ enum { }; GST_PADTEMPLATE_FACTORY (sink_templ, - "sink", - GST_PAD_SINK, - GST_PAD_ALWAYS, - GST_CAPS_NEW ( - "avidecoder_sink", - "video/avi", - "RIFF", GST_PROPS_STRING ("AVI") - ) -) - -GST_PADTEMPLATE_FACTORY (src_video_templ, - "video_src", - GST_PAD_SRC, - GST_PAD_ALWAYS, - GST_CAPS_NEW ( - "wincodec_src", - "video/raw", - "format", GST_PROPS_LIST ( - GST_PROPS_FOURCC (GST_MAKE_FOURCC ('Y','U','Y','2')), - GST_PROPS_FOURCC (GST_MAKE_FOURCC ('I','4','2','0')), - GST_PROPS_FOURCC (GST_MAKE_FOURCC ('R','G','B',' ')) - ), - "width", GST_PROPS_INT_RANGE (16, 4096), - "height", GST_PROPS_INT_RANGE (16, 4096) - ) -) - -GST_PADTEMPLATE_FACTORY (src_audio_templ, - "audio_src", - GST_PAD_SRC, - GST_PAD_ALWAYS, - GST_CAPS_NEW ( - "src_audio", - "audio/raw", - "format", GST_PROPS_STRING ("int"), - "law", GST_PROPS_INT (0), - "endianness", GST_PROPS_INT (G_BYTE_ORDER), - "signed", GST_PROPS_LIST ( - GST_PROPS_BOOLEAN (TRUE), - GST_PROPS_BOOLEAN (FALSE) - ), - "width", GST_PROPS_LIST ( - GST_PROPS_INT (8), - GST_PROPS_INT (16) - ), - "depth", GST_PROPS_LIST ( - GST_PROPS_INT (8), - GST_PROPS_INT (16) - ), - "rate", GST_PROPS_INT_RANGE (11025, 48000), - "channels", GST_PROPS_INT_RANGE (1, 2) - ) -) - -static void gst_avi_decoder_class_init (GstAviDecoderClass *klass); -static void gst_avi_decoder_init (GstAviDecoder *avi_decoder); - -static void gst_avi_decoder_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); - - - -static GstElementClass *parent_class = NULL; + "sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_CAPS_NEW ("avidecoder_sink", + "video/avi", "RIFF", GST_PROPS_STRING ("AVI") + ) + ) + + GST_PADTEMPLATE_FACTORY (src_video_templ, + "video_src", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_CAPS_NEW ("wincodec_src", + "video/raw", + "format", GST_PROPS_LIST (GST_PROPS_FOURCC (GST_MAKE_FOURCC ('Y', 'U', 'Y', + '2')), GST_PROPS_FOURCC (GST_MAKE_FOURCC ('I', '4', '2', '0')), + GST_PROPS_FOURCC (GST_MAKE_FOURCC ('R', 'G', 'B', ' ')) + ), "width", GST_PROPS_INT_RANGE (16, 4096), "height", + GST_PROPS_INT_RANGE (16, 4096) + ) + ) + + GST_PADTEMPLATE_FACTORY (src_audio_templ, + "audio_src", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_CAPS_NEW ("src_audio", + "audio/raw", + "format", GST_PROPS_STRING ("int"), + "law", GST_PROPS_INT (0), + "endianness", GST_PROPS_INT (G_BYTE_ORDER), + "signed", GST_PROPS_LIST (GST_PROPS_BOOLEAN (TRUE), + GST_PROPS_BOOLEAN (FALSE) + ), "width", GST_PROPS_LIST (GST_PROPS_INT (8), GST_PROPS_INT (16) + ), "depth", GST_PROPS_LIST (GST_PROPS_INT (8), GST_PROPS_INT (16) + ), + "rate", GST_PROPS_INT_RANGE (11025, 48000), + "channels", GST_PROPS_INT_RANGE (1, 2) + ) + ) + + static void gst_avi_decoder_class_init (GstAviDecoderClass * klass); + static void gst_avi_decoder_init (GstAviDecoder * avi_decoder); + + static void gst_avi_decoder_get_property (GObject * object, guint prop_id, + GValue * value, GParamSpec * pspec); + + + + static GstElementClass *parent_class = NULL; + /*static guint gst_avi_decoder_signals[LAST_SIGNAL] = { 0 }; */ GType -gst_avi_decoder_get_type(void) +gst_avi_decoder_get_type (void) { static GType avi_decoder_type = 0; if (!avi_decoder_type) { static const GTypeInfo avi_decoder_info = { - sizeof(GstAviDecoderClass), + sizeof (GstAviDecoderClass), NULL, NULL, - (GClassInitFunc)gst_avi_decoder_class_init, + (GClassInitFunc) gst_avi_decoder_class_init, NULL, NULL, - sizeof(GstAviDecoder), + sizeof (GstAviDecoder), 0, - (GInstanceInitFunc)gst_avi_decoder_init, + (GInstanceInitFunc) gst_avi_decoder_init, }; - avi_decoder_type = g_type_register_static(GST_TYPE_BIN, "GstAviDecoder", &avi_decoder_info, 0); + avi_decoder_type = + g_type_register_static (GST_TYPE_BIN, "GstAviDecoder", + &avi_decoder_info, 0); } return avi_decoder_type; } static void -gst_avi_decoder_class_init (GstAviDecoderClass *klass) +gst_avi_decoder_class_init (GstAviDecoderClass * klass) { GObjectClass *gobject_class; GstElementClass *gstelement_class; - gobject_class = (GObjectClass*)klass; - gstelement_class = (GstElementClass*)klass; + gobject_class = (GObjectClass *) klass; + gstelement_class = (GstElementClass *) klass; - g_object_class_install_property (G_OBJECT_CLASS(klass), ARG_BITRATE, - g_param_spec_long ("bitrate","bitrate","bitrate", - G_MINLONG, G_MAXLONG, 0, G_PARAM_READABLE)); /* CHECKME */ - g_object_class_install_property (G_OBJECT_CLASS(klass), ARG_MEDIA_TIME, - g_param_spec_long ("media_time","media_time","media_time", - G_MINLONG, G_MAXLONG, 0, G_PARAM_READABLE)); /* CHECKME */ - g_object_class_install_property (G_OBJECT_CLASS(klass), ARG_CURRENT_TIME, - g_param_spec_long ("current_time","current_time","current_time", - G_MINLONG, G_MAXLONG, 0, G_PARAM_READABLE)); /* CHECKME */ + g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_BITRATE, g_param_spec_long ("bitrate", "bitrate", "bitrate", G_MINLONG, G_MAXLONG, 0, G_PARAM_READABLE)); /* CHECKME */ + g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_MEDIA_TIME, g_param_spec_long ("media_time", "media_time", "media_time", G_MINLONG, G_MAXLONG, 0, G_PARAM_READABLE)); /* CHECKME */ + g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_CURRENT_TIME, g_param_spec_long ("current_time", "current_time", "current_time", G_MINLONG, G_MAXLONG, 0, G_PARAM_READABLE)); /* CHECKME */ parent_class = g_type_class_ref (GST_TYPE_BIN); - + gobject_class->get_property = gst_avi_decoder_get_property; } -static void -gst_avi_decoder_new_pad (GstElement *element, GstPad *pad, GstAviDecoder *avi_decoder) +static void +gst_avi_decoder_new_pad (GstElement * element, GstPad * pad, + GstAviDecoder * avi_decoder) { GstCaps *caps; GstCaps *targetcaps = NULL; @@ -182,38 +169,40 @@ gst_avi_decoder_new_pad (GstElement *element, GstPad *pad, GstAviDecoder *avi_de GstElement *new_element = NULL; gchar *padname = NULL; gchar *gpadname = NULL; + #define AVI_TYPE_VIDEO 1 #define AVI_TYPE_AUDIO 2 gint media_type = 0; - - GST_DEBUG (0, "avidecoder: new pad for element \"%s\"\n", gst_element_get_name (element)); + + GST_DEBUG (0, "avidecoder: new pad for element \"%s\"", + gst_element_get_name (element)); caps = gst_pad_get_caps (pad); format = gst_caps_get_string (caps, "format"); - if (!strcmp (format, "strf_vids")) { - targetcaps = gst_padtemplate_get_caps (GST_PADTEMPLATE_GET (src_video_templ)); + if (!strcmp (format, "strf_vids")) { + targetcaps = + gst_padtemplate_get_caps (GST_PADTEMPLATE_GET (src_video_templ)); media_type = AVI_TYPE_VIDEO; gpadname = g_strdup_printf ("video_%02d", avi_decoder->video_count++); - } - else if (!strcmp (format, "strf_auds")) { - targetcaps = gst_padtemplate_get_caps (GST_PADTEMPLATE_GET (src_audio_templ)); + } else if (!strcmp (format, "strf_auds")) { + targetcaps = + gst_padtemplate_get_caps (GST_PADTEMPLATE_GET (src_audio_templ)); media_type = AVI_TYPE_AUDIO; gpadname = g_strdup_printf ("audio_%02d", avi_decoder->audio_count++); - } - else if (!strcmp (format, "strf_iavs")) { - targetcaps = gst_padtemplate_get_caps (GST_PADTEMPLATE_GET (src_video_templ)); + } else if (!strcmp (format, "strf_iavs")) { + targetcaps = + gst_padtemplate_get_caps (GST_PADTEMPLATE_GET (src_video_templ)); media_type = AVI_TYPE_VIDEO; gpadname = g_strdup_printf ("video_%02d", avi_decoder->video_count++); - } - else { + } else { g_assert_not_reached (); } gst_element_set_state (GST_ELEMENT (avi_decoder), GST_STATE_PAUSED); - type = gst_elementfactory_make ("avitypes", - g_strdup_printf ("typeconvert%d", avi_decoder->count)); + type = gst_elementfactory_make ("avitypes", + g_strdup_printf ("typeconvert%d", avi_decoder->count)); /* brin the element to the READY state so it can do our caps negotiation */ gst_element_set_state (type, GST_STATE_READY); @@ -224,13 +213,13 @@ gst_avi_decoder_new_pad (GstElement *element, GstPad *pad, GstAviDecoder *avi_de if (type_found) { gst_bin_add (GST_BIN (avi_decoder), type); - + pad = gst_element_get_pad (type, "src"); caps = gst_pad_get_caps (pad); - if (gst_caps_check_compatibility (caps, targetcaps)) { - gst_element_add_ghost_pad (GST_ELEMENT (avi_decoder), - gst_element_get_pad (type, "src"), gpadname); + if (gst_caps_is_always_compatible (caps, targetcaps)) { + gst_element_add_ghost_pad (GST_ELEMENT (avi_decoder), + gst_element_get_pad (type, "src"), gpadname); avi_decoder->count++; goto done; @@ -238,7 +227,8 @@ gst_avi_decoder_new_pad (GstElement *element, GstPad *pad, GstAviDecoder *avi_de #ifndef GST_DISABLE_AUTOPLUG else { GstAutoplug *autoplug; - autoplug = gst_autoplugfactory_make("static"); + + autoplug = gst_autoplugfactory_make ("static"); new_element = gst_autoplug_to_caps (autoplug, caps, targetcaps, NULL); @@ -249,45 +239,43 @@ gst_avi_decoder_new_pad (GstElement *element, GstPad *pad, GstAviDecoder *avi_de if (!new_element && (media_type == AVI_TYPE_VIDEO)) { padname = "src"; - } - else if (!new_element && (media_type == AVI_TYPE_AUDIO)) { + } else if (!new_element && (media_type == AVI_TYPE_AUDIO)) { /*FIXME */ padname = "src"; } if (new_element) { gst_pad_connect (pad, gst_element_get_pad (new_element, "sink")); - gst_element_set_name (new_element, g_strdup_printf ("element%d", avi_decoder->count)); + gst_element_set_name (new_element, g_strdup_printf ("element%d", + avi_decoder->count)); gst_bin_add (GST_BIN (avi_decoder), new_element); - gst_element_add_ghost_pad (GST_ELEMENT (avi_decoder), - gst_element_get_pad (new_element, padname), gpadname); + gst_element_add_ghost_pad (GST_ELEMENT (avi_decoder), + gst_element_get_pad (new_element, padname), gpadname); avi_decoder->count++; - } - else { + } else { g_warning ("avidecoder: could not autoplug\n"); } -done: +done: gst_element_set_state (GST_ELEMENT (avi_decoder), GST_STATE_PLAYING); } -static void -gst_avi_decoder_init (GstAviDecoder *avi_decoder) +static void +gst_avi_decoder_init (GstAviDecoder * avi_decoder) { avi_decoder->demuxer = gst_elementfactory_make ("avidemux", "demux"); if (avi_decoder->demuxer) { gst_bin_add (GST_BIN (avi_decoder), avi_decoder->demuxer); - gst_element_add_ghost_pad (GST_ELEMENT (avi_decoder), - gst_element_get_pad (avi_decoder->demuxer, "sink"), "sink"); + gst_element_add_ghost_pad (GST_ELEMENT (avi_decoder), + gst_element_get_pad (avi_decoder->demuxer, "sink"), "sink"); - g_signal_connect (G_OBJECT (avi_decoder->demuxer),"new_pad", G_CALLBACK (gst_avi_decoder_new_pad), - avi_decoder); - } - else { + g_signal_connect (G_OBJECT (avi_decoder->demuxer), "new_pad", + G_CALLBACK (gst_avi_decoder_new_pad), avi_decoder); + } else { g_warning ("wow!, no avi demuxer found. help me\n"); } @@ -296,26 +284,27 @@ gst_avi_decoder_init (GstAviDecoder *avi_decoder) avi_decoder->video_count = 0; } -static GstCaps* -avi_typefind (GstBuffer *buf, - gpointer private) +static GstCaps * +avi_typefind (GstBuffer * buf, gpointer private) { gchar *data = GST_BUFFER_DATA (buf); GstCaps *new; - GST_DEBUG (0,"avi_decoder: typefind\n"); - if (strncmp (&data[0], "RIFF", 4)) return NULL; - if (strncmp (&data[8], "AVI ", 4)) return NULL; + GST_DEBUG (0, "avi_decoder: typefind"); + if (strncmp (&data[0], "RIFF", 4)) + return NULL; + if (strncmp (&data[8], "AVI ", 4)) + return NULL; new = GST_CAPS_NEW ("avi_typefind", - "video/avi", - "RIFF", GST_PROPS_STRING ("AVI")); + "video/avi", "RIFF", GST_PROPS_STRING ("AVI")); return new; } static void -gst_avi_decoder_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) +gst_avi_decoder_get_property (GObject * object, guint prop_id, GValue * value, + GParamSpec * pspec) { GstAviDecoder *src; @@ -323,14 +312,16 @@ gst_avi_decoder_get_property (GObject *object, guint prop_id, GValue *value, GPa src = GST_AVI_DECODER (object); - switch(prop_id) { + switch (prop_id) { case ARG_BITRATE: break; case ARG_MEDIA_TIME: - g_value_set_long (value, gst_util_get_long_arg (G_OBJECT (src->demuxer), "media_time")); + g_value_set_long (value, gst_util_get_long_arg (G_OBJECT (src->demuxer), + "media_time")); break; case ARG_CURRENT_TIME: - g_value_set_long (value, gst_util_get_long_arg (G_OBJECT (src->demuxer), "current_time")); + g_value_set_long (value, gst_util_get_long_arg (G_OBJECT (src->demuxer), + "current_time")); break; default: break; @@ -339,19 +330,22 @@ gst_avi_decoder_get_property (GObject *object, guint prop_id, GValue *value, GPa static gboolean -plugin_init (GModule *module, GstPlugin *plugin) +plugin_init (GModule * module, GstPlugin * plugin) { GstElementFactory *factory; GstTypeFactory *type; /* create an elementfactory for the avi_decoder element */ factory = gst_elementfactory_new ("avidecoder", GST_TYPE_AVI_DECODER, - &gst_avi_decoder_details); + &gst_avi_decoder_details); g_return_val_if_fail (factory != NULL, FALSE); - gst_elementfactory_add_padtemplate (factory, GST_PADTEMPLATE_GET (src_audio_templ)); - gst_elementfactory_add_padtemplate (factory, GST_PADTEMPLATE_GET (src_video_templ)); - gst_elementfactory_add_padtemplate (factory, GST_PADTEMPLATE_GET (sink_templ)); + gst_elementfactory_add_padtemplate (factory, + GST_PADTEMPLATE_GET (src_audio_templ)); + gst_elementfactory_add_padtemplate (factory, + GST_PADTEMPLATE_GET (src_video_templ)); + gst_elementfactory_add_padtemplate (factory, + GST_PADTEMPLATE_GET (sink_templ)); type = gst_typefactory_new (&avidefinition); gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (type)); @@ -367,4 +361,3 @@ GstPluginDesc plugin_desc = { "avidecoder", plugin_init }; -