mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-29 02:28:27 +00:00
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:
parent
0aaa531aaf
commit
75aa948e0c
22 changed files with 336 additions and 257 deletions
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -103,6 +103,7 @@ Flags for a bin.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
@bin:
|
@bin:
|
||||||
|
@Returns:
|
||||||
|
|
||||||
|
|
||||||
<!-- ##### FUNCTION gst_bin_create_plan ##### -->
|
<!-- ##### FUNCTION gst_bin_create_plan ##### -->
|
||||||
|
|
|
@ -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 ##### -->
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<!-- ##### SECTION Title ##### -->
|
<!-- ##### SECTION Title ##### -->
|
||||||
gstinfo
|
GstInfo
|
||||||
|
|
||||||
<!-- ##### SECTION Short_Description ##### -->
|
<!-- ##### SECTION Short_Description ##### -->
|
||||||
info/debugging/error handling
|
info/debugging/error handling
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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 ##### -->
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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) ||
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
152
gst/gstpad.c
152
gst/gstpad.c
|
@ -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);
|
||||||
|
|
39
gst/gstpad.h
39
gst/gstpad.h
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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,
|
||||||
|
|
119
gst/gstxml.c
119
gst/gstxml.c
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue