From: <wt...@fr...> - 2004-12-20 17:54:32
|
CVS Root: /cvs/gstreamer Module: gst-plugins Changes by: wtay Date: Mon Dec 20 2004 09:54:28 PST Branch: BRANCH-THREADED Log message: Various plugin updates to have something to play with. Modified files: . : ChangeLog ext/mad : gstid3tag.c gstmad.c gst-libs/gst : Makefile.am gst-libs/gst/audio: gstaudiofilter.c testchannels.c gst-libs/gst/gconf: gconf.c gst-libs/gst/media-info: media-info-priv.c media-info.c gst-libs/gst/riff: riff-read.c gst/ac3parse : gstac3parse.c gst/effectv : gstaging.c gstdice.c gstquark.c gstrev.c gstvertigo.c gstwarp.c gst/ffmpegcolorspace: gstffmpegcolorspace.c gst/tags : gstvorbistag.c gst/typefind : gsttypefindfunctions.c gst/videofilter : gstgamma.c gstvideobalance.c gstvideofilter.c gstvideoflip.c gst/videotestsrc: gstvideotestsrc.c gstvideotestsrc.h sys/oss : gstosselement.c gstossmixer.c gstosssink.c gstosssrc.c sys/xvimage : xvimagesink.c xvimagesink.h Added files: examples/negotiation: Makefile.am colorspace.c queue.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ChangeLog.diff?r1=1.1367&r2=1.1367.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/examples/negotiation/Makefile.am?rev=1.1.2.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/examples/negotiation/colorspace.c?rev=1.1.2.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/examples/negotiation/queue.c?rev=1.1.2.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/mad/gstid3tag.c.diff?r1=1.46&r2=1.46.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/mad/gstmad.c.diff?r1=1.109&r2=1.109.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst-libs/gst/Makefile.am.diff?r1=1.23&r2=1.23.4.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst-libs/gst/audio/gstaudiofilter.c.diff?r1=1.10&r2=1.10.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst-libs/gst/audio/testchannels.c.diff?r1=1.1&r2=1.1.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst-libs/gst/gconf/gconf.c.diff?r1=1.21&r2=1.21.4.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst-libs/gst/media-info/media-info-priv.c.diff?r1=1.15&r2=1.15.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst-libs/gst/media-info/media-info.c.diff?r1=1.19&r2=1.19.4.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst-libs/gst/riff/riff-read.c.diff?r1=1.34&r2=1.34.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/ac3parse/gstac3parse.c.diff?r1=1.28&r2=1.28.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/effectv/gstaging.c.diff?r1=1.22&r2=1.22.4.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/effectv/gstdice.c.diff?r1=1.18&r2=1.18.4.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/effectv/gstquark.c.diff?r1=1.19&r2=1.19.4.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/effectv/gstrev.c.diff?r1=1.18&r2=1.18.4.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/effectv/gstvertigo.c.diff?r1=1.20&r2=1.20.4.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/effectv/gstwarp.c.diff?r1=1.21&r2=1.21.4.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/ffmpegcolorspace/gstffmpegcolorspace.c.diff?r1=1.18&r2=1.18.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/tags/gstvorbistag.c.diff?r1=1.22&r2=1.22.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/typefind/gsttypefindfunctions.c.diff?r1=1.61&r2=1.61.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/videofilter/gstgamma.c.diff?r1=1.7&r2=1.7.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/videofilter/gstvideobalance.c.diff?r1=1.23&r2=1.23.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/videofilter/gstvideofilter.c.diff?r1=1.21&r2=1.21.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/videofilter/gstvideoflip.c.diff?r1=1.13&r2=1.13.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/videotestsrc/gstvideotestsrc.c.diff?r1=1.65&r2=1.65.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/gst/videotestsrc/gstvideotestsrc.h.diff?r1=1.22&r2=1.22.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/sys/oss/gstosselement.c.diff?r1=1.44&r2=1.44.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/sys/oss/gstossmixer.c.diff?r1=1.17&r2=1.17.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/sys/oss/gstosssink.c.diff?r1=1.99&r2=1.99.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/sys/oss/gstosssrc.c.diff?r1=1.54&r2=1.54.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/sys/xvimage/xvimagesink.c.diff?r1=1.94&r2=1.94.2.1 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/sys/xvimage/xvimagesink.h.diff?r1=1.26&r2=1.26.2.1 ====Begin Diffs==== Index: Makefile.am =================================================================== RCS file: /cvs/gstreamer/gst-plugins/gst-libs/gst/Makefile.am,v retrieving revision 1.23 retrieving revision 1.23.4.1 diff -u -d -r1.23 -r1.23.4.1 --- Makefile.am 19 Apr 2004 22:51:56 -0000 1.23 +++ Makefile.am 20 Dec 2004 17:54:14 -0000 1.23.4.1 @@ -27,8 +27,7 @@ video \ xoverlay \ $(X_DIR) \ - . \ - play + . DIST_SUBDIRS = \ audio \ Index: ChangeLog RCS file: /cvs/gstreamer/gst-plugins/ChangeLog,v retrieving revision 1.1367 retrieving revision 1.1367.2.1 diff -u -d -r1.1367 -r1.1367.2.1 --- ChangeLog 7 Dec 2004 17:22:18 -0000 1.1367 +++ ChangeLog 20 Dec 2004 17:54:13 -0000 1.1367.2.1 @@ -1,3 +1,87 @@ +2004-12-20 Wim Taymans <wi...@fl...> + + * configure.ac: + * examples/negotiation/Makefile.am: + * examples/negotiation/colorspace.c: (message_received), + (my_chain), (main): + * examples/negotiation/queue.c: (message_received), (block_done), + (do_block), (do_renegotiate), (main): + * ext/mad/gstid3tag.c: (gst_id3_tag_class_init), + (gst_id3_tag_init), (gst_id3_tag_sink_event), + (gst_id3_tag_do_caps_nego), (gst_id3_tag_src_link), + (gst_id3_tag_send_tag_event), (gst_id3_tag_chain), + (gst_id3_tag_change_state): + * ext/mad/gstmad.c: (gst_mad_init), (gst_mad_update_info), + (gst_mad_sink_event), (gst_mad_check_caps_reset), (gst_mad_chain): + * gst-libs/gst/Makefile.am: + * gst-libs/gst/audio/gstaudiofilter.c: (gst_audiofilter_link), + (gst_audiofilter_init), (gst_audiofilter_chain): + * gst-libs/gst/audio/testchannels.c: (main): + * gst-libs/gst/gconf/gconf.c: (gst_bin_find_unconnected_pad), + (gst_gconf_render_bin_from_description): + * gst-libs/gst/media-info/media-info-priv.c: (gmip_reset), + (gmip_find_type), (gmip_find_stream), (gmip_find_track_metadata), + (gmip_find_track_streaminfo), (gmip_find_track_format): + * gst-libs/gst/media-info/media-info.c: + (gst_media_info_read_idler): + * gst-libs/gst/riff/riff-read.c: (gst_riff_read_use_event), + (gst_riff_read_info): + * gst/ac3parse/gstac3parse.c: (gst_ac3parse_class_init), + (gst_ac3parse_init), (gst_ac3parse_chain): + * gst/effectv/gstaging.c: (gst_agingtv_class_init): + * gst/effectv/gstdice.c: (gst_dicetv_class_init): + * gst/effectv/gstquark.c: (gst_quarktv_class_init), + (gst_quarktv_link), (gst_quarktv_init), (gst_quarktv_chain): + * gst/effectv/gstrev.c: (gst_revtv_class_init): + * gst/effectv/gstvertigo.c: (gst_vertigotv_class_init): + * gst/effectv/gstwarp.c: (gst_warptv_class_init): + * gst/ffmpegcolorspace/gstffmpegcolorspace.c: + (gst_ffmpegcsp_getcaps), (gst_ffmpegcsp_configure_context), + (gst_ffmpegcsp_setcaps), (gst_ffmpegcsp_init), + (gst_ffmpegcsp_chain): + * gst/tags/gstvorbistag.c: (gst_vorbis_tag_chain): + * gst/typefind/gsttypefindfunctions.c: (aac_type_find), + (mp3_type_find), (mpeg2_sys_type_find), (mpeg1_sys_type_find), + (mpeg_video_type_find), (mpeg_video_stream_type_find), + (dv_type_find): + * gst/videofilter/gstgamma.c: (gst_gamma_class_init): + * gst/videofilter/gstvideobalance.c: (gst_videobalance_class_init): + * gst/videofilter/gstvideofilter.c: (gst_videofilter_getcaps), + (gst_videofilter_setcaps), (gst_videofilter_init), + (gst_videofilter_chain), (gst_videofilter_set_output_size): + * gst/videofilter/gstvideoflip.c: (gst_videoflip_class_init): + * gst/videotestsrc/gstvideotestsrc.c: + (gst_videotestsrc_class_init), (gst_videotestsrc_src_negotiate), + (gst_videotestsrc_src_link), (gst_videotestsrc_parse_caps), + (gst_videotestsrc_src_accept_caps), (gst_videotestsrc_setcaps), + (gst_videotestsrc_src_unlink), (gst_videotestsrc_activate), + (gst_videotestsrc_change_state), (gst_videotestsrc_getcaps), + (gst_videotestsrc_init), (gst_videotestsrc_src_query), + (gst_videotestsrc_handle_src_event), (gst_videotestsrc_loop): + * gst/videotestsrc/gstvideotestsrc.h: + * sys/oss/gstosselement.c: (gst_osselement_class_init), + (gst_osselement_parse_caps), (gst_osselement_open_audio), + (gst_osselement_close_audio), (gst_osselement_set_property): + * sys/oss/gstossmixer.c: (gst_ossmixer_build_list): + * sys/oss/gstosssink.c: (gst_osssink_class_init), + (gst_osssink_init), (gst_osssink_setcaps), (gst_osssink_getcaps), + (gst_osssink_handle_event), (gst_osssink_chain), + (gst_osssink_convert), (gst_osssink_sink_query), + (gst_osssink_change_state): + * sys/oss/gstosssrc.c: (gst_osssrc_class_init), (gst_osssrc_init), + (gst_osssrc_getcaps), (gst_osssrc_src_link), + (gst_osssrc_negotiate), (gst_osssrc_loop), (gst_osssrc_convert), + (gst_osssrc_src_event), (gst_osssrc_src_query): + * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support), + (gst_xvimagesink_xcontext_clear), (gst_xvimagesink_fixate), + (gst_xvimagesink_getcaps), (gst_xvimagesink_sink_link), + (gst_xvimagesink_parse_caps), (gst_xvimagesink_change_state), + (gst_xvimagesink_event), (gst_xvimagesink_chain), + (gst_xvimagesink_buffer_alloc), (gst_xvimagesink_init), + (gst_xvimagesink_class_init): + * sys/xvimage/xvimagesink.h: + Various plugin updates to have something to play with. 2004-12-07 Christian Fredrik Kalager Schaller <set EMAIL_ADDRESS environment variable> Woooho Monoscope is now effectivly LGPL licensed Index: gstaudiofilter.c RCS file: /cvs/gstreamer/gst-plugins/gst-libs/gst/audio/gstaudiofilter.c,v retrieving revision 1.10 retrieving revision 1.10.2.1 diff -u -d -r1.10 -r1.10.2.1 --- gstaudiofilter.c 28 Oct 2004 12:51:23 -0000 1.10 +++ gstaudiofilter.c 20 Dec 2004 17:54:14 -0000 1.10.2.1 @@ -51,7 +51,7 @@ static void gst_audiofilter_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); -static void gst_audiofilter_chain (GstPad * pad, GstData * _data); +static GstFlowReturn gst_audiofilter_chain (GstPad * pad, GstBuffer * buffer); GstCaps *gst_audiofilter_class_get_capslist (GstAudiofilterClass * klass); static GstElementClass *parent_class = NULL; @@ -113,18 +113,20 @@ } static GstPadLinkReturn -gst_audiofilter_link (GstPad * pad, const GstCaps * caps) +gst_audiofilter_link (GstPad * pad, GstPad * peer) { GstAudiofilter *audiofilter; - GstPadLinkReturn ret; - GstPadLinkReturn link_ret; - GstStructure *structure; + //GstPadLinkReturn ret; + //GstPadLinkReturn link_ret; + //GstStructure *structure; GstAudiofilterClass *audiofilter_class; GST_DEBUG ("gst_audiofilter_link"); audiofilter = GST_AUDIOFILTER (gst_pad_get_parent (pad)); audiofilter_class = GST_AUDIOFILTER_CLASS (G_OBJECT_GET_CLASS (audiofilter)); +#if 0 ret = GST_PAD_LINK_DELAYED; /* intialise with dummy value */ if (pad == audiofilter->srcpad) { link_ret = gst_pad_try_set_caps (audiofilter->sinkpad, caps); @@ -158,6 +160,7 @@ if (audiofilter_class->setup) (audiofilter_class->setup) (audiofilter); +#endif return GST_PAD_LINK_OK; @@ -177,7 +180,7 @@ gst_element_add_pad (GST_ELEMENT (audiofilter), audiofilter->sinkpad); gst_pad_set_chain_function (audiofilter->sinkpad, gst_audiofilter_chain); gst_pad_set_link_function (audiofilter->sinkpad, gst_audiofilter_link); - gst_pad_set_getcaps_function (audiofilter->sinkpad, gst_pad_proxy_getcaps); + //gst_pad_set_getcaps_function (audiofilter->sinkpad, gst_pad_proxy_getcaps); pad_template = gst_element_class_get_pad_template (GST_ELEMENT_CLASS (g_class), "src"); @@ -185,24 +188,24 @@ audiofilter->srcpad = gst_pad_new_from_template (pad_template, "src"); gst_element_add_pad (GST_ELEMENT (audiofilter), audiofilter->srcpad); gst_pad_set_link_function (audiofilter->srcpad, gst_audiofilter_link); - gst_pad_set_getcaps_function (audiofilter->srcpad, gst_pad_proxy_getcaps); + //gst_pad_set_getcaps_function (audiofilter->srcpad, gst_pad_proxy_getcaps); audiofilter->inited = FALSE; -static void -gst_audiofilter_chain (GstPad * pad, GstData * data) +static GstFlowReturn +gst_audiofilter_chain (GstPad * pad, GstBuffer * buffer) - GstBuffer *inbuf = GST_BUFFER (data); + GstBuffer *inbuf = GST_BUFFER (buffer); GstBuffer *outbuf; GST_DEBUG ("gst_audiofilter_chain"); - g_return_if_fail (pad != NULL); - g_return_if_fail (GST_IS_PAD (pad)); - g_return_if_fail (inbuf != NULL); + g_return_val_if_fail (pad != NULL, GST_FLOW_ERROR); + g_return_val_if_fail (GST_IS_PAD (pad), GST_FLOW_ERROR); + g_return_val_if_fail (inbuf != NULL, GST_FLOW_ERROR); //g_return_if_fail (audiofilter->inited); @@ -212,14 +215,14 @@ GST_BUFFER_SIZE (inbuf), GST_OBJECT_NAME (audiofilter)); if (audiofilter->passthru) { - gst_pad_push (audiofilter->srcpad, data); - return; + gst_pad_push (audiofilter->srcpad, buffer); + return GST_FLOW_OK; } audiofilter->size = GST_BUFFER_SIZE (inbuf); audiofilter->n_samples = audiofilter->size / audiofilter->bytes_per_sample; - if (gst_data_is_writable (data)) { + if (gst_data_is_writable (GST_DATA (buffer))) { if (audiofilter_class->filter_inplace) { (audiofilter_class->filter_inplace) (audiofilter, inbuf); outbuf = inbuf; @@ -246,7 +249,9 @@ gst_buffer_unref (inbuf); - gst_pad_push (audiofilter->srcpad, GST_DATA (outbuf)); + gst_pad_push (audiofilter->srcpad, outbuf); + return GST_FLOW_OK; static void Index: testchannels.c RCS file: /cvs/gstreamer/gst-plugins/gst-libs/gst/audio/testchannels.c,v retrieving revision 1.1 retrieving revision 1.1.2.1 diff -u -d -r1.1 -r1.1.2.1 --- testchannels.c 25 Nov 2004 20:36:29 -0000 1.1 +++ testchannels.c 20 Dec 2004 17:54:14 -0000 1.1.2.1 @@ -49,7 +49,7 @@ str = gst_caps_to_string (caps); g_print ("Test caps #2: %s\n", str); g_free (str); - gst_caps_free (caps); + gst_caps_unref (caps); return 0; Index: gconf.c RCS file: /cvs/gstreamer/gst-plugins/gst-libs/gst/gconf/gconf.c,v retrieving revision 1.21 retrieving revision 1.21.4.1 diff -u -d -r1.21 -r1.21.4.1 --- gconf.c 1 Apr 2004 08:42:30 -0000 1.21 +++ gconf.c 20 Dec 2004 17:54:14 -0000 1.21.4.1 @@ -55,25 +55,34 @@ const GList *pads = NULL; GstElement *element = NULL; - elements = (GList *) gst_bin_get_list (bin); + GST_LOCK (bin); + elements = bin->children; /* traverse all elements looking for unconnected pads */ while (elements && pad == NULL) { element = GST_ELEMENT (elements->data); - pads = gst_element_get_pad_list (element); + GST_LOCK (element); + pads = element->pads; while (pads) { + GstPad *testpad = GST_PAD (pads->data); /* check if the direction matches */ - if (GST_PAD_DIRECTION (GST_PAD (pads->data)) == direction) { - if (GST_PAD_PEER (GST_PAD (pads->data)) == NULL) { + if (GST_PAD_DIRECTION (testpad) == direction) { + GST_LOCK (pad); + if (GST_PAD_PEER (testpad) == NULL) { + GST_UNLOCK (pad); /* found it ! */ - pad = GST_PAD (pads->data); + pad = testpad; + break; } + GST_UNLOCK (pad); } - if (pad) - break; /* found one already */ pads = g_list_next (pads); } + GST_UNLOCK (element); elements = g_list_next (elements); + GST_UNLOCK (bin); return pad; @@ -147,7 +156,7 @@ /* parse the pipeline to a bin */ desc = g_strdup_printf ("bin.( %s )", description); - bin = GST_ELEMENT (gst_parse_launch (desc, &error)); + //bin = GST_ELEMENT (gst_parse_launch (desc, &error)); g_free (desc); if (error) { g_print ("DEBUG: gstgconf: error parsing pipeline %s\n%s\n", Index: media-info-priv.c RCS file: /cvs/gstreamer/gst-plugins/gst-libs/gst/media-info/media-info-priv.c,v retrieving revision 1.15 retrieving revision 1.15.2.1 diff -u -d -r1.15 -r1.15.2.1 --- media-info-priv.c 25 Jun 2004 11:57:25 -0000 1.15 +++ media-info-priv.c 20 Dec 2004 17:54:14 -0000 1.15.2.1 @@ -273,7 +273,7 @@ #define CAPS_RESET(target) \ G_STMT_START { \ - if (target) gst_caps_free (target); \ + if (target) gst_caps_unref (target); \ target = NULL; \ } G_STMT_END CAPS_RESET (priv->type); @@ -509,7 +509,9 @@ if (!gmip_find_type_pre (priv, error)) return FALSE; GST_DEBUG ("gmip_find_type: iterating"); - while ((priv->type == NULL) && gst_bin_iterate (GST_BIN (priv->pipeline))) + while ((priv->type == NULL) + // && gst_bin_iterate (GST_BIN (priv->pipeline)) + ) GMI_DEBUG ("+"); GMI_DEBUG ("\n"); return gmip_find_type_post (priv); @@ -616,7 +618,7 @@ /* iterate until caps are found */ /* FIXME: this should be done through the plugin sending some signal * that it is ready for queries */ - while (gst_bin_iterate (GST_BIN (priv->pipeline)) && priv->format == NULL); + //while (gst_bin_iterate (GST_BIN (priv->pipeline)) && priv->format == NULL); if (gst_element_set_state (priv->pipeline, GST_STATE_PAUSED) == GST_STATE_FAILURE) g_warning ("Couldn't set to paused"); @@ -659,7 +661,9 @@ gmip_find_track_metadata_pre (priv); GST_DEBUG ("gmip_find_metadata: iterating"); - while ((priv->metadata == NULL) && gst_bin_iterate (GST_BIN (priv->pipeline))) + while ((priv->metadata == NULL) + //&& gst_bin_iterate (GST_BIN (priv->pipeline)) gmip_find_track_metadata_post (priv); @@ -729,8 +733,9 @@ gmip_find_track_streaminfo_pre (priv); GST_DEBUG ("DEBUG: gmip_find_streaminfo: iterating"); - while ((priv->streaminfo == NULL) && - gst_bin_iterate (GST_BIN (priv->pipeline))) + while ((priv->streaminfo == NULL) gmip_find_track_streaminfo_post (priv); @@ -766,7 +771,9 @@ gmip_find_track_format_pre (priv); GST_DEBUG ("DEBUG: gmip_find_format: iterating"); - while ((priv->format == NULL) && gst_bin_iterate (GST_BIN (priv->pipeline))) + while ((priv->format == NULL) gmip_find_track_format_post (priv); Index: media-info.c RCS file: /cvs/gstreamer/gst-plugins/gst-libs/gst/media-info/media-info.c,v retrieving revision 1.19 retrieving revision 1.19.4.1 diff -u -d -r1.19 -r1.19.4.1 --- media-info.c 15 Mar 2004 19:32:23 -0000 1.19 +++ media-info.c 20 Dec 2004 17:54:14 -0000 1.19.4.1 @@ -266,7 +266,8 @@ gchar *mime; GST_LOG ("STATE_TYPEFIND"); - if ((priv->type == NULL) && gst_bin_iterate (GST_BIN (priv->pipeline))) { + //if ((priv->type == NULL) && gst_bin_iterate (GST_BIN (priv->pipeline))) { + if ((priv->type == NULL)) { GST_DEBUG ("iterating while in STATE_TYPEFIND"); GMI_DEBUG ("?"); return TRUE; @@ -298,7 +299,8 @@ case GST_MEDIA_INFO_STATE_STREAM: { GST_LOG ("STATE_STREAM"); - if ((priv->format == NULL) && gst_bin_iterate (GST_BIN (priv->pipeline))) { + //if ((priv->format == NULL) && gst_bin_iterate (GST_BIN (priv->pipeline))) { + if ((priv->format == NULL)) { @@ -317,7 +319,7 @@ case GST_MEDIA_INFO_STATE_METADATA: if ((priv->metadata == NULL) && - gst_bin_iterate (GST_BIN (priv->pipeline)) && + //gst_bin_iterate (GST_BIN (priv->pipeline)) && priv->metadata_iters < MAX_METADATA_ITERS) { priv->metadata_iters++; @@ -338,8 +340,9 @@ case GST_MEDIA_INFO_STATE_STREAMINFO: - if ((priv->streaminfo == NULL) && - gst_bin_iterate (GST_BIN (priv->pipeline))) { + if ((priv->streaminfo == NULL) + //&& gst_bin_iterate (GST_BIN (priv->pipeline)) + ) { @@ -355,7 +358,9 @@ case GST_MEDIA_INFO_STATE_FORMAT: + if ((priv->format == NULL) + // && gst_bin_iterate (GST_BIN (priv->pipeline)) Index: riff-read.c RCS file: /cvs/gstreamer/gst-plugins/gst-libs/gst/riff/riff-read.c,v retrieving revision 1.34 retrieving revision 1.34.2.1 diff -u -d -r1.34 -r1.34.2.1 --- riff-read.c 1 Dec 2004 13:23:39 -0000 1.34 +++ riff-read.c 20 Dec 2004 17:54:14 -0000 1.34.2.1 @@ -174,10 +174,6 @@ gst_pad_event_default (riff->sinkpad, event); return FALSE; - case GST_EVENT_INTERRUPT: - gst_event_unref (event); - return FALSE; - case GST_EVENT_DISCONTINUOUS: GST_WARNING_OBJECT (riff, "Unexpected discont - might lose sync"); gst_event_unref (event); @@ -941,15 +937,16 @@ const GList *padlist; /* let the world know about this wonderful thing */ - for (padlist = gst_element_get_pad_list (element); - padlist != NULL; padlist = padlist->next) { + /* FIXME, MT unsafe */ + for (padlist = element->pads; padlist != NULL; padlist = padlist->next) { if (GST_PAD_IS_SRC (padlist->data) && GST_PAD_IS_USABLE (padlist->data)) { gst_event_ref (event); - gst_pad_push (GST_PAD (padlist->data), GST_DATA (event)); + gst_pad_push_event (GST_PAD (padlist->data), event); - gst_element_found_tags (element, taglist); + gst_element_post_message (GST_ELEMENT (element), + gst_message_new_tag (GST_OBJECT (element), taglist)); gst_event_unref (event); } else { Index: gstosselement.c RCS file: /cvs/gstreamer/gst-plugins/sys/oss/gstosselement.c,v retrieving revision 1.44 retrieving revision 1.44.2.1 diff -u -d -r1.44 -r1.44.2.1 --- gstosselement.c 1 Nov 2004 14:43:38 -0000 1.44 +++ gstosselement.c 20 Dec 2004 17:54:14 -0000 1.44.2.1 @@ -151,6 +151,9 @@ parent_class = g_type_class_ref (GST_TYPE_ELEMENT); + gobject_class->set_property = gst_osselement_set_property; + gobject_class->get_property = gst_osselement_get_property; g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_DEVICE, g_param_spec_string ("device", "Device", "OSS device (/dev/dspN usually)", "default", G_PARAM_READWRITE)); @@ -162,8 +165,6 @@ g_param_spec_string ("device_name", "Device name", "Name of the device", NULL, G_PARAM_READABLE)); - gobject_class->set_property = gst_osselement_set_property; - gobject_class->get_property = gst_osselement_get_property; gobject_class->finalize = gst_osselement_finalize; gstelement_class->change_state = gst_osselement_change_state; @@ -524,18 +525,19 @@ gint bps, format; GstStructure *structure; + gboolean res; structure = gst_caps_get_structure (caps, 0); - gst_structure_get_int (structure, "width", &oss->width); - gst_structure_get_int (structure, "depth", &oss->depth); + res = gst_structure_get_int (structure, "width", &oss->width); + res &= gst_structure_get_int (structure, "depth", &oss->depth); - if (oss->width != oss->depth) + if (!res || oss->width != oss->depth) - gst_structure_get_int (structure, "law", &oss->law); - gst_structure_get_int (structure, "endianness", &oss->endianness); - gst_structure_get_boolean (structure, "signed", &oss->sign); + res = gst_structure_get_int (structure, "law", &oss->law); + res &= gst_structure_get_int (structure, "endianness", &oss->endianness); + res &= gst_structure_get_boolean (structure, "signed", &oss->sign); if (!gst_ossformat_get (oss->law, oss->endianness, oss->sign, oss->width, oss->depth, &format, &bps)) { @@ -691,14 +693,17 @@ /* Ok, so how do we open the device? We assume that we have (max.) one * pad, and if this is a sinkpad, we're osssink (w). else, we're osssrc (r) */ - padlist = gst_element_get_pad_list (GST_ELEMENT (oss)); + GST_LOCK (oss); + padlist = GST_ELEMENT (oss)->pads; if (padlist != NULL) { GstPad *firstpad = padlist->data; if (GST_PAD_IS_SINK (firstpad)) { mode = GST_OSSELEMENT_WRITE; + GST_UNLOCK (oss); goto do_mixer; @@ -832,7 +837,7 @@ gst_ossmixer_free_list (oss); if (oss->probed_caps) { - gst_caps_free (oss->probed_caps); + gst_caps_unref (oss->probed_caps); oss->probed_caps = NULL; @@ -912,7 +917,7 @@ case ARG_DEVICE: /* disallow changing the device while it is opened get_property("device") should return the right one */ - if (gst_element_get_state (GST_ELEMENT (oss)) == GST_STATE_NULL) { + if (oss->fd == -1) { g_free (oss->device); oss->device = g_strdup (g_value_get_string (value)); @@ -938,7 +943,7 @@ case ARG_MIXERDEV: get_property("mixerdev") should return the right one */ g_free (oss->mixer_dev); oss->mixer_dev = g_strdup (g_value_get_string (value)); Index: gstossmixer.c RCS file: /cvs/gstreamer/gst-plugins/sys/oss/gstossmixer.c,v retrieving revision 1.17 retrieving revision 1.17.2.1 diff -u -d -r1.17 -r1.17.2.1 --- gstossmixer.c 3 Aug 2004 16:06:08 -0000 1.17 +++ gstossmixer.c 20 Dec 2004 17:54:14 -0000 1.17.2.1 @@ -88,8 +88,7 @@ { gchar *given, *wanted; - cases[] = - { + cases[] = { /* Note: this list is simply ripped from soundcard.h. For * some people, some values might be missing (3D surround, * etc.) - feel free to add them. That's the reason why @@ -434,7 +433,7 @@ gst_ossmixer_build_list (GstOssElement * oss) gint i, devmask, master = -1; - const GList *pads = gst_element_get_pad_list (GST_ELEMENT (oss)); + const GList *pads; GstPadDirection dir = GST_PAD_UNKNOWN; #ifdef SOUND_MIXER_INFO @@ -451,9 +450,12 @@ return; + pads = GST_ELEMENT (oss)->pads; /* get direction */ if (pads && g_list_length ((GList *) pads) == 1) dir = GST_PAD_DIRECTION (GST_PAD (pads->data)); + GST_UNLOCK (oss); /* get masks */ if (ioctl (oss->mixer_fd, SOUND_MIXER_READ_RECMASK, &oss->recmask) < 0 || Index: gstosssink.c RCS file: /cvs/gstreamer/gst-plugins/sys/oss/gstosssink.c,v retrieving revision 1.99 retrieving revision 1.99.2.1 diff -u -d -r1.99 -r1.99.2.1 --- gstosssink.c 1 Nov 2004 14:43:38 -0000 1.99 +++ gstosssink.c 20 Dec 2004 17:54:14 -0000 1.99.2.1 @@ -71,17 +71,16 @@ static gboolean gst_osssink_sink_query (GstPad * pad, GstQueryType type, GstFormat * format, gint64 * value); -static GstCaps *gst_osssink_sink_fixate (GstPad * pad, const GstCaps * caps); static GstCaps *gst_osssink_getcaps (GstPad * pad); -static GstPadLinkReturn gst_osssink_sinkconnect (GstPad * pad, - const GstCaps * caps); +static gboolean gst_osssink_setcaps (GstPad * pad, GstCaps * caps); static void gst_osssink_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); static void gst_osssink_get_property (GObject * object, guint prop_id, -static void gst_osssink_chain (GstPad * pad, GstData * _data); +static GstFlowReturn gst_osssink_chain (GstPad * pad, GstBuffer * buffer); +static gboolean gst_osssink_handle_event (GstPad * pad, GstEvent * event); /* OssSink signals and args */ enum @@ -109,7 +108,7 @@ "endianness = (int) { LITTLE_ENDIAN, BIG_ENDIAN }, " "signed = (boolean) { TRUE, FALSE }, " "width = (int) 16, " - "depth = (int) { 8, 16 }, " + "depth = (int) 16, " "rate = (int) [ 1, MAX ], " "channels = (int) [ 1, 2 ]; " "audio/x-raw-int, " @@ -180,6 +179,9 @@ parent_class = g_type_class_ref (GST_TYPE_OSSELEMENT); + gobject_class->set_property = gst_osssink_set_property; + gobject_class->get_property = gst_osssink_get_property; g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_MUTE, g_param_spec_boolean ("mute", "Mute", "Mute the audio", FALSE, G_PARAM_READWRITE)); @@ -205,8 +207,6 @@ G_STRUCT_OFFSET (GstOssSinkClass, handoff), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); - gobject_class->set_property = gst_osssink_set_property; - gobject_class->get_property = gst_osssink_get_property; gobject_class->dispose = gst_osssink_dispose; gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_osssink_change_state); @@ -223,15 +223,16 @@ gst_pad_new_from_template (gst_static_pad_template_get (&osssink_sink_factory), "sink"); gst_element_add_pad (GST_ELEMENT (osssink), osssink->sinkpad); - gst_pad_set_link_function (osssink->sinkpad, gst_osssink_sinkconnect); gst_pad_set_getcaps_function (osssink->sinkpad, gst_osssink_getcaps); - gst_pad_set_fixate_function (osssink->sinkpad, gst_osssink_sink_fixate); + gst_pad_set_setcaps_function (osssink->sinkpad, gst_osssink_setcaps); + //gst_pad_set_fixate_function (osssink->sinkpad, gst_osssink_sink_fixate); gst_pad_set_convert_function (osssink->sinkpad, gst_osssink_convert); gst_pad_set_query_function (osssink->sinkpad, gst_osssink_sink_query); gst_pad_set_query_type_function (osssink->sinkpad, gst_osssink_get_query_types); gst_pad_set_formats_function (osssink->sinkpad, gst_osssink_get_formats); + gst_pad_set_event_function (osssink->sinkpad, gst_osssink_handle_event); gst_pad_set_chain_function (osssink->sinkpad, gst_osssink_chain); GST_DEBUG ("initializing osssink"); @@ -244,44 +245,33 @@ gst_object_set_parent (GST_OBJECT (osssink->provided_clock), GST_OBJECT (osssink)); osssink->handled = 0; - GST_FLAG_SET (osssink, GST_ELEMENT_THREAD_SUGGESTED); - GST_FLAG_SET (osssink, GST_ELEMENT_EVENT_AWARE); -static GstCaps * -gst_osssink_sink_fixate (GstPad * pad, const GstCaps * caps) +static gboolean +gst_osssink_setcaps (GstPad * pad, GstCaps * caps) - GstCaps *newcaps; - newcaps = - gst_caps_new_full (gst_structure_copy (gst_caps_get_structure (caps, 0)), - NULL); - structure = gst_caps_get_structure (newcaps, 0); + GstOssSink *osssink = GST_OSSSINK (GST_PAD_PARENT (pad)); - if (gst_caps_structure_fixate_field_nearest_int (structure, "rate", 44100)) { - return newcaps; - } - if (gst_caps_structure_fixate_field_nearest_int (structure, "depth", 16)) { - if (gst_caps_structure_fixate_field_nearest_int (structure, "width", 16)) { + if (!gst_osselement_parse_caps (GST_OSSELEMENT (osssink), caps)) { + GST_ELEMENT_ERROR (osssink, CORE, NEGOTIATION, (NULL), + ("received unkown format")); + gst_element_abort_preroll (GST_ELEMENT (osssink)); + return FALSE; - if (gst_caps_structure_fixate_field_nearest_int (structure, "channels", 2)) { + if (!gst_osselement_sync_parms (GST_OSSELEMENT (osssink))) { - gst_caps_free (newcaps); - return NULL; + return TRUE; static GstCaps * gst_osssink_getcaps (GstPad * pad) - GstOssSink *osssink = GST_OSSSINK (gst_pad_get_parent (pad)); GstCaps *caps; gst_osselement_probe_caps (GST_OSSELEMENT (osssink)); @@ -295,21 +285,6 @@ return caps; -static GstPadLinkReturn -gst_osssink_sinkconnect (GstPad * pad, const GstCaps * caps) -{ - if (!gst_osselement_parse_caps (GST_OSSELEMENT (osssink), caps)) - return GST_PAD_LINK_REFUSED; - if (!gst_osselement_sync_parms (GST_OSSELEMENT (osssink))) { - return GST_PAD_LINK_OK; -} static inline gint gst_osssink_get_delay (GstOssSink * osssink) @@ -389,48 +364,71 @@ osssink->clock = clock; -gst_osssink_chain (GstPad * pad, GstData * _data) +gst_osssink_handle_event (GstPad * pad, GstEvent * event) +{ + GstOssSink *osssink; + gboolean result = TRUE; + osssink = GST_OSSSINK (GST_PAD_PARENT (pad)); + GST_STREAM_LOCK (pad); + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_EOS: + ioctl (GST_OSSELEMENT (osssink)->fd, SNDCTL_DSP_SYNC, 0); + gst_audio_clock_set_active (GST_AUDIO_CLOCK (osssink->provided_clock), + FALSE); + gst_element_finish_preroll (GST_ELEMENT (osssink), + GST_STREAM_GET_LOCK (pad)); + gst_pipeline_post_message (GST_ELEMENT_MANAGER (osssink), + gst_message_new_eos (GST_OBJECT (osssink))); + break; + default: + } + GST_STREAM_UNLOCK (pad); + return result; +} +gst_osssink_chain (GstPad * pad, GstBuffer * buf) - GstBuffer *buf = GST_BUFFER (_data); GstOssSink *osssink; GstClockTimeDiff buftime, soundtime, elementtime; guchar *data; guint to_write; gint delay; + GstFlowReturn result = GST_FLOW_OK; /* this has to be an audio buffer */ - osssink = GST_OSSSINK (gst_pad_get_parent (pad)); - if (GST_IS_EVENT (buf)) { - GstEvent *event = GST_EVENT (buf); - switch (GST_EVENT_TYPE (event)) { - case GST_EVENT_EOS: - ioctl (GST_OSSELEMENT (osssink)->fd, SNDCTL_DSP_SYNC, 0); - gst_audio_clock_set_active (GST_AUDIO_CLOCK (osssink->provided_clock), - FALSE); - gst_pad_event_default (pad, event); - return; - default: - } - g_assert_not_reached (); if (!GST_OSSELEMENT (osssink)->bps) { gst_buffer_unref (buf); GST_ELEMENT_ERROR (osssink, CORE, NEGOTIATION, (NULL), ("format wasn't negotiated before chain function")); + return GST_FLOW_NOT_NEGOTIATED; + result = + GST_STREAM_GET_LOCK (pad)); + if (result != GST_FLOW_OK) { + goto done; data = GST_BUFFER_DATA (buf); to_write = GST_BUFFER_SIZE (buf); /* sync audio with buffers timestamp. elementtime is the *current* time. * soundtime is the time if the soundcard has processed all queued data. */ - elementtime = gst_element_get_time (GST_ELEMENT (osssink)); + if (GST_ELEMENT (osssink)->clock) { + elementtime = gst_clock_get_time (GST_ELEMENT (osssink)->clock) - + GST_ELEMENT (osssink)->base_time; + } else { + elementtime = 0; delay = gst_osssink_get_delay (osssink); if (delay < 0) delay = 0; @@ -504,7 +502,11 @@ gst_audio_clock_update_time ((GstAudioClock *) osssink->provided_clock, gst_osssink_get_time (osssink->provided_clock, osssink)); +done: gst_buffer_unref (buf); static const GstFormat * @@ -526,7 +528,7 @@ return gst_osselement_convert (GST_OSSELEMENT (osssink), src_format, src_value, dest_format, dest_value); @@ -551,7 +553,7 @@ gboolean res = TRUE; switch (type) { case GST_QUERY_LATENCY: @@ -655,11 +657,15 @@ gst_osssink_change_state (GstElement * element) + GstElementStateReturn result = GST_STATE_SUCCESS; osssink = GST_OSSSINK (element); switch (GST_STATE_TRANSITION (element)) { + case GST_STATE_NULL_TO_READY: case GST_STATE_READY_TO_PAUSED: + result = GST_STATE_ASYNC; break; case GST_STATE_PAUSED_TO_PLAYING: gst_audio_clock_set_active (GST_AUDIO_CLOCK (osssink->provided_clock), @@ -677,12 +683,14 @@ gst_osselement_reset (GST_OSSELEMENT (osssink)); osssink->handled = 0; + case GST_STATE_READY_TO_NULL: default: if (GST_ELEMENT_CLASS (parent_class)->change_state) - return GST_ELEMENT_CLASS (parent_class)->change_state (element); + GST_ELEMENT_CLASS (parent_class)->change_state (element); - return GST_STATE_SUCCESS; Index: gstosssrc.c RCS file: /cvs/gstreamer/gst-plugins/sys/oss/gstosssrc.c,v retrieving revision 1.54 retrieving revision 1.54.2.1 diff -u -d -r1.54 -r1.54.2.1 --- gstosssrc.c 1 Nov 2004 14:43:38 -0000 1.54 +++ gstosssrc.c 20 Dec 2004 17:54:14 -0000 1.54.2.1 @@ -92,8 +92,7 @@ static void gst_osssrc_init (GstOssSrc * osssrc); static void gst_osssrc_dispose (GObject * object); -static GstPadLinkReturn gst_osssrc_srcconnect (GstPad * pad, +static GstPadLinkReturn gst_osssrc_src_link (GstPad * pad, GstPad * peer); static GstCaps *gst_osssrc_getcaps (GstPad * pad); static const GstFormat *gst_osssrc_get_formats (GstPad * pad); static gboolean gst_osssrc_convert (GstPad * pad, @@ -117,7 +116,7 @@ static gboolean gst_osssrc_src_query (GstPad * pad, GstQueryType type, -static GstData *gst_osssrc_get (GstPad * pad); +static gboolean gst_osssrc_loop (GstPad * pad); @@ -168,6 +167,9 @@ + gobject_class->set_property = gst_osssrc_set_property; + gobject_class->get_property = gst_osssrc_get_property; g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_BUFFERSIZE, g_param_spec_ulong ("buffersize", "Buffer Size", "The size of the buffers with samples", 0, G_MAXULONG, 0, @@ -177,8 +179,6 @@ "The fragment as 0xMMMMSSSS (MMMM = total fragments, 2^SSSS = fragment size)", 0, G_MAXINT, 6, G_PARAM_READWRITE)); - gobject_class->set_property = gst_osssrc_set_property; - gobject_class->get_property = gst_osssrc_get_property; gobject_class->dispose = gst_osssrc_dispose; gstelement_class->change_state = gst_osssrc_change_state; @@ -194,9 +194,9 @@ osssrc->srcpad = (&osssrc_src_factory), "src"); - gst_pad_set_get_function (osssrc->srcpad, gst_osssrc_get); + gst_pad_set_loop_function (osssrc->srcpad, gst_osssrc_loop); gst_pad_set_getcaps_function (osssrc->srcpad, gst_osssrc_getcaps); - gst_pad_set_link_function (osssrc->srcpad, gst_osssrc_srcconnect); + gst_pad_set_link_function (osssrc->srcpad, gst_osssrc_src_link); gst_pad_set_convert_function (osssrc->srcpad, gst_osssrc_convert); gst_pad_set_formats_function (osssrc->srcpad, gst_osssrc_get_formats); gst_pad_set_event_function (osssrc->srcpad, gst_osssrc_src_event); @@ -236,7 +236,7 @@ GstOssSrc *src; - src = GST_OSSSRC (gst_pad_get_parent (pad)); + src = GST_OSSSRC (GST_PAD_PARENT (pad)); gst_osselement_probe_caps (GST_OSSELEMENT (src)); @@ -250,19 +250,9 @@ -gst_osssrc_srcconnect (GstPad * pad, const GstCaps * caps) +gst_osssrc_src_link (GstPad * pad, GstPad * peer) - GstOssSrc *src; - if (!gst_osselement_parse_caps (GST_OSSELEMENT (src), caps)) - if (!gst_osselement_sync_parms (GST_OSSELEMENT (src))) + return GST_RPAD_LINKFUNC (peer) (peer, pad); static gboolean @@ -271,9 +261,10 @@ GstCaps *allowed; - allowed = gst_pad_get_allowed_caps (pad); + //allowed = gst_pad_get_allowed_caps (pad); + allowed = NULL; if (!gst_osselement_merge_fixed_caps (GST_OSSELEMENT (src), allowed)) @@ -282,17 +273,15 @@ /* set caps on src pad */ - if (gst_pad_try_set_caps (src->srcpad, - gst_caps_new_simple ("audio/x-raw-int", - "endianness", G_TYPE_INT, GST_OSSELEMENT (src)->endianness, - "signed", G_TYPE_BOOLEAN, GST_OSSELEMENT (src)->sign, - "width", G_TYPE_INT, GST_OSSELEMENT (src)->width, - "depth", G_TYPE_INT, GST_OSSELEMENT (src)->depth, - "rate", G_TYPE_INT, GST_OSSELEMENT (src)->rate, - "channels", G_TYPE_INT, GST_OSSELEMENT (src)->channels, - NULL)) <= 0) { - return FALSE; + GST_PAD_CAPS (src->srcpad) = + gst_caps_new_simple ("audio/x-raw-int", + "endianness", G_TYPE_INT, GST_OSSELEMENT (src)->endianness, + "signed", G_TYPE_BOOLEAN, GST_OSSELEMENT (src)->sign, + "width", G_TYPE_INT, GST_OSSELEMENT (src)->width, + "depth", G_TYPE_INT, GST_OSSELEMENT (src)->depth, + "rate", G_TYPE_INT, GST_OSSELEMENT (src)->rate, + "channels", G_TYPE_INT, GST_OSSELEMENT (src)->channels, NULL); return TRUE; @@ -332,21 +321,22 @@ osssrc->clock = clock; -static GstData * -gst_osssrc_get (GstPad * pad) +gst_osssrc_loop (GstPad * pad) GstBuffer *buf; glong readbytes; glong readsamples; GST_DEBUG ("attempting to read something from the soundcard"); if (src->need_eos) { src->need_eos = FALSE; - return GST_DATA (gst_event_new (GST_EVENT_EOS)); + gst_pad_push_event (pad, gst_event_new (GST_EVENT_EOS)); buf = gst_buffer_new_and_alloc (src->buffersize); @@ -356,14 +346,14 @@ if (!gst_osssrc_negotiate (pad)) { gst_buffer_unref (buf); GST_ELEMENT_ERROR (src, CORE, NEGOTIATION, (NULL), (NULL)); - return GST_DATA (gst_event_new (GST_EVENT_INTERRUPT)); + return FALSE; if (GST_OSSELEMENT (src)->bps == 0) { GST_ELEMENT_ERROR (src, CORE, NEGOTIATION, (NULL), - return GST_DATA (gst_event_new (GST_EVENT_INTERRUPT)); readbytes = read (GST_OSSELEMENT (src)->fd, GST_BUFFER_DATA (buf), @@ -371,13 +361,13 @@ if (readbytes < 0) { GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL), GST_ERROR_SYSTEM); if (readbytes == 0) { - gst_element_set_eos (GST_ELEMENT (src)); + //gst_element_set_eos (GST_ELEMENT (src)); readsamples = readbytes * GST_OSSELEMENT (src)->rate / @@ -412,7 +402,9 @@ GST_DEBUG ("pushed buffer from soundcard of %ld bytes, timestamp %" G_GINT64_FORMAT, readbytes, GST_BUFFER_TIMESTAMP (buf)); - return GST_DATA (buf); + gst_pad_push (pad, buf); @@ -509,7 +501,7 @@ GstOssSrc *osssrc; - osssrc = GST_OSSSRC (gst_pad_get_parent (pad)); + osssrc = GST_OSSSRC (GST_PAD_PARENT (pad)); return gst_osselement_convert (GST_OSSELEMENT (osssrc), src_format, src_value, dest_format, dest_value); @@ -533,7 +525,7 @@ gboolean retval = FALSE; switch (GST_EVENT_TYPE (event)) { case GST_EVENT_EOS: @@ -589,7 +581,7 @@ gboolean res = FALSE; case GST_QUERY_POSITION: Index: xvimagesink.c RCS file: /cvs/gstreamer/gst-plugins/sys/xvimage/xvimagesink.c,v retrieving revision 1.94 retrieving revision 1.94.2.1 diff -u -d -r1.94 -r1.94.2.1 --- xvimagesink.c 28 Nov 2004 19:08:45 -0000 1.94 +++ xvimagesink.c 20 Dec 2004 17:54:14 -0000 1.94.2.1 @@ -816,7 +816,7 @@ GST_DEBUG ("Generated the following caps: %" GST_PTR_FORMAT, caps); if (gst_caps_is_empty (caps)) { - gst_caps_free (caps); + gst_caps_unref (caps); XvUngrabPort (xcontext->disp, xcontext->xv_port_id, 0); GST_ELEMENT_ERROR (xvimagesink, STREAM, WRONG_TYPE, (NULL), ("No supported format found")); @@ -1061,7 +1061,7 @@ while (formats_list) { GstXvImageFormat *format = formats_list->data; - gst_caps_free (format->caps); + gst_caps_unref (format->caps); g_free (format); formats_list = g_list_next (formats_list); @@ -1081,7 +1081,7 @@ if (xvimagesink->xcontext->channels_list) g_list_free (xvimagesink->xcontext->channels_list); - gst_caps_free (xvimagesink->xcontext->caps); + gst_caps_unref (xvimagesink->xcontext->caps); g_free (xvimagesink->xcontext->par); g_mutex_lock (xvimagesink->x_lock); @@ -1115,6 +1115,7 @@ /* Element stuff */ gst_xvimagesink_fixate (GstPad * pad, const GstCaps * caps) @@ -1138,9 +1139,10 @@ return newcaps; + gst_caps_unref (newcaps); return NULL; /* This function tries to get a format matching with a given caps in the supported list of formats we generated in gst_xvimagesink_get_xv_support */ @@ -1175,7 +1177,7 @@ GstXvImageSink *xvimagesink; - xvimagesink = GST_XVIMAGESINK (gst_pad_get_parent (pad)); + xvimagesink = GST_XVIMAGESINK (GST_PAD_PARENT (pad)); if (xvimagesink->xcontext) return gst_caps_copy (xvimagesink->xcontext->caps); @@ -1184,7 +1186,13 @@ -gst_xvimagesink_sink_link (GstPad * pad, const GstCaps * caps) +gst_xvimagesink_sink_link (GstPad * pad, GstPad * peer) + return GST_PAD_LINK_OK; +gst_xvimagesink_parse_caps (GstPad * pad, const GstCaps * caps) @@ -1197,7 +1205,7 @@ const GValue *caps_par; gint num, den; GST_DEBUG_OBJECT (xvimagesink, "sinkconnect possible caps %" GST_PTR_FORMAT " with given caps %" @@ -1209,7 +1217,7 @@ ret &= gst_structure_get_double (structure, "framerate", &xvimagesink->framerate); if (!ret) xvimagesink->video_width = video_width; xvimagesink->video_height = video_height; @@ -1219,7 +1227,7 @@ gst_caps_copy (caps)); if (im_format == 0) { /* get aspect ratio from caps if it's present, and @@ -1311,13 +1319,14 @@ gst_x_overlay_got_desired_size (GST_X_OVERLAY (xvimagesink), GST_VIDEOSINK_WIDTH (xvimagesink), GST_VIDEOSINK_HEIGHT (xvimagesink)); static GstElementStateReturn gst_xvimagesink_change_state (GstElement * element) xvimagesink = GST_XVIMAGESINK (element); @@ -1343,6 +1352,7 @@ if (xvimagesink->xwindow) gst_xvimagesink_xwindow_clear (xvimagesink, xvimagesink->xwindow); xvimagesink->time = 0; @@ -1374,38 +1384,91 @@ - if (GST_ELEMENT_CLASS (parent_class)->change_state) + GST_ELEMENT_CLASS (parent_class)->change_state (element); -gst_xvimagesink_chain (GstPad * pad, GstData * data) +gst_xvimagesink_event (GstPad * pad, GstEvent * event) + gboolean result; + GstXvImageSink *xvimagesink; + gst_element_finish_preroll (GST_ELEMENT (xvimagesink), + gst_clock_id_wait (gst_clock_new_single_shot_id (GST_VIDEOSINK_CLOCK + (xvimagesink), + xvimagesink->end_time + GST_ELEMENT (xvimagesink)->base_time), + NULL); + gst_element_post_message (GST_ELEMENT (xvimagesink), + gst_message_new_eos (GST_OBJECT (xvimagesink))); + result = TRUE; + result = gst_pad_event_default (pad, event); +gst_xvimagesink_chain (GstPad * pad, GstBuffer * buffer) GstBuffer *buf = NULL; + GstCaps *caps; + GstFlowReturn result; - g_return_if_fail (data != NULL); + buf = GST_BUFFER (buffer); - if (GST_IS_EVENT (data)) { - gst_pad_event_default (pad, GST_EVENT (data)); + caps = gst_buffer_get_caps (buffer); + if (caps && caps != GST_PAD_CAPS (pad)) { + if (gst_xvimagesink_parse_caps (pad, caps)) { + gst_pad_set_caps (pad, caps); + } else { + GST_ELEMENT_ERROR (xvimagesink, CORE, NEGOTIATION, (NULL), + ("received unkown format")); + gst_element_abort_preroll (GST_ELEMENT (xvimagesink)); + return GST_FLOW_NOT_NEGOTIATED; + } + if (!GST_PAD_CAPS (pad)) { - buf = GST_BUFFER (data); /* update time */ if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) { xvimagesink->time = GST_BUFFER_TIMESTAMP (buf); + if (GST_BUFFER_DURATION_IS_VALID (buf)) { + xvimagesink->end_time = GST_BUFFER_DURATION (buf) + xvimagesink->time; GST_LOG_OBJECT (xvimagesink, "clock wait: %" GST_TIME_FORMAT, GST_TIME_ARGS (xvimagesink->time)); if (GST_VIDEOSINK_CLOCK (xvimagesink)) { - gst_element_wait (GST_ELEMENT (xvimagesink), xvimagesink->time); + //gst_element_wait (GST_ELEMENT (xvimagesink), xvimagesink->time); + gst_clock_id_wait (gst_clock_new_single_shot_id (GST_VIDEOSINK_CLOCK + (xvimagesink), + xvimagesink->time + GST_ELEMENT (xvimagesink)->base_time), NULL); /* If this buffer has been allocated using our buffer management we simply @@ -1424,7 +1487,7 @@ gst_buffer_unref (buf); GST_ELEMENT_ERROR (xvimagesink, CORE, NEGOTIATION, (NULL), ("Failed creating an XvImage in xvimagesink chain function.")); + return GST_FLOW_ERROR; @@ -1439,9 +1502,15 @@ xvimagesink->time += GST_SECOND / xvimagesink->framerate; + result = GST_FLOW_OK; gst_xvimagesink_handle_xevents (xvimagesink, pad); /* Buffer management */ @@ -1471,20 +1540,28 @@ static GstBuffer * -gst_xvimagesink_buffer_alloc (GstPad * pad, guint64 offset, guint size) +gst_xvimagesink_buffer_alloc (GstPad * pad, guint64 offset, guint size, + GstCaps * caps) GstBuffer *buffer; GstXvImage *xvimage = NULL; - gboolean not_found = TRUE; + /* FIXME, we should just parse the caps, and provide a buffer in this format, + * we should not just reconfigure ourselves yet */ + if (!gst_xvimagesink_parse_caps (pad, caps)) { + return NULL; g_mutex_lock (xvimagesink->pool_lock); /* Walking through the pool cleaning unusable images and searching for a suitable one */ - while (not_found && xvimagesink->image_pool) { + while (xvimagesink->image_pool) { xvimage = xvimagesink->image_pool->data; if (xvimage) { @@ -1524,6 +1601,7 @@ GST_BUFFER_DATA (buffer) = xvimage->xvimage->data; GST_BUFFER_FREE_DATA_FUNC (buffer) = gst_xvimagesink_buffer_free; GST_BUFFER_SIZE (buffer) = xvimage->size; + gst_buffer_set_caps (buffer, caps); return buffer; } else return NULL; @@ -1919,12 +1997,12 @@ gst_pad_set_chain_function (GST_VIDEOSINK_PAD (xvimagesink), gst_xvimagesink_chain); + gst_pad_set_event_function (GST_VIDEOSINK_PAD (xvimagesink), + gst_xvimagesink_event); gst_pad_set_link_function (GST_VIDEOSINK_PAD (xvimagesink), gst_xvimagesink_sink_link); gst_pad_set_getcaps_function (GST_VIDEOSINK_PAD (xvimagesink), gst_xvimagesink_getcaps); - gst_pad_set_fixate_function (GST_VIDEOSINK_PAD (xvimagesink), - gst_xvimagesink_fixate); gst_pad_set_bufferalloc_function (GST_VIDEOSINK_PAD (xvimagesink), gst_xvimagesink_buffer_alloc); @@ -1949,9 +2027,6 @@ xvimagesink->synchronous = FALSE; xvimagesink->par = NULL; - GST_FLAG_SET (xvimagesink, GST_ELEMENT_THREAD_SUGGESTED); - GST_FLAG_SET (xvimagesink, GST_ELEMENT_EVENT_AWARE); @@ -1976,6 +2051,9 @@ parent_class = g_type_class_ref (GST_TYPE_VIDEOSINK); + gobject_class->set_property = gst_xvimagesink_set_property; + gobject_class->get_property = gst_xvimagesink_get_property; g_object_class_install_property (gobject_class, ARG_CONTRAST, g_param_spec_int ("contrast", "Contrast", "The contrast of the video", -1000, 1000, 0, G_PARAM_READWRITE)); @@ -2001,8 +2079,6 @@ "The pixel aspect ratio of the device", "1/1", G_PARAM_READWRITE)); gobject_class->finalize = gst_xvimagesink_finalize; - gobject_class->set_property = gst_xvimagesink_set_property; - gobject_class->get_property = gst_xvimagesink_get_property; gstelement_class->change_state = gst_xvimagesink_change_state; Index: xvimagesink.h RCS file: /cvs/gstreamer/gst-plugins/sys/xvimage/xvimagesink.h,v retrieving revision 1.26 retrieving revision 1.26.2.1 diff -u -d -r1.26 -r1.26.2.1 --- xvimagesink.h 8 Oct 2004 11:26:49 -0000 1.26 +++ xvimagesink.h 20 Dec 2004 17:54:14 -0000 1.26.2.1 @@ -148,6 +148,7 @@ GValue *par; /* object-set pixel aspect ratio */ GstClockTime time; + GstClockTime end_time; GMutex *pool_lock; GSList *image_pool; Index: gstac3parse.c RCS file: /cvs/gstreamer/gst-plugins/gst/ac3parse/gstac3parse.c,v retrieving revision 1.28 retrieving revision 1.28.2.1 diff -u -d -r1.28 -r1.28.2.1 --- gstac3parse.c 26 Jul 2004 22:11:21 -0000 1.28 +++ gstac3parse.c 20 Dec 2004 17:54:14 -0000 1.28.2.1 @@ -113,7 +113,7 @@ static void gst_ac3parse_class_init (gpointer g_class); static void gst_ac3parse_init (GstAc3Parse * ac3parse); -static void gst_ac3parse_chain (GstPad * pad, GstData * data); +static GstFlowReturn gst_ac3parse_chain (GstPad * pad, GstBuffer * buffer); static void gst_ac3parse_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); @@ -167,13 +167,13 @@ gst_static_pad_template_get (&gst_ac3parse_sink_template)); gst_element_class_set_details (gstelement_class, &ac3parse_details); + gobject_class->set_property = gst_ac3parse_set_property; + gobject_class->get_property = gst_ac3parse_get_property; g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_SKIP, g_param_spec_int ("skip", "skip", "skip", G_MININT, G_MAXINT, 0, G_PARAM_READWRITE)); /* CHECKME */ - gobject_class->set_property = gst_ac3parse_set_property; - gobject_class->get_property = gst_ac3parse_get_property; gstelement_class->change_state = gst_ac3parse_change_state; @@ -189,7 +189,6 @@ ac3parse->srcpad = (&gst_ac3parse_src_template), "src"); - gst_pad_use_explicit_caps (ac3parse->srcpad); gst_element_add_pad (GST_ELEMENT (ac3parse), ac3parse->srcpad); ac3parse->partialbuf = NULL; @@ -198,10 +197,9 @@ ac3parse->sample_rate = ac3parse->channels = -1; -gst_ac3parse_chain (GstPad * pad, GstData * _data) +gst_ac3parse_chain (GstPad * pad, GstBuffer * buf) GstAc3Parse *ac3parse; glong size, offset = 0; @@ -210,11 +208,7 @@ GstBuffer *outbuf = NULL; gint bpf; guint sample_rate = -1, channels = -1; - g_return_if_fail (buf != NULL); -/* g_return_if_fail(GST_IS_BUFFER(buf)); */ ac3parse = GST_AC3PARSE (GST_OBJECT_PARENT (pad)); GST_DEBUG ("ac3parse: received buffer of %d bytes", GST_BUFFER_SIZE (buf)); @@ -343,14 +337,18 @@ newcaps = gst_caps_new_simple ("audio/x-ac3", "channels", G_TYPE_INT, channels, "rate", G_TYPE_INT, sample_rate, NULL); - gst_pad_set_explicit_caps (ac3parse->srcpad, newcaps); + GST_PAD_CAPS (ac3parse->srcpad) = newcaps; + GST_BUFFER_CAPS (outbuf) = GST_PAD_CAPS (ac3parse->srcpad); offset += bpf; if (ac3parse->skip == 0 && GST_PAD_IS_LINKED (ac3parse->srcpad)) { GST_DEBUG ("ac3parse: pushing buffer of %d bytes", GST_BUFFER_SIZE (outbuf)); - gst_pad_push (ac3parse->srcpad, GST_DATA (outbuf)); + result = gst_pad_push (ac3parse->srcpad, outbuf); + if (result != GST_FLOW_OK) { + goto end; + } } else { GST_DEBUG ("ac3parse: skipping buffer of %d bytes", @@ -363,6 +361,7 @@ fprintf (stderr, "ac3parse: *** wrong header, skipping byte (FIXME?)\n"); +end: /* if we have processed this block and there are still */ /* bytes left not in a partial block, copy them over. */ if (size - offset > 0) { @@ -375,6 +374,8 @@ gst_buffer_unref (ac3parse->partialbuf); ac3parse->partialbuf = outbuf; Index: gstaging.c RCS file: /cvs/gstreamer/gst-plugins/gst/effectv/gstaging.c,v retrieving revision 1.22 retrieving revision 1.22.4.1 diff -u -d -r1.22 -r1.22.4.1 --- gstaging.c 21 May 2004 22:39:25 -0000 1.22 +++ gstaging.c 20 Dec 2004 17:54:15 -0000 1.22.4.1 @@ -172,15 +172,15 @@ gobject_class = G_OBJECT_CLASS (g_class); videofilter_class = GST_VIDEOFILTER_CLASS (g_class); + gobject_class->set_property = gst_agingtv_set_property; + gobject_class->get_property = gst_agingtv_get_property; #if 0 g_object_class_install_property (gobject_class, ARG_METHOD, g_param_spec_enum ("method", "method", "method", GST_TYPE_AGINGTV_METHOD, GST_AGINGTV_METHOD_1, G_PARAM_READWRITE)); #endif - gobject_class->set_property = gst_agingtv_set_property; - gobject_class->get_property = gst_agingtv_get_property; videofilter_class->setup = gst_agingtv_setup; Index: gstdice.c RCS file: /cvs/gstreamer/gst-plugins/gst/effectv/gstdice.c,v retrieving revision 1.18 retrieving revision 1.18.4.1 diff -u -d -r1.18 -r1.18.4.1 --- gstdice.c 21 May 2004 22:39:25 -0000 1.18 +++ gstdice.c 20 Dec 2004 17:54:15 -0000 1.18.4.1 @@ -173,13 +173,13 @@ dicetv_class->reset = gst_dicetv_reset_handler; + gobject_class->set_property = gst_dicetv_set_property; + gobject_class->get_property = gst_dicetv_get_property; g_object_class_install_property (gobject_class, ARG_CUBE_BITS, g_param_spec_int ("square_bits", "Square Bits", "The size of the Squares", MIN_CUBE_BITS, MAX_CUBE_BITS, DEFAULT_CUBE_BITS, G_PARAM_READWRITE)); - gobject_class->set_property = gst_dicetv_set_property; - gobject_class->get_property = gst_dicetv_get_property; videofilter_class->setup = gst_dicetv_setup; Index: gstquark.c RCS file: /cvs/gstreamer/gst-plugins/gst/effectv/gstquark.c,v --- gstquark.c 21 May 2004 22:39:25 -0000 1.19 +++ gstquark.c 20 Dec 2004 17:54:15 -0000 1.19.4.1 @@ -95,7 +95,7 @@ static void gst_quarktv_get_property (GObject * object, guint prop_id, -static void gst_quarktv_chain (GstPad * pad, GstData * _data); +static GstFlowReturn gst_quarktv_chain (GstPad * pad, GstBuffer * buffer); @@ -158,30 +158,32 @@ + gobject_class->set_property = gst_quarktv_set_property; + gobject_class->get_property = gst_quarktv_get_property; g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_PLANES, g_param_spec_int ("planes", "Planes", "Number of frames in the buffer", 1, 32, PLANES, G_PARAM_READWRITE)); - gobject_class->set_property = gst_quarktv_set_property; - gobject_class->get_property = gst_quarktv_get_property; gstelement_class->change_state = gst_quarktv_change_state; -gst_quarktv_link (GstPad * pad, const GstCaps * caps) +gst_quarktv_link (GstPad * pad, GstPad * peer) GstQuarkTV *filter; GstPad *otherpad; - gint i; - GstPadLinkReturn res; + //gint i; + //GstPadLinkReturn res; filter = GST_QUARKTV (gst_pad_get_parent (pad)); g_return_val_if_fail (GST_IS_QUARKTV (filter), GST_PAD_LINK_REFUSED); otherpad = (pad == filter->srcpad ? filter->sinkpad : filter->srcpad); res = gst_pad_try_set_caps (otherpad, caps); if (GST_PAD_LINK_FAILED (res)) return res; @@ -198,6 +200,7 @@ gst_buffer_unref (filter->planetable[i]); filter->planetable[i] = NULL; @@ -208,7 +211,7 @@ filter->sinkpad = (&gst_effectv_sink_template), "sink"); - gst_pad_set_getcaps_function (filter->sinkpad, gst_pad_proxy_getcaps); + //gst_pad_set_getcaps_function (filter->sinkpad, gst_pad_proxy_getcaps); gst_pad_set_chain_function (filter->sinkpad, gst_quarktv_chain); gst_pad_set_link_function (filter->sinkpad, gst_quarktv_link); gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad); @@ -216,7 +219,7 @@ filter->srcpad = (&gst_effectv_src_template), "src"); - gst_pad_set_getcaps_function (filter->srcpad, gst_pad_proxy_getcaps); + //gst_pad_set_getcaps_function (filter->srcpad, gst_pad_proxy_getcaps); gst_pad_set_link_function (filter->srcpad, gst_quarktv_link); gst_element_add_pad (GST_ELEMENT (filter), filter->srcpad); @@ -227,10 +230,9 @@ memset (filter->planetable, 0, filter->planes * sizeof (GstBuffer *)); -gst_quarktv_chain (GstPad * pad, GstData * _data) +gst_quarktv_chain (GstPad * pad, GstBuffer * buf) guint32 *src, *dest; @@ -242,9 +244,7 @@ area = filter->area; - outbuf = gst_buffer_new (); - GST_BUFFER_SIZE (outbuf) = area * sizeof (guint32); - GST_BUFFER_DATA (outbuf) = g_malloc (GST_BUFFER_SIZE (outbuf)); + outbuf = gst_pad_alloc_buffer (filter->srcpad, 0, area, GST_PAD_CAPS (pad)); dest = (guint32 *) GST_BUFFER_DATA (outbuf); GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (buf); @@ -264,12 +264,14 @@ dest[area] = (rand ? ((guint32 *) GST_BUFFER_DATA (rand))[area] : 0); - gst_pad_push (filter->srcpad, GST_DATA (outbuf)); + gst_pad_push (filter->srcpad, outbuf); filter->current_plane--; if (filter->current_plane < 0) filter->current_plane = filter->planes - 1; Index: gstrev.c RCS file: /cvs/gstreamer/gst-plugins/gst/effectv/gstrev.c,v --- gstrev.c 21 May 2004 22:39:25 -0000 1.18 +++ gstrev.c 20 Dec 2004 17:54:15 -0000 1.18.4.1 @@ -171,6 +171,9 @@ gobject_class = G_OBJECT_CLASS (klass); videofilter_class = GST_VIDEOFILTER_CLASS (klass); + gobject_class->set_property = gst_revtv_set_property; + gobject_class->get_property = gst_revtv_get_property; g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_DELAY, g_param_spec_int ("delay", "Delay", "Delay in frames between updates", 1, 100, 1, G_PARAM_READWRITE)); @@ -181,9 +184,6 @@ g_param_spec_int ("gain", "Gain", "Control gain", 1, 200, 50, G_PARAM_READWRITE)); - gobject_class->set_property = gst_revtv_set_property; - gobject_class->get_property = gst_revtv_get_property; videofilter_class->setup = gst_revtv_setup; Index: gstvertigo.c RCS file: /cvs/gstreamer/gst-plugins/gst/effectv/gstvertigo.c,v retrieving revision 1.20 retrieving revision 1.20.4.1 diff -u -d -r1.20 -r1.20.4.1 --- gstvertigo.c 21 May 2004 22:39:25 -0000 1.20 +++ gstvertigo.c 20 Dec 2004 17:54:15 -0000 1.20.4.1 @@ -169,6 +169,9 @@ klass->reset = gst_vertigotv_reset_handler; + gobject_class->set_property = gst_vertigotv_set_property; + gobject_class->get_property = gst_vertigotv_get_property; g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_SPEED, g_param_spec_float ("speed", "Speed", "Control the speed of movement", 0.01, 100.0, 0.02, G_PARAM_READWRITE)); @@ -176,9 +179,6 @@ g_param_spec_float ("zoom_speed", "Zoom Speed", "Control the rate of zooming", 1.01, 1.1, 1.01, G_PARAM_READWRITE)); - gobject_class->set_property = gst_vertigotv_set_property; - gobject_class->get_property = gst_vertigotv_get_property; videofilter_class->setup = gst_vertigotv_setup; Index: gstwarp.c RCS file: /cvs/gstreamer/gst-plugins/gst/effectv/gstwarp.c,v --- gstwarp.c 21 May 2004 22:39:25 -0000 1.21 +++ gstwarp.c 20 Dec 2004 17:54:15 -0000 1.21.4.1 @@ -173,15 +173,15 @@ + gobject_class->set_property = gst_warptv_set_property; + gobject_class->get_property = gst_warptv_get_property; GST_TYPE_WARPTV_METHOD, GST_WARPTV_METHOD_1, G_PARAM_READWRITE)); - gobject_class->set_property = gst_warptv_set_property; - gobject_class->... [truncated message content] |