mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 08:46:40 +00:00
element-maker: improve generation of several classes
Better creation of pads, test and fix many other classes. Most classes work now, although might not create functional elements.
This commit is contained in:
parent
9fd41486a2
commit
da1fe1e0dd
21 changed files with 816 additions and 101 deletions
|
@ -17,4 +17,8 @@ EXTRA_DIST = \
|
|||
gstelement.c \
|
||||
gstpushsrc.c \
|
||||
gsttagdemux.c \
|
||||
gstvideosink.c
|
||||
gstvideosink.c \
|
||||
sinkpad.c \
|
||||
sinkpad-simple.c \
|
||||
srcpad.c \
|
||||
srcpad-simple.c
|
||||
|
|
|
@ -73,6 +73,7 @@ source=gst$class.c
|
|||
pkg=`grep -A 10000 '^% pkg-config' $source | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1`
|
||||
GST_TYPE_BASE_REPLACE=`grep -A 10000 '^% TYPE_CLASS_NAME' $source | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1`
|
||||
GstBaseReplace=`grep -A 10000 '^% ClassName' $source | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1`
|
||||
pads=`grep -A 10000 '^% pads' $source | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1`
|
||||
|
||||
generate ()
|
||||
{
|
||||
|
@ -102,12 +103,12 @@ cat <<-EOF
|
|||
/**
|
||||
* SECTION:element-$gstreplace
|
||||
*
|
||||
* The $gstreplace element does FIXME stuff.
|
||||
* The $replace element does FIXME stuff.
|
||||
*
|
||||
* <refsect2>
|
||||
* <title>Example launch line</title>
|
||||
* |[
|
||||
* gst-launch -v fakesrc ! $gstreplace ! FIXME ! fakesink
|
||||
* gst-launch -v fakesrc ! $replace ! FIXME ! fakesink
|
||||
* ]|
|
||||
* FIXME Describe what the pipeline does.
|
||||
* </refsect2>
|
||||
|
@ -138,6 +139,10 @@ EOF
|
|||
grep -A 10000 '^% prototypes' base.c | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1
|
||||
grep -A 10000 '^% prototypes' gobject.c | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1
|
||||
grep -A 10000 '^% prototypes' $source | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1
|
||||
for each in $pads
|
||||
do
|
||||
grep -A 10000 '^% prototypes' $each.c | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1
|
||||
done
|
||||
|
||||
cat <<EOF
|
||||
|
||||
|
@ -148,19 +153,14 @@ enum
|
|||
|
||||
/* pad templates */
|
||||
|
||||
static GstStaticPadTemplate gst_replace_sink_template =
|
||||
GST_STATIC_PAD_TEMPLATE ("sink",
|
||||
GST_PAD_SINK,
|
||||
GST_PAD_ALWAYS,
|
||||
GST_STATIC_CAPS ("application/unknown")
|
||||
);
|
||||
EOF
|
||||
|
||||
static GstStaticPadTemplate gst_replace_src_template =
|
||||
GST_STATIC_PAD_TEMPLATE ("src",
|
||||
GST_PAD_SRC,
|
||||
GST_PAD_ALWAYS,
|
||||
GST_STATIC_CAPS ("application/unknown")
|
||||
);
|
||||
for each in $pads
|
||||
do
|
||||
grep -A 10000 '^% pad-template' $each.c | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1
|
||||
done
|
||||
|
||||
cat <<EOF
|
||||
|
||||
/* class initialization */
|
||||
|
||||
|
@ -172,13 +172,17 @@ gst_replace_base_init (gpointer g_class)
|
|||
{
|
||||
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
|
||||
|
||||
gst_element_class_add_pad_template (element_class,
|
||||
gst_static_pad_template_get (&gst_replace_src_template));
|
||||
gst_element_class_add_pad_template (element_class,
|
||||
gst_static_pad_template_get (&gst_replace_sink_template));
|
||||
EOF
|
||||
|
||||
gst_element_class_set_details_simple (element_class, "FIXME",
|
||||
"Generic", "FIXME", "$REAL_NAME <$EMAIL_ADDRESS>");
|
||||
for each in $pads
|
||||
do
|
||||
grep -A 10000 '^% base-init' $each.c | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1
|
||||
done
|
||||
|
||||
cat <<EOF
|
||||
|
||||
gst_element_class_set_details_simple (element_class, "FIXME Long name",
|
||||
"Generic", "FIXME Description", "$REAL_NAME <$EMAIL_ADDRESS>");
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -202,7 +206,15 @@ cat <<EOF
|
|||
static void
|
||||
gst_replace_init (GstReplace * replace, GstReplaceClass * replace_class)
|
||||
{
|
||||
EOF
|
||||
|
||||
for each in $pads
|
||||
do
|
||||
grep -A 10000 '^% instance-init' $each.c | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1
|
||||
done
|
||||
|
||||
|
||||
cat <<EOF
|
||||
}
|
||||
EOF
|
||||
|
||||
|
@ -210,6 +222,10 @@ EOF
|
|||
grep -A 10000 '^% methods' base.c | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1
|
||||
grep -A 10000 '^% methods' gobject.c | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1
|
||||
grep -A 10000 '^% methods' $source | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1
|
||||
for each in $pads
|
||||
do
|
||||
grep -A 10000 '^% methods' $each.c | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1
|
||||
done
|
||||
|
||||
|
||||
cat <<EOF
|
||||
|
@ -224,16 +240,24 @@ plugin_init (GstPlugin * plugin)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
#ifndef VERSION
|
||||
#define VERSION "0.0.FIXME"
|
||||
#endif
|
||||
#ifndef PACKAGE
|
||||
#define PACKAGE "FIXME_package"
|
||||
#endif
|
||||
#ifndef PACKAGE_NAME
|
||||
#define PACKAGE_NAME "FIXME_package_name"
|
||||
#define PACKAGE_ORIGIN "http://FIXME.org/"
|
||||
#endif
|
||||
#ifndef GST_PACKAGE_ORIGIN
|
||||
#define GST_PACKAGE_ORIGIN "http://FIXME.org/"
|
||||
#endif
|
||||
|
||||
GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
|
||||
GST_VERSION_MINOR,
|
||||
"replace",
|
||||
"FIXME",
|
||||
plugin_init, VERSION, "LGPL", PACKAGE_NAME, PACKAGE_ORIGIN)
|
||||
"FIXME plugin description",
|
||||
plugin_init, VERSION, "LGPL", PACKAGE_NAME, GST_PACKAGE_ORIGIN)
|
||||
|
||||
EOF
|
||||
|
||||
|
@ -277,6 +301,14 @@ struct _GstReplace
|
|||
{
|
||||
GstBaseReplace base_replace;
|
||||
|
||||
EOF
|
||||
|
||||
for each in $pads
|
||||
do
|
||||
grep -A 10000 '^% instance-members' $each.c | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1
|
||||
done
|
||||
|
||||
cat <<EOF
|
||||
};
|
||||
|
||||
struct _GstReplaceClass
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
GstAudioFilter
|
||||
% TYPE_CLASS_NAME
|
||||
GST_TYPE_AUDIO_FILTER
|
||||
% pads
|
||||
sinkpad-simple srcpad-simple
|
||||
% pkg-config
|
||||
gstreamer-audio-0.10
|
||||
% includes
|
||||
|
|
|
@ -2,57 +2,71 @@
|
|||
GstAudioSink
|
||||
% TYPE_CLASS_NAME
|
||||
GST_TYPE_AUDIO_SINK
|
||||
% pads
|
||||
sinkpad-simple
|
||||
% pkg-config
|
||||
gstreamer-audio-0.10
|
||||
% includes
|
||||
#include <gst/audio/gstaudiosink.h>
|
||||
% prototypes
|
||||
static gboolean gst_replace_open (GstAudioSrc * src);
|
||||
static gboolean gst_replace_open (GstAudioSink * sink);
|
||||
static gboolean
|
||||
gst_replace_prepare (GstAudioSrc * src, GstRingBufferSpec * spec);
|
||||
static gboolean gst_replace_unprepare (GstAudioSrc * src);
|
||||
static gboolean gst_replace_close (GstAudioSrc * src);
|
||||
static guint gst_replace_read (GstAudioSrc * src, gpointer data, guint length);
|
||||
static guint gst_replace_delay (GstAudioSrc * src);
|
||||
static void gst_replace_reset (GstAudioSrc * src);
|
||||
gst_replace_prepare (GstAudioSink * sink, GstRingBufferSpec * spec);
|
||||
static gboolean gst_replace_unprepare (GstAudioSink * sink);
|
||||
static gboolean gst_replace_close (GstAudioSink * sink);
|
||||
static guint gst_replace_write (GstAudioSink * sink, gpointer data, guint length);
|
||||
static guint gst_replace_delay (GstAudioSink * sink);
|
||||
static void gst_replace_reset (GstAudioSink * sink);
|
||||
% declare-class
|
||||
GstAudioSink *audio_sink_class = GST_AUDIO_SINK (klass);
|
||||
GstAudioSinkClass *audio_sink_class = GST_AUDIO_SINK_CLASS (klass);
|
||||
% set-methods
|
||||
audio_sink_class-> = GST_DEBUG_FUNCPTR (gst_replace_);
|
||||
audio_sink_class->open = GST_DEBUG_FUNCPTR (gst_replace_open);
|
||||
audio_sink_class->prepare = GST_DEBUG_FUNCPTR (gst_replace_prepare);
|
||||
audio_sink_class->unprepare = GST_DEBUG_FUNCPTR (gst_replace_unprepare);
|
||||
audio_sink_class->close = GST_DEBUG_FUNCPTR (gst_replace_close);
|
||||
audio_sink_class->write = GST_DEBUG_FUNCPTR (gst_replace_write);
|
||||
audio_sink_class->delay = GST_DEBUG_FUNCPTR (gst_replace_delay);
|
||||
audio_sink_class->reset = GST_DEBUG_FUNCPTR (gst_replace_reset);
|
||||
% methods
|
||||
|
||||
static gboolean
|
||||
gst_replace_open (GstAudioSrc * src)
|
||||
gst_replace_open (GstAudioSink * sink)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_replace_prepare (GstAudioSrc * src, GstRingBufferSpec * spec)
|
||||
gst_replace_prepare (GstAudioSink * sink, GstRingBufferSpec * spec)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_replace_unprepare (GstAudioSrc * src)
|
||||
gst_replace_unprepare (GstAudioSink * sink)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_replace_close (GstAudioSrc * src)
|
||||
gst_replace_close (GstAudioSink * sink)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static guint
|
||||
gst_replace_read (GstAudioSrc * src, gpointer data, guint length)
|
||||
gst_replace_write (GstAudioSink * sink, gpointer data, guint length)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static guint
|
||||
gst_replace_delay (GstAudioSrc * src)
|
||||
gst_replace_delay (GstAudioSink * sink)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_replace_reset (GstAudioSrc * src)
|
||||
gst_replace_reset (GstAudioSink * sink)
|
||||
{
|
||||
}
|
||||
% end
|
||||
|
|
|
@ -2,58 +2,72 @@
|
|||
GstAudioSrc
|
||||
% TYPE_CLASS_NAME
|
||||
GST_TYPE_AUDIO_SRC
|
||||
% pads
|
||||
srcpad-simple
|
||||
% pkg-config
|
||||
gstreamer-audio-0.10
|
||||
% includes
|
||||
#include <gst/audio/gstaudiosrc.h>
|
||||
% prototypes
|
||||
static gboolean gst_replace_open (GstAudioSink * sink);
|
||||
static gboolean gst_replace_open (GstAudioSrc * src);
|
||||
static gboolean
|
||||
gst_replace_prepare (GstAudioSink * sink, GstRingBufferSpec * spec);
|
||||
static gboolean gst_replace_unprepare (GstAudioSink * sink);
|
||||
static gboolean gst_replace_close (GstAudioSink * sink);
|
||||
gst_replace_prepare (GstAudioSrc * src, GstRingBufferSpec * spec);
|
||||
static gboolean gst_replace_unprepare (GstAudioSrc * src);
|
||||
static gboolean gst_replace_close (GstAudioSrc * src);
|
||||
static guint
|
||||
gst_replace_write (GstAudioSink * sink, gpointer data, guint length);
|
||||
static guint gst_replace_delay (GstAudioSink * sink);
|
||||
static void gst_replace_reset (GstAudioSink * sink);
|
||||
gst_replace_read (GstAudioSrc * src, gpointer data, guint length);
|
||||
static guint gst_replace_delay (GstAudioSrc * src);
|
||||
static void gst_replace_reset (GstAudioSrc * src);
|
||||
% declare-class
|
||||
GstAudioSrc *audio_src_class = GST_AUDIO_SRC (klass);
|
||||
GstAudioSrcClass *audio_src_class = GST_AUDIO_SRC_CLASS (klass);
|
||||
% set-methods
|
||||
audio_src_class-> = GST_DEBUG_FUNCPTR (gst_replace_);
|
||||
audio_src_class->open = GST_DEBUG_FUNCPTR (gst_replace_open);
|
||||
audio_src_class->prepare = GST_DEBUG_FUNCPTR (gst_replace_prepare);
|
||||
audio_src_class->unprepare = GST_DEBUG_FUNCPTR (gst_replace_unprepare);
|
||||
audio_src_class->close = GST_DEBUG_FUNCPTR (gst_replace_close);
|
||||
audio_src_class->read = GST_DEBUG_FUNCPTR (gst_replace_read);
|
||||
audio_src_class->delay = GST_DEBUG_FUNCPTR (gst_replace_delay);
|
||||
audio_src_class->reset = GST_DEBUG_FUNCPTR (gst_replace_reset);
|
||||
% methods
|
||||
|
||||
static gboolean
|
||||
gst_replace_open (GstAudioSink * sink)
|
||||
gst_replace_open (GstAudioSrc * src)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_replace_prepare (GstAudioSink * sink, GstRingBufferSpec * spec)
|
||||
gst_replace_prepare (GstAudioSrc * src, GstRingBufferSpec * spec)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_replace_unprepare (GstAudioSink * sink)
|
||||
gst_replace_unprepare (GstAudioSrc * src)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_replace_close (GstAudioSink * sink)
|
||||
gst_replace_close (GstAudioSrc * src)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static guint
|
||||
gst_replace_write (GstAudioSink * sink, gpointer data, guint length)
|
||||
gst_replace_read (GstAudioSrc * src, gpointer data, guint length)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static guint
|
||||
gst_replace_delay (GstAudioSink * sink)
|
||||
gst_replace_delay (GstAudioSrc * src)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_replace_reset (GstAudioSink * sink)
|
||||
gst_replace_reset (GstAudioSrc * src)
|
||||
{
|
||||
}
|
||||
% end
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
GstBaseAudioSink
|
||||
% TYPE_CLASS_NAME
|
||||
GST_TYPE_BASE_AUDIO_SINK
|
||||
% pads
|
||||
sinkpad-simple
|
||||
% pkg-config
|
||||
gstreamer-audio-0.10
|
||||
% includes
|
||||
|
@ -9,14 +11,14 @@ gstreamer-audio-0.10
|
|||
% prototypes
|
||||
static GstRingBuffer *gst_replace_create_ringbuffer (GstBaseAudioSink * sink);
|
||||
% declare-class
|
||||
GstBaseAudioSink *base_audio_sink_class = GST_BASE_AUDIO_SINK (klass);
|
||||
GstBaseAudioSinkClass *base_audio_sink_class = GST_BASE_AUDIO_SINK_CLASS (klass);
|
||||
% set-methods
|
||||
base_audio_sink_class-> = GST_DEBUG_FUNCPTR (gst_replace_);
|
||||
base_audio_sink_class->create_ringbuffer = GST_DEBUG_FUNCPTR (gst_replace_create_ringbuffer);
|
||||
% methods
|
||||
|
||||
static GstRingBuffer *
|
||||
gst_replace_create_ringbuffer (GstBaseAudioSink * sink)
|
||||
{
|
||||
|
||||
return NULL;
|
||||
}
|
||||
% end
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
GstBaseAudioSrc
|
||||
% TYPE_CLASS_NAME
|
||||
GST_TYPE_BASE_AUDIO_SRC
|
||||
% pads
|
||||
srcpad-simple
|
||||
% pkg-config
|
||||
gstreamer-audio-0.10
|
||||
% includes
|
||||
|
@ -9,14 +11,15 @@ gstreamer-audio-0.10
|
|||
% prototypes
|
||||
static GstRingBuffer *gst_replace_create_ringbuffer (GstBaseAudioSrc * src);
|
||||
% declare-class
|
||||
GstBaseAudioSrc *base_audio_src_class = GST_BASE_AUDIO_SRC (klass);
|
||||
GstBaseAudioSrcClass *base_audio_src_class = GST_BASE_AUDIO_SRC_CLASS (klass);
|
||||
% set-methods
|
||||
base_audio_src_class-> = GST_DEBUG_FUNCPTR (gst_replace_);
|
||||
base_audio_src_class->create_ringbuffer = GST_DEBUG_FUNCPTR (gst_replace_create_ringbuffer);
|
||||
% methods
|
||||
|
||||
static GstRingBuffer *
|
||||
gst_replace_create_ringbuffer (GstBaseAudioSrc * src)
|
||||
{
|
||||
|
||||
return NULL;
|
||||
}
|
||||
% end
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
GstBaseRTPDepayload
|
||||
% TYPE_CLASS_NAME
|
||||
GST_TYPE_BASE_RTP_DEPAYLOAD
|
||||
% pads
|
||||
sinkpad-simple srcpad-simple
|
||||
% pkg-config
|
||||
gstreamer-rtp-0.10
|
||||
% includes
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
GstBaseRTPPayload
|
||||
% TYPE_CLASS_NAME
|
||||
GST_TYPE_BASE_RTP_PAYLOAD
|
||||
% pads
|
||||
sinkpad-simple srcpad-simple
|
||||
% pkg-config
|
||||
gstreamer-rtp-0.10
|
||||
% includes
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
GstBaseSink
|
||||
% TYPE_CLASS_NAME
|
||||
GST_TYPE_BASE_SINK
|
||||
% pads
|
||||
sinkpad-simple
|
||||
% pkg-config
|
||||
gstreamer-base-0.10
|
||||
% includes
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
GstBaseSrc
|
||||
% TYPE_CLASS_NAME
|
||||
GST_TYPE_BASE_SRC
|
||||
% pads
|
||||
srcpad-simple
|
||||
% pkg-config
|
||||
gstreamer-base-0.10
|
||||
% includes
|
||||
|
|
|
@ -2,8 +2,12 @@
|
|||
GstBaseTransform
|
||||
% TYPE_CLASS_NAME
|
||||
GST_TYPE_BASE_TRANSFORM
|
||||
% pads
|
||||
sinkpad-simple srcpad-simple
|
||||
% pkg-config
|
||||
gstreamer-base-0.10
|
||||
% pads
|
||||
sinkpad-simple srcpad-simple
|
||||
% includes
|
||||
#include <gst/base/gstbasetransform.h>
|
||||
% prototypes
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
GstCddaBaseSrc
|
||||
% TYPE_CLASS_NAME
|
||||
GST_TYPE_CDDA_BASE_SRC
|
||||
% pads
|
||||
srcpad-simple
|
||||
% pkg-config
|
||||
gstreamer-cdda-0.10
|
||||
% includes
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
GstElement
|
||||
% TYPE_CLASS_NAME
|
||||
GST_TYPE_ELEMENT
|
||||
% pads
|
||||
sinkpad srcpad
|
||||
% pkg-config
|
||||
gstreamer-0.10
|
||||
% includes
|
||||
|
@ -11,35 +13,24 @@ static GstPad *gst_replace_request_new_pad (GstElement * element,
|
|||
GstPadTemplate * templ, const gchar * name);
|
||||
static void gst_replace_release_pad (GstElement * element, GstPad * pad);
|
||||
static GstStateChangeReturn
|
||||
gst_replace_get_state (GstElement * element, GstState * state,
|
||||
GstState * pending, GstClockTime timeout);
|
||||
static GstStateChangeReturn
|
||||
gst_replace_set_state (GstElement * element, GstState state);
|
||||
static GstStateChangeReturn
|
||||
gst_replace_change_state (GstElement * element, GstStateChange transition);
|
||||
static void gst_replace_set_bus (GstElement * element, GstBus * bus);
|
||||
static GstClock *gst_replace_provide_clock (GstElement * element);
|
||||
static gboolean gst_replace_set_clock (GstElement * element, GstClock * clock);
|
||||
static GstIndex *gst_replace_get_index (GstElement * element);
|
||||
static void gst_replace_set_index (GstElement * element, GstIndex * index);
|
||||
static gboolean gst_replace_send_event (GstElement * element, GstEvent * event);
|
||||
static const GstQueryType *gst_replace_get_query_types (GstElement * element);
|
||||
static gboolean gst_replace_query (GstElement * element, GstQuery * query);
|
||||
% declare-class
|
||||
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
|
||||
% set-methods
|
||||
element_class->request_new_pad = GST_DEBUG_FUNCPTR (gst_replace_request_new_pad);
|
||||
element_class->release_pad = GST_DEBUG_FUNCPTR (gst_replace_release_pad);
|
||||
element_class->get_state = GST_DEBUG_FUNCPTR (gst_replace_get_state);
|
||||
element_class->set_state = GST_DEBUG_FUNCPTR (gst_replace_set_state);
|
||||
element_class->change_state = GST_DEBUG_FUNCPTR (gst_replace_change_state);
|
||||
element_class->set_bus = GST_DEBUG_FUNCPTR (gst_replace_set_bus);
|
||||
element_class->provide_clock = GST_DEBUG_FUNCPTR (gst_replace_provide_clock);
|
||||
element_class->set_clock = GST_DEBUG_FUNCPTR (gst_replace_set_clock);
|
||||
element_class->get_index = GST_DEBUG_FUNCPTR (gst_replace_get_index);
|
||||
element_class->set_index = GST_DEBUG_FUNCPTR (gst_replace_set_index);
|
||||
element_class->send_event = GST_DEBUG_FUNCPTR (gst_replace_send_event);
|
||||
element_class->get_query_types = GST_DEBUG_FUNCPTR (gst_replace_get_query_types);
|
||||
element_class->query = GST_DEBUG_FUNCPTR (gst_replace_query);
|
||||
% methods
|
||||
|
||||
|
@ -58,32 +49,40 @@ gst_replace_release_pad (GstElement * element, GstPad * pad)
|
|||
|
||||
}
|
||||
|
||||
static GstStateChangeReturn
|
||||
gst_replace_get_state (GstElement * element, GstState * state,
|
||||
GstState * pending, GstClockTime timeout)
|
||||
{
|
||||
|
||||
return GST_STATE_CHANGE_SUCCESS;
|
||||
}
|
||||
|
||||
static GstStateChangeReturn
|
||||
gst_replace_set_state (GstElement * element, GstState state)
|
||||
{
|
||||
|
||||
return GST_STATE_CHANGE_SUCCESS;
|
||||
}
|
||||
|
||||
static GstStateChangeReturn
|
||||
gst_replace_change_state (GstElement * element, GstStateChange transition)
|
||||
{
|
||||
GstReplace *replace;
|
||||
GstStateChangeReturn ret;
|
||||
|
||||
return GST_STATE_CHANGE_SUCCESS;
|
||||
}
|
||||
g_return_val_if_fail (GST_IS_REPLACE (element), GST_STATE_CHANGE_FAILURE);
|
||||
replace = GST_REPLACE (element);
|
||||
|
||||
static void
|
||||
gst_replace_set_bus (GstElement * element, GstBus * bus)
|
||||
{
|
||||
switch (transition) {
|
||||
case GST_STATE_CHANGE_NULL_TO_READY:
|
||||
break;
|
||||
case GST_STATE_CHANGE_READY_TO_PAUSED:
|
||||
break;
|
||||
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
|
||||
|
||||
switch (transition) {
|
||||
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
|
||||
break;
|
||||
case GST_STATE_CHANGE_PAUSED_TO_READY:
|
||||
break;
|
||||
case GST_STATE_CHANGE_READY_TO_NULL:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static GstClock *
|
||||
|
@ -120,13 +119,6 @@ gst_replace_send_event (GstElement * element, GstEvent * event)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static const GstQueryType *
|
||||
gst_replace_get_query_types (GstElement * element)
|
||||
{
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_replace_query (GstElement * element, GstQuery * query)
|
||||
{
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
GstPushSrc
|
||||
% TYPE_CLASS_NAME
|
||||
GST_TYPE_PUSH_SRC
|
||||
% pads
|
||||
srcpad-simple
|
||||
% pkg-config
|
||||
gstreamer-base-0.10
|
||||
% includes
|
||||
|
@ -9,14 +11,15 @@ gstreamer-base-0.10
|
|||
% prototypes
|
||||
static GstFlowReturn gst_replace_create (GstPushSrc * src, GstBuffer ** buf);
|
||||
% declare-class
|
||||
GstPushSrc *pushsrc_class = GST_PUSHSRC (klass);
|
||||
GstPushSrcClass *pushsrc_class = GST_PUSH_SRC_CLASS (klass);
|
||||
% set-methods
|
||||
pushsrc_class-> = GST_DEBUG_FUNCPTR (gst_replace_);
|
||||
pushsrc_class->create = GST_DEBUG_FUNCPTR (gst_replace_create);
|
||||
% methods
|
||||
|
||||
static GstFlowReturn
|
||||
gst_replace_create (GstPushSrc * src, GstBuffer ** buf)
|
||||
{
|
||||
|
||||
return GST_FLOW_OK;
|
||||
}
|
||||
% end
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
GstTagDemux
|
||||
% TYPE_CLASS_NAME
|
||||
GST_TYPE_TAG_DEMUX
|
||||
% pads
|
||||
sinkpad-simple srcpad-simple
|
||||
% pkg-config
|
||||
gstreamer-tag-0.10
|
||||
% includes
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
GstVideoSink
|
||||
% TYPE_CLASS_NAME
|
||||
GST_TYPE_VIDEO_SINK
|
||||
% pads
|
||||
sinkpad-simple
|
||||
% pkg-config
|
||||
gstreamer-video-0.10
|
||||
% includes
|
||||
|
|
23
tools/sinkpad-simple.c
Normal file
23
tools/sinkpad-simple.c
Normal file
|
@ -0,0 +1,23 @@
|
|||
|
||||
% instance-members
|
||||
GstPad *sinkpad;
|
||||
% prototypes
|
||||
% pad-template
|
||||
static GstStaticPadTemplate gst_replace_sink_template =
|
||||
GST_STATIC_PAD_TEMPLATE ("sink",
|
||||
GST_PAD_SINK,
|
||||
GST_PAD_ALWAYS,
|
||||
GST_STATIC_CAPS ("application/unknown")
|
||||
);
|
||||
|
||||
% base-init
|
||||
gst_element_class_add_pad_template (element_class,
|
||||
gst_static_pad_template_get (&gst_replace_sink_template));
|
||||
% instance-init
|
||||
|
||||
replace->sinkpad = gst_pad_new_from_static_template (&gst_replace_sink_template
|
||||
,
|
||||
"sink");
|
||||
% methods
|
||||
% end
|
||||
|
311
tools/sinkpad.c
Normal file
311
tools/sinkpad.c
Normal file
|
@ -0,0 +1,311 @@
|
|||
|
||||
% instance-members
|
||||
GstPad *sinkpad;
|
||||
% prototypes
|
||||
|
||||
static GstCaps* gst_replace_sink_getcaps (GstPad *pad);
|
||||
static gboolean gst_replace_sink_setcaps (GstPad *pad, GstCaps *caps);
|
||||
static gboolean gst_replace_sink_acceptcaps (GstPad *pad, GstCaps *caps);
|
||||
static void gst_replace_sink_fixatecaps (GstPad *pad, GstCaps *caps);
|
||||
static gboolean gst_replace_sink_activate (GstPad *pad);
|
||||
static gboolean gst_replace_sink_activatepush (GstPad *pad, gboolean active);
|
||||
static gboolean gst_replace_sink_activatepull (GstPad *pad, gboolean active);
|
||||
static GstPadLinkReturn gst_replace_sink_link (GstPad *pad, GstPad *peer);
|
||||
static void gst_replace_sink_unlink (GstPad *pad);
|
||||
static GstFlowReturn gst_replace_sink_chain (GstPad *pad, GstBuffer *buffer);
|
||||
static GstFlowReturn gst_replace_sink_chainlist (GstPad *pad, GstBufferList *bufferlist);
|
||||
static gboolean gst_replace_sink_event (GstPad *pad, GstEvent *event);
|
||||
static gboolean gst_replace_sink_query (GstPad *pad, GstQuery *query);
|
||||
static GstFlowReturn gst_replace_sink_bufferalloc (GstPad *pad, guint64 offset, guint size,
|
||||
GstCaps *caps, GstBuffer **buf);
|
||||
static GstIterator * gst_replace_sink_iterintlink (GstPad *pad);
|
||||
|
||||
% pad-template
|
||||
static GstStaticPadTemplate gst_replace_sink_template =
|
||||
GST_STATIC_PAD_TEMPLATE ("sink",
|
||||
GST_PAD_SINK,
|
||||
GST_PAD_ALWAYS,
|
||||
GST_STATIC_CAPS ("application/unknown")
|
||||
);
|
||||
|
||||
% base-init
|
||||
gst_element_class_add_pad_template (element_class,
|
||||
gst_static_pad_template_get (&gst_replace_sink_template));
|
||||
% instance-init
|
||||
|
||||
replace->sinkpad = gst_pad_new_from_static_template (&gst_replace_sink_template
|
||||
,
|
||||
"sink");
|
||||
gst_pad_set_getcaps_function (replace->sinkpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_sink_getcaps));
|
||||
gst_pad_set_setcaps_function (replace->sinkpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_sink_setcaps));
|
||||
gst_pad_set_acceptcaps_function (replace->sinkpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_sink_acceptcaps));
|
||||
gst_pad_set_fixatecaps_function (replace->sinkpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_sink_fixatecaps));
|
||||
gst_pad_set_activate_function (replace->sinkpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_sink_activate));
|
||||
gst_pad_set_activatepush_function (replace->sinkpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_sink_activatepush));
|
||||
gst_pad_set_activatepull_function (replace->sinkpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_sink_activatepull));
|
||||
gst_pad_set_link_function (replace->sinkpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_sink_link));
|
||||
gst_pad_set_unlink_function (replace->sinkpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_sink_unlink));
|
||||
gst_pad_set_chain_function (replace->sinkpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_sink_chain));
|
||||
gst_pad_set_chain_list_function (replace->sinkpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_sink_chainlist));
|
||||
gst_pad_set_event_function (replace->sinkpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_sink_event));
|
||||
gst_pad_set_query_function (replace->sinkpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_sink_query));
|
||||
gst_pad_set_bufferalloc_function (replace->sinkpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_sink_bufferalloc));
|
||||
gst_pad_set_iterate_internal_links_function (replace->sinkpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_sink_iterintlink));
|
||||
gst_element_add_pad (GST_ELEMENT(replace), replace->sinkpad);
|
||||
|
||||
|
||||
% methods
|
||||
|
||||
static GstCaps*
|
||||
gst_replace_sink_getcaps (GstPad *pad)
|
||||
{
|
||||
GstReplace *replace;
|
||||
GstCaps *caps;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "getcaps");
|
||||
|
||||
caps = gst_caps_copy (gst_pad_get_pad_template_caps (pad));
|
||||
|
||||
gst_object_unref (replace);
|
||||
return caps;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_replace_sink_setcaps (GstPad *pad, GstCaps *caps)
|
||||
{
|
||||
GstReplace *replace;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "setcaps");
|
||||
|
||||
|
||||
gst_object_unref (replace);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_replace_sink_acceptcaps (GstPad *pad, GstCaps *caps)
|
||||
{
|
||||
GstReplace *replace;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "acceptcaps");
|
||||
|
||||
|
||||
gst_object_unref (replace);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_replace_sink_fixatecaps (GstPad *pad, GstCaps *caps)
|
||||
{
|
||||
GstReplace *replace;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "fixatecaps");
|
||||
|
||||
|
||||
gst_object_unref (replace);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_replace_sink_activate (GstPad *pad)
|
||||
{
|
||||
GstReplace *replace;
|
||||
gboolean ret;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "activate");
|
||||
|
||||
if (gst_pad_check_pull_range (pad)) {
|
||||
GST_DEBUG_OBJECT (pad, "activating pull");
|
||||
ret = gst_pad_activate_pull (pad, TRUE);
|
||||
} else {
|
||||
GST_DEBUG_OBJECT (pad, "activating push");
|
||||
ret = gst_pad_activate_push (pad, TRUE);
|
||||
}
|
||||
|
||||
gst_object_unref (replace);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_replace_sink_activatepush (GstPad *pad, gboolean active)
|
||||
{
|
||||
GstReplace *replace;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "activatepush");
|
||||
|
||||
|
||||
gst_object_unref (replace);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_replace_sink_activatepull (GstPad *pad, gboolean active)
|
||||
{
|
||||
GstReplace *replace;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "activatepull");
|
||||
|
||||
|
||||
gst_object_unref (replace);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static GstPadLinkReturn
|
||||
gst_replace_sink_link (GstPad *pad, GstPad *peer)
|
||||
{
|
||||
GstReplace *replace;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "link");
|
||||
|
||||
|
||||
gst_object_unref (replace);
|
||||
return GST_PAD_LINK_OK;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_replace_sink_unlink (GstPad *pad)
|
||||
{
|
||||
GstReplace *replace;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "unlink");
|
||||
|
||||
|
||||
gst_object_unref (replace);
|
||||
}
|
||||
|
||||
static GstFlowReturn
|
||||
gst_replace_sink_chain (GstPad *pad, GstBuffer *buffer)
|
||||
{
|
||||
GstReplace *replace;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "chain");
|
||||
|
||||
|
||||
gst_object_unref (replace);
|
||||
return GST_FLOW_OK;
|
||||
}
|
||||
|
||||
static GstFlowReturn
|
||||
gst_replace_sink_chainlist (GstPad *pad, GstBufferList *bufferlist)
|
||||
{
|
||||
GstReplace *replace;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "chainlist");
|
||||
|
||||
|
||||
gst_object_unref (replace);
|
||||
return GST_FLOW_OK;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_replace_sink_event (GstPad *pad, GstEvent *event)
|
||||
{
|
||||
gboolean res;
|
||||
GstReplace *replace;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "event");
|
||||
|
||||
switch (GST_EVENT_TYPE (event)) {
|
||||
default:
|
||||
res = gst_pad_event_default (pad, event);
|
||||
break;
|
||||
}
|
||||
|
||||
gst_object_unref (replace);
|
||||
return res;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_replace_sink_query (GstPad *pad, GstQuery *query)
|
||||
{
|
||||
gboolean res;
|
||||
GstReplace *replace;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "query");
|
||||
|
||||
switch (GST_QUERY_TYPE(query)) {
|
||||
default:
|
||||
res = gst_pad_query_default (pad, query);
|
||||
break;
|
||||
}
|
||||
|
||||
gst_object_unref (replace);
|
||||
return res;
|
||||
}
|
||||
|
||||
static GstFlowReturn
|
||||
gst_replace_sink_bufferalloc (GstPad *pad, guint64 offset, guint size,
|
||||
GstCaps *caps, GstBuffer **buf)
|
||||
{
|
||||
GstReplace *replace;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "bufferalloc");
|
||||
|
||||
|
||||
*buf = gst_buffer_new_and_alloc (size);
|
||||
gst_buffer_set_caps (*buf, caps);
|
||||
|
||||
gst_object_unref (replace);
|
||||
return GST_FLOW_OK;
|
||||
}
|
||||
|
||||
static GstIterator *
|
||||
gst_replace_sink_iterintlink (GstPad *pad)
|
||||
{
|
||||
GstReplace *replace;
|
||||
GstIterator *iter;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "iterintlink");
|
||||
|
||||
iter = gst_pad_iterate_internal_links_default (pad);
|
||||
|
||||
gst_object_unref (replace);
|
||||
return iter;
|
||||
}
|
||||
|
||||
% end
|
||||
|
23
tools/srcpad-simple.c
Normal file
23
tools/srcpad-simple.c
Normal file
|
@ -0,0 +1,23 @@
|
|||
|
||||
% instance-members
|
||||
GstPad *srcpad;
|
||||
% prototypes
|
||||
% pad-template
|
||||
static GstStaticPadTemplate gst_replace_src_template =
|
||||
GST_STATIC_PAD_TEMPLATE ("src",
|
||||
GST_PAD_SRC,
|
||||
GST_PAD_ALWAYS,
|
||||
GST_STATIC_CAPS ("application/unknown")
|
||||
);
|
||||
|
||||
% base-init
|
||||
gst_element_class_add_pad_template (element_class,
|
||||
gst_static_pad_template_get (&gst_replace_src_template));
|
||||
% instance-init
|
||||
|
||||
replace->srcpad = gst_pad_new_from_static_template (&gst_replace_src_template
|
||||
,
|
||||
"src");
|
||||
% methods
|
||||
% end
|
||||
|
274
tools/srcpad.c
Normal file
274
tools/srcpad.c
Normal file
|
@ -0,0 +1,274 @@
|
|||
|
||||
% instance-members
|
||||
GstPad *srcpad;
|
||||
% prototypes
|
||||
|
||||
static GstCaps* gst_replace_src_getcaps (GstPad *pad);
|
||||
static gboolean gst_replace_src_setcaps (GstPad *pad, GstCaps *caps);
|
||||
static gboolean gst_replace_src_acceptcaps (GstPad *pad, GstCaps *caps);
|
||||
static void gst_replace_src_fixatecaps (GstPad *pad, GstCaps *caps);
|
||||
static gboolean gst_replace_src_activate (GstPad *pad);
|
||||
static gboolean gst_replace_src_activatepush (GstPad *pad, gboolean active);
|
||||
static gboolean gst_replace_src_activatepull (GstPad *pad, gboolean active);
|
||||
static GstPadLinkReturn gst_replace_src_link (GstPad *pad, GstPad *peer);
|
||||
static void gst_replace_src_unlink (GstPad *pad);
|
||||
static GstFlowReturn gst_replace_src_getrange (GstPad *pad, guint64 offset, guint length,
|
||||
GstBuffer **buffer);
|
||||
static gboolean gst_replace_src_event (GstPad *pad, GstEvent *event);
|
||||
static gboolean gst_replace_src_query (GstPad *pad, GstQuery *query);
|
||||
static GstIterator * gst_replace_src_iterintlink (GstPad *pad);
|
||||
|
||||
% pad-template
|
||||
static GstStaticPadTemplate gst_replace_src_template =
|
||||
GST_STATIC_PAD_TEMPLATE ("src",
|
||||
GST_PAD_SRC,
|
||||
GST_PAD_ALWAYS,
|
||||
GST_STATIC_CAPS ("application/unknown")
|
||||
);
|
||||
|
||||
% base-init
|
||||
gst_element_class_add_pad_template (element_class,
|
||||
gst_static_pad_template_get (&gst_replace_src_template));
|
||||
% instance-init
|
||||
|
||||
replace->srcpad = gst_pad_new_from_static_template (&gst_replace_src_template
|
||||
,
|
||||
"src");
|
||||
gst_pad_set_getcaps_function (replace->srcpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_src_getcaps));
|
||||
gst_pad_set_setcaps_function (replace->srcpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_src_setcaps));
|
||||
gst_pad_set_acceptcaps_function (replace->srcpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_src_acceptcaps));
|
||||
gst_pad_set_fixatecaps_function (replace->srcpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_src_fixatecaps));
|
||||
gst_pad_set_activate_function (replace->srcpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_src_activate));
|
||||
gst_pad_set_activatepush_function (replace->srcpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_src_activatepush));
|
||||
gst_pad_set_activatepull_function (replace->srcpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_src_activatepull));
|
||||
gst_pad_set_link_function (replace->srcpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_src_link));
|
||||
gst_pad_set_unlink_function (replace->srcpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_src_unlink));
|
||||
gst_pad_set_getrange_function (replace->srcpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_src_getrange));
|
||||
gst_pad_set_event_function (replace->srcpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_src_event));
|
||||
gst_pad_set_query_function (replace->srcpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_src_query));
|
||||
gst_pad_set_iterate_internal_links_function (replace->srcpad,
|
||||
GST_DEBUG_FUNCPTR(gst_replace_src_iterintlink));
|
||||
gst_element_add_pad (GST_ELEMENT(replace), replace->srcpad);
|
||||
|
||||
|
||||
% methods
|
||||
|
||||
static GstCaps*
|
||||
gst_replace_src_getcaps (GstPad *pad)
|
||||
{
|
||||
GstReplace *replace;
|
||||
GstCaps *caps;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "getcaps");
|
||||
|
||||
caps = gst_caps_copy (gst_pad_get_pad_template_caps (pad));
|
||||
|
||||
gst_object_unref (replace);
|
||||
return caps;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_replace_src_setcaps (GstPad *pad, GstCaps *caps)
|
||||
{
|
||||
GstReplace *replace;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "setcaps");
|
||||
|
||||
|
||||
gst_object_unref (replace);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_replace_src_acceptcaps (GstPad *pad, GstCaps *caps)
|
||||
{
|
||||
GstReplace *replace;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "acceptcaps");
|
||||
|
||||
|
||||
gst_object_unref (replace);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_replace_src_fixatecaps (GstPad *pad, GstCaps *caps)
|
||||
{
|
||||
GstReplace *replace;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "fixatecaps");
|
||||
|
||||
|
||||
gst_object_unref (replace);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_replace_src_activate (GstPad *pad)
|
||||
{
|
||||
GstReplace *replace;
|
||||
gboolean ret;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "activate");
|
||||
|
||||
if (gst_pad_check_pull_range (pad)) {
|
||||
GST_DEBUG_OBJECT (pad, "activating pull");
|
||||
ret = gst_pad_activate_pull (pad, TRUE);
|
||||
} else {
|
||||
GST_DEBUG_OBJECT (pad, "activating push");
|
||||
ret = gst_pad_activate_push (pad, TRUE);
|
||||
}
|
||||
|
||||
gst_object_unref (replace);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_replace_src_activatepush (GstPad *pad, gboolean active)
|
||||
{
|
||||
GstReplace *replace;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "activatepush");
|
||||
|
||||
|
||||
gst_object_unref (replace);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_replace_src_activatepull (GstPad *pad, gboolean active)
|
||||
{
|
||||
GstReplace *replace;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "activatepull");
|
||||
|
||||
|
||||
gst_object_unref (replace);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static GstPadLinkReturn
|
||||
gst_replace_src_link (GstPad *pad, GstPad *peer)
|
||||
{
|
||||
GstReplace *replace;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "link");
|
||||
|
||||
|
||||
gst_object_unref (replace);
|
||||
return GST_PAD_LINK_OK;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_replace_src_unlink (GstPad *pad)
|
||||
{
|
||||
GstReplace *replace;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "unlink");
|
||||
|
||||
|
||||
gst_object_unref (replace);
|
||||
}
|
||||
|
||||
static GstFlowReturn
|
||||
gst_replace_src_getrange (GstPad *pad, guint64 offset, guint length,
|
||||
GstBuffer **buffer)
|
||||
{
|
||||
GstReplace *replace;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "getrange");
|
||||
|
||||
|
||||
gst_object_unref (replace);
|
||||
return GST_FLOW_OK;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_replace_src_event (GstPad *pad, GstEvent *event)
|
||||
{
|
||||
gboolean res;
|
||||
GstReplace *replace;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "event");
|
||||
|
||||
switch (GST_EVENT_TYPE (event)) {
|
||||
default:
|
||||
res = gst_pad_event_default (pad, event);
|
||||
break;
|
||||
}
|
||||
|
||||
gst_object_unref (replace);
|
||||
return res;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_replace_src_query (GstPad *pad, GstQuery *query)
|
||||
{
|
||||
gboolean res;
|
||||
GstReplace *replace;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "query");
|
||||
|
||||
switch (GST_QUERY_TYPE(query)) {
|
||||
default:
|
||||
res = gst_pad_query_default (pad, query);
|
||||
break;
|
||||
}
|
||||
|
||||
gst_object_unref (replace);
|
||||
return res;
|
||||
}
|
||||
|
||||
static GstIterator *
|
||||
gst_replace_src_iterintlink (GstPad *pad)
|
||||
{
|
||||
GstReplace *replace;
|
||||
GstIterator *iter;
|
||||
|
||||
replace = GST_REPLACE (gst_pad_get_parent (pad));
|
||||
|
||||
GST_DEBUG_OBJECT(replace, "iterintlink");
|
||||
|
||||
iter = gst_pad_iterate_internal_links_default (pad);
|
||||
|
||||
gst_object_unref (replace);
|
||||
return iter;
|
||||
}
|
||||
|
||||
% end
|
||||
|
Loading…
Reference in a new issue