diff options
author | Wim Taymans <wim.taymans@gmail.com> | 2004-12-20 17:54:16 +0000 |
---|---|---|
committer | Wim Taymans <wim.taymans@gmail.com> | 2004-12-20 17:54:16 +0000 |
commit | 1a293825c71a0803c9032f357f934aee6b54fe79 (patch) | |
tree | b31779cc6a7142a781d7a782e9aa92766a5a6d6a /gst-libs | |
parent | 4ad298d6806a7130c64fce65bf3aa3f7313bba8d (diff) | |
download | gst-plugins-bad-1a293825c71a0803c9032f357f934aee6b54fe79.tar.gz gst-plugins-bad-1a293825c71a0803c9032f357f934aee6b54fe79.tar.bz2 gst-plugins-bad-1a293825c71a0803c9032f357f934aee6b54fe79.zip |
Various plugin updates to have something to play with.
Original commit message from CVS:
Various plugin updates to have something to play with.
Diffstat (limited to 'gst-libs')
-rw-r--r-- | gst-libs/gst/Makefile.am | 3 | ||||
-rw-r--r-- | gst-libs/gst/audio/gstaudiofilter.c | 39 | ||||
-rw-r--r-- | gst-libs/gst/audio/testchannels.c | 2 | ||||
-rw-r--r-- | gst-libs/gst/gconf/gconf.c | 25 | ||||
-rw-r--r-- | gst-libs/gst/media-info/media-info-priv.c | 21 | ||||
-rw-r--r-- | gst-libs/gst/media-info/media-info.c | 17 | ||||
-rw-r--r-- | gst-libs/gst/riff/riff-read.c | 13 |
7 files changed, 71 insertions, 49 deletions
diff --git a/gst-libs/gst/Makefile.am b/gst-libs/gst/Makefile.am index ac8f5952..ec5cc915 100644 --- a/gst-libs/gst/Makefile.am +++ b/gst-libs/gst/Makefile.am @@ -27,8 +27,7 @@ SUBDIRS = \ video \ xoverlay \ $(X_DIR) \ - . \ - play + . DIST_SUBDIRS = \ audio \ diff --git a/gst-libs/gst/audio/gstaudiofilter.c b/gst-libs/gst/audio/gstaudiofilter.c index 70ae6bf9..c5ba9e35 100644 --- a/gst-libs/gst/audio/gstaudiofilter.c +++ b/gst-libs/gst/audio/gstaudiofilter.c @@ -51,7 +51,7 @@ static void gst_audiofilter_set_property (GObject * object, guint prop_id, 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 @@ gst_audiofilter_class_init (gpointer g_class, gpointer class_data) } 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 @@ gst_audiofilter_link (GstPad * pad, const GstCaps * caps) if (audiofilter_class->setup) (audiofilter_class->setup) (audiofilter); +#endif return GST_PAD_LINK_OK; } @@ -177,7 +180,7 @@ gst_audiofilter_init (GTypeInstance * instance, gpointer g_class) 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 @@ gst_audiofilter_init (GTypeInstance * instance, gpointer g_class) 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); GstAudiofilter *audiofilter; GstBuffer *outbuf; GstAudiofilterClass *audiofilter_class; 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); audiofilter = GST_AUDIOFILTER (gst_pad_get_parent (pad)); //g_return_if_fail (audiofilter->inited); @@ -212,14 +215,14 @@ gst_audiofilter_chain (GstPad * pad, GstData * data) 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_audiofilter_chain (GstPad * pad, GstData * data) gst_buffer_unref (inbuf); } - gst_pad_push (audiofilter->srcpad, GST_DATA (outbuf)); + gst_pad_push (audiofilter->srcpad, outbuf); + + return GST_FLOW_OK; } static void diff --git a/gst-libs/gst/audio/testchannels.c b/gst-libs/gst/audio/testchannels.c index b886c820..3f226f31 100644 --- a/gst-libs/gst/audio/testchannels.c +++ b/gst-libs/gst/audio/testchannels.c @@ -49,7 +49,7 @@ main (gint argc, gchar * argv[]) 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; } diff --git a/gst-libs/gst/gconf/gconf.c b/gst-libs/gst/gconf/gconf.c index 00b35a22..b3c56681 100644 --- a/gst-libs/gst/gconf/gconf.c +++ b/gst-libs/gst/gconf/gconf.c @@ -55,25 +55,34 @@ gst_bin_find_unconnected_pad (GstBin * bin, GstPadDirection direction) 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 @@ gst_gconf_render_bin_from_description (const gchar * description) /* 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", diff --git a/gst-libs/gst/media-info/media-info-priv.c b/gst-libs/gst/media-info/media-info-priv.c index 27fadde5..37f29a84 100644 --- a/gst-libs/gst/media-info/media-info-priv.c +++ b/gst-libs/gst/media-info/media-info-priv.c @@ -273,7 +273,7 @@ G_STMT_START { \ #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 @@ gmip_find_type (GstMediaInfoPriv * priv, GError ** error) 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 @@ gmip_find_stream (GstMediaInfoPriv * priv) /* 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 (GstMediaInfoPriv * priv) { 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)) + ) GMI_DEBUG ("+"); GMI_DEBUG ("\n"); gmip_find_track_metadata_post (priv); @@ -729,8 +733,9 @@ gmip_find_track_streaminfo (GstMediaInfoPriv * priv) { 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) + // && gst_bin_iterate (GST_BIN (priv->pipeline)) + ) GMI_DEBUG ("+"); GMI_DEBUG ("\n"); gmip_find_track_streaminfo_post (priv); @@ -766,7 +771,9 @@ gmip_find_track_format (GstMediaInfoPriv * priv) { 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) + //&& gst_bin_iterate (GST_BIN (priv->pipeline)) + ) GMI_DEBUG ("+"); GMI_DEBUG ("\n"); gmip_find_track_format_post (priv); diff --git a/gst-libs/gst/media-info/media-info.c b/gst-libs/gst/media-info/media-info.c index 16a66250..8e1ecee4 100644 --- a/gst-libs/gst/media-info/media-info.c +++ b/gst-libs/gst/media-info/media-info.c @@ -266,7 +266,8 @@ gst_media_info_read_idler (GstMediaInfo * info, GstMediaInfoStream ** streamp, 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 @@ gst_media_info_read_idler (GstMediaInfo * info, GstMediaInfoStream ** streamp, 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)) { GMI_DEBUG ("?"); return TRUE; } @@ -317,7 +319,7 @@ gst_media_info_read_idler (GstMediaInfo * info, GstMediaInfoStream ** streamp, 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) { GMI_DEBUG ("?"); priv->metadata_iters++; @@ -338,8 +340,9 @@ gst_media_info_read_idler (GstMediaInfo * info, GstMediaInfoStream ** streamp, } 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)) + ) { GMI_DEBUG ("?"); return TRUE; } @@ -355,7 +358,9 @@ gst_media_info_read_idler (GstMediaInfo * info, GstMediaInfoStream ** streamp, } case GST_MEDIA_INFO_STATE_FORMAT: { - if ((priv->format == NULL) && gst_bin_iterate (GST_BIN (priv->pipeline))) { + if ((priv->format == NULL) + // && gst_bin_iterate (GST_BIN (priv->pipeline)) + ) { GMI_DEBUG ("?"); return TRUE; } diff --git a/gst-libs/gst/riff/riff-read.c b/gst-libs/gst/riff/riff-read.c index d5394711..7c7e1d09 100644 --- a/gst-libs/gst/riff/riff-read.c +++ b/gst-libs/gst/riff/riff-read.c @@ -174,10 +174,6 @@ gst_riff_read_use_event (GstRiffRead * riff, GstEvent * event) 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 @@ gst_riff_read_info (GstRiffRead * riff) 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 { |