Docs updates

Original commit message from CVS:
Docs updates
Added XML load from memory functionality
Undid the videosink patch, something else is wrong now on my machine:
no MMX acceleration :-(
This commit is contained in:
Wim Taymans 2001-01-21 23:20:46 +00:00
parent 0aaa531aaf
commit 75aa948e0c
22 changed files with 336 additions and 257 deletions

View file

@ -14,6 +14,7 @@
<!entity GstPad SYSTEM "sgml/gstpad.sgml"> <!entity GstPad SYSTEM "sgml/gstpad.sgml">
<!entity GstPipeline SYSTEM "sgml/gstpipeline.sgml"> <!entity GstPipeline SYSTEM "sgml/gstpipeline.sgml">
<!entity GstAutoplug SYSTEM "sgml/gstautoplug.sgml"> <!entity GstAutoplug SYSTEM "sgml/gstautoplug.sgml">
<!entity GstParse SYSTEM "sgml/gstparse.sgml">
<!entity GstPlugin SYSTEM "sgml/gstplugin.sgml"> <!entity GstPlugin SYSTEM "sgml/gstplugin.sgml">
<!entity GstThread SYSTEM "sgml/gstthread.sgml"> <!entity GstThread SYSTEM "sgml/gstthread.sgml">
<!entity GstTrace SYSTEM "sgml/gsttrace.sgml"> <!entity GstTrace SYSTEM "sgml/gsttrace.sgml">
@ -61,27 +62,27 @@ well as the object hiarchy that defines elements and bins, along
with some more specialized elements.</para> with some more specialized elements.</para>
&Gst; &Gst;
&GstInfo;
&GstObject;
&GstElement;
&GstBin;
&GstPipeline;
&GstAutoplug; &GstAutoplug;
&GstBin;
&GstBuffer; &GstBuffer;
&GstBufferPool; &GstBufferPool;
&GstPad;
&GstPlugin;
&GstThread;
&GstQueue;
&GstTypeFind;
&GstType;
&GstCaps; &GstCaps;
&GstProps;
&GstMeta;
&GstUtils;
&GstCpu; &GstCpu;
&GstElement;
&GstInfo;
&GstMeta;
&GstObject;
&GstPad;
&GstParse;
&GstPipeline;
&GstPlugin;
&GstProps;
&GstQueue;
&GstThread;
&GstTrace; &GstTrace;
&GstType;
&GstTypeFind;
&GstUtils;
&GstXml; &GstXml;
&cothreads; &cothreads;

View file

@ -105,8 +105,6 @@ GST_IS_BIN
GST_IS_BIN_CLASS GST_IS_BIN_CLASS
gst_bin_details gst_bin_details
gst_bin_use_cothreads gst_bin_use_cothreads
gst_bin_remove_eos_provider
gst_bin_add_eos_provider
_GstBinChain _GstBinChain
</SECTION> </SECTION>
@ -189,6 +187,7 @@ GST_STATE_READY_TO_NULL
GstElementFlags GstElementFlags
GST_ELEMENT_IS_THREAD_SUGGESTED GST_ELEMENT_IS_THREAD_SUGGESTED
GST_ELEMENT_IS_COTHREAD_STOPPING GST_ELEMENT_IS_COTHREAD_STOPPING
GST_ELEMENT_IS_EOS
GstElement GstElement
GstElementDetails GstElementDetails
GstElementFactory GstElementFactory
@ -238,7 +237,6 @@ GST_ELEMENT_CLASS
GST_IS_ELEMENT GST_IS_ELEMENT
GST_IS_ELEMENT_CLASS GST_IS_ELEMENT_CLASS
gst_element_get_type gst_element_get_type
gst_element_announce_eos
</SECTION> </SECTION>
<SECTION> <SECTION>
@ -356,9 +354,9 @@ gst_pad_set_element_private
gst_pad_get_element_private gst_pad_get_element_private
gst_pad_set_parent gst_pad_set_parent
gst_pad_get_parent gst_pad_get_parent
gst_pad_add_ghost_parent gst_pad_add_ghost_pad
gst_pad_remove_ghost_parent gst_pad_remove_ghost_pad
gst_pad_get_ghost_parents gst_pad_get_ghost_pad_list
gst_pad_get_peer gst_pad_get_peer
gst_pad_connect gst_pad_connect
gst_pad_disconnect gst_pad_disconnect
@ -368,7 +366,6 @@ gst_pad_pull_region
gst_pad_pullregion gst_pad_pullregion
gst_pad_select gst_pad_select
gst_pad_set_eos gst_pad_set_eos
gst_pad_eos_func
gst_pad_handle_qos gst_pad_handle_qos
gst_pad_eos gst_pad_eos
gst_pad_save_thyself gst_pad_save_thyself
@ -390,6 +387,7 @@ GST_RPAD_EOSFUNC
GST_GPAD_REALPAD GST_GPAD_REALPAD
GstGhostPad GstGhostPad
gst_ghost_pad_new
GstPadFactoryEntry GstPadFactoryEntry
GstPadFactory[] GstPadFactory[]
@ -656,6 +654,7 @@ gst_util_dump_mem
<TITLE>GstXml</TITLE> <TITLE>GstXml</TITLE>
GstXML GstXML
gst_xml_new gst_xml_new
gst_xml_new_from_memory
gst_xml_write gst_xml_write
gst_xml_get_element gst_xml_get_element
gst_xml_get_topelements gst_xml_get_topelements

View file

@ -103,6 +103,7 @@ Flags for a bin.
</para> </para>
@bin: @bin:
@Returns:
<!-- ##### FUNCTION gst_bin_create_plan ##### --> <!-- ##### FUNCTION gst_bin_create_plan ##### -->

View file

@ -131,6 +131,7 @@ This enum defines the standard flags that an element may have.
@GST_ELEMENT_NEW_LOOPFUNC: @GST_ELEMENT_NEW_LOOPFUNC:
@GST_ELEMENT_COTHREAD_STOPPING: @GST_ELEMENT_COTHREAD_STOPPING:
@GST_ELEMENT_USE_COTHREAD: @GST_ELEMENT_USE_COTHREAD:
@GST_ELEMENT_EOS:
@GST_ELEMENT_FLAG_LAST: @GST_ELEMENT_FLAG_LAST:
<!-- ##### MACRO GST_ELEMENT_IS_THREAD_SUGGESTED ##### --> <!-- ##### MACRO GST_ELEMENT_IS_THREAD_SUGGESTED ##### -->
@ -149,6 +150,14 @@ Queries whether the cothread holding this element needs to be stopped.
@obj: The element to query @obj: The element to query
<!-- ##### MACRO GST_ELEMENT_IS_EOS ##### -->
<para>
</para>
@obj:
<!-- ##### STRUCT GstElement ##### --> <!-- ##### STRUCT GstElement ##### -->
<para> <para>
@ -306,6 +315,7 @@ circumstances.
@element: @element:
@pad: @pad:
@name:
<!-- ##### FUNCTION gst_element_remove_ghost_pad ##### --> <!-- ##### FUNCTION gst_element_remove_ghost_pad ##### -->

View file

@ -1,5 +1,5 @@
<!-- ##### SECTION Title ##### --> <!-- ##### SECTION Title ##### -->
gstinfo GstInfo
<!-- ##### SECTION Short_Description ##### --> <!-- ##### SECTION Short_Description ##### -->
info/debugging/error handling info/debugging/error handling

View file

@ -374,25 +374,25 @@ Destroy the pad.
@Returns: @Returns:
<!-- ##### FUNCTION gst_pad_add_ghost_parent ##### --> <!-- ##### FUNCTION gst_pad_add_ghost_pad ##### -->
<para> <para>
</para> </para>
@pad: @pad:
@parent: @ghostpad:
<!-- ##### FUNCTION gst_pad_remove_ghost_parent ##### --> <!-- ##### FUNCTION gst_pad_remove_ghost_pad ##### -->
<para> <para>
</para> </para>
@pad: @pad:
@parent: @ghostpad:
<!-- ##### FUNCTION gst_pad_get_ghost_parents ##### --> <!-- ##### FUNCTION gst_pad_get_ghost_pad_list ##### -->
<para> <para>
</para> </para>
@ -486,15 +486,6 @@ Destroy the pad.
@Returns: @Returns:
<!-- ##### FUNCTION gst_pad_eos_func ##### -->
<para>
</para>
@pad:
@Returns:
<!-- ##### FUNCTION gst_pad_handle_qos ##### --> <!-- ##### FUNCTION gst_pad_handle_qos ##### -->
<para> <para>
@ -506,10 +497,10 @@ Destroy the pad.
<!-- ##### MACRO gst_pad_eos ##### --> <!-- ##### MACRO gst_pad_eos ##### -->
<para> <para>
Call the EOS function of the pad
</para> </para>
@pad: @pad: the pad to call the eos function of.
<!-- ##### FUNCTION gst_pad_save_thyself ##### --> <!-- ##### FUNCTION gst_pad_save_thyself ##### -->
@ -551,7 +542,7 @@ Destroy the pad.
@pushfunc: @pushfunc:
@pullfunc: @pullfunc:
@pullregionfunc: @pullregionfunc:
@ghostparents: @ghostpads:
<!-- ##### MACRO GST_RPAD_DIRECTION ##### --> <!-- ##### MACRO GST_RPAD_DIRECTION ##### -->
<para> <para>
@ -665,6 +656,16 @@ Get the real pad of this ghost pad.
@pad: @pad:
@realpad: @realpad:
<!-- ##### FUNCTION gst_ghost_pad_new ##### -->
<para>
</para>
@name:
@pad:
@Returns:
<!-- ##### TYPEDEF GstPadFactoryEntry ##### --> <!-- ##### TYPEDEF GstPadFactoryEntry ##### -->
<para> <para>
Defines an entry for a padfactory. Defines an entry for a padfactory.

View file

@ -2,11 +2,12 @@
GstParse GstParse
<!-- ##### SECTION Short_Description ##### --> <!-- ##### SECTION Short_Description ##### -->
Parses commandline syntax into a pipeline.
<!-- ##### SECTION Long_Description ##### --> <!-- ##### SECTION Long_Description ##### -->
<para> <para>
This method allows you to create a pipeline from a command
line syntax description.
</para> </para>
<!-- ##### SECTION See_Also ##### --> <!-- ##### SECTION See_Also ##### -->

View file

@ -2,12 +2,13 @@
GstQueue GstQueue
<!-- ##### SECTION Short_Description ##### --> <!-- ##### SECTION Short_Description ##### -->
Simple data queue. (queue) Simple asynchronous data queue.
<!-- ##### SECTION Long_Description ##### --> <!-- ##### SECTION Long_Description ##### -->
<para> <para>
Simple data queue. Data is queued till max_level buffers any subsequent buffers Simple data queue. Data is queued till max_level buffers any subsequent buffers
sent to this filter will block until free space becomes available in the buffer. sent to this filter will block until free space becomes available in the buffer.
The queue is typically used in conjunction with a thread.
</para> </para>
<para> <para>
You can query how many buffers are queued with the level argument. You can query how many buffers are queued with the level argument.
@ -15,6 +16,9 @@ You can query how many buffers are queued with the level argument.
<para> <para>
The default queue length is set to 10. The default queue length is set to 10.
</para> </para>
<para>
The queue blocks by default.
</para>
<!-- ##### SECTION See_Also ##### --> <!-- ##### SECTION See_Also ##### -->
<para> <para>
@ -34,11 +38,6 @@ blocks.
<!-- ##### ARG GstQueue:block ##### --> <!-- ##### ARG GstQueue:block ##### -->
<para> <para>
Specify wether the queue blocks or not.
</para>
<!-- ##### ARG GstQueue:timeout ##### -->
<para>
</para> </para>

View file

@ -400,6 +400,12 @@ GstEsdSink
</para> </para>
<!-- ##### ARG GstQueue:timeout ##### -->
<para>
</para>
<!-- ##### FUNCTION gst_fakesrc_new ##### --> <!-- ##### FUNCTION gst_fakesrc_new ##### -->
<para> <para>
@ -809,6 +815,14 @@ audio source. It provides data for the next element in the graph.
@klass: @klass:
<!-- ##### FUNCTION gst_pad_add_ghost_parent ##### -->
<para>
</para>
@pad:
@parent:
<!-- ##### MACRO GST_SINK_CLASS ##### --> <!-- ##### MACRO GST_SINK_CLASS ##### -->
<para> <para>
@ -1482,6 +1496,14 @@ Query a GstSrc for the ASYNC flag
</para> </para>
<!-- ##### FUNCTION gst_pad_get_ghost_parents ##### -->
<para>
</para>
@pad:
@Returns:
<!-- ##### STRUCT GstAudioSrc ##### --> <!-- ##### STRUCT GstAudioSrc ##### -->
<para> <para>
@ -1647,6 +1669,14 @@ Query the element for the current mime type
@GST_PROPS_FOURCC_ID_NUM: @GST_PROPS_FOURCC_ID_NUM:
@GST_PROPS_BOOL_ID_NUM: @GST_PROPS_BOOL_ID_NUM:
<!-- ##### FUNCTION gst_pad_eos_func ##### -->
<para>
</para>
@pad:
@Returns:
<!-- ##### STRUCT GstEsdSinkClass ##### --> <!-- ##### STRUCT GstEsdSinkClass ##### -->
<para> <para>
@ -1992,6 +2022,14 @@ Indicates this pad is active
</para> </para>
<!-- ##### FUNCTION gst_pad_remove_ghost_parent ##### -->
<para>
</para>
@pad:
@parent:
<!-- ##### SECTION ./tmpl/GstElement.sgml:Title ##### --> <!-- ##### SECTION ./tmpl/GstElement.sgml:Title ##### -->
GstElement GstElement

View file

@ -34,6 +34,17 @@ All GstElements can be serialized to an XML presentation and subsequently loaded
@Returns: @Returns:
<!-- ##### FUNCTION gst_xml_new_from_memory ##### -->
<para>
</para>
@buffer:
@size:
@root:
@Returns:
<!-- ##### FUNCTION gst_xml_write ##### --> <!-- ##### FUNCTION gst_xml_write ##### -->
<para> <para>

View file

@ -28,9 +28,9 @@
static void gst_autoplug_class_init (GstAutoplugClass *klass); static void gst_autoplug_class_init (GstAutoplugClass *klass);
static void gst_autoplug_init (GstAutoplug *autoplug); static void gst_autoplug_init (GstAutoplug *autoplug);
static GList* gst_autoplug_func (gpointer src, gpointer sink, static GList* gst_autoplug_func (gpointer src, gpointer sink,
GstAutoplugListFunction list_function, GstAutoplugListFunction list_function,
GstAutoplugCostFunction cost_function, GstAutoplugCostFunction cost_function,
gpointer data); gpointer data);
struct _gst_autoplug_node struct _gst_autoplug_node
@ -71,8 +71,8 @@ gst_autoplug_class_init(GstAutoplugClass *klass) {
static void gst_autoplug_init(GstAutoplug *autoplug) { static void gst_autoplug_init(GstAutoplug *autoplug) {
} }
static gboolean static gboolean
gst_autoplug_can_match (GstElementFactory *src, GstElementFactory *dest) gst_autoplug_can_match (GstElementFactory *src, GstElementFactory *dest)
{ {
GList *srctemps, *desttemps; GList *srctemps, *desttemps;
@ -101,7 +101,7 @@ gst_autoplug_can_match (GstElementFactory *src, GstElementFactory *dest)
GST_INFO (GST_CAT_AUTOPLUG_ATTEMPT,"factory \"%s\" cannot connect with factory \"%s\"", src->name, dest->name); GST_INFO (GST_CAT_AUTOPLUG_ATTEMPT,"factory \"%s\" cannot connect with factory \"%s\"", src->name, dest->name);
return FALSE; return FALSE;
} }
static GList* static GList*
gst_autoplug_elementfactory_get_list (gpointer data) gst_autoplug_elementfactory_get_list (gpointer data)
{ {
@ -115,8 +115,8 @@ typedef struct {
#define IS_CAPS(cap) (((cap) == caps->src) || (cap) == caps->sink) #define IS_CAPS(cap) (((cap) == caps->src) || (cap) == caps->sink)
static guint static guint
gst_autoplug_caps_find_cost (gpointer src, gpointer dest, gpointer data) gst_autoplug_caps_find_cost (gpointer src, gpointer dest, gpointer data)
{ {
caps_struct *caps = (caps_struct *)data; caps_struct *caps = (caps_struct *)data;
gboolean res; gboolean res;
@ -137,9 +137,9 @@ gst_autoplug_caps_find_cost (gpointer src, gpointer dest, gpointer data)
res = gst_autoplug_can_match ((GstElementFactory *)src, (GstElementFactory *)dest); res = gst_autoplug_can_match ((GstElementFactory *)src, (GstElementFactory *)dest);
} }
if (res) if (res)
return 1; return 1;
else else
return GST_AUTOPLUG_MAX_COST; return GST_AUTOPLUG_MAX_COST;
} }
@ -154,7 +154,7 @@ gst_autoplug_caps_find_cost (gpointer src, gpointer dest, gpointer data)
* the two caps * the two caps
*/ */
GList* GList*
gst_autoplug_caps (GstCaps *srccaps, GstCaps *sinkcaps) gst_autoplug_caps (GstCaps *srccaps, GstCaps *sinkcaps)
{ {
caps_struct caps; caps_struct caps;
@ -163,8 +163,8 @@ gst_autoplug_caps (GstCaps *srccaps, GstCaps *sinkcaps)
GST_INFO (GST_CAT_AUTOPLUG_ATTEMPT,"autoplugging two caps structures"); GST_INFO (GST_CAT_AUTOPLUG_ATTEMPT,"autoplugging two caps structures");
return gst_autoplug_func (caps.src, caps.sink, return gst_autoplug_func (caps.src, caps.sink,
gst_autoplug_elementfactory_get_list, gst_autoplug_elementfactory_get_list,
gst_autoplug_caps_find_cost, gst_autoplug_caps_find_cost,
&caps); &caps);
} }
@ -180,7 +180,7 @@ gst_autoplug_caps (GstCaps *srccaps, GstCaps *sinkcaps)
* the two caps lists * the two caps lists
*/ */
GList* GList*
gst_autoplug_caps_list (GList *srccaps, GList *sinkcaps) gst_autoplug_caps_list (GList *srccaps, GList *sinkcaps)
{ {
caps_struct caps; caps_struct caps;
@ -189,8 +189,8 @@ gst_autoplug_caps_list (GList *srccaps, GList *sinkcaps)
GST_INFO (GST_CAT_AUTOPLUG_ATTEMPT,"autoplugging two caps list structures"); GST_INFO (GST_CAT_AUTOPLUG_ATTEMPT,"autoplugging two caps list structures");
return gst_autoplug_func (caps.src, caps.sink, return gst_autoplug_func (caps.src, caps.sink,
gst_autoplug_elementfactory_get_list, gst_autoplug_elementfactory_get_list,
gst_autoplug_caps_find_cost, gst_autoplug_caps_find_cost,
&caps); &caps);
} }
@ -206,19 +206,17 @@ gst_autoplug_caps_list (GList *srccaps, GList *sinkcaps)
* the two pads * the two pads
*/ */
GList* GList*
gst_autoplug_pads (GstPad *srcpad, GstPad *sinkpad) gst_autoplug_pads (GstPad *srcpad, GstPad *sinkpad)
{ {
caps_struct caps; caps_struct caps;
// caps.src = srcpad->caps;
// caps.sink = sinkpad->caps;
caps.src = gst_pad_get_caps_list(srcpad); caps.src = gst_pad_get_caps_list(srcpad);
caps.sink = gst_pad_get_caps_list(sinkpad); caps.sink = gst_pad_get_caps_list(sinkpad);
GST_INFO (GST_CAT_AUTOPLUG_ATTEMPT,"autoplugging two caps structures"); GST_INFO (GST_CAT_AUTOPLUG_ATTEMPT,"autoplugging two caps structures");
return gst_autoplug_func (caps.src, caps.sink, return gst_autoplug_func (caps.src, caps.sink,
gst_autoplug_elementfactory_get_list, gst_autoplug_elementfactory_get_list,
gst_autoplug_caps_find_cost, gst_autoplug_caps_find_cost,
&caps); &caps);
} }
@ -229,7 +227,7 @@ find_factory (gst_autoplug_node *rgnNodes, gpointer factory)
while (rgnNodes[i].iNode) { while (rgnNodes[i].iNode) {
if (rgnNodes[i].iNode == factory) return i; if (rgnNodes[i].iNode == factory) return i;
i++; i++;
} }
return 0; return 0;
} }
@ -239,15 +237,15 @@ construct_path (gst_autoplug_node *rgnNodes, gpointer factory)
{ {
GstElementFactory *current; GstElementFactory *current;
GList *factories = NULL; GList *factories = NULL;
current = rgnNodes[find_factory(rgnNodes, factory)].iPrev; current = rgnNodes[find_factory(rgnNodes, factory)].iPrev;
GST_INFO (GST_CAT_AUTOPLUG_ATTEMPT,"factories found in autoplugging (reversed order)"); GST_INFO (GST_CAT_AUTOPLUG_ATTEMPT,"factories found in autoplugging (reversed order)");
while (current != NULL) while (current != NULL)
{ {
gpointer next = NULL; gpointer next = NULL;
next = rgnNodes[find_factory(rgnNodes, current)].iPrev; next = rgnNodes[find_factory(rgnNodes, current)].iPrev;
if (next) { if (next) {
factories = g_list_prepend (factories, current); factories = g_list_prepend (factories, current);
@ -259,7 +257,7 @@ construct_path (gst_autoplug_node *rgnNodes, gpointer factory)
} }
static GList* static GList*
gst_autoplug_enqueue (GList *queue, gpointer iNode, gint iDist, gpointer iPrev) gst_autoplug_enqueue (GList *queue, gpointer iNode, gint iDist, gpointer iPrev)
{ {
gst_autoplug_node *node = g_malloc (sizeof (gst_autoplug_node)); gst_autoplug_node *node = g_malloc (sizeof (gst_autoplug_node));
@ -273,13 +271,13 @@ gst_autoplug_enqueue (GList *queue, gpointer iNode, gint iDist, gpointer iPrev)
} }
static GList* static GList*
gst_autoplug_dequeue (GList *queue, gpointer *iNode, gint *iDist, gpointer *iPrev) gst_autoplug_dequeue (GList *queue, gpointer *iNode, gint *iDist, gpointer *iPrev)
{ {
GList *head; GList *head;
gst_autoplug_node *node; gst_autoplug_node *node;
head = g_list_first (queue); head = g_list_first (queue);
if (head) { if (head) {
node = (gst_autoplug_node *)head->data; node = (gst_autoplug_node *)head->data;
*iNode = node->iNode; *iNode = node->iNode;
@ -292,7 +290,7 @@ gst_autoplug_dequeue (GList *queue, gpointer *iNode, gint *iDist, gpointer *iPre
} }
static GList* static GList*
gst_autoplug_func (gpointer src, gpointer sink, gst_autoplug_func (gpointer src, gpointer sink,
GstAutoplugListFunction list_function, GstAutoplugListFunction list_function,
GstAutoplugCostFunction cost_function, GstAutoplugCostFunction cost_function,
gpointer data) gpointer data)
@ -305,12 +303,12 @@ gst_autoplug_func (gpointer src, gpointer sink,
GList *elements = g_list_copy (list_function(data)); GList *elements = g_list_copy (list_function(data));
GList *factories; GList *factories;
guint num_factories; guint num_factories;
elements = g_list_append (elements, sink); elements = g_list_append (elements, sink);
elements = g_list_append (elements, src); elements = g_list_append (elements, src);
factories = elements; factories = elements;
num_factories = g_list_length (factories); num_factories = g_list_length (factories);
rgnNodes = g_new0 (gst_autoplug_node, num_factories+1); rgnNodes = g_new0 (gst_autoplug_node, num_factories+1);
@ -338,10 +336,10 @@ gst_autoplug_func (gpointer src, gpointer sink,
GList *factories2 = elements; GList *factories2 = elements;
queue = gst_autoplug_dequeue (queue, &iNode, &iDist, &iPrev); queue = gst_autoplug_dequeue (queue, &iNode, &iDist, &iPrev);
for (i=0; i< num_factories; i++) { for (i=0; i< num_factories; i++) {
gpointer current = factories2->data; gpointer current = factories2->data;
iCost = cost_function (iNode, current, data); iCost = cost_function (iNode, current, data);
if (iCost != GST_AUTOPLUG_MAX_COST) { if (iCost != GST_AUTOPLUG_MAX_COST) {
if((GST_AUTOPLUG_MAX_COST == rgnNodes[i].iDist) || if((GST_AUTOPLUG_MAX_COST == rgnNodes[i].iDist) ||

View file

@ -510,6 +510,9 @@ gst_bin_use_cothreads (GstBin *bin,
* @bin: #Gstbin to iterate * @bin: #Gstbin to iterate
* *
* Iterates over the elements in this bin. * Iterates over the elements in this bin.
*
* Returns: TRUE if the bin did something usefull. This value
* can be used to determine it the bin is in EOS.
*/ */
gboolean gboolean
gst_bin_iterate (GstBin *bin) gst_bin_iterate (GstBin *bin)

View file

@ -110,7 +110,7 @@ typedef enum {
/* the element has to be scheduled as a cothread for any sanity */ /* the element has to be scheduled as a cothread for any sanity */
GST_ELEMENT_USE_COTHREAD, GST_ELEMENT_USE_COTHREAD,
// if this element is in EOS /* if this element is in EOS */
GST_ELEMENT_EOS, GST_ELEMENT_EOS,
/* use some padding for future expansion */ /* use some padding for future expansion */

View file

@ -29,8 +29,8 @@
/***** Start with the base GstPad class *****/ /***** Start with the base GstPad class *****/
static void gst_pad_class_init (GstPadClass *klass); static void gst_pad_class_init (GstPadClass *klass);
static void gst_pad_init (GstPad *pad); static void gst_pad_init (GstPad *pad);
static GstObject *pad_parent_class = NULL; static GstObject *pad_parent_class = NULL;
@ -96,6 +96,8 @@ static void gst_real_pad_get_arg (GtkObject *object,GtkArg *arg,guint id);
static void gst_real_pad_destroy (GtkObject *object); static void gst_real_pad_destroy (GtkObject *object);
static void gst_pad_push_func (GstPad *pad, GstBuffer *buf); static void gst_pad_push_func (GstPad *pad, GstBuffer *buf);
static gboolean gst_pad_eos_func (GstPad *pad);
static GstPad *real_pad_parent_class = NULL; static GstPad *real_pad_parent_class = NULL;
static guint gst_real_pad_signals[REAL_LAST_SIGNAL] = { 0 }; static guint gst_real_pad_signals[REAL_LAST_SIGNAL] = { 0 };
@ -121,7 +123,7 @@ gst_real_pad_get_type(void) {
} }
static void static void
gst_real_pad_class_init (GstRealPadClass *klass) gst_real_pad_class_init (GstRealPadClass *klass)
{ {
GtkObjectClass *gtkobject_class; GtkObjectClass *gtkobject_class;
@ -149,8 +151,8 @@ gst_real_pad_class_init (GstRealPadClass *klass)
gtkobject_class->get_arg = gst_real_pad_get_arg; gtkobject_class->get_arg = gst_real_pad_get_arg;
} }
static void static void
gst_real_pad_init (GstRealPad *pad) gst_real_pad_init (GstRealPad *pad)
{ {
pad->direction = GST_PAD_UNKNOWN; pad->direction = GST_PAD_UNKNOWN;
pad->peer = NULL; pad->peer = NULL;
@ -218,7 +220,7 @@ gst_real_pad_get_arg (GtkObject *object, GtkArg *arg, guint id)
*/ */
GstPad* GstPad*
gst_pad_new (gchar *name, gst_pad_new (gchar *name,
GstPadDirection direction) GstPadDirection direction)
{ {
GstRealPad *pad; GstRealPad *pad;
@ -243,7 +245,7 @@ gst_pad_new (gchar *name,
*/ */
GstPad* GstPad*
gst_pad_new_from_template (GstPadTemplate *templ, gst_pad_new_from_template (GstPadTemplate *templ,
gchar *name) gchar *name)
{ {
GstPad *pad; GstPad *pad;
@ -265,8 +267,8 @@ gst_pad_new_from_template (GstPadTemplate *templ,
* *
* Returns: the direction of the pad * Returns: the direction of the pad
*/ */
GstPadDirection GstPadDirection
gst_pad_get_direction (GstPad *pad) gst_pad_get_direction (GstPad *pad)
{ {
g_return_val_if_fail (pad != NULL, GST_PAD_UNKNOWN); g_return_val_if_fail (pad != NULL, GST_PAD_UNKNOWN);
g_return_val_if_fail (GST_IS_PAD (pad), GST_PAD_UNKNOWN); g_return_val_if_fail (GST_IS_PAD (pad), GST_PAD_UNKNOWN);
@ -281,9 +283,9 @@ gst_pad_get_direction (GstPad *pad)
* *
* Set the name of a pad. * Set the name of a pad.
*/ */
void void
gst_pad_set_name (GstPad *pad, gst_pad_set_name (GstPad *pad,
const gchar *name) const gchar *name)
{ {
g_return_if_fail (pad != NULL); g_return_if_fail (pad != NULL);
g_return_if_fail (GST_IS_PAD (pad)); g_return_if_fail (GST_IS_PAD (pad));
@ -303,7 +305,7 @@ gst_pad_set_name (GstPad *pad,
* Returns: the name of the pad, don't free. * Returns: the name of the pad, don't free.
*/ */
const gchar* const gchar*
gst_pad_get_name (GstPad *pad) gst_pad_get_name (GstPad *pad)
{ {
g_return_val_if_fail (pad != NULL, NULL); g_return_val_if_fail (pad != NULL, NULL);
g_return_val_if_fail (GST_IS_PAD (pad), NULL); g_return_val_if_fail (GST_IS_PAD (pad), NULL);
@ -319,7 +321,7 @@ gst_pad_get_name (GstPad *pad)
* Set the given chain function for the pad. * Set the given chain function for the pad.
*/ */
void gst_pad_set_chain_function (GstPad *pad, void gst_pad_set_chain_function (GstPad *pad,
GstPadChainFunction chain) GstPadChainFunction chain)
{ {
g_return_if_fail (pad != NULL); g_return_if_fail (pad != NULL);
g_return_if_fail (GST_IS_REAL_PAD (pad)); g_return_if_fail (GST_IS_REAL_PAD (pad));
@ -336,9 +338,9 @@ void gst_pad_set_chain_function (GstPad *pad,
* *
* Set the given get function for the pad. * Set the given get function for the pad.
*/ */
void void
gst_pad_set_get_function (GstPad *pad, gst_pad_set_get_function (GstPad *pad,
GstPadGetFunction get) GstPadGetFunction get)
{ {
g_return_if_fail (pad != NULL); g_return_if_fail (pad != NULL);
g_return_if_fail (GST_IS_REAL_PAD (pad)); g_return_if_fail (GST_IS_REAL_PAD (pad));
@ -355,9 +357,9 @@ gst_pad_set_get_function (GstPad *pad,
* *
* Set the given getregion function for the pad. * Set the given getregion function for the pad.
*/ */
void void
gst_pad_set_getregion_function (GstPad *pad, gst_pad_set_getregion_function (GstPad *pad,
GstPadGetRegionFunction getregion) GstPadGetRegionFunction getregion)
{ {
g_return_if_fail (pad != NULL); g_return_if_fail (pad != NULL);
g_return_if_fail (GST_IS_REAL_PAD (pad)); g_return_if_fail (GST_IS_REAL_PAD (pad));
@ -374,13 +376,13 @@ gst_pad_set_getregion_function (GstPad *pad,
* *
* Set the given qos function for the pad. * Set the given qos function for the pad.
*/ */
void void
gst_pad_set_qos_function (GstPad *pad, gst_pad_set_qos_function (GstPad *pad,
GstPadQoSFunction qos) GstPadQoSFunction qos)
{ {
g_return_if_fail (pad != NULL); g_return_if_fail (pad != NULL);
g_return_if_fail (GST_IS_REAL_PAD (pad)); g_return_if_fail (GST_IS_REAL_PAD (pad));
GST_RPAD_QOSFUNC(pad) = qos; GST_RPAD_QOSFUNC(pad) = qos;
GST_DEBUG (0,"qosfunc for %s:%s(@%p) at %p is set to %p\n", GST_DEBUG (0,"qosfunc for %s:%s(@%p) at %p is set to %p\n",
GST_DEBUG_PAD_NAME(pad),pad,&GST_RPAD_QOSFUNC(pad),qos); GST_DEBUG_PAD_NAME(pad),pad,&GST_RPAD_QOSFUNC(pad),qos);
@ -393,13 +395,13 @@ gst_pad_set_qos_function (GstPad *pad,
* *
* Set the given EOS function for the pad. * Set the given EOS function for the pad.
*/ */
void void
gst_pad_set_eos_function (GstPad *pad, gst_pad_set_eos_function (GstPad *pad,
GstPadEOSFunction eos) GstPadEOSFunction eos)
{ {
g_return_if_fail (pad != NULL); g_return_if_fail (pad != NULL);
g_return_if_fail (GST_IS_REAL_PAD (pad)); g_return_if_fail (GST_IS_REAL_PAD (pad));
GST_RPAD_EOSFUNC(pad) = eos; GST_RPAD_EOSFUNC(pad) = eos;
GST_DEBUG (0,"eosfunc for %s:%s(@%p) at %p is set to %p\n", GST_DEBUG (0,"eosfunc for %s:%s(@%p) at %p is set to %p\n",
GST_DEBUG_PAD_NAME(pad),pad,&GST_RPAD_EOSFUNC(pad),eos); GST_DEBUG_PAD_NAME(pad),pad,&GST_RPAD_EOSFUNC(pad),eos);
@ -408,7 +410,7 @@ gst_pad_set_eos_function (GstPad *pad,
static void static void
gst_pad_push_func(GstPad *pad, GstBuffer *buf) gst_pad_push_func(GstPad *pad, GstBuffer *buf)
{ {
if (GST_RPAD_CHAINFUNC(GST_RPAD_PEER(pad)) != NULL) { if (GST_RPAD_CHAINFUNC(GST_RPAD_PEER(pad)) != NULL) {
GST_DEBUG (0,"calling chain function\n"); GST_DEBUG (0,"calling chain function\n");
@ -426,7 +428,7 @@ gst_pad_push_func(GstPad *pad, GstBuffer *buf)
* *
* Pass the qos message downstream. * Pass the qos message downstream.
*/ */
void void
gst_pad_handle_qos(GstPad *pad, gst_pad_handle_qos(GstPad *pad,
glong qos_message) glong qos_message)
{ {
@ -462,9 +464,9 @@ gst_pad_handle_qos(GstPad *pad,
* *
* Disconnects the source pad from the sink pad. * Disconnects the source pad from the sink pad.
*/ */
void void
gst_pad_disconnect (GstPad *srcpad, gst_pad_disconnect (GstPad *srcpad,
GstPad *sinkpad) GstPad *sinkpad)
{ {
GstRealPad *realsrc, *realsink; GstRealPad *realsrc, *realsink;
@ -499,9 +501,9 @@ gst_pad_disconnect (GstPad *srcpad,
* *
* Connects the source pad to the sink pad. * Connects the source pad to the sink pad.
*/ */
void void
gst_pad_connect (GstPad *srcpad, gst_pad_connect (GstPad *srcpad,
GstPad *sinkpad) GstPad *sinkpad)
{ {
GstRealPad *realsrc, *realsink; GstRealPad *realsrc, *realsink;
GstRealPad *temppad; GstRealPad *temppad;
@ -528,7 +530,7 @@ gst_pad_connect (GstPad *srcpad,
} }
g_return_if_fail((GST_RPAD_DIRECTION(realsrc) == GST_PAD_SRC) && g_return_if_fail((GST_RPAD_DIRECTION(realsrc) == GST_PAD_SRC) &&
(GST_RPAD_DIRECTION(realsink) == GST_PAD_SINK)); (GST_RPAD_DIRECTION(realsink) == GST_PAD_SINK));
if (!gst_pad_check_compatibility (srcpad, sinkpad)) { if (!gst_pad_check_compatibility (srcpad, sinkpad)) {
g_warning ("gstpad: connecting incompatible pads (%s:%s) and (%s:%s)\n", g_warning ("gstpad: connecting incompatible pads (%s:%s) and (%s:%s)\n",
GST_DEBUG_PAD_NAME (srcpad), GST_DEBUG_PAD_NAME (sinkpad)); GST_DEBUG_PAD_NAME (srcpad), GST_DEBUG_PAD_NAME (sinkpad));
@ -551,14 +553,14 @@ gst_pad_connect (GstPad *srcpad,
/** /**
* gst_pad_set_parent: * gst_pad_set_parent:
* @pad: the pad to set the parent * @pad: the pad to set the parent
* @parent: the object to set the parent to * @parent: the object to set the parent to
* *
* Sets the parent object of a pad. * Sets the parent object of a pad.
*/ */
void void
gst_pad_set_parent (GstPad *pad, gst_pad_set_parent (GstPad *pad,
GstObject *parent) GstObject *parent)
{ {
g_return_if_fail (pad != NULL); g_return_if_fail (pad != NULL);
g_return_if_fail (GST_IS_PAD (pad)); g_return_if_fail (GST_IS_PAD (pad));
@ -574,14 +576,14 @@ gst_pad_set_parent (GstPad *pad,
/** /**
* gst_pad_add_ghost_pad: * gst_pad_add_ghost_pad:
* @pad: the pad to set the ghost parent * @pad: the pad to set the ghost parent
* @ghostpad: the ghost pad to add * @ghostpad: the ghost pad to add
* *
* Add a ghost pad to a pad. * Add a ghost pad to a pad.
*/ */
void void
gst_pad_add_ghost_pad (GstPad *pad, gst_pad_add_ghost_pad (GstPad *pad,
GstPad *ghostpad) GstPad *ghostpad)
{ {
GstRealPad *realpad; GstRealPad *realpad;
@ -597,15 +599,15 @@ gst_pad_add_ghost_pad (GstPad *pad,
/** /**
* gst_pad_remove_ghost_parent: * gst_pad_remove_ghost_pad:
* @pad: the pad to remove the ghost parent * @pad: the pad to remove the ghost parent
* @ghostpad: the ghost pad to remove from the pad * @ghostpad: the ghost pad to remove from the pad
* *
* Remove a ghost pad from a pad. * Remove a ghost pad from a pad.
*/ */
void void
gst_pad_remove_ghost_parent (GstPad *pad, gst_pad_remove_ghost_pad (GstPad *pad,
GstPad *ghostpad) GstPad *ghostpad)
{ {
GstRealPad *realpad; GstRealPad *realpad;
@ -628,7 +630,7 @@ gst_pad_remove_ghost_parent (GstPad *pad,
* Returns: the parent object * Returns: the parent object
*/ */
GstObject* GstObject*
gst_pad_get_parent (GstPad *pad) gst_pad_get_parent (GstPad *pad)
{ {
g_return_val_if_fail (pad != NULL, NULL); g_return_val_if_fail (pad != NULL, NULL);
g_return_val_if_fail (GST_IS_PAD (pad), NULL); g_return_val_if_fail (GST_IS_PAD (pad), NULL);
@ -645,7 +647,7 @@ gst_pad_get_parent (GstPad *pad)
* Returns: a GList of ghost pads * Returns: a GList of ghost pads
*/ */
GList* GList*
gst_pad_get_ghost_parents (GstPad *pad) gst_pad_get_ghost_pad_list (GstPad *pad)
{ {
g_return_val_if_fail (pad != NULL, NULL); g_return_val_if_fail (pad != NULL, NULL);
g_return_val_if_fail (GST_IS_PAD (pad), NULL); g_return_val_if_fail (GST_IS_PAD (pad), NULL);
@ -660,9 +662,9 @@ gst_pad_get_ghost_parents (GstPad *pad)
* *
* Set the capabilities of this pad. * Set the capabilities of this pad.
*/ */
void void
gst_pad_set_caps_list (GstPad *pad, gst_pad_set_caps_list (GstPad *pad,
GList *caps) GList *caps)
{ {
g_return_if_fail (pad != NULL); g_return_if_fail (pad != NULL);
g_return_if_fail (GST_IS_REAL_PAD (pad)); // NOTE this restriction g_return_if_fail (GST_IS_REAL_PAD (pad)); // NOTE this restriction
@ -678,8 +680,8 @@ gst_pad_set_caps_list (GstPad *pad,
* *
* Returns: a list of the capabilities of this pad * Returns: a list of the capabilities of this pad
*/ */
GList * GList *
gst_pad_get_caps_list (GstPad *pad) gst_pad_get_caps_list (GstPad *pad)
{ {
g_return_val_if_fail (pad != NULL, NULL); g_return_val_if_fail (pad != NULL, NULL);
g_return_val_if_fail (GST_IS_PAD (pad), NULL); g_return_val_if_fail (GST_IS_PAD (pad), NULL);
@ -696,8 +698,8 @@ gst_pad_get_caps_list (GstPad *pad)
* *
* Returns: a capability or NULL if not found * Returns: a capability or NULL if not found
*/ */
GstCaps * GstCaps *
gst_pad_get_caps_by_name (GstPad *pad, gchar *name) gst_pad_get_caps_by_name (GstPad *pad, gchar *name)
{ {
GList *caps; GList *caps;
@ -714,7 +716,7 @@ gst_pad_get_caps_by_name (GstPad *pad, gchar *name)
caps = g_list_next (caps); caps = g_list_next (caps);
} }
return NULL; return NULL;
} }
@ -728,8 +730,8 @@ gst_pad_get_caps_by_name (GstPad *pad, gchar *name)
* Returns: TRUE if they are compatible or the capabilities * Returns: TRUE if they are compatible or the capabilities
* could not be checked * could not be checked
*/ */
gboolean gboolean
gst_pad_check_compatibility (GstPad *srcpad, GstPad *sinkpad) gst_pad_check_compatibility (GstPad *srcpad, GstPad *sinkpad)
{ {
GstRealPad *realsrc, *realsink; GstRealPad *realsrc, *realsink;
@ -750,7 +752,7 @@ gst_pad_check_compatibility (GstPad *srcpad, GstPad *sinkpad)
} }
} }
else { else {
GST_DEBUG (0,"gstpad: could not check capabilities of pads (%s:%s) and (%s:%s)\n", GST_DEBUG (0,"gstpad: could not check capabilities of pads (%s:%s) and (%s:%s)\n",
GST_DEBUG_PAD_NAME (srcpad), GST_DEBUG_PAD_NAME (sinkpad)); GST_DEBUG_PAD_NAME (srcpad), GST_DEBUG_PAD_NAME (sinkpad));
return TRUE; return TRUE;
} }
@ -765,7 +767,7 @@ gst_pad_check_compatibility (GstPad *srcpad, GstPad *sinkpad)
* Returns: the peer pad * Returns: the peer pad
*/ */
GstPad* GstPad*
gst_pad_get_peer (GstPad *pad) gst_pad_get_peer (GstPad *pad)
{ {
g_return_val_if_fail (pad != NULL, NULL); g_return_val_if_fail (pad != NULL, NULL);
g_return_val_if_fail (GST_IS_PAD (pad), NULL); g_return_val_if_fail (GST_IS_PAD (pad), NULL);
@ -774,8 +776,8 @@ gst_pad_get_peer (GstPad *pad)
} }
// FIXME this needs to be rethought soon // FIXME this needs to be rethought soon
static void static void
gst_real_pad_destroy (GtkObject *object) gst_real_pad_destroy (GtkObject *object)
{ {
GstPad *pad = GST_PAD (object); GstPad *pad = GST_PAD (object);
@ -796,10 +798,10 @@ gst_real_pad_destroy (GtkObject *object)
* Read the pad definition from the XML node and connect the given pad * Read the pad definition from the XML node and connect the given pad
* in element to a pad of an element in the hashtable. * in element to a pad of an element in the hashtable.
*/ */
void void
gst_pad_load_and_connect (xmlNodePtr parent, gst_pad_load_and_connect (xmlNodePtr parent,
GstObject *element, GstObject *element,
GHashTable *elements) GHashTable *elements)
{ {
xmlNodePtr field = parent->childs; xmlNodePtr field = parent->childs;
GstPad *pad = NULL, *targetpad; GstPad *pad = NULL, *targetpad;
@ -849,9 +851,9 @@ cleanup:
* *
* Returns: the xml representation of the pad * Returns: the xml representation of the pad
*/ */
xmlNodePtr xmlNodePtr
gst_pad_save_thyself (GstPad *pad, gst_pad_save_thyself (GstPad *pad,
xmlNodePtr parent) xmlNodePtr parent)
{ {
GstRealPad *realpad; GstRealPad *realpad;
GstPad *peer; GstPad *peer;
@ -884,10 +886,10 @@ gst_pad_save_thyself (GstPad *pad,
* *
* Returns: the xml representation of the pad * Returns: the xml representation of the pad
*/ */
xmlNodePtr xmlNodePtr
gst_pad_ghost_save_thyself (GstPad *pad, gst_pad_ghost_save_thyself (GstPad *pad,
GstElement *bin, GstElement *bin,
xmlNodePtr parent) xmlNodePtr parent)
{ {
xmlNodePtr self; xmlNodePtr self;
@ -946,7 +948,7 @@ GstBuffer *gst_pad_pullregion(GstPad *pad,gulong offset,gulong size) {
#endif #endif
/************************************************************************ /************************************************************************
* *
* templates * templates
* *
*/ */
@ -959,8 +961,8 @@ GstBuffer *gst_pad_pullregion(GstPad *pad,gulong offset,gulong size) {
* *
* Returns: the new padtemplate * Returns: the new padtemplate
*/ */
GstPadTemplate* GstPadTemplate*
gst_padtemplate_new (GstPadFactory *factory) gst_padtemplate_new (GstPadFactory *factory)
{ {
GstPadTemplate *new; GstPadTemplate *new;
GstPadFactoryEntry tag; GstPadFactoryEntry tag;
@ -994,7 +996,7 @@ gst_padtemplate_new (GstPadFactory *factory)
/** /**
* gst_padtemplate_create: * gst_padtemplate_create:
* @name_template: the name template * @name_template: the name template
* @direction: the direction for the template * @direction: the direction for the template
* @presence: the presence of the pad * @presence: the presence of the pad
* @caps: a list of capabilities for the template * @caps: a list of capabilities for the template
@ -1009,7 +1011,7 @@ gst_padtemplate_create (gchar *name_template,
GList *caps) GList *caps)
{ {
GstPadTemplate *new; GstPadTemplate *new;
new = g_new0 (GstPadTemplate, 1); new = g_new0 (GstPadTemplate, 1);
new->name_template = name_template; new->name_template = name_template;
@ -1077,7 +1079,7 @@ gst_padtemplate_save_thyself (GstPadTemplate *templ, xmlNodePtr parent)
* *
* Returns: the new padtemplate * Returns: the new padtemplate
*/ */
GstPadTemplate* GstPadTemplate*
gst_padtemplate_load_thyself (xmlNodePtr parent) gst_padtemplate_load_thyself (xmlNodePtr parent)
{ {
xmlNodePtr field = parent->childs; xmlNodePtr field = parent->childs;
@ -1122,7 +1124,7 @@ gst_padtemplate_load_thyself (xmlNodePtr parent)
} }
gboolean static gboolean
gst_pad_eos_func(GstPad *pad) gst_pad_eos_func(GstPad *pad)
{ {
GstElement *element; GstElement *element;
@ -1167,7 +1169,7 @@ gst_pad_eos_func(GstPad *pad)
* Returns: TRUE if it succeeded * Returns: TRUE if it succeeded
*/ */
gboolean gboolean
gst_pad_set_eos(GstPad *pad) gst_pad_set_eos(GstPad *pad)
{ {
g_return_val_if_fail (pad != NULL, FALSE); g_return_val_if_fail (pad != NULL, FALSE);
g_return_val_if_fail (GST_IS_REAL_PAD(pad), FALSE); // NOTE the restriction g_return_val_if_fail (GST_IS_REAL_PAD(pad), FALSE); // NOTE the restriction
@ -1310,7 +1312,7 @@ gst_ghost_pad_new (gchar *name,
// add ourselves to the real pad's list of ghostpads // add ourselves to the real pad's list of ghostpads
gst_pad_add_ghost_pad (pad, GST_PAD(ghostpad)); gst_pad_add_ghost_pad (pad, GST_PAD(ghostpad));
// FIXME need to ref the real pad here... ? // FIXME need to ref the real pad here... ?
GST_DEBUG(0,"created ghost pad \"%s\"\n",name); GST_DEBUG(0,"created ghost pad \"%s\"\n",name);

View file

@ -183,16 +183,16 @@ struct _GstGhostPadClass {
#define GST_PAD_PEER(pad) GST_RPAD_PEER(GST_PAD_REALIZE(pad)) #define GST_PAD_PEER(pad) GST_RPAD_PEER(GST_PAD_REALIZE(pad))
/* Some check functions (unused?) */ /* Some check functions (unused?) */
#define GST_PAD_CONNECTED(pad) (GST_IS_REAL_PAD(pad) && GST_REAL_PAD(pad)->peer != NULL) #define GST_PAD_CONNECTED(pad) (GST_IS_REAL_PAD(pad) && GST_REAL_PAD(pad)->peer != NULL)
#define GST_PAD_CAN_PULL(pad) (GST_IS_REAL_PAD(pad) && GST_REAL_PAD(pad)->pullfunc != NULL) #define GST_PAD_CAN_PULL(pad) (GST_IS_REAL_PAD(pad) && GST_REAL_PAD(pad)->pullfunc != NULL)
/***** PadTemplate *****/ /***** PadTemplate *****/
#define GST_TYPE_PADTEMPLATE (gst_padtemplate_get_type ()) #define GST_TYPE_PADTEMPLATE (gst_padtemplate_get_type ())
#define GST_PADTEMPLATE(obj) (GTK_CHECK_CAST ((obj), GST_TYPE_PADTEMPLATE,GstPad)) #define GST_PADTEMPLATE(obj) (GTK_CHECK_CAST ((obj), GST_TYPE_PADTEMPLATE,GstPad))
#define GST_PADTEMPLATE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GST_TYPE_PADTEMPLATE,GstPadClass)) #define GST_PADTEMPLATE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GST_TYPE_PADTEMPLATE,GstPadClass))
#define GST_IS_PADTEMPLATE(obj) (GTK_CHECK_TYPE ((obj), GST_TYPE_PADTEMPLATE)) #define GST_IS_PADTEMPLATE(obj) (GTK_CHECK_TYPE ((obj), GST_TYPE_PADTEMPLATE))
#define GST_IS_PADTEMPLATE_CLASS(obj) (GTK_CHECK_CLASS_TYPE ((klass), GST_TYPE_PADTEMPLATE)) #define GST_IS_PADTEMPLATE_CLASS(obj) (GTK_CHECK_CLASS_TYPE ((klass), GST_TYPE_PADTEMPLATE))
typedef enum { typedef enum {
GST_PAD_ALWAYS, GST_PAD_ALWAYS,
@ -201,12 +201,12 @@ typedef enum {
} GstPadPresence; } GstPadPresence;
struct _GstPadTemplate { struct _GstPadTemplate {
GstObject object; GstObject object;
gchar *name_template; gchar *name_template;
GstPadDirection direction; GstPadDirection direction;
GstPadPresence presence; GstPadPresence presence;
GList *caps; GList *caps;
}; };
struct _GstPadTemplateClass { struct _GstPadTemplateClass {
@ -221,19 +221,19 @@ struct _GstPadTemplateClass {
typedef gpointer GstPadFactoryEntry; typedef gpointer GstPadFactoryEntry;
typedef GstPadFactoryEntry GstPadFactory[]; typedef GstPadFactoryEntry GstPadFactory[];
#define GST_PAD_FACTORY_ALWAYS GINT_TO_POINTER(GST_PAD_ALWAYS) #define GST_PAD_FACTORY_ALWAYS GINT_TO_POINTER(GST_PAD_ALWAYS)
#define GST_PAD_FACTORY_SOMETIMES GINT_TO_POINTER(GST_PAD_SOMETIMES) #define GST_PAD_FACTORY_SOMETIMES GINT_TO_POINTER(GST_PAD_SOMETIMES)
#define GST_PAD_FACTORY_REQUEST GINT_TO_POINTER(GST_PAD_REQUEST) #define GST_PAD_FACTORY_REQUEST GINT_TO_POINTER(GST_PAD_REQUEST)
#define GST_PAD_FACTORY_SRC GINT_TO_POINTER(GST_PAD_SRC) #define GST_PAD_FACTORY_SRC GINT_TO_POINTER(GST_PAD_SRC)
#define GST_PAD_FACTORY_SINK GINT_TO_POINTER(GST_PAD_SINK) #define GST_PAD_FACTORY_SINK GINT_TO_POINTER(GST_PAD_SINK)
#define GST_PAD_FACTORY_CAPS(a...) GINT_TO_POINTER(1),##a,NULL #define GST_PAD_FACTORY_CAPS(a...) GINT_TO_POINTER(1),##a,NULL
GtkType gst_pad_get_type (void); GtkType gst_pad_get_type (void);
GtkType gst_real_pad_get_type (void); GtkType gst_real_pad_get_type (void);
GtkType gst_ghost_pad_get_type (void); GtkType gst_ghost_pad_get_type (void);
GstPad* gst_pad_new (gchar *name, GstPadDirection direction); GstPad* gst_pad_new (gchar *name, GstPadDirection direction);
#define gst_pad_destroy(pad) gst_object_destroy (GST_OBJECT (pad)) #define gst_pad_destroy(pad) gst_object_destroy (GST_OBJECT (pad))
@ -288,10 +288,9 @@ GstBuffer* gst_pad_pull_region (GstPad *pad, gulong offset, gulong size);
GstPad * gst_pad_select (GstPad *nextpad, ...); GstPad * gst_pad_select (GstPad *nextpad, ...);
#define gst_pad_eos(pad) (GST_RPAD_EOSFUNC(GST_RPAD_PEER(pad))(GST_PAD(GST_RPAD_PEER(pad)))) #define gst_pad_eos(pad) (GST_RPAD_EOSFUNC(GST_RPAD_PEER(pad))(GST_PAD(GST_RPAD_PEER(pad))))
gboolean gst_pad_set_eos (GstPad *pad); gboolean gst_pad_set_eos (GstPad *pad);
gboolean gst_pad_eos_func (GstPad *pad);
void gst_pad_handle_qos (GstPad *pad, glong qos_message); void gst_pad_handle_qos (GstPad *pad, glong qos_message);
xmlNodePtr gst_pad_save_thyself (GstPad *pad, xmlNodePtr parent); xmlNodePtr gst_pad_save_thyself (GstPad *pad, xmlNodePtr parent);

View file

@ -59,7 +59,7 @@ gst_parse_newpad(GstElement *element,GstPad *pad,launch_delayed_pad *peer)
} }
*/ */
gchar * static gchar *
gst_parse_unique_name(gchar *type,gst_parse_priv *priv) gst_parse_unique_name(gchar *type,gst_parse_priv *priv)
{ {
gint count; gint count;
@ -304,7 +304,18 @@ GST_DEBUG_PAD_NAME(srcpad),gst_element_get_name(GST_ELEMENT(parent)),gst_pad_get
return i+1; return i+1;
} }
gint gst_parse_launch(const gchar *cmdline,GstBin *parent) { /**
* gst_parse_launch:
* @cmdline: the command line describing the pipeline
* @parent: the parent bin for the resulting pipeline
*
* Create a new pipeline based on command line syntax.
*
* Returns: ?
*/
gint
gst_parse_launch(const gchar *cmdline,GstBin *parent)
{
gst_parse_priv priv; gst_parse_priv priv;
gchar **argvn; gchar **argvn;
gint newargc; gint newargc;

View file

@ -56,7 +56,6 @@ enum {
ARG_LEVEL, ARG_LEVEL,
ARG_MAX_LEVEL, ARG_MAX_LEVEL,
ARG_BLOCK, ARG_BLOCK,
ARG_TIMEOUT,
}; };
@ -115,8 +114,6 @@ gst_queue_class_init (GstQueueClass *klass)
GTK_ARG_READWRITE, ARG_MAX_LEVEL); GTK_ARG_READWRITE, ARG_MAX_LEVEL);
gtk_object_add_arg_type ("GstQueue::block", GTK_TYPE_BOOL, gtk_object_add_arg_type ("GstQueue::block", GTK_TYPE_BOOL,
GTK_ARG_READWRITE, ARG_BLOCK); GTK_ARG_READWRITE, ARG_BLOCK);
gtk_object_add_arg_type ("GstQueue::timeout", GTK_TYPE_INT,
GTK_ARG_READWRITE, ARG_TIMEOUT);
gtkobject_class->set_arg = gst_queue_set_arg; gtkobject_class->set_arg = gst_queue_set_arg;
gtkobject_class->get_arg = gst_queue_get_arg; gtkobject_class->get_arg = gst_queue_get_arg;
@ -351,8 +348,6 @@ gst_queue_set_arg (GtkObject *object, GtkArg *arg, guint id)
case ARG_BLOCK: case ARG_BLOCK:
queue->block = GTK_VALUE_BOOL (*arg); queue->block = GTK_VALUE_BOOL (*arg);
break; break;
case ARG_TIMEOUT:
break;
default: default:
break; break;
} }
@ -378,8 +373,6 @@ gst_queue_get_arg (GtkObject *object, GtkArg *arg, guint id)
case ARG_BLOCK: case ARG_BLOCK:
GTK_VALUE_BOOL (*arg) = queue->block; GTK_VALUE_BOOL (*arg) = queue->block;
break; break;
case ARG_TIMEOUT:
break;
default: default:
arg->type = GTK_TYPE_INVALID; arg->type = GTK_TYPE_INVALID;
break; break;

View file

@ -64,7 +64,6 @@ static void gst_thread_restore_thyself (GstElement *element,xmlNodePtr parent,
static void gst_thread_signal_thread (GstThread *thread); static void gst_thread_signal_thread (GstThread *thread);
static void gst_thread_wait_thread (GstThread *thread); static void gst_thread_wait_thread (GstThread *thread);
static void gst_thread_create_plan_dummy (GstBin *bin);
static void gst_thread_schedule_dummy (GstBin *bin); static void gst_thread_schedule_dummy (GstBin *bin);
static void* gst_thread_main_loop (void *arg); static void* gst_thread_main_loop (void *arg);
@ -114,7 +113,6 @@ gst_thread_class_init (GstThreadClass *klass)
gstelement_class->save_thyself = gst_thread_save_thyself; gstelement_class->save_thyself = gst_thread_save_thyself;
gstelement_class->restore_thyself = gst_thread_restore_thyself; gstelement_class->restore_thyself = gst_thread_restore_thyself;
//gstbin_class->create_plan = gst_thread_create_plan_dummy;
gstbin_class->schedule = gst_thread_schedule_dummy; gstbin_class->schedule = gst_thread_schedule_dummy;
gtkobject_class->set_arg = gst_thread_set_arg; gtkobject_class->set_arg = gst_thread_set_arg;
@ -147,15 +145,6 @@ gst_thread_schedule_dummy (GstBin *bin)
GST_INFO (GST_CAT_THREAD,"gstthread: scheduling delayed until thread starts"); GST_INFO (GST_CAT_THREAD,"gstthread: scheduling delayed until thread starts");
} }
static void
gst_thread_create_plan_dummy (GstBin *bin)
{
g_return_if_fail (GST_IS_THREAD (bin));
if (!GST_FLAG_IS_SET (GST_THREAD (bin), GST_THREAD_STATE_SPINNING))
GST_INFO (GST_CAT_THREAD,"gstthread: create plan delayed until thread starts");
}
static void static void
gst_thread_set_arg (GtkObject *object, gst_thread_set_arg (GtkObject *object,
GtkArg *arg, GtkArg *arg,

View file

@ -26,13 +26,13 @@
#include "gstbin.h" #include "gstbin.h"
static void gst_xml_class_init (GstXMLClass *klass); static void gst_xml_class_init (GstXMLClass *klass);
static void gst_xml_init (GstXML *xml); static void gst_xml_init (GstXML *xml);
static GstObjectClass *parent_class = NULL; static GstObjectClass *parent_class = NULL;
GtkType GtkType
gst_xml_get_type(void) gst_xml_get_type(void)
{ {
static GtkType xml_type = 0; static GtkType xml_type = 0;
@ -53,13 +53,13 @@ gst_xml_get_type(void)
} }
static void static void
gst_xml_class_init (GstXMLClass *klass) gst_xml_class_init (GstXMLClass *klass)
{ {
parent_class = gtk_type_class (GST_TYPE_OBJECT); parent_class = gtk_type_class (GST_TYPE_OBJECT);
} }
static void static void
gst_xml_init(GstXML *xml) gst_xml_init(GstXML *xml)
{ {
} }
@ -71,8 +71,8 @@ gst_xml_init(GstXML *xml)
* *
* Returns: a pointer to an XML document * Returns: a pointer to an XML document
*/ */
xmlDocPtr xmlDocPtr
gst_xml_write (GstElement *element) gst_xml_write (GstElement *element)
{ {
xmlDocPtr doc; xmlDocPtr doc;
@ -84,38 +84,14 @@ gst_xml_write (GstElement *element)
return doc; return doc;
} }
/** static GstXML*
* gst_xml_new: gst_xml_real_parse (xmlDocPtr doc, const guchar *root)
* @fname: The filename with the xml description
* @root: The name of the root object to build
*
* Creates a new GstXML object (and the corresponding elements) from
* the XML file fname. Optionally it will only build the element from
* the element node root (if it is not NULL). This feature is useful
* if you only want to build a specific element from an XML file
* but not the pipeline it is embedded in. Note also that the XML parse
* tree is cached to speed up creating another GstXML object for
* the same file
*
* Returns: a pointer to a new GstElement
*/
GstXML*
gst_xml_new (const guchar *fname, const guchar *root)
{ {
xmlDocPtr doc;
xmlNodePtr field;
GstXML *xml; GstXML *xml;
xmlNodePtr field;
g_return_val_if_fail(fname != NULL, NULL);
doc = xmlParseFile(fname);
if (!doc) {
g_print("gstxml: XML file \"%s\" could not be read\n", fname);
return NULL;
}
if (strcmp(doc->xmlRootNode->name, "GST-Pipeline")) { if (strcmp(doc->xmlRootNode->name, "GST-Pipeline")) {
g_print("gstxml: XML file \"%s\" is in wrong format\n", fname); g_warning("gstxml: XML file is in wrong format\n");
return NULL; return NULL;
} }
@ -124,15 +100,15 @@ gst_xml_new (const guchar *fname, const guchar *root)
xml->topelements = NULL; xml->topelements = NULL;
field = doc->xmlRootNode->xmlChildrenNode; field = doc->xmlRootNode->xmlChildrenNode;
while (field) { while (field) {
if (!strcmp(field->name, "element")) { if (!strcmp(field->name, "element")) {
GstElement *element; GstElement *element;
xml->elements = g_hash_table_new(g_str_hash, g_str_equal); xml->elements = g_hash_table_new(g_str_hash, g_str_equal);
element = gst_element_load_thyself(field, xml->elements); element = gst_element_load_thyself(field, xml->elements);
g_hash_table_destroy (xml->elements); g_hash_table_destroy (xml->elements);
xml->topelements = g_list_prepend (xml->topelements, element); xml->topelements = g_list_prepend (xml->topelements, element);
@ -145,6 +121,61 @@ gst_xml_new (const guchar *fname, const guchar *root)
return xml; return xml;
} }
/**
* gst_xml_new:
* @fname: The filename with the xml description
* @root: The name of the root object to build
*
* Creates a new GstXML object (and the corresponding elements) from
* the XML file fname. Optionally it will only build the element from
* the element node root (if it is not NULL). This feature is useful
* if you only want to build a specific element from an XML file
* but not the pipeline it is embedded in. Note also that the XML parse
* tree is cached to speed up creating another GstXML object for
* the same file
*
* Returns: a pointer to a new GstXML object
*/
GstXML*
gst_xml_new (const guchar *fname, const guchar *root)
{
xmlDocPtr doc;
g_return_val_if_fail(fname != NULL, NULL);
doc = xmlParseFile(fname);
if (!doc) {
g_warning("gstxml: XML file \"%s\" could not be read\n", fname);
return NULL;
}
return gst_xml_real_parse (doc, root);
}
/**
* gst_xml_new_from_memory:
* @buffer: a pointer to the in memory XML buffer
* @size: the size of the buffer
* @root: the name of the root objects to build
*
* Creates a new GstXML object (and the corresponding elements) from
* an in memory XML buffer.
*
* Returns: a pointer to a new GstXML object
*/
GstXML*
gst_xml_new_from_memory (guchar *buffer, guint size, const gchar *root)
{
xmlDocPtr doc;
g_return_val_if_fail(buffer != NULL, NULL);
doc = xmlParseMemory (buffer, size);
return gst_xml_real_parse (doc, root);
}
/** /**
* gst_xml_get_topelements: * gst_xml_get_topelements:
* @xml: The GstXML to get the elements from * @xml: The GstXML to get the elements from
@ -154,7 +185,7 @@ gst_xml_new (const guchar *fname, const guchar *root)
* Returns: a GList of elements * Returns: a GList of elements
*/ */
GList* GList*
gst_xml_get_topelements (GstXML *xml) gst_xml_get_topelements (GstXML *xml)
{ {
g_return_val_if_fail (xml != NULL, NULL); g_return_val_if_fail (xml != NULL, NULL);
@ -166,14 +197,14 @@ gst_xml_get_topelements (GstXML *xml)
* @xml: The GstXML to get the element from * @xml: The GstXML to get the element from
* @name: The name of element to retreive * @name: The name of element to retreive
* *
* This function is used to get a pointer to the GstElement corresponding * This function is used to get a pointer to the GstElement corresponding
* to name in the pipeline description. You would use this if you have * to name in the pipeline description. You would use this if you have
* to do anything to the element after loading. * to do anything to the element after loading.
* *
* Returns: a pointer to a new GstElement * Returns: a pointer to a new GstElement
*/ */
GstElement* GstElement*
gst_xml_get_element (GstXML *xml, const guchar *name) gst_xml_get_element (GstXML *xml, const guchar *name)
{ {
GstElement *element; GstElement *element;
GList *topelements; GList *topelements;
@ -195,7 +226,7 @@ gst_xml_get_element (GstXML *xml, const guchar *name)
if (GST_IS_BIN (top)) { if (GST_IS_BIN (top)) {
element = gst_bin_get_by_name (GST_BIN (top), name); element = gst_bin_get_by_name (GST_BIN (top), name);
if (element) if (element)
return element; return element;
} }
} }

View file

@ -66,16 +66,18 @@ struct _GstXMLClass {
GtkObjectClass parent_class; GtkObjectClass parent_class;
}; };
GtkType gst_xml_get_type (void); GtkType gst_xml_get_type (void);
/* create an XML document out of a pipeline */ /* create an XML document out of a pipeline */
xmlDocPtr gst_xml_write (GstElement *element); xmlDocPtr gst_xml_write (GstElement *element);
GstXML* gst_xml_new (const guchar *fname, const guchar *root); GstXML* gst_xml_new (const guchar *fname, const guchar *root);
GstXML* gst_xml_new_from_memory (guchar *buffer, guint size, const gchar *root);
GstElement* gst_xml_get_element (GstXML *xml, const guchar *name); GstElement* gst_xml_get_element (GstXML *xml, const guchar *name);
GList* gst_xml_get_topelements (GstXML *xml); GList* gst_xml_get_topelements (GstXML *xml);
#ifdef __cplusplus #ifdef __cplusplus
} }

View file

@ -56,7 +56,6 @@ enum {
ARG_LEVEL, ARG_LEVEL,
ARG_MAX_LEVEL, ARG_MAX_LEVEL,
ARG_BLOCK, ARG_BLOCK,
ARG_TIMEOUT,
}; };
@ -115,8 +114,6 @@ gst_queue_class_init (GstQueueClass *klass)
GTK_ARG_READWRITE, ARG_MAX_LEVEL); GTK_ARG_READWRITE, ARG_MAX_LEVEL);
gtk_object_add_arg_type ("GstQueue::block", GTK_TYPE_BOOL, gtk_object_add_arg_type ("GstQueue::block", GTK_TYPE_BOOL,
GTK_ARG_READWRITE, ARG_BLOCK); GTK_ARG_READWRITE, ARG_BLOCK);
gtk_object_add_arg_type ("GstQueue::timeout", GTK_TYPE_INT,
GTK_ARG_READWRITE, ARG_TIMEOUT);
gtkobject_class->set_arg = gst_queue_set_arg; gtkobject_class->set_arg = gst_queue_set_arg;
gtkobject_class->get_arg = gst_queue_get_arg; gtkobject_class->get_arg = gst_queue_get_arg;
@ -351,8 +348,6 @@ gst_queue_set_arg (GtkObject *object, GtkArg *arg, guint id)
case ARG_BLOCK: case ARG_BLOCK:
queue->block = GTK_VALUE_BOOL (*arg); queue->block = GTK_VALUE_BOOL (*arg);
break; break;
case ARG_TIMEOUT:
break;
default: default:
break; break;
} }
@ -378,8 +373,6 @@ gst_queue_get_arg (GtkObject *object, GtkArg *arg, guint id)
case ARG_BLOCK: case ARG_BLOCK:
GTK_VALUE_BOOL (*arg) = queue->block; GTK_VALUE_BOOL (*arg) = queue->block;
break; break;
case ARG_TIMEOUT:
break;
default: default:
arg->type = GTK_TYPE_INVALID; arg->type = GTK_TYPE_INVALID;
break; break;

View file

@ -216,10 +216,7 @@ gint print_element_info(GstElementFactory *factory) {
if (realpad->qosfunc) if (realpad->qosfunc)
printf(" Has qosfunc(): %s\n",GST_DEBUG_FUNCPTR_NAME(realpad->qosfunc)); printf(" Has qosfunc(): %s\n",GST_DEBUG_FUNCPTR_NAME(realpad->qosfunc));
if (realpad->eosfunc) { if (realpad->eosfunc) {
if (realpad->eosfunc == gst_pad_eos_func) printf(" Has eosfunc(): %s\n",GST_DEBUG_FUNCPTR_NAME(realpad->eosfunc));
printf(" Has default eosfunc() gst_pad_eos_func()\n");
else
printf(" Has eosfunc(): %s\n",GST_DEBUG_FUNCPTR_NAME(realpad->eosfunc));
} }
if (pad->padtemplate) if (pad->padtemplate)