diff options
Diffstat (limited to 'tools')
27 files changed, 1425 insertions, 998 deletions
diff --git a/tools/element-templates/audiodecoder b/tools/element-templates/audiodecoder new file mode 100644 index 000000000..9539e718c --- /dev/null +++ b/tools/element-templates/audiodecoder @@ -0,0 +1,191 @@ +/* vim: set filetype=c: */ +% ClassName +GstAudioDecoder +% TYPE_CLASS_NAME +GST_TYPE_AUDIO_DECODER +% pads +srcpad-audio +sinkpad-simple +% pkg-config +gstreamer-audio-1.0 +% includes +#include <gst/audio/gstaudiodecoder.h> +% prototypes +static gboolean gst_replace_start (GstAudioDecoder * decoder); +static gboolean gst_replace_stop (GstAudioDecoder * decoder); +static gboolean gst_replace_set_format (GstAudioDecoder * decoder, GstCaps * caps); +static GstFlowReturn gst_replace_parse (GstAudioDecoder * decoder, + GstAdapter * adapter, gint * offset, gint * length); +static GstFlowReturn gst_replace_handle_frame (GstAudioDecoder * decoder, + GstBuffer * buffer); +static void gst_replace_flush (GstAudioDecoder * decoder, gboolean hard); +static GstFlowReturn gst_replace_pre_push (GstAudioDecoder * decoder, + GstBuffer ** buffer); +static gboolean gst_replace_sink_event (GstAudioDecoder * decoder, + GstEvent * event); +static gboolean gst_replace_src_event (GstAudioDecoder * decoder, GstEvent * event); +static gboolean gst_replace_open (GstAudioDecoder * decoder); +static gboolean gst_replace_close (GstAudioDecoder * decoder); +static gboolean gst_replace_negotiate (GstAudioDecoder * decoder); +static gboolean gst_replace_decide_allocation (GstAudioDecoder * decoder, + GstQuery * query); +static gboolean gst_replace_propose_allocation (GstAudioDecoder * decoder, + GstQuery * query); +% declare-class + GstAudioDecoderClass *audio_decoder_class = GST_AUDIO_DECODER_CLASS (klass); +% set-methods + audio_decoder_class->start = GST_DEBUG_FUNCPTR (gst_replace_start); + audio_decoder_class->stop = GST_DEBUG_FUNCPTR (gst_replace_stop); + audio_decoder_class->set_format = GST_DEBUG_FUNCPTR (gst_replace_set_format); + audio_decoder_class->parse = GST_DEBUG_FUNCPTR (gst_replace_parse); + audio_decoder_class->handle_frame = GST_DEBUG_FUNCPTR (gst_replace_handle_frame); + audio_decoder_class->flush = GST_DEBUG_FUNCPTR (gst_replace_flush); + audio_decoder_class->pre_push = GST_DEBUG_FUNCPTR (gst_replace_pre_push); + audio_decoder_class->sink_event = GST_DEBUG_FUNCPTR (gst_replace_sink_event); + audio_decoder_class->src_event = GST_DEBUG_FUNCPTR (gst_replace_src_event); + audio_decoder_class->open = GST_DEBUG_FUNCPTR (gst_replace_open); + audio_decoder_class->close = GST_DEBUG_FUNCPTR (gst_replace_close); + audio_decoder_class->negotiate = GST_DEBUG_FUNCPTR (gst_replace_negotiate); + audio_decoder_class->decide_allocation = GST_DEBUG_FUNCPTR (gst_replace_decide_allocation); + audio_decoder_class->propose_allocation = GST_DEBUG_FUNCPTR (gst_replace_propose_allocation); +% methods +static gboolean +gst_replace_start (GstAudioDecoder * decoder) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "start"); + + return TRUE; +} + +static gboolean +gst_replace_stop (GstAudioDecoder * decoder) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "stop"); + + return TRUE; +} + +static gboolean +gst_replace_set_format (GstAudioDecoder * decoder, GstCaps * caps) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "set_format"); + + return TRUE; +} + +static GstFlowReturn +gst_replace_parse (GstAudioDecoder * decoder, GstAdapter * adapter, gint * offset, + gint * length) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "parse"); + + return GST_FLOW_OK; +} + +static GstFlowReturn +gst_replace_handle_frame (GstAudioDecoder * decoder, GstBuffer * buffer) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "handle_frame"); + + return GST_FLOW_OK; +} + +static void +gst_replace_flush (GstAudioDecoder * decoder, gboolean hard) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "flush"); + +} + +static GstFlowReturn +gst_replace_pre_push (GstAudioDecoder * decoder, GstBuffer ** buffer) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "pre_push"); + + return GST_FLOW_OK; +} + +static gboolean +gst_replace_sink_event (GstAudioDecoder * decoder, GstEvent * event) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "sink_event"); + + return TRUE; +} + +static gboolean +gst_replace_src_event (GstAudioDecoder * decoder, GstEvent * event) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "src_event"); + + return TRUE; +} + +static gboolean +gst_replace_open (GstAudioDecoder * decoder) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "open"); + + return TRUE; +} + +static gboolean +gst_replace_close (GstAudioDecoder * decoder) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "close"); + + return TRUE; +} + +static gboolean +gst_replace_negotiate (GstAudioDecoder * decoder) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "negotiate"); + + return TRUE; +} + +static gboolean +gst_replace_decide_allocation (GstAudioDecoder * decoder, GstQuery * query) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "decide_allocation"); + + return TRUE; +} + +static gboolean +gst_replace_propose_allocation (GstAudioDecoder * decoder, GstQuery * query) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "propose_allocation"); + + return TRUE; +} +% end diff --git a/tools/element-templates/audioencoder b/tools/element-templates/audioencoder new file mode 100644 index 000000000..82ff16aff --- /dev/null +++ b/tools/element-templates/audioencoder @@ -0,0 +1,190 @@ +/* vim: set filetype=c: */ +% ClassName +GstAudioEncoder +% TYPE_CLASS_NAME +GST_TYPE_AUDIO_ENCODER +% pads +srcpad-simple +sinkpad-audio +% pkg-config +gstreamer-audio-1.0 +% includes +#include <gst/audio/gstaudioencoder.h> +% prototypes +static gboolean gst_replace_start (GstAudioEncoder * encoder); +static gboolean gst_replace_stop (GstAudioEncoder * encoder); +static gboolean gst_replace_set_format (GstAudioEncoder * encoder, + GstAudioInfo * info); +static GstFlowReturn gst_replace_handle_frame (GstAudioEncoder * encoder, + GstBuffer * buffer); +static void gst_replace_flush (GstAudioEncoder * encoder); +static GstFlowReturn gst_replace_pre_push (GstAudioEncoder * encoder, + GstBuffer ** buffer); +static gboolean gst_replace_sink_event (GstAudioEncoder * encoder, + GstEvent * event); +static gboolean gst_replace_src_event (GstAudioEncoder * encoder, GstEvent * event); +static GstCaps *gst_replace_getcaps (GstAudioEncoder * encoder, GstCaps * filter); +static gboolean gst_replace_open (GstAudioEncoder * encoder); +static gboolean gst_replace_close (GstAudioEncoder * encoder); +static gboolean gst_replace_negotiate (GstAudioEncoder * encoder); +static gboolean gst_replace_decide_allocation (GstAudioEncoder * encoder, + GstQuery * query); +static gboolean gst_replace_propose_allocation (GstAudioEncoder * encoder, + GstQuery * query); +% declare-class + GstAudioEncoderClass *audio_encoder_class = GST_AUDIO_ENCODER_CLASS (klass); +% set-methods + audio_encoder_class->start = GST_DEBUG_FUNCPTR (gst_replace_start); + audio_encoder_class->stop = GST_DEBUG_FUNCPTR (gst_replace_stop); + audio_encoder_class->set_format = GST_DEBUG_FUNCPTR (gst_replace_set_format); + audio_encoder_class->handle_frame = GST_DEBUG_FUNCPTR (gst_replace_handle_frame); + audio_encoder_class->flush = GST_DEBUG_FUNCPTR (gst_replace_flush); + audio_encoder_class->pre_push = GST_DEBUG_FUNCPTR (gst_replace_pre_push); + audio_encoder_class->sink_event = GST_DEBUG_FUNCPTR (gst_replace_sink_event); + audio_encoder_class->src_event = GST_DEBUG_FUNCPTR (gst_replace_src_event); + audio_encoder_class->getcaps = GST_DEBUG_FUNCPTR (gst_replace_getcaps); + audio_encoder_class->open = GST_DEBUG_FUNCPTR (gst_replace_open); + audio_encoder_class->close = GST_DEBUG_FUNCPTR (gst_replace_close); + audio_encoder_class->negotiate = GST_DEBUG_FUNCPTR (gst_replace_negotiate); + audio_encoder_class->decide_allocation = GST_DEBUG_FUNCPTR (gst_replace_decide_allocation); + audio_encoder_class->propose_allocation = GST_DEBUG_FUNCPTR (gst_replace_propose_allocation); +% methods +static gboolean +gst_replace_start (GstAudioEncoder * encoder) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT (replace, "start"); + + return TRUE; +} + +static gboolean +gst_replace_stop (GstAudioEncoder * encoder) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT (replace, "stop"); + + return TRUE; +} + +static gboolean +gst_replace_set_format (GstAudioEncoder * encoder, GstAudioInfo * info) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT (replace, "set_format"); + + return TRUE; +} + +static GstFlowReturn +gst_replace_handle_frame (GstAudioEncoder * encoder, GstBuffer * buffer) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT (replace, "handle_frame"); + + return GST_FLOW_OK; +} + +static void +gst_replace_flush (GstAudioEncoder * encoder) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT (replace, "flush"); + +} + +static GstFlowReturn +gst_replace_pre_push (GstAudioEncoder * encoder, GstBuffer ** buffer) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT (replace, "pre_push"); + + return GST_FLOW_OK; +} + +static gboolean +gst_replace_sink_event (GstAudioEncoder * encoder, GstEvent * event) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT (replace, "sink_event"); + + return TRUE; +} + +static gboolean +gst_replace_src_event (GstAudioEncoder * encoder, GstEvent * event) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT (replace, "src_event"); + + return TRUE; +} + +static GstCaps * +gst_replace_getcaps (GstAudioEncoder * encoder, GstCaps * filter) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT (replace, "getcaps"); + + return NULL; +} + +static gboolean +gst_replace_open (GstAudioEncoder * encoder) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT (replace, "open"); + + return TRUE; +} + +static gboolean +gst_replace_close (GstAudioEncoder * encoder) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT (replace, "close"); + + return TRUE; +} + +static gboolean +gst_replace_negotiate (GstAudioEncoder * encoder) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT (replace, "negotiate"); + + return TRUE; +} + +static gboolean +gst_replace_decide_allocation (GstAudioEncoder * encoder, GstQuery * query) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT (replace, "decide_allocation"); + + return TRUE; +} + +static gboolean +gst_replace_propose_allocation (GstAudioEncoder * encoder, GstQuery * query) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT (replace, "propose_allocation"); + + return TRUE; +} +% end diff --git a/tools/element-templates/audiofilter b/tools/element-templates/audiofilter index 5e7ea376b..01ac322ce 100644 --- a/tools/element-templates/audiofilter +++ b/tools/element-templates/audiofilter @@ -4,64 +4,27 @@ GstAudioFilter % TYPE_CLASS_NAME GST_TYPE_AUDIO_FILTER % pads -sinkpad-simple srcpad-simple +srcpad-audio +sinkpad-audio % pkg-config -gstreamer-audio-0.10 +gstreamer-audio-1.0 % includes #include <gst/audio/gstaudiofilter.h> % prototypes -static gboolean -gst_replace_setup (GstAudioFilter * filter, GstRingBufferSpec * format); -static gboolean -gst_replace_start (GstBaseTransform * trans); -static GstFlowReturn -gst_replace_transform_ip (GstBaseTransform * trans, GstBuffer * buf); -static gboolean -gst_replace_stop (GstBaseTransform * trans); +static gboolean gst_replace_setup (GstAudioFilter * filter, + const GstAudioInfo * info); % declare-class GstAudioFilterClass *audio_filter_class = GST_AUDIO_FILTER_CLASS (klass); - GstBaseTransformClass *base_transform_class = GST_BASE_TRANSFORM_CLASS (klass); % set-methods audio_filter_class->setup = GST_DEBUG_FUNCPTR (gst_replace_setup); - base_transform_class->start = GST_DEBUG_FUNCPTR (gst_replace_start); - base_transform_class->transform_ip = GST_DEBUG_FUNCPTR (gst_replace_transform_ip); - base_transform_class->stop = GST_DEBUG_FUNCPTR (gst_replace_stop); % methods - -static gboolean -gst_replace_setup (GstAudioFilter * filter, GstRingBufferSpec * format) -{ - /* GstReplace *replace = GST_REPLACE (filter); */ - - /* handle audio format changes */ - return TRUE; -} - static gboolean -gst_replace_start (GstBaseTransform * trans) +gst_replace_setup (GstAudioFilter * filter, const GstAudioInfo * info) { - /* GstReplace *replace = GST_REPLACE (trans); */ + GstReplace *replace = GST_REPLACE (filter); - /* initialize processing */ - return TRUE; -} - -static GstFlowReturn -gst_replace_transform_ip (GstBaseTransform * trans, GstBuffer * buf) -{ - /* GstReplace *replace = GST_REPLACE (trans); */ - - /* process the audio data in the buffer in-place */ - return GST_FLOW_OK; -} + GST_DEBUG_OBJECT (replace, "setup"); -static gboolean -gst_replace_stop (GstBaseTransform * trans) -{ - /* GstReplace *replace = GST_REPLACE (trans); */ - - /* finalize processing */ return TRUE; } - % end diff --git a/tools/element-templates/audiosink b/tools/element-templates/audiosink index 2a1b7a421..f6482c837 100644 --- a/tools/element-templates/audiosink +++ b/tools/element-templates/audiosink @@ -4,18 +4,19 @@ GstAudioSink % TYPE_CLASS_NAME GST_TYPE_AUDIO_SINK % pads -sinkpad-simple +sinkpad-audio % pkg-config -gstreamer-audio-0.10 +gstreamer-audio-1.0 % includes #include <gst/audio/gstaudiosink.h> % prototypes static gboolean gst_replace_open (GstAudioSink * sink); -static gboolean -gst_replace_prepare (GstAudioSink * sink, GstRingBufferSpec * spec); +static gboolean gst_replace_prepare (GstAudioSink * sink, + GstAudioRingBufferSpec * 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 gint 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 @@ -29,45 +30,79 @@ static void gst_replace_reset (GstAudioSink * sink); audio_sink_class->delay = GST_DEBUG_FUNCPTR (gst_replace_delay); audio_sink_class->reset = GST_DEBUG_FUNCPTR (gst_replace_reset); % methods - +/* open the device with given specs */ static gboolean gst_replace_open (GstAudioSink * sink) { - return FALSE; + GstReplace *replace = GST_REPLACE (sink); + + GST_DEBUG_OBJECT (replace, "open"); + + return TRUE; } +/* prepare resources and state to operate with the given specs */ static gboolean -gst_replace_prepare (GstAudioSink * sink, GstRingBufferSpec * spec) +gst_replace_prepare (GstAudioSink * sink, GstAudioRingBufferSpec * spec) { - return FALSE; + GstReplace *replace = GST_REPLACE (sink); + + GST_DEBUG_OBJECT (replace, "prepare"); + + return TRUE; } +/* undo anything that was done in prepare() */ static gboolean gst_replace_unprepare (GstAudioSink * sink) { - return FALSE; + GstReplace *replace = GST_REPLACE (sink); + + GST_DEBUG_OBJECT (replace, "unprepare"); + + return TRUE; } +/* close the device */ static gboolean gst_replace_close (GstAudioSink * sink) { - return FALSE; + GstReplace *replace = GST_REPLACE (sink); + + GST_DEBUG_OBJECT (replace, "close"); + + return TRUE; } -static guint +/* write samples to the device */ +static gint gst_replace_write (GstAudioSink * sink, gpointer data, guint length) { + GstReplace *replace = GST_REPLACE (sink); + + GST_DEBUG_OBJECT (replace, "write"); + return 0; } +/* get number of samples queued in the device */ static guint gst_replace_delay (GstAudioSink * sink) { + GstReplace *replace = GST_REPLACE (sink); + + GST_DEBUG_OBJECT (replace, "delay"); + return 0; } +/* reset the audio device, unblock from a write */ static void gst_replace_reset (GstAudioSink * sink) { + GstReplace *replace = GST_REPLACE (sink); + + GST_DEBUG_OBJECT (replace, "reset"); + } % end diff --git a/tools/element-templates/audiosrc b/tools/element-templates/audiosrc index fe4f6129f..2a47c93f1 100644 --- a/tools/element-templates/audiosrc +++ b/tools/element-templates/audiosrc @@ -4,19 +4,19 @@ GstAudioSrc % TYPE_CLASS_NAME GST_TYPE_AUDIO_SRC % pads -srcpad-simple +srcpad-audio % pkg-config -gstreamer-audio-0.10 +gstreamer-audio-1.0 % includes #include <gst/audio/gstaudiosrc.h> % prototypes static gboolean gst_replace_open (GstAudioSrc * src); -static gboolean -gst_replace_prepare (GstAudioSrc * src, GstRingBufferSpec * spec); +static gboolean gst_replace_prepare (GstAudioSrc * src, + GstAudioRingBufferSpec * 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_read (GstAudioSrc * src, gpointer data, guint length, + GstClockTime * timestamp); static guint gst_replace_delay (GstAudioSrc * src); static void gst_replace_reset (GstAudioSrc * src); % declare-class @@ -30,45 +30,80 @@ static void gst_replace_reset (GstAudioSrc * src); audio_src_class->delay = GST_DEBUG_FUNCPTR (gst_replace_delay); audio_src_class->reset = GST_DEBUG_FUNCPTR (gst_replace_reset); % methods - +/* open the device with given specs */ static gboolean gst_replace_open (GstAudioSrc * src) { - return FALSE; + GstReplace *replace = GST_REPLACE (src); + + GST_DEBUG_OBJECT (replace, "open"); + + return TRUE; } +/* prepare resources and state to operate with the given specs */ static gboolean -gst_replace_prepare (GstAudioSrc * src, GstRingBufferSpec * spec) +gst_replace_prepare (GstAudioSrc * src, GstAudioRingBufferSpec * spec) { - return FALSE; + GstReplace *replace = GST_REPLACE (src); + + GST_DEBUG_OBJECT (replace, "prepare"); + + return TRUE; } +/* undo anything that was done in prepare() */ static gboolean gst_replace_unprepare (GstAudioSrc * src) { - return FALSE; + GstReplace *replace = GST_REPLACE (src); + + GST_DEBUG_OBJECT (replace, "unprepare"); + + return TRUE; } +/* close the device */ static gboolean gst_replace_close (GstAudioSrc * src) { - return FALSE; + GstReplace *replace = GST_REPLACE (src); + + GST_DEBUG_OBJECT (replace, "close"); + + return TRUE; } +/* read samples from the device */ static guint -gst_replace_read (GstAudioSrc * src, gpointer data, guint length) +gst_replace_read (GstAudioSrc * src, gpointer data, guint length, + GstClockTime * timestamp) { + GstReplace *replace = GST_REPLACE (src); + + GST_DEBUG_OBJECT (replace, "read"); + return 0; } +/* get number of samples queued in the device */ static guint gst_replace_delay (GstAudioSrc * src) { + GstReplace *replace = GST_REPLACE (src); + + GST_DEBUG_OBJECT (replace, "delay"); + return 0; } +/* reset the audio device, unblock from a write */ static void gst_replace_reset (GstAudioSrc * src) { + GstReplace *replace = GST_REPLACE (src); + + GST_DEBUG_OBJECT (replace, "reset"); + } % end diff --git a/tools/element-templates/base b/tools/element-templates/base deleted file mode 100644 index 379d085ae..000000000 --- a/tools/element-templates/base +++ /dev/null @@ -1,34 +0,0 @@ -/* vim: set filetype=c: */ - -% copyright -/* GStreamer - * Copyright (C) 2010 REAL_NAME <EMAIL_ADDRESS> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -% includes -#include <gst/gst.h> -% part2 - -enum -{ - ARG_0 -}; - - -% end - diff --git a/tools/element-templates/baseaudiosink b/tools/element-templates/baseaudiosink deleted file mode 100644 index 4d6555d7d..000000000 --- a/tools/element-templates/baseaudiosink +++ /dev/null @@ -1,25 +0,0 @@ -/* vim: set filetype=c: */ -% ClassName -GstBaseAudioSink -% TYPE_CLASS_NAME -GST_TYPE_BASE_AUDIO_SINK -% pads -sinkpad-simple -% pkg-config -gstreamer-audio-0.10 -% includes -#include <gst/audio/gstbaseaudiosink.h> -% prototypes -static GstRingBuffer *gst_replace_create_ringbuffer (GstBaseAudioSink * sink); -% declare-class - GstBaseAudioSinkClass *base_audio_sink_class = GST_BASE_AUDIO_SINK_CLASS (klass); -% set-methods - 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 diff --git a/tools/element-templates/baseaudiosrc b/tools/element-templates/baseaudiosrc deleted file mode 100644 index 8b0e4ab0e..000000000 --- a/tools/element-templates/baseaudiosrc +++ /dev/null @@ -1,26 +0,0 @@ -/* vim: set filetype=c: */ -% ClassName -GstBaseAudioSrc -% TYPE_CLASS_NAME -GST_TYPE_BASE_AUDIO_SRC -% pads -srcpad-simple -% pkg-config -gstreamer-audio-0.10 -% includes -#include <gst/audio/gstbaseaudiosrc.h> -% prototypes -static GstRingBuffer *gst_replace_create_ringbuffer (GstBaseAudioSrc * src); -% declare-class - GstBaseAudioSrcClass *base_audio_src_class = GST_BASE_AUDIO_SRC_CLASS (klass); -% set-methods - 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 diff --git a/tools/element-templates/baseparse b/tools/element-templates/baseparse index 01293f68a..c34cbc186 100644 --- a/tools/element-templates/baseparse +++ b/tools/element-templates/baseparse @@ -1,76 +1,94 @@ +/* vim: set filetype=c: */ % ClassName GstBaseParse % TYPE_CLASS_NAME GST_TYPE_BASE_PARSE +% pads +srcpad-simple +sinkpad-simple % pkg-config -gstreamer-base-0.10 +gstreamer-base-1.0 % includes #include <gst/base/gstbaseparse.h> % prototypes -static gboolean gst_replace_start (GstBaseParse *parse); -static gboolean gst_replace_stop (GstBaseParse *parse); -static gboolean gst_replace_set_sink_caps (GstBaseParse *parse, GstCaps *caps); -static gboolean gst_replace_check_valid_frame (GstBaseParse *parse, - GstBaseParseFrame *frame, guint *framesize, gint *skipsize); -static GstFlowReturn gst_replace_parse_frame (GstBaseParse *parse, - GstBaseParseFrame *frame); -static gboolean gst_replace_convert (GstBaseParse * parse, - GstFormat src_format, gint64 src_value, GstFormat dest_format, - gint64 * dest_value); -static gboolean gst_replace_event (GstBaseParse *parse, GstEvent *event); -static gboolean gst_replace_src_event (GstBaseParse *parse, GstEvent *event); -static GstFlowReturn gst_replace_pre_push_frame (GstBaseParse *parse, - GstBaseParseFrame *frame); +static gboolean gst_replace_start (GstBaseParse * parse); +static gboolean gst_replace_stop (GstBaseParse * parse); +static gboolean gst_replace_set_sink_caps (GstBaseParse * parse, + GstCaps * caps); +static GstFlowReturn gst_replace_handle_frame (GstBaseParse * parse, + GstBaseParseFrame * frame, gint * skipsize); +static GstFlowReturn gst_replace_pre_push_frame (GstBaseParse * parse, + GstBaseParseFrame * frame); +static gboolean gst_replace_convert (GstBaseParse * parse, GstFormat src_format, + gint64 src_value, GstFormat dest_format, gint64 * dest_value); +static gboolean gst_replace_sink_event (GstBaseParse * parse, GstEvent * event); +static gboolean gst_replace_src_event (GstBaseParse * parse, GstEvent * event); +static GstCaps *gst_replace_get_sink_caps (GstBaseParse * parse, + GstCaps * filter); +static GstFlowReturn gst_replace_detect (GstBaseParse * parse, + GstBuffer * buffer); % declare-class GstBaseParseClass *base_parse_class = GST_BASE_PARSE_CLASS (klass); % set-methods base_parse_class->start = GST_DEBUG_FUNCPTR (gst_replace_start); base_parse_class->stop = GST_DEBUG_FUNCPTR (gst_replace_stop); base_parse_class->set_sink_caps = GST_DEBUG_FUNCPTR (gst_replace_set_sink_caps); - base_parse_class->check_valid_frame = GST_DEBUG_FUNCPTR (gst_replace_check_valid_frame); - base_parse_class->parse_frame = GST_DEBUG_FUNCPTR (gst_replace_parse_frame); + base_parse_class->handle_frame = GST_DEBUG_FUNCPTR (gst_replace_handle_frame); base_parse_class->pre_push_frame = GST_DEBUG_FUNCPTR (gst_replace_pre_push_frame); base_parse_class->convert = GST_DEBUG_FUNCPTR (gst_replace_convert); - base_parse_class->event = GST_DEBUG_FUNCPTR (gst_replace_event); + base_parse_class->sink_event = GST_DEBUG_FUNCPTR (gst_replace_sink_event); base_parse_class->src_event = GST_DEBUG_FUNCPTR (gst_replace_src_event); + base_parse_class->get_sink_caps = GST_DEBUG_FUNCPTR (gst_replace_get_sink_caps); + base_parse_class->detect = GST_DEBUG_FUNCPTR (gst_replace_detect); % methods - static gboolean -gst_replace_start (GstBaseParse *parse) +gst_replace_start (GstBaseParse * parse) { + GstReplace *replace = GST_REPLACE (parse); + + GST_DEBUG_OBJECT (replace, "start"); + return TRUE; } static gboolean -gst_replace_stop (GstBaseParse *parse) +gst_replace_stop (GstBaseParse * parse) { + GstReplace *replace = GST_REPLACE (parse); + + GST_DEBUG_OBJECT (replace, "stop"); + return TRUE; } static gboolean -gst_replace_set_sink_caps (GstBaseParse *parse, GstCaps *caps) +gst_replace_set_sink_caps (GstBaseParse * parse, GstCaps * caps) { - /* Called when sink caps are set */ + GstReplace *replace = GST_REPLACE (parse); + + GST_DEBUG_OBJECT (replace, "set_sink_caps"); + return TRUE; } -static gboolean -gst_replace_check_valid_frame (GstBaseParse *parse, - GstBaseParseFrame *frame, guint *framesize, gint *skipsize) +static GstFlowReturn +gst_replace_handle_frame (GstBaseParse * parse, GstBaseParseFrame * frame, + gint * skipsize) { - /* Called when processing incoming buffers. Function should check - whether the buffer contains a valid frame */ - /* MUST implement */ - return TRUE; + GstReplace *replace = GST_REPLACE (parse); + + GST_DEBUG_OBJECT (replace, "handle_frame"); + + return GST_FLOW_OK; } static GstFlowReturn -gst_replace_parse_frame (GstBaseParse *parse, - GstBaseParseFrame *frame) +gst_replace_pre_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame) { - /* Called when processing incoming buffers. Function should parse - a checked frame. */ - /* MUST implement */ + GstReplace *replace = GST_REPLACE (parse); + + GST_DEBUG_OBJECT (replace, "pre_push_frame"); + return GST_FLOW_OK; } @@ -78,32 +96,50 @@ static gboolean gst_replace_convert (GstBaseParse * parse, GstFormat src_format, gint64 src_value, GstFormat dest_format, gint64 * dest_value) { - /* Convert between formats */ + GstReplace *replace = GST_REPLACE (parse); + + GST_DEBUG_OBJECT (replace, "convert"); - return FALSE; + return TRUE; } static gboolean -gst_replace_event (GstBaseParse *parse, GstEvent *event) +gst_replace_sink_event (GstBaseParse * parse, GstEvent * event) { - /* Sink pad event handler */ + GstReplace *replace = GST_REPLACE (parse); + + GST_DEBUG_OBJECT (replace, "sink_event"); - return FALSE; + return TRUE; } static gboolean -gst_replace_src_event (GstBaseParse *parse, GstEvent *event) +gst_replace_src_event (GstBaseParse * parse, GstEvent * event) +{ + GstReplace *replace = GST_REPLACE (parse); + + GST_DEBUG_OBJECT (replace, "src_event"); + + return TRUE; +} + +static GstCaps * +gst_replace_get_sink_caps (GstBaseParse * parse, GstCaps * filter) { - /* Src pad event handler */ + GstReplace *replace = GST_REPLACE (parse); - return FALSE; + GST_DEBUG_OBJECT (replace, "get_sink_caps"); + + return NULL; } static GstFlowReturn -gst_replace_pre_push_frame (GstBaseParse *parse, GstBaseParseFrame *frame) +gst_replace_detect (GstBaseParse * parse, GstBuffer * buffer) { + GstReplace *replace = GST_REPLACE (parse); + + GST_DEBUG_OBJECT (replace, "detect"); return GST_FLOW_OK; } - % end diff --git a/tools/element-templates/basertpdepayload b/tools/element-templates/basertpdepayload deleted file mode 100644 index b91d1c2fb..000000000 --- a/tools/element-templates/basertpdepayload +++ /dev/null @@ -1,68 +0,0 @@ -/* vim: set filetype=c: */ -% ClassName -GstBaseRTPDepayload -% TYPE_CLASS_NAME -GST_TYPE_BASE_RTP_DEPAYLOAD -% pads -sinkpad-simple srcpad-simple -% pkg-config -gstreamer-rtp-0.10 -% includes -#include <gst/rtp/gstbasertpdepayload.h> -% prototypes -static gboolean -gst_replace_set_caps (GstBaseRTPDepayload * filter, GstCaps * caps); -static GstFlowReturn -gst_replace_add_to_queue (GstBaseRTPDepayload * filter, GstBuffer * in); -static GstBuffer *gst_replace_process (GstBaseRTPDepayload * base, - GstBuffer * in); -static void -gst_replace_set_gst_timestamp (GstBaseRTPDepayload * filter, guint32 timestamp, - GstBuffer * buf); -static gboolean -gst_replace_packet_lost (GstBaseRTPDepayload * filter, GstEvent * event); -% declare-class - GstBaseRTPDepayloadClass *base_rtpdepayload_class = GST_BASE_RTP_DEPAYLOAD_CLASS (klass); -% set-methods - base_rtpdepayload_class->set_caps = GST_DEBUG_FUNCPTR (gst_replace_set_caps); - base_rtpdepayload_class->add_to_queue = GST_DEBUG_FUNCPTR (gst_replace_add_to_queue); - base_rtpdepayload_class->process = GST_DEBUG_FUNCPTR (gst_replace_process); - base_rtpdepayload_class->set_gst_timestamp = GST_DEBUG_FUNCPTR (gst_replace_set_gst_timestamp); - base_rtpdepayload_class->packet_lost = GST_DEBUG_FUNCPTR (gst_replace_packet_lost); -% methods - -static gboolean -gst_replace_set_caps (GstBaseRTPDepayload * filter, GstCaps * caps) -{ - - return FALSE; -} - -static GstFlowReturn -gst_replace_add_to_queue (GstBaseRTPDepayload * filter, GstBuffer * in) -{ - - return GST_FLOW_ERROR; -} - -static GstBuffer * -gst_replace_process (GstBaseRTPDepayload * base, GstBuffer * in) -{ - - return NULL; -} - -static void -gst_replace_set_gst_timestamp (GstBaseRTPDepayload * filter, guint32 timestamp, - GstBuffer * buf) -{ - -} - -static gboolean -gst_replace_packet_lost (GstBaseRTPDepayload * filter, GstEvent * event) -{ - - return FALSE; -} -% end diff --git a/tools/element-templates/basertppayload b/tools/element-templates/basertppayload deleted file mode 100644 index 0f7d6547e..000000000 --- a/tools/element-templates/basertppayload +++ /dev/null @@ -1,56 +0,0 @@ -/* vim: set filetype=c: */ -% ClassName -GstBaseRTPPayload -% TYPE_CLASS_NAME -GST_TYPE_BASE_RTP_PAYLOAD -% pads -sinkpad-simple srcpad-simple -% pkg-config -gstreamer-rtp-0.10 -% includes -#include <gst/rtp/gstbasertppayload.h> -% prototypes -static gboolean -gst_replace_set_caps (GstBaseRTPPayload * payload, GstCaps * caps); -static GstFlowReturn -gst_replace_handle_buffer (GstBaseRTPPayload * payload, GstBuffer * buffer); -static gboolean gst_replace_handle_event (GstPad * pad, GstEvent * event); -static GstCaps *gst_replace_get_caps (GstBaseRTPPayload * payload, - GstPad * pad); -% declare-class - GstBaseRTPPayloadClass *base_rtppayload_class = GST_BASE_RTP_PAYLOAD_CLASS (klass); -% set-methods - base_rtppayload_class->set_caps = GST_DEBUG_FUNCPTR (gst_replace_set_caps); - base_rtppayload_class->handle_buffer = GST_DEBUG_FUNCPTR (gst_replace_handle_buffer); - base_rtppayload_class->handle_event = GST_DEBUG_FUNCPTR (gst_replace_handle_event); - base_rtppayload_class->get_caps = GST_DEBUG_FUNCPTR (gst_replace_get_caps); -% methods - -static gboolean -gst_replace_set_caps (GstBaseRTPPayload * payload, GstCaps * caps) -{ - - return FALSE; -} - -static GstFlowReturn -gst_replace_handle_buffer (GstBaseRTPPayload * payload, GstBuffer * buffer) -{ - - return GST_FLOW_ERROR; -} - -static gboolean -gst_replace_handle_event (GstPad * pad, GstEvent * event) -{ - - return FALSE; -} - -static GstCaps * -gst_replace_get_caps (GstBaseRTPPayload * payload, GstPad * pad) -{ - - return NULL; -} -% end diff --git a/tools/element-templates/basesink b/tools/element-templates/basesink index bf018283d..35a2cf096 100644 --- a/tools/element-templates/basesink +++ b/tools/element-templates/basesink @@ -6,85 +6,130 @@ GST_TYPE_BASE_SINK % pads sinkpad-simple % pkg-config -gstreamer-base-0.10 +gstreamer-base-1.0 % includes #include <gst/base/gstbasesink.h> % prototypes -static GstCaps *gst_replace_get_caps (GstBaseSink * sink); +static GstCaps *gst_replace_get_caps (GstBaseSink * sink, GstCaps * filter); static gboolean gst_replace_set_caps (GstBaseSink * sink, GstCaps * caps); -static GstFlowReturn -gst_replace_buffer_alloc (GstBaseSink * sink, guint64 offset, guint size, - GstCaps * caps, GstBuffer ** buf); -static void -gst_replace_get_times (GstBaseSink * sink, GstBuffer * buffer, +static GstCaps *gst_replace_fixate (GstBaseSink * sink, GstCaps * caps); +static gboolean gst_replace_activate_pull (GstBaseSink * sink, gboolean active); +static void gst_replace_get_times (GstBaseSink * sink, GstBuffer * buffer, GstClockTime * start, GstClockTime * end); +static gboolean gst_replace_propose_allocation (GstBaseSink * sink, + GstQuery * query); static gboolean gst_replace_start (GstBaseSink * sink); static gboolean gst_replace_stop (GstBaseSink * sink); static gboolean gst_replace_unlock (GstBaseSink * sink); -static gboolean gst_replace_event (GstBaseSink * sink, GstEvent * event); -static GstFlowReturn -gst_replace_preroll (GstBaseSink * sink, GstBuffer * buffer); -static GstFlowReturn -gst_replace_render (GstBaseSink * sink, GstBuffer * buffer); -static GstStateChangeReturn gst_replace_async_play (GstBaseSink * sink); -static gboolean gst_replace_activate_pull (GstBaseSink * sink, gboolean active); -static void gst_replace_fixate (GstBaseSink * sink, GstCaps * caps); static gboolean gst_replace_unlock_stop (GstBaseSink * sink); -static GstFlowReturn -gst_replace_render_list (GstBaseSink * sink, GstBufferList * buffer_list); +static gboolean gst_replace_query (GstBaseSink * sink, GstQuery * query); +static gboolean gst_replace_event (GstBaseSink * sink, GstEvent * event); +static GstFlowReturn gst_replace_wait_event (GstBaseSink * sink, + GstEvent * event); +static GstFlowReturn gst_replace_prepare (GstBaseSink * sink, + GstBuffer * buffer); +static GstFlowReturn gst_replace_prepare_list (GstBaseSink * sink, + GstBufferList * buffer_list); +static GstFlowReturn gst_replace_preroll (GstBaseSink * sink, + GstBuffer * buffer); +static GstFlowReturn gst_replace_render (GstBaseSink * sink, + GstBuffer * buffer); +static GstFlowReturn gst_replace_render_list (GstBaseSink * sink, + GstBufferList * buffer_list); % declare-class GstBaseSinkClass *base_sink_class = GST_BASE_SINK_CLASS (klass); % set-methods base_sink_class->get_caps = GST_DEBUG_FUNCPTR (gst_replace_get_caps); base_sink_class->set_caps = GST_DEBUG_FUNCPTR (gst_replace_set_caps); - base_sink_class->buffer_alloc = GST_DEBUG_FUNCPTR (gst_replace_buffer_alloc); + base_sink_class->fixate = GST_DEBUG_FUNCPTR (gst_replace_fixate); + base_sink_class->activate_pull = GST_DEBUG_FUNCPTR (gst_replace_activate_pull); base_sink_class->get_times = GST_DEBUG_FUNCPTR (gst_replace_get_times); + base_sink_class->propose_allocation = GST_DEBUG_FUNCPTR (gst_replace_propose_allocation); base_sink_class->start = GST_DEBUG_FUNCPTR (gst_replace_start); base_sink_class->stop = GST_DEBUG_FUNCPTR (gst_replace_stop); base_sink_class->unlock = GST_DEBUG_FUNCPTR (gst_replace_unlock); + base_sink_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_replace_unlock_stop); + base_sink_class->query = GST_DEBUG_FUNCPTR (gst_replace_query); base_sink_class->event = GST_DEBUG_FUNCPTR (gst_replace_event); + base_sink_class->wait_event = GST_DEBUG_FUNCPTR (gst_replace_wait_event); + base_sink_class->prepare = GST_DEBUG_FUNCPTR (gst_replace_prepare); + base_sink_class->prepare_list = GST_DEBUG_FUNCPTR (gst_replace_prepare_list); base_sink_class->preroll = GST_DEBUG_FUNCPTR (gst_replace_preroll); base_sink_class->render = GST_DEBUG_FUNCPTR (gst_replace_render); - base_sink_class->async_play = GST_DEBUG_FUNCPTR (gst_replace_async_play); - base_sink_class->activate_pull = GST_DEBUG_FUNCPTR (gst_replace_activate_pull); - base_sink_class->fixate = GST_DEBUG_FUNCPTR (gst_replace_fixate); - base_sink_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_replace_unlock_stop); base_sink_class->render_list = GST_DEBUG_FUNCPTR (gst_replace_render_list); % methods - - static GstCaps * -gst_replace_get_caps (GstBaseSink * sink) +gst_replace_get_caps (GstBaseSink * sink, GstCaps * filter) { + GstReplace *replace = GST_REPLACE (sink); + + GST_DEBUG_OBJECT (replace, "get_caps"); return NULL; } +/* notify subclass of new caps */ static gboolean gst_replace_set_caps (GstBaseSink * sink, GstCaps * caps) { + GstReplace *replace = GST_REPLACE (sink); + + GST_DEBUG_OBJECT (replace, "set_caps"); - return FALSE; + return TRUE; } -static GstFlowReturn -gst_replace_buffer_alloc (GstBaseSink * sink, guint64 offset, guint size, - GstCaps * caps, GstBuffer ** buf) +/* fixate sink caps during pull-mode negotiation */ +static GstCaps * +gst_replace_fixate (GstBaseSink * sink, GstCaps * caps) { + GstReplace *replace = GST_REPLACE (sink); + + GST_DEBUG_OBJECT (replace, "fixate"); + + return NULL; +} - return GST_FLOW_ERROR; +/* start or stop a pulling thread */ +static gboolean +gst_replace_activate_pull (GstBaseSink * sink, gboolean active) +{ + GstReplace *replace = GST_REPLACE (sink); + + GST_DEBUG_OBJECT (replace, "activate_pull"); + + return TRUE; } +/* get the start and end times for syncing on this buffer */ static void gst_replace_get_times (GstBaseSink * sink, GstBuffer * buffer, GstClockTime * start, GstClockTime * end) { + GstReplace *replace = GST_REPLACE (sink); + + GST_DEBUG_OBJECT (replace, "get_times"); } +/* propose allocation parameters for upstream */ +static gboolean +gst_replace_propose_allocation (GstBaseSink * sink, GstQuery * query) +{ + GstReplace *replace = GST_REPLACE (sink); + + GST_DEBUG_OBJECT (replace, "propose_allocation"); + + return TRUE; +} + +/* start and stop processing, ideal for opening/closing the resource */ static gboolean gst_replace_start (GstBaseSink * sink) { + GstReplace *replace = GST_REPLACE (sink); + + GST_DEBUG_OBJECT (replace, "start"); return TRUE; } @@ -92,72 +137,121 @@ gst_replace_start (GstBaseSink * sink) static gboolean gst_replace_stop (GstBaseSink * sink) { + GstReplace *replace = GST_REPLACE (sink); + + GST_DEBUG_OBJECT (replace, "stop"); return TRUE; } +/* unlock any pending access to the resource. subclasses should unlock + * any function ASAP. */ static gboolean gst_replace_unlock (GstBaseSink * sink) { + GstReplace *replace = GST_REPLACE (sink); + + GST_DEBUG_OBJECT (replace, "unlock"); + + return TRUE; +} + +/* Clear a previously indicated unlock request not that unlocking is + * complete. Sub-classes should clear any command queue or indicator they + * set during unlock */ +static gboolean +gst_replace_unlock_stop (GstBaseSink * sink) +{ + GstReplace *replace = GST_REPLACE (sink); + + GST_DEBUG_OBJECT (replace, "unlock_stop"); return TRUE; } +/* notify subclass of query */ static gboolean -gst_replace_event (GstBaseSink * sink, GstEvent * event) +gst_replace_query (GstBaseSink * sink, GstQuery * query) { + GstReplace *replace = GST_REPLACE (sink); + + GST_DEBUG_OBJECT (replace, "query"); return TRUE; } -static GstFlowReturn -gst_replace_preroll (GstBaseSink * sink, GstBuffer * buffer) +/* notify subclass of event */ +static gboolean +gst_replace_event (GstBaseSink * sink, GstEvent * event) { + GstReplace *replace = GST_REPLACE (sink); - return GST_FLOW_OK; + GST_DEBUG_OBJECT (replace, "event"); + + return TRUE; } +/* wait for eos or gap, subclasses should chain up to parent first */ static GstFlowReturn -gst_replace_render (GstBaseSink * sink, GstBuffer * buffer) +gst_replace_wait_event (GstBaseSink * sink, GstEvent * event) { + GstReplace *replace = GST_REPLACE (sink); + + GST_DEBUG_OBJECT (replace, "wait_event"); return GST_FLOW_OK; } -static GstStateChangeReturn -gst_replace_async_play (GstBaseSink * sink) +/* notify subclass of buffer or list before doing sync */ +static GstFlowReturn +gst_replace_prepare (GstBaseSink * sink, GstBuffer * buffer) { + GstReplace *replace = GST_REPLACE (sink); + + GST_DEBUG_OBJECT (replace, "prepare"); - return GST_STATE_CHANGE_SUCCESS; + return GST_FLOW_OK; } -static gboolean -gst_replace_activate_pull (GstBaseSink * sink, gboolean active) +static GstFlowReturn +gst_replace_prepare_list (GstBaseSink * sink, GstBufferList * buffer_list) { + GstReplace *replace = GST_REPLACE (sink); - return TRUE; + GST_DEBUG_OBJECT (replace, "prepare_list"); + + return GST_FLOW_OK; } -static void -gst_replace_fixate (GstBaseSink * sink, GstCaps * caps) +/* notify subclass of preroll buffer or real buffer */ +static GstFlowReturn +gst_replace_preroll (GstBaseSink * sink, GstBuffer * buffer) { + GstReplace *replace = GST_REPLACE (sink); + GST_DEBUG_OBJECT (replace, "preroll"); + + return GST_FLOW_OK; } -static gboolean -gst_replace_unlock_stop (GstBaseSink * sink) +static GstFlowReturn +gst_replace_render (GstBaseSink * sink, GstBuffer * buffer) { + GstReplace *replace = GST_REPLACE (sink); - return TRUE; + GST_DEBUG_OBJECT (replace, "render"); + + return GST_FLOW_OK; } +/* Render a BufferList */ static GstFlowReturn gst_replace_render_list (GstBaseSink * sink, GstBufferList * buffer_list) { + GstReplace *replace = GST_REPLACE (sink); + + GST_DEBUG_OBJECT (replace, "render_list"); return GST_FLOW_OK; } % end - - - diff --git a/tools/element-templates/basesrc b/tools/element-templates/basesrc index 1be325a22..2dcf66bc1 100644 --- a/tools/element-templates/basesrc +++ b/tools/element-templates/basesrc @@ -6,60 +6,61 @@ GST_TYPE_BASE_SRC % pads srcpad-simple % pkg-config -gstreamer-base-0.10 +gstreamer-base-1.0 % includes #include <gst/base/gstbasesrc.h> % prototypes -static GstCaps *gst_replace_get_caps (GstBaseSrc * src); -static gboolean gst_replace_set_caps (GstBaseSrc * src, GstCaps * caps); +static GstCaps *gst_replace_get_caps (GstBaseSrc * src, GstCaps * filter); static gboolean gst_replace_negotiate (GstBaseSrc * src); -static gboolean gst_replace_newsegment (GstBaseSrc * src); +static GstCaps *gst_replace_fixate (GstBaseSrc * src, GstCaps * caps); +static gboolean gst_replace_set_caps (GstBaseSrc * src, GstCaps * caps); +static gboolean gst_replace_decide_allocation (GstBaseSrc * src, + GstQuery * query); static gboolean gst_replace_start (GstBaseSrc * src); static gboolean gst_replace_stop (GstBaseSrc * src); -static void -gst_replace_get_times (GstBaseSrc * src, GstBuffer * buffer, +static void gst_replace_get_times (GstBaseSrc * src, GstBuffer * buffer, GstClockTime * start, GstClockTime * end); static gboolean gst_replace_get_size (GstBaseSrc * src, guint64 * size); static gboolean gst_replace_is_seekable (GstBaseSrc * src); -static gboolean gst_replace_unlock (GstBaseSrc * src); -static gboolean gst_replace_event (GstBaseSrc * src, GstEvent * event); -static GstFlowReturn -gst_replace_create (GstBaseSrc * src, guint64 offset, guint size, - GstBuffer ** buf); +static gboolean gst_replace_prepare_seek_segment (GstBaseSrc * src, + GstEvent * seek, GstSegment * segment); static gboolean gst_replace_do_seek (GstBaseSrc * src, GstSegment * segment); -static gboolean gst_replace_query (GstBaseSrc * src, GstQuery * query); -static gboolean gst_replace_check_get_range (GstBaseSrc * src); -static void gst_replace_fixate (GstBaseSrc * src, GstCaps * caps); +static gboolean gst_replace_unlock (GstBaseSrc * src); static gboolean gst_replace_unlock_stop (GstBaseSrc * src); -static gboolean -gst_replace_prepare_seek_segment (GstBaseSrc * src, GstEvent * seek, - GstSegment * segment); +static gboolean gst_replace_query (GstBaseSrc * src, GstQuery * query); +static gboolean gst_replace_event (GstBaseSrc * src, GstEvent * event); +static GstFlowReturn gst_replace_create (GstBaseSrc * src, guint64 offset, + guint size, GstBuffer ** buf); +static GstFlowReturn gst_replace_alloc (GstBaseSrc * src, guint64 offset, + guint size, GstBuffer ** buf); +static GstFlowReturn gst_replace_fill (GstBaseSrc * src, guint64 offset, + guint size, GstBuffer * buf); % declare-class GstBaseSrcClass *base_src_class = GST_BASE_SRC_CLASS (klass); % set-methods base_src_class->get_caps = GST_DEBUG_FUNCPTR (gst_replace_get_caps); - base_src_class->set_caps = GST_DEBUG_FUNCPTR (gst_replace_set_caps); base_src_class->negotiate = GST_DEBUG_FUNCPTR (gst_replace_negotiate); - base_src_class->newsegment = GST_DEBUG_FUNCPTR (gst_replace_newsegment); + base_src_class->fixate = GST_DEBUG_FUNCPTR (gst_replace_fixate); + base_src_class->set_caps = GST_DEBUG_FUNCPTR (gst_replace_set_caps); + base_src_class->decide_allocation = GST_DEBUG_FUNCPTR (gst_replace_decide_allocation); base_src_class->start = GST_DEBUG_FUNCPTR (gst_replace_start); base_src_class->stop = GST_DEBUG_FUNCPTR (gst_replace_stop); base_src_class->get_times = GST_DEBUG_FUNCPTR (gst_replace_get_times); base_src_class->get_size = GST_DEBUG_FUNCPTR (gst_replace_get_size); base_src_class->is_seekable = GST_DEBUG_FUNCPTR (gst_replace_is_seekable); + base_src_class->prepare_seek_segment = GST_DEBUG_FUNCPTR (gst_replace_prepare_seek_segment); + base_src_class->do_seek = GST_DEBUG_FUNCPTR (gst_replace_do_seek); base_src_class->unlock = GST_DEBUG_FUNCPTR (gst_replace_unlock); + base_src_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_replace_unlock_stop); + base_src_class->query = GST_DEBUG_FUNCPTR (gst_replace_query); base_src_class->event = GST_DEBUG_FUNCPTR (gst_replace_event); base_src_class->create = GST_DEBUG_FUNCPTR (gst_replace_create); - base_src_class->do_seek = GST_DEBUG_FUNCPTR (gst_replace_do_seek); - base_src_class->query = GST_DEBUG_FUNCPTR (gst_replace_query); - base_src_class->check_get_range = GST_DEBUG_FUNCPTR (gst_replace_check_get_range); - base_src_class->fixate = GST_DEBUG_FUNCPTR (gst_replace_fixate); - base_src_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_replace_unlock_stop); - base_src_class->prepare_seek_segment = GST_DEBUG_FUNCPTR (gst_replace_prepare_seek_segment); - + base_src_class->alloc = GST_DEBUG_FUNCPTR (gst_replace_alloc); + base_src_class->fill = GST_DEBUG_FUNCPTR (gst_replace_fill); % methods - +/* get caps from subclass */ static GstCaps * -gst_replace_get_caps (GstBaseSrc * src) +gst_replace_get_caps (GstBaseSrc * src, GstCaps * filter) { GstReplace *replace = GST_REPLACE (src); @@ -68,36 +69,51 @@ gst_replace_get_caps (GstBaseSrc * src) return NULL; } +/* decide on caps */ static gboolean -gst_replace_set_caps (GstBaseSrc * src, GstCaps * caps) +gst_replace_negotiate (GstBaseSrc * src) { GstReplace *replace = GST_REPLACE (src); - GST_DEBUG_OBJECT (replace, "set_caps"); + GST_DEBUG_OBJECT (replace, "negotiate"); return TRUE; } +/* called if, in negotiation, caps need fixating */ +static GstCaps * +gst_replace_fixate (GstBaseSrc * src, GstCaps * caps) +{ + GstReplace *replace = GST_REPLACE (src); + + GST_DEBUG_OBJECT (replace, "fixate"); + + return NULL; +} + +/* notify the subclass of new caps */ static gboolean -gst_replace_negotiate (GstBaseSrc * src) +gst_replace_set_caps (GstBaseSrc * src, GstCaps * caps) { GstReplace *replace = GST_REPLACE (src); - GST_DEBUG_OBJECT (replace, "negotiate"); + GST_DEBUG_OBJECT (replace, "set_caps"); return TRUE; } +/* setup allocation query */ static gboolean -gst_replace_newsegment (GstBaseSrc * src) +gst_replace_decide_allocation (GstBaseSrc * src, GstQuery * query) { GstReplace *replace = GST_REPLACE (src); - GST_DEBUG_OBJECT (replace, "newsegment"); + GST_DEBUG_OBJECT (replace, "decide_allocation"); return TRUE; } +/* start and stop processing, ideal for opening/closing the resource */ static gboolean gst_replace_start (GstBaseSrc * src) { @@ -118,6 +134,8 @@ gst_replace_stop (GstBaseSrc * src) return TRUE; } +/* given a buffer, return start and stop time when it should be pushed + * out. The base class will sync on the clock using these times. */ static void gst_replace_get_times (GstBaseSrc * src, GstBuffer * buffer, GstClockTime * start, GstClockTime * end) @@ -125,8 +143,10 @@ gst_replace_get_times (GstBaseSrc * src, GstBuffer * buffer, GstReplace *replace = GST_REPLACE (src); GST_DEBUG_OBJECT (replace, "get_times"); + } +/* get the total size of the resource in bytes */ static gboolean gst_replace_get_size (GstBaseSrc * src, guint64 * size) { @@ -137,6 +157,7 @@ gst_replace_get_size (GstBaseSrc * src, guint64 * size) return TRUE; } +/* check if the resource is seekable */ static gboolean gst_replace_is_seekable (GstBaseSrc * src) { @@ -144,108 +165,112 @@ gst_replace_is_seekable (GstBaseSrc * src) GST_DEBUG_OBJECT (replace, "is_seekable"); - return FALSE; + return TRUE; } +/* Prepare the segment on which to perform do_seek(), converting to the + * current basesrc format. */ static gboolean -gst_replace_unlock (GstBaseSrc * src) +gst_replace_prepare_seek_segment (GstBaseSrc * src, GstEvent * seek, + GstSegment * segment) { GstReplace *replace = GST_REPLACE (src); - GST_DEBUG_OBJECT (replace, "unlock"); + GST_DEBUG_OBJECT (replace, "prepare_seek_segment"); return TRUE; } +/* notify subclasses of a seek */ static gboolean -gst_replace_event (GstBaseSrc * src, GstEvent * event) +gst_replace_do_seek (GstBaseSrc * src, GstSegment * segment) { GstReplace *replace = GST_REPLACE (src); - gboolean ret; - - GST_DEBUG_OBJECT (replace, "event"); - switch (GST_EVENT_TYPE (event)) { - default: - ret = GST_BASE_SRC_CLASS (parent_class)->event (src, event); - } + GST_DEBUG_OBJECT (replace, "do_seek"); - return ret; + return TRUE; } -static GstFlowReturn -gst_replace_create (GstBaseSrc * src, guint64 offset, guint size, - GstBuffer ** buf) +/* unlock any pending access to the resource. subclasses should unlock + * any function ASAP. */ +static gboolean +gst_replace_unlock (GstBaseSrc * src) { GstReplace *replace = GST_REPLACE (src); - GST_DEBUG_OBJECT (replace, "create"); + GST_DEBUG_OBJECT (replace, "unlock"); - return GST_FLOW_OK; + return TRUE; } +/* Clear any pending unlock request, as we succeeded in unlocking */ static gboolean -gst_replace_do_seek (GstBaseSrc * src, GstSegment * segment) +gst_replace_unlock_stop (GstBaseSrc * src) { GstReplace *replace = GST_REPLACE (src); - GST_DEBUG_OBJECT (replace, "do_seek"); + GST_DEBUG_OBJECT (replace, "unlock_stop"); - return FALSE; + return TRUE; } +/* notify subclasses of a query */ static gboolean gst_replace_query (GstBaseSrc * src, GstQuery * query) { GstReplace *replace = GST_REPLACE (src); - gboolean ret; GST_DEBUG_OBJECT (replace, "query"); - switch (GST_QUERY_TYPE (query)) { - default: - ret = GST_BASE_SRC_CLASS (parent_class)->query (src, query); - } - - return ret; + return TRUE; } +/* notify subclasses of an event */ static gboolean -gst_replace_check_get_range (GstBaseSrc * src) +gst_replace_event (GstBaseSrc * src, GstEvent * event) { GstReplace *replace = GST_REPLACE (src); - GST_DEBUG_OBJECT (replace, "get_range"); + GST_DEBUG_OBJECT (replace, "event"); - return FALSE; + return TRUE; } -static void -gst_replace_fixate (GstBaseSrc * src, GstCaps * caps) +/* ask the subclass to create a buffer with offset and size, the default + * implementation will call alloc and fill. */ +static GstFlowReturn +gst_replace_create (GstBaseSrc * src, guint64 offset, guint size, + GstBuffer ** buf) { GstReplace *replace = GST_REPLACE (src); - GST_DEBUG_OBJECT (replace, "fixate"); + GST_DEBUG_OBJECT (replace, "create"); + + return GST_FLOW_OK; } -static gboolean -gst_replace_unlock_stop (GstBaseSrc * src) +/* ask the subclass to allocate an output buffer. The default implementation + * will use the negotiated allocator. */ +static GstFlowReturn +gst_replace_alloc (GstBaseSrc * src, guint64 offset, guint size, + GstBuffer ** buf) { GstReplace *replace = GST_REPLACE (src); - GST_DEBUG_OBJECT (replace, "stop"); + GST_DEBUG_OBJECT (replace, "alloc"); - return TRUE; + return GST_FLOW_OK; } -static gboolean -gst_replace_prepare_seek_segment (GstBaseSrc * src, GstEvent * seek, - GstSegment * segment) +/* ask the subclass to fill the buffer with data from offset and size */ +static GstFlowReturn +gst_replace_fill (GstBaseSrc * src, guint64 offset, guint size, GstBuffer * buf) { GstReplace *replace = GST_REPLACE (src); - GST_DEBUG_OBJECT (replace, "seek_segment"); + GST_DEBUG_OBJECT (replace, "fill"); - return FALSE; + return GST_FLOW_OK; } % end diff --git a/tools/element-templates/basetransform b/tools/element-templates/basetransform index 51633e56a..ed84ffd6d 100644 --- a/tools/element-templates/basetransform +++ b/tools/element-templates/basetransform @@ -4,34 +4,32 @@ GstBaseTransform % TYPE_CLASS_NAME GST_TYPE_BASE_TRANSFORM % pads -sinkpad-simple srcpad-simple +srcpad-simple +sinkpad-simple % pkg-config gstreamer-base-1.0 -% pads -sinkpad-simple srcpad-simple % includes #include <gst/base/gstbasetransform.h> % prototypes -static GstCaps *gst_replace_transform_caps (GstBaseTransform *trans, - GstPadDirection direction, GstCaps *caps, GstCaps *filter); -static GstCaps * -gst_replace_fixate_caps (GstBaseTransform * trans, +static GstCaps *gst_replace_transform_caps (GstBaseTransform * trans, + GstPadDirection direction, GstCaps * caps, GstCaps * filter); +static GstCaps *gst_replace_fixate_caps (GstBaseTransform * trans, GstPadDirection direction, GstCaps * caps, GstCaps * othercaps); -static gboolean gst_replace_accept_caps (GstBaseTransform *trans, - GstPadDirection direction, GstCaps *caps); -static gboolean gst_replace_set_caps (GstBaseTransform *trans, GstCaps *incaps, - GstCaps *outcaps); -static gboolean gst_replace_query (GstBaseTransform *trans, GstPadDirection direction, - GstQuery *query); -static gboolean gst_replace_decide_allocation (GstBaseTransform *trans, - GstQuery *query); -static gboolean gst_replace_filter_meta (GstBaseTransform *trans, GstQuery *query, - GType api, const GstStructure *params); -static gboolean gst_replace_propose_allocation (GstBaseTransform *trans, - GstQuery *decide_query, GstQuery *query); +static gboolean gst_replace_accept_caps (GstBaseTransform * trans, + GstPadDirection direction, GstCaps * caps); +static gboolean gst_replace_set_caps (GstBaseTransform * trans, + GstCaps * incaps, GstCaps * outcaps); +static gboolean gst_replace_query (GstBaseTransform * trans, + GstPadDirection direction, GstQuery * query); +static gboolean gst_replace_decide_allocation (GstBaseTransform * trans, + GstQuery * query); +static gboolean gst_replace_filter_meta (GstBaseTransform * trans, + GstQuery * query, GType api, const GstStructure * params); +static gboolean gst_replace_propose_allocation (GstBaseTransform * trans, + GstQuery * decide_query, GstQuery * query); static gboolean gst_replace_transform_size (GstBaseTransform * trans, - GstPadDirection direction, - GstCaps * caps, gsize size, GstCaps * othercaps, gsize * othersize); + GstPadDirection direction, GstCaps * caps, gsize size, GstCaps * othercaps, + gsize * othersize); static gboolean gst_replace_get_unit_size (GstBaseTransform * trans, GstCaps * caps, gsize * size); static gboolean gst_replace_start (GstBaseTransform * trans); @@ -40,19 +38,18 @@ static gboolean gst_replace_sink_event (GstBaseTransform * trans, GstEvent * event); static gboolean gst_replace_src_event (GstBaseTransform * trans, GstEvent * event); -static GstFlowReturn gst_replace_prepare_output_buffer ( - GstBaseTransform * trans, GstBuffer *input, GstBuffer **outbuf); -static gboolean gst_replace_copy_metadata (GstBaseTransform *trans, - GstBuffer *input, GstBuffer *outbuf); -static gboolean gst_replace_transform_meta (GstBaseTransform *trans, - GstBuffer *outbuf, GstMeta *meta, GstBuffer *inbuf); -static void -gst_replace_before_transform (GstBaseTransform * trans, GstBuffer * buffer); -static GstFlowReturn -gst_replace_transform (GstBaseTransform * trans, GstBuffer * inbuf, - GstBuffer * outbuf); -static GstFlowReturn -gst_replace_transform_ip (GstBaseTransform * trans, GstBuffer * buf); +static GstFlowReturn gst_replace_prepare_output_buffer (GstBaseTransform * + trans, GstBuffer * input, GstBuffer ** outbuf); +static gboolean gst_replace_copy_metadata (GstBaseTransform * trans, + GstBuffer * input, GstBuffer * outbuf); +static gboolean gst_replace_transform_meta (GstBaseTransform * trans, + GstBuffer * outbuf, GstMeta * meta, GstBuffer * inbuf); +static void gst_replace_before_transform (GstBaseTransform * trans, + GstBuffer * buffer); +static GstFlowReturn gst_replace_transform (GstBaseTransform * trans, + GstBuffer * inbuf, GstBuffer * outbuf); +static GstFlowReturn gst_replace_transform_ip (GstBaseTransform * trans, + GstBuffer * buf); % declare-class GstBaseTransformClass *base_transform_class = GST_BASE_TRANSFORM_CLASS (klass); % set-methods @@ -77,27 +74,36 @@ gst_replace_transform_ip (GstBaseTransform * trans, GstBuffer * buf); base_transform_class->transform = GST_DEBUG_FUNCPTR (gst_replace_transform); base_transform_class->transform_ip = GST_DEBUG_FUNCPTR (gst_replace_transform_ip); % methods - static GstCaps * -gst_replace_transform_caps (GstBaseTransform *trans, - GstPadDirection direction, GstCaps *caps, GstCaps *filter) +gst_replace_transform_caps (GstBaseTransform * trans, GstPadDirection direction, + GstCaps * caps, GstCaps * filter) { + GstReplace *replace = GST_REPLACE (trans); + + GST_DEBUG_OBJECT (replace, "transform_caps"); return NULL; } static GstCaps * -gst_replace_fixate_caps (GstBaseTransform * trans, - GstPadDirection direction, GstCaps * caps, GstCaps * othercaps) +gst_replace_fixate_caps (GstBaseTransform * trans, GstPadDirection direction, + GstCaps * caps, GstCaps * othercaps) { + GstReplace *replace = GST_REPLACE (trans); + + GST_DEBUG_OBJECT (replace, "fixate_caps"); return NULL; } static gboolean -gst_replace_accept_caps (GstBaseTransform *trans, - GstPadDirection direction, GstCaps *caps) +gst_replace_accept_caps (GstBaseTransform * trans, GstPadDirection direction, + GstCaps * caps) { + GstReplace *replace = GST_REPLACE (trans); + + GST_DEBUG_OBJECT (replace, "accept_caps"); + return TRUE; } @@ -105,106 +111,153 @@ static gboolean gst_replace_set_caps (GstBaseTransform * trans, GstCaps * incaps, GstCaps * outcaps) { + GstReplace *replace = GST_REPLACE (trans); + + GST_DEBUG_OBJECT (replace, "set_caps"); - return FALSE; + return TRUE; } static gboolean -gst_replace_query (GstBaseTransform *trans, GstPadDirection direction, - GstQuery *query) +gst_replace_query (GstBaseTransform * trans, GstPadDirection direction, + GstQuery * query) { + GstReplace *replace = GST_REPLACE (trans); + + GST_DEBUG_OBJECT (replace, "query"); return TRUE; } +/* decide allocation query for output buffers */ static gboolean -gst_replace_decide_allocation (GstBaseTransform *trans, GstQuery *query) +gst_replace_decide_allocation (GstBaseTransform * trans, GstQuery * query) { + GstReplace *replace = GST_REPLACE (trans); + + GST_DEBUG_OBJECT (replace, "decide_allocation"); return TRUE; } static gboolean -gst_replace_filter_meta (GstBaseTransform *trans, GstQuery *query, - GType api, const GstStructure *params) +gst_replace_filter_meta (GstBaseTransform * trans, GstQuery * query, GType api, + const GstStructure * params) { + GstReplace *replace = GST_REPLACE (trans); + + GST_DEBUG_OBJECT (replace, "filter_meta"); return TRUE; } +/* propose allocation query parameters for input buffers */ static gboolean -gst_replace_propose_allocation (GstBaseTransform *trans, - GstQuery *decide_query, GstQuery *query) +gst_replace_propose_allocation (GstBaseTransform * trans, + GstQuery * decide_query, GstQuery * query) { + GstReplace *replace = GST_REPLACE (trans); + + GST_DEBUG_OBJECT (replace, "propose_allocation"); return TRUE; } +/* transform size */ static gboolean -gst_replace_transform_size (GstBaseTransform * trans, - GstPadDirection direction, +gst_replace_transform_size (GstBaseTransform * trans, GstPadDirection direction, GstCaps * caps, gsize size, GstCaps * othercaps, gsize * othersize) { + GstReplace *replace = GST_REPLACE (trans); - return FALSE; + GST_DEBUG_OBJECT (replace, "transform_size"); + + return TRUE; } static gboolean gst_replace_get_unit_size (GstBaseTransform * trans, GstCaps * caps, gsize * size) { + GstReplace *replace = GST_REPLACE (trans); - return FALSE; + GST_DEBUG_OBJECT (replace, "get_unit_size"); + + return TRUE; } +/* states */ static gboolean gst_replace_start (GstBaseTransform * trans) { + GstReplace *replace = GST_REPLACE (trans); + + GST_DEBUG_OBJECT (replace, "start"); - return FALSE; + return TRUE; } static gboolean gst_replace_stop (GstBaseTransform * trans) { + GstReplace *replace = GST_REPLACE (trans); + + GST_DEBUG_OBJECT (replace, "stop"); - return FALSE; + return TRUE; } +/* sink and src pad event handlers */ static gboolean gst_replace_sink_event (GstBaseTransform * trans, GstEvent * event) { + GstReplace *replace = GST_REPLACE (trans); + + GST_DEBUG_OBJECT (replace, "sink_event"); - return FALSE; + return TRUE; } static gboolean gst_replace_src_event (GstBaseTransform * trans, GstEvent * event) { + GstReplace *replace = GST_REPLACE (trans); + + GST_DEBUG_OBJECT (replace, "src_event"); - return FALSE; + return TRUE; } static GstFlowReturn -gst_replace_prepare_output_buffer (GstBaseTransform * trans, - GstBuffer * input, GstBuffer ** buf) +gst_replace_prepare_output_buffer (GstBaseTransform * trans, GstBuffer * input, + GstBuffer ** outbuf) { + GstReplace *replace = GST_REPLACE (trans); + + GST_DEBUG_OBJECT (replace, "prepare_output_buffer"); - return GST_FLOW_ERROR; + return GST_FLOW_OK; } +/* metadata */ static gboolean -gst_replace_copy_metadata (GstBaseTransform *trans, - GstBuffer *input, GstBuffer *outbuf) +gst_replace_copy_metadata (GstBaseTransform * trans, GstBuffer * input, + GstBuffer * outbuf) { + GstReplace *replace = GST_REPLACE (trans); + + GST_DEBUG_OBJECT (replace, "copy_metadata"); return TRUE; } static gboolean -gst_replace_transform_meta (GstBaseTransform *trans, - GstBuffer *outbuf, GstMeta *meta, GstBuffer *inbuf) +gst_replace_transform_meta (GstBaseTransform * trans, GstBuffer * outbuf, + GstMeta * meta, GstBuffer * inbuf) { + GstReplace *replace = GST_REPLACE (trans); + + GST_DEBUG_OBJECT (replace, "transform_meta"); return TRUE; } @@ -212,22 +265,31 @@ gst_replace_transform_meta (GstBaseTransform *trans, static void gst_replace_before_transform (GstBaseTransform * trans, GstBuffer * buffer) { + GstReplace *replace = GST_REPLACE (trans); + + GST_DEBUG_OBJECT (replace, "before_transform"); } +/* transform */ static GstFlowReturn gst_replace_transform (GstBaseTransform * trans, GstBuffer * inbuf, GstBuffer * outbuf) { + GstReplace *replace = GST_REPLACE (trans); + + GST_DEBUG_OBJECT (replace, "transform"); - return GST_FLOW_ERROR; + return GST_FLOW_OK; } static GstFlowReturn gst_replace_transform_ip (GstBaseTransform * trans, GstBuffer * buf) { + GstReplace *replace = GST_REPLACE (trans); - return GST_FLOW_ERROR; -} + GST_DEBUG_OBJECT (replace, "transform_ip"); + return GST_FLOW_OK; +} % end diff --git a/tools/element-templates/cddabasesrc b/tools/element-templates/cddabasesrc deleted file mode 100644 index 7de6bcf4a..000000000 --- a/tools/element-templates/cddabasesrc +++ /dev/null @@ -1,62 +0,0 @@ -/* vim: set filetype=c: */ -% ClassName -GstCddaBaseSrc -% TYPE_CLASS_NAME -GST_TYPE_CDDA_BASE_SRC -% pads -srcpad-simple -% pkg-config -gstreamer-cdda-0.10 -% includes -#include <gst/cdda/gstcddabasesrc.h> -% prototypes -static gboolean gst_replace_open (GstCddaBaseSrc * src, const gchar * device); -static void gst_replace_close (GstCddaBaseSrc * src); -static GstBuffer *gst_replace_read_sector (GstCddaBaseSrc * src, gint sector); -static gchar *gst_replace_get_default_device (GstCddaBaseSrc * src); -static gchar **gst_replace_probe_devices (GstCddaBaseSrc * src); -% declare-class - GstCddaBaseSrcClass *cddabase_src_class = GST_CDDA_BASE_SRC_CLASS (klass); -% set-methods - cddabase_src_class->open = GST_DEBUG_FUNCPTR (gst_replace_open); - cddabase_src_class->close = GST_DEBUG_FUNCPTR (gst_replace_close); - cddabase_src_class->read_sector = GST_DEBUG_FUNCPTR (gst_replace_read_sector); - cddabase_src_class->get_default_device = GST_DEBUG_FUNCPTR (gst_replace_get_default_device); - cddabase_src_class->probe_devices = GST_DEBUG_FUNCPTR (gst_replace_probe_devices); -% methods - - -static gboolean -gst_replace_open (GstCddaBaseSrc * src, const gchar * device) -{ - - return FALSE; -} - -static void -gst_replace_close (GstCddaBaseSrc * src) -{ - -} - -static GstBuffer * -gst_replace_read_sector (GstCddaBaseSrc * src, gint sector) -{ - - return NULL; -} - -static gchar * -gst_replace_get_default_device (GstCddaBaseSrc * src) -{ - - return NULL; -} - -static gchar ** -gst_replace_probe_devices (GstCddaBaseSrc * src) -{ - - return NULL; -} -% end diff --git a/tools/element-templates/element b/tools/element-templates/element index 38ab6e4da..dd2af0f49 100644 --- a/tools/element-templates/element +++ b/tools/element-templates/element @@ -6,7 +6,7 @@ GST_TYPE_ELEMENT % pads sinkpad srcpad % pkg-config -gstreamer-0.10 +gstreamer-1.0 % includes #include <gst/gst.h> % prototypes diff --git a/tools/element-templates/gobject b/tools/element-templates/gobject index 1522aa47b..5a3fd8d34 100644 --- a/tools/element-templates/gobject +++ b/tools/element-templates/gobject @@ -26,7 +26,9 @@ void gst_replace_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) { - /* GstReplace *replace = GST_REPLACE (object); */ + GstReplace *replace = GST_REPLACE (object); + + GST_DEBUG_OBJECT (replace, "set_property"); switch (property_id) { default: @@ -39,7 +41,9 @@ void gst_replace_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) { - /* GstReplace *replace = GST_REPLACE (object); */ + GstReplace *replace = GST_REPLACE (object); + + GST_DEBUG_OBJECT (replace, "get_property"); switch (property_id) { default: @@ -51,7 +55,9 @@ gst_replace_get_property (GObject * object, guint property_id, void gst_replace_dispose (GObject * object) { - /* GstReplace *replace = GST_REPLACE (object); */ + GstReplace *replace = GST_REPLACE (object); + + GST_DEBUG_OBJECT (replace, "dispose"); /* clean up as possible. may be called multiple times */ @@ -61,7 +67,9 @@ gst_replace_dispose (GObject * object) void gst_replace_finalize (GObject * object) { - /* GstReplace *replace = GST_REPLACE (object); */ + GstReplace *replace = GST_REPLACE (object); + + GST_DEBUG_OBJECT (replace, "finalize"); /* clean up object here */ diff --git a/tools/element-templates/pushsrc b/tools/element-templates/pushsrc deleted file mode 100644 index 56cc7a6bf..000000000 --- a/tools/element-templates/pushsrc +++ /dev/null @@ -1,235 +0,0 @@ -/* vim: set filetype=c: */ -% ClassName -GstPushSrc -% TYPE_CLASS_NAME -GST_TYPE_PUSH_SRC -% pads -srcpad-simple -% pkg-config -gstreamer-base-0.10 -% includes -#include <gst/base/gstpushsrc.h> -% prototypes -static GstCaps *gst_replace_get_caps (GstBaseSrc * src); -static gboolean gst_replace_set_caps (GstBaseSrc * src, GstCaps * caps); -static gboolean gst_replace_negotiate (GstBaseSrc * src); -static gboolean gst_replace_newsegment (GstBaseSrc * src); -static gboolean gst_replace_start (GstBaseSrc * src); -static gboolean gst_replace_stop (GstBaseSrc * src); -static void -gst_replace_get_times (GstBaseSrc * src, GstBuffer * buffer, - GstClockTime * start, GstClockTime * end); -static gboolean gst_replace_get_size (GstBaseSrc * src, guint64 * size); -static gboolean gst_replace_is_seekable (GstBaseSrc * src); -static gboolean gst_replace_unlock (GstBaseSrc * src); -static gboolean gst_replace_event (GstBaseSrc * src, GstEvent * event); -static gboolean gst_replace_do_seek (GstBaseSrc * src, GstSegment * segment); -static gboolean gst_replace_query (GstBaseSrc * src, GstQuery * query); -static gboolean gst_replace_check_get_range (GstBaseSrc * src); -static void gst_replace_fixate (GstBaseSrc * src, GstCaps * caps); -static gboolean gst_replace_unlock_stop (GstBaseSrc * src); -static gboolean -gst_replace_prepare_seek_segment (GstBaseSrc * src, GstEvent * seek, - GstSegment * segment); -static GstFlowReturn gst_replace_create (GstPushSrc * src, GstBuffer ** buf); -% declare-class - GstBaseSrcClass *base_src_class = GST_BASE_SRC_CLASS (klass); - GstPushSrcClass *push_src_class = GST_PUSH_SRC_CLASS (klass); -% set-methods - base_src_class->get_caps = GST_DEBUG_FUNCPTR (gst_replace_get_caps); - base_src_class->set_caps = GST_DEBUG_FUNCPTR (gst_replace_set_caps); - base_src_class->negotiate = GST_DEBUG_FUNCPTR (gst_replace_negotiate); - base_src_class->newsegment = GST_DEBUG_FUNCPTR (gst_replace_newsegment); - base_src_class->start = GST_DEBUG_FUNCPTR (gst_replace_start); - base_src_class->stop = GST_DEBUG_FUNCPTR (gst_replace_stop); - base_src_class->get_times = GST_DEBUG_FUNCPTR (gst_replace_get_times); - base_src_class->get_size = GST_DEBUG_FUNCPTR (gst_replace_get_size); - base_src_class->is_seekable = GST_DEBUG_FUNCPTR (gst_replace_is_seekable); - base_src_class->unlock = GST_DEBUG_FUNCPTR (gst_replace_unlock); - base_src_class->event = GST_DEBUG_FUNCPTR (gst_replace_event); - base_src_class->do_seek = GST_DEBUG_FUNCPTR (gst_replace_do_seek); - base_src_class->query = GST_DEBUG_FUNCPTR (gst_replace_query); - base_src_class->check_get_range = GST_DEBUG_FUNCPTR (gst_replace_check_get_range); - base_src_class->fixate = GST_DEBUG_FUNCPTR (gst_replace_fixate); - base_src_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_replace_unlock_stop); - base_src_class->prepare_seek_segment = GST_DEBUG_FUNCPTR (gst_replace_prepare_seek_segment); - - push_src_class->create = GST_DEBUG_FUNCPTR (gst_replace_create); -% methods - -static GstCaps * -gst_replace_get_caps (GstBaseSrc * src) -{ - GstReplace *replace = GST_REPLACE (src); - - GST_DEBUG_OBJECT (replace, "get_caps"); - - return NULL; -} - -static gboolean -gst_replace_set_caps (GstBaseSrc * src, GstCaps * caps) -{ - GstReplace *replace = GST_REPLACE (src); - - GST_DEBUG_OBJECT (replace, "set_caps"); - - return TRUE; -} - -static gboolean -gst_replace_negotiate (GstBaseSrc * src) -{ - GstReplace *replace = GST_REPLACE (src); - - GST_DEBUG_OBJECT (replace, "negotiate"); - - return TRUE; -} - -static gboolean -gst_replace_newsegment (GstBaseSrc * src) -{ - GstReplace *replace = GST_REPLACE (src); - - GST_DEBUG_OBJECT (replace, "newsegment"); - - return TRUE; -} - -static gboolean -gst_replace_start (GstBaseSrc * src) -{ - GstReplace *replace = GST_REPLACE (src); - - GST_DEBUG_OBJECT (replace, "start"); - - return TRUE; -} - -static gboolean -gst_replace_stop (GstBaseSrc * src) -{ - GstReplace *replace = GST_REPLACE (src); - - GST_DEBUG_OBJECT (replace, "stop"); - - return TRUE; -} - -static void -gst_replace_get_times (GstBaseSrc * src, GstBuffer * buffer, - GstClockTime * start, GstClockTime * end) -{ - GstReplace *replace = GST_REPLACE (src); - - GST_DEBUG_OBJECT (replace, "get_times"); -} - -static gboolean -gst_replace_get_size (GstBaseSrc * src, guint64 * size) -{ - GstReplace *replace = GST_REPLACE (src); - - GST_DEBUG_OBJECT (replace, "get_size"); - - return TRUE; -} - -static gboolean -gst_replace_is_seekable (GstBaseSrc * src) -{ - GstReplace *replace = GST_REPLACE (src); - - GST_DEBUG_OBJECT (replace, "is_seekable"); - - return FALSE; -} - -static gboolean -gst_replace_unlock (GstBaseSrc * src) -{ - GstReplace *replace = GST_REPLACE (src); - - GST_DEBUG_OBJECT (replace, "unlock"); - - return TRUE; -} - -static gboolean -gst_replace_event (GstBaseSrc * src, GstEvent * event) -{ - GstReplace *replace = GST_REPLACE (src); - - GST_DEBUG_OBJECT (replace, "event"); - - return TRUE; -} - -static gboolean -gst_replace_do_seek (GstBaseSrc * src, GstSegment * segment) -{ - GstReplace *replace = GST_REPLACE (src); - - GST_DEBUG_OBJECT (replace, "do_seek"); - - return FALSE; -} - -static gboolean -gst_replace_query (GstBaseSrc * src, GstQuery * query) -{ - GstReplace *replace = GST_REPLACE (src); - - GST_DEBUG_OBJECT (replace, "query"); - - return TRUE; -} - -static gboolean -gst_replace_check_get_range (GstBaseSrc * src) -{ - GstReplace *replace = GST_REPLACE (src); - - GST_DEBUG_OBJECT (replace, "get_range"); - - return FALSE; -} - -static void -gst_replace_fixate (GstBaseSrc * src, GstCaps * caps) -{ - GstReplace *replace = GST_REPLACE (src); - - GST_DEBUG_OBJECT (replace, "fixate"); -} - -static gboolean -gst_replace_unlock_stop (GstBaseSrc * src) -{ - GstReplace *replace = GST_REPLACE (src); - - GST_DEBUG_OBJECT (replace, "stop"); - - return TRUE; -} - -static gboolean -gst_replace_prepare_seek_segment (GstBaseSrc * src, GstEvent * seek, - GstSegment * segment) -{ - GstReplace *replace = GST_REPLACE (src); - - GST_DEBUG_OBJECT (replace, "seek_segment"); - - return FALSE; -} - -static GstFlowReturn -gst_replace_create (GstPushSrc * src, GstBuffer ** buf) -{ - - return GST_FLOW_OK; -} -% end - diff --git a/tools/element-templates/sinkpad-audio b/tools/element-templates/sinkpad-audio new file mode 100644 index 000000000..38fe1e6ec --- /dev/null +++ b/tools/element-templates/sinkpad-audio @@ -0,0 +1,26 @@ +/* vim: set filetype=c: */ + +% instance-members + GstPad *sinkpad; +% prototypes +% pad-template +/* FIXME add/remove the formats that you want to support */ +static GstStaticPadTemplate gst_replace_sink_template = +GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("audio/x-raw,format=S16LE,rate=[1,max]," + "channels=[1,max],layout=interleaved") + ); + +% base-init + gst_element_class_add_pad_template (GST_ELEMENT_CLASS(klass), + 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 + diff --git a/tools/element-templates/srcpad-audio b/tools/element-templates/srcpad-audio new file mode 100644 index 000000000..da0207fd5 --- /dev/null +++ b/tools/element-templates/srcpad-audio @@ -0,0 +1,26 @@ +/* vim: set filetype=c: */ + +% instance-members + GstPad *srcpad; +% prototypes +% pad-template +/* FIXME add/remove the formats that you want to support */ +static GstStaticPadTemplate gst_replace_src_template = +GST_STATIC_PAD_TEMPLATE ("src", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("audio/x-raw,format=S16LE,rate=[1,max]," + "channels=[1,max],layout=interleaved") + ); + +% base-init + gst_element_class_add_pad_template (GST_ELEMENT_CLASS(klass), + 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 + diff --git a/tools/element-templates/tagdemux b/tools/element-templates/tagdemux deleted file mode 100644 index ecfd1fe4d..000000000 --- a/tools/element-templates/tagdemux +++ /dev/null @@ -1,55 +0,0 @@ -/* vim: set filetype=c: */ -% ClassName -GstTagDemux -% TYPE_CLASS_NAME -GST_TYPE_TAG_DEMUX -% pads -sinkpad-simple srcpad-simple -% pkg-config -gstreamer-tag-0.10 -% includes -#include <gst/tag/gsttagdemux.h> -% prototypes -static gboolean -gst_replace_identify_tag (GstTagDemux * demux, - GstBuffer * buffer, gboolean start_tag, guint * tag_size); -static GstTagDemuxResult -gst_replace_parse_tag (GstTagDemux * demux, - GstBuffer * buffer, - gboolean start_tag, guint * tag_size, GstTagList ** tags); -static GstTagList *gst_replace_merge_tags (GstTagDemux * demux, - const GstTagList * start_tags, const GstTagList * end_tags); -% declare-class - GstTagDemuxClass *tagdemux_class = GST_TAG_DEMUX_CLASS (klass); -% set-methods - tagdemux_class->identify_tag = GST_DEBUG_FUNCPTR (gst_replace_identify_tag); - tagdemux_class->parse_tag = GST_DEBUG_FUNCPTR (gst_replace_parse_tag); - tagdemux_class->merge_tags = GST_DEBUG_FUNCPTR (gst_replace_merge_tags); -% methods - - -static gboolean -gst_replace_identify_tag (GstTagDemux * demux, - GstBuffer * buffer, gboolean start_tag, guint * tag_size) -{ - - return FALSE; -} - -static GstTagDemuxResult -gst_replace_parse_tag (GstTagDemux * demux, - GstBuffer * buffer, - gboolean start_tag, guint * tag_size, GstTagList ** tags) -{ - - return GST_TAG_DEMUX_RESULT_BROKEN_TAG; -} - -static GstTagList * -gst_replace_merge_tags (GstTagDemux * demux, - const GstTagList * start_tags, const GstTagList * end_tags) -{ - - return NULL; -} -% end diff --git a/tools/element-templates/videodecoder b/tools/element-templates/videodecoder new file mode 100644 index 000000000..3e03a1892 --- /dev/null +++ b/tools/element-templates/videodecoder @@ -0,0 +1,194 @@ +/* vim: set filetype=c: */ +% ClassName +GstVideoDecoder +% TYPE_CLASS_NAME +GST_TYPE_VIDEO_DECODER +% pads +sinkpad-simple +srcpad-template-video +% pkg-config +gstreamer-video-1.0 +% includes +#include <gst/video/video.h> +#include <gst/video/gstvideodecoder.h> +% prototypes +static gboolean gst_replace_open (GstVideoDecoder * decoder); +static gboolean gst_replace_close (GstVideoDecoder * decoder); +static gboolean gst_replace_start (GstVideoDecoder * decoder); +static gboolean gst_replace_stop (GstVideoDecoder * decoder); +static GstFlowReturn gst_replace_parse (GstVideoDecoder * decoder, + GstVideoCodecFrame * frame, GstAdapter * adapter, gboolean at_eos); +static gboolean gst_replace_set_format (GstVideoDecoder * decoder, + GstVideoCodecState * state); +static gboolean gst_replace_reset (GstVideoDecoder * decoder, gboolean hard); +static GstFlowReturn gst_replace_finish (GstVideoDecoder * decoder); +static GstFlowReturn gst_replace_handle_frame (GstVideoDecoder * decoder, + GstVideoCodecFrame * frame); +static gboolean gst_replace_sink_event (GstVideoDecoder * decoder, + GstEvent * event); +static gboolean gst_replace_src_event (GstVideoDecoder * decoder, + GstEvent * event); +static gboolean gst_replace_negotiate (GstVideoDecoder * decoder); +static gboolean gst_replace_decide_allocation (GstVideoDecoder * decoder, + GstQuery * query); +static gboolean gst_replace_propose_allocation (GstVideoDecoder * decoder, + GstQuery * query); +% declare-class + GstVideoDecoderClass *video_decoder_class = GST_VIDEO_DECODER_CLASS (klass); +% set-methods + video_decoder_class->open = GST_DEBUG_FUNCPTR (gst_replace_open); + video_decoder_class->close = GST_DEBUG_FUNCPTR (gst_replace_close); + video_decoder_class->start = GST_DEBUG_FUNCPTR (gst_replace_start); + video_decoder_class->stop = GST_DEBUG_FUNCPTR (gst_replace_stop); + video_decoder_class->parse = GST_DEBUG_FUNCPTR (gst_replace_parse); + video_decoder_class->set_format = GST_DEBUG_FUNCPTR (gst_replace_set_format); + video_decoder_class->reset = GST_DEBUG_FUNCPTR (gst_replace_reset); + video_decoder_class->finish = GST_DEBUG_FUNCPTR (gst_replace_finish); + video_decoder_class->handle_frame = GST_DEBUG_FUNCPTR (gst_replace_handle_frame); + video_decoder_class->sink_event = GST_DEBUG_FUNCPTR (gst_replace_sink_event); + video_decoder_class->src_event = GST_DEBUG_FUNCPTR (gst_replace_src_event); + video_decoder_class->negotiate = GST_DEBUG_FUNCPTR (gst_replace_negotiate); + video_decoder_class->decide_allocation = GST_DEBUG_FUNCPTR (gst_replace_decide_allocation); + video_decoder_class->propose_allocation = GST_DEBUG_FUNCPTR (gst_replace_propose_allocation); +% methods +static gboolean +gst_replace_open (GstVideoDecoder * decoder) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "open"); + + return TRUE; +} + +static gboolean +gst_replace_close (GstVideoDecoder * decoder) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "close"); + + return TRUE; +} + +static gboolean +gst_replace_start (GstVideoDecoder * decoder) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "start"); + + return TRUE; +} + +static gboolean +gst_replace_stop (GstVideoDecoder * decoder) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "stop"); + + return TRUE; +} + +static GstFlowReturn +gst_replace_parse (GstVideoDecoder * decoder, GstVideoCodecFrame * frame, + GstAdapter * adapter, gboolean at_eos) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "parse"); + + return GST_FLOW_OK; +} + +static gboolean +gst_replace_set_format (GstVideoDecoder * decoder, GstVideoCodecState * state) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "set_format"); + + return TRUE; +} + +static gboolean +gst_replace_reset (GstVideoDecoder * decoder, gboolean hard) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "reset"); + + return TRUE; +} + +static GstFlowReturn +gst_replace_finish (GstVideoDecoder * decoder) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "finish"); + + return GST_FLOW_OK; +} + +static GstFlowReturn +gst_replace_handle_frame (GstVideoDecoder * decoder, GstVideoCodecFrame * frame) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "handle_frame"); + + return GST_FLOW_OK; +} + +static gboolean +gst_replace_sink_event (GstVideoDecoder * decoder, GstEvent * event) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "sink_event"); + + return TRUE; +} + +static gboolean +gst_replace_src_event (GstVideoDecoder * decoder, GstEvent * event) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "src_event"); + + return TRUE; +} + +static gboolean +gst_replace_negotiate (GstVideoDecoder * decoder) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "negotiate"); + + return TRUE; +} + +static gboolean +gst_replace_decide_allocation (GstVideoDecoder * decoder, GstQuery * query) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "decide_allocation"); + + return TRUE; +} + +static gboolean +gst_replace_propose_allocation (GstVideoDecoder * decoder, GstQuery * query) +{ + GstReplace *replace = GST_REPLACE (decoder); + + GST_DEBUG_OBJECT (replace, "propose_allocation"); + + return TRUE; +} +% end diff --git a/tools/element-templates/videoencoder b/tools/element-templates/videoencoder new file mode 100644 index 000000000..c5a077f9a --- /dev/null +++ b/tools/element-templates/videoencoder @@ -0,0 +1,184 @@ +/* vim: set filetype=c: */ +% ClassName +GstVideoEncoder +% TYPE_CLASS_NAME +GST_TYPE_VIDEO_ENCODER +% pads +srcpad-template-video +sinkpad-simple +% pkg-config +gstreamer-video-1.0 +% includes +#include <gst/video/video.h> +#include <gst/video/gstvideoencoder.h> +% prototypes +static gboolean gst_replace_open (GstVideoEncoder *encoder); +static gboolean gst_replace_close (GstVideoEncoder *encoder); +static gboolean gst_replace_start (GstVideoEncoder *encoder); +static gboolean gst_replace_stop (GstVideoEncoder *encoder); +static gboolean gst_replace_set_format (GstVideoEncoder *encoder, GstVideoCodecState *state); +static GstFlowReturn gst_replace_handle_frame (GstVideoEncoder *encoder, GstVideoCodecFrame *frame); +static gboolean gst_replace_reset (GstVideoEncoder *encoder, gboolean hard); +static GstFlowReturn gst_replace_finish (GstVideoEncoder *encoder); +static GstFlowReturn gst_replace_pre_push (GstVideoEncoder *encoder, GstVideoCodecFrame *frame); +static GstCaps * gst_replace_getcaps (GstVideoEncoder *encoder, GstCaps *filter); +static gboolean gst_replace_sink_event (GstVideoEncoder *encoder, GstEvent *event); +static gboolean gst_replace_src_event (GstVideoEncoder *encoder, GstEvent *event); +static gboolean gst_replace_negotiate (GstVideoEncoder *encoder); +static gboolean gst_replace_decide_allocation (GstVideoEncoder *encoder, GstQuery *query); +static gboolean gst_replace_propose_allocation (GstVideoEncoder * encoder, GstQuery * query); +% declare-class + GstVideoEncoderClass *video_encoder_class = GST_VIDEO_ENCODER_CLASS (klass); +% set-methods + video_encoder_class->open = GST_DEBUG_FUNCPTR (gst_replace_open); + video_encoder_class->close = GST_DEBUG_FUNCPTR (gst_replace_close); + video_encoder_class->start = GST_DEBUG_FUNCPTR (gst_replace_start); + video_encoder_class->stop = GST_DEBUG_FUNCPTR (gst_replace_stop); + video_encoder_class->set_format = GST_DEBUG_FUNCPTR (gst_replace_set_format); + video_encoder_class->handle_frame = GST_DEBUG_FUNCPTR (gst_replace_handle_frame); + video_encoder_class->reset = GST_DEBUG_FUNCPTR (gst_replace_reset); + video_encoder_class->finish = GST_DEBUG_FUNCPTR (gst_replace_finish); + video_encoder_class->pre_push = GST_DEBUG_FUNCPTR (gst_replace_pre_push); + video_encoder_class->getcaps = GST_DEBUG_FUNCPTR (gst_replace_getcaps); + video_encoder_class->sink_event = GST_DEBUG_FUNCPTR (gst_replace_sink_event); + video_encoder_class->src_event = GST_DEBUG_FUNCPTR (gst_replace_src_event); + video_encoder_class->negotiate = GST_DEBUG_FUNCPTR (gst_replace_negotiate); + video_encoder_class->decide_allocation = GST_DEBUG_FUNCPTR (gst_replace_decide_allocation); + video_encoder_class->propose_allocation = GST_DEBUG_FUNCPTR (gst_replace_propose_allocation); +% methods +static gboolean gst_replace_open (GstVideoEncoder *encoder) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT(replace, "open"); + + return TRUE; +} + +static gboolean gst_replace_close (GstVideoEncoder *encoder) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT(replace, "close"); + + return TRUE; +} + +static gboolean gst_replace_start (GstVideoEncoder *encoder) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT(replace, "start"); + + return TRUE; +} + +static gboolean gst_replace_stop (GstVideoEncoder *encoder) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT(replace, "stop"); + + return TRUE; +} + +static gboolean gst_replace_set_format (GstVideoEncoder *encoder, GstVideoCodecState *state) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT(replace, "set_format"); + + return TRUE; +} + +static GstFlowReturn gst_replace_handle_frame (GstVideoEncoder *encoder, GstVideoCodecFrame *frame) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT(replace, "handle_frame"); + + return TRUE; +} + +static gboolean gst_replace_reset (GstVideoEncoder *encoder, gboolean hard) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT(replace, "reset"); + + return TRUE; +} + +static GstFlowReturn gst_replace_finish (GstVideoEncoder *encoder) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT(replace, "finish"); + + return GST_FLOW_OK; +} + +static GstFlowReturn gst_replace_pre_push (GstVideoEncoder *encoder, GstVideoCodecFrame *frame) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT(replace, "pre_push"); + + return GST_FLOW_OK; +} + +static GstCaps * gst_replace_getcaps (GstVideoEncoder *encoder, GstCaps *filter) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT(replace, "getcaps"); + + return NULL; +} + +static gboolean gst_replace_sink_event (GstVideoEncoder *encoder, GstEvent *event) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT(replace, "sink_event"); + + return TRUE; +} + +static gboolean gst_replace_src_event (GstVideoEncoder *encoder, GstEvent *event) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT(replace, "src_event"); + + return TRUE; +} + +static gboolean gst_replace_negotiate (GstVideoEncoder *encoder) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT(replace, "negotiate"); + + return TRUE; +} + +static gboolean gst_replace_decide_allocation (GstVideoEncoder *encoder, GstQuery *query) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT(replace, "decide_allocation"); + + return TRUE; +} + +static gboolean gst_replace_propose_allocation (GstVideoEncoder * encoder, GstQuery * query) +{ + GstReplace *replace = GST_REPLACE (encoder); + + GST_DEBUG_OBJECT(replace, "propose_allocation"); + + return TRUE; +} + +% end diff --git a/tools/element-templates/videofilter b/tools/element-templates/videofilter index 3a94b0838..9b07557dd 100644 --- a/tools/element-templates/videofilter +++ b/tools/element-templates/videofilter @@ -4,75 +4,57 @@ GstVideoFilter % TYPE_CLASS_NAME GST_TYPE_VIDEO_FILTER % pads -sinkpad-template-video srcpad-template-video +srcpad-template-video +sinkpad-template-video % pkg-config -gstreamer-video-0.10 +gstreamer-video-1.0 % includes #include <gst/video/video.h> #include <gst/video/gstvideofilter.h> % prototypes -static gboolean -gst_replace_start (GstBaseTransform * trans); -static gboolean -gst_replace_stop (GstBaseTransform * trans); -static GstFlowReturn -gst_replace_transform_ip (GstBaseTransform * trans, GstBuffer * buf); -static gboolean -gst_replace_set_caps (GstBaseTransform * trans, GstCaps * incaps, - GstCaps * outcaps); +static gboolean gst_replace_set_info (GstVideoFilter * filter, GstCaps * incaps, + GstVideoInfo * in_info, GstCaps * outcaps, GstVideoInfo * out_info); +static GstFlowReturn gst_replace_transform_frame (GstVideoFilter * filter, + GstVideoFrame * inframe, GstVideoFrame * outframe); +static GstFlowReturn gst_replace_transform_frame_ip (GstVideoFilter * filter, + GstVideoFrame * frame); % declare-class - GstBaseTransformClass *base_transform_class = GST_BASE_TRANSFORM_CLASS (klass); + GstVideoFilterClass *video_filter_class = GST_VIDEO_FILTER_CLASS (klass); % set-methods - base_transform_class->start = GST_DEBUG_FUNCPTR (gst_replace_start); - base_transform_class->stop = GST_DEBUG_FUNCPTR (gst_replace_stop); - base_transform_class->set_caps = GST_DEBUG_FUNCPTR (gst_replace_set_caps); - base_transform_class->transform_ip = GST_DEBUG_FUNCPTR (gst_replace_transform_ip); + video_filter_class->set_info = GST_DEBUG_FUNCPTR (gst_replace_set_info); + video_filter_class->transform_frame = GST_DEBUG_FUNCPTR (gst_replace_transform_frame); + video_filter_class->transform_frame_ip = GST_DEBUG_FUNCPTR (gst_replace_transform_frame_ip); % methods - static gboolean -gst_replace_start (GstBaseTransform * trans) +gst_replace_set_info (GstVideoFilter * filter, GstCaps * incaps, + GstVideoInfo * in_info, GstCaps * outcaps, GstVideoInfo * out_info) { - /* GstReplace *replace = GST_REPLACE (trans); */ - - /* initialize processing */ - return TRUE; -} + GstReplace *replace = GST_REPLACE (filter); -static gboolean -gst_replace_stop (GstBaseTransform * trans) -{ - /* GstReplace *replace = GST_REPLACE (trans); */ + GST_DEBUG_OBJECT (replace, "set_info"); - /* finalize processing */ return TRUE; } -static gboolean -gst_replace_set_caps (GstBaseTransform * trans, GstCaps * incaps, - GstCaps * outcaps) +/* transform */ +static GstFlowReturn +gst_replace_transform_frame (GstVideoFilter * filter, GstVideoFrame * inframe, + GstVideoFrame * outframe) { - /* GstReplace *replace = GST_REPLACE (trans); */ - GstVideoFormat video_format; - int w, h; + GstReplace *replace = GST_REPLACE (filter); - /* parse input caps, output caps are the same so we ignore them */ - if (!gst_video_format_parse_caps (incaps, &video_format, &w, &h)) - return FALSE; + GST_DEBUG_OBJECT (replace, "transform_frame"); - /* You'll need to add those fields to the instance struct first */ - /* replace->video_format = video_format; */ - /* replace->width = w; */ - /* replace->height = h; */ - return TRUE; + return GST_FLOW_OK; } static GstFlowReturn -gst_replace_transform_ip (GstBaseTransform * trans, GstBuffer * buf) +gst_replace_transform_frame_ip (GstVideoFilter * filter, GstVideoFrame * frame) { - /* GstReplace *replace = GST_REPLACE (trans); */ + GstReplace *replace = GST_REPLACE (filter); + + GST_DEBUG_OBJECT (replace, "transform_frame_ip"); - /* process the video data in the buffer in-place */ return GST_FLOW_OK; } - % end diff --git a/tools/element-templates/videofilter2 b/tools/element-templates/videofilter2 deleted file mode 100644 index faa32a6b6..000000000 --- a/tools/element-templates/videofilter2 +++ /dev/null @@ -1,67 +0,0 @@ -/* vim: set filetype=c: */ -% ClassName -GstVideoFilter2 -% TYPE_CLASS_NAME -GST_TYPE_VIDEO_FILTER2 -% pads -% pkg-config -gstreamer-base-0.10 -% pads -% includes -#include <gst/base/gstbasetransform.h> -#include <gst/video/video.h> -#include "../gst/videofilters/gstvideofilter2.h" -% prototypes -static gboolean gst_replace_start (GstBaseTransform * trans); -static gboolean gst_replace_stop (GstBaseTransform * trans); -static GstFlowReturn -gst_replace_prefilter (GstVideoFilter2 *videofilter2, GstBuffer * buf); - -static GstVideoFilter2Functions gst_replace_filter_functions[]; -% declare-class - GstBaseTransformClass *base_transform_class = GST_BASE_TRANSFORM_CLASS (klass); - GstVideoFilter2Class *video_filter2_class = GST_VIDEO_FILTER2_CLASS (klass); -% set-methods - base_transform_class->start = GST_DEBUG_FUNCPTR (gst_replace_start); - base_transform_class->stop = GST_DEBUG_FUNCPTR (gst_replace_stop); - video_filter2_class->prefilter = GST_DEBUG_FUNCPTR (gst_replace_prefilter); - - gst_video_filter2_class_add_functions (video_filter2_class, - gst_replace_filter_functions); -% methods - -static gboolean -gst_replace_start (GstBaseTransform * trans) -{ - - return TRUE; -} - -static gboolean -gst_replace_stop (GstBaseTransform * trans) -{ - - return TRUE; -} - -static GstFlowReturn -gst_replace_prefilter (GstVideoFilter2 *video_filter2, GstBuffer * buf) -{ - - return GST_FLOW_OK; -} - -static GstFlowReturn -gst_replace_filter_ip_I420 (GstVideoFilter2 * videofilter2, - GstBuffer * buf, int start, int end) -{ - return GST_FLOW_OK; -} - -static GstVideoFilter2Functions gst_replace_filter_functions[] = { - {GST_VIDEO_FORMAT_I420, NULL, gst_replace_filter_ip_I420}, - {GST_VIDEO_FORMAT_UNKNOWN} -}; - - -% end diff --git a/tools/element-templates/videosink b/tools/element-templates/videosink index d26de559b..d73ca0faf 100644 --- a/tools/element-templates/videosink +++ b/tools/element-templates/videosink @@ -4,29 +4,27 @@ GstVideoSink % TYPE_CLASS_NAME GST_TYPE_VIDEO_SINK % pads -sinkpad-simple +sinkpad-template-video % pkg-config -gstreamer-video-0.10 +gstreamer-video-1.0 % includes +#include <gst/video/video.h> #include <gst/video/gstvideosink.h> % prototypes - -static GstFlowReturn -gst_replace_show_frame (GstVideoSink * video_sink, GstBuffer * buf); - - +static GstFlowReturn gst_replace_show_frame (GstVideoSink * video_sink, + GstBuffer * buf); % declare-class GstVideoSinkClass *video_sink_class = GST_VIDEO_SINK_CLASS (klass); % set-methods video_sink_class->show_frame = GST_DEBUG_FUNCPTR (gst_replace_show_frame); % methods - static GstFlowReturn -gst_replace_show_frame (GstVideoSink * video_sink, GstBuffer * buf) +gst_replace_show_frame (GstVideoSink * sink, GstBuffer * buf) { + GstReplace *replace = GST_REPLACE (sink); + + GST_DEBUG_OBJECT (replace, "show_frame"); return GST_FLOW_OK; } - % end - diff --git a/tools/gst-element-maker b/tools/gst-element-maker index 4a09c9fc8..18788f69e 100755 --- a/tools/gst-element-maker +++ b/tools/gst-element-maker @@ -233,10 +233,16 @@ static gboolean plugin_init (GstPlugin * plugin) { + /* FIXME Remember to set the rank if it's an element that is meant + to be autoplugged by decodebin. */ return gst_element_register (plugin, "replace", GST_RANK_NONE, GST_TYPE_REPLACE); } +/* FIXME: these are normally defined by the GStreamer build system. + If you are creating an element to be included in gst-plugins-*, + remove these, as they're always defined. Otherwise, edit as + appropriate for your external plugin package. */ #ifndef VERSION #define VERSION "0.0.FIXME" #endif @@ -371,7 +377,7 @@ gst-indent $gstreplace.c echo pkg is $pkg -gcc -Wall -fPIC $CPPFLAGS $(pkg-config --cflags gstreamer-1.0 $pkg) -c -o $gstreplace.o $gstreplace.c +gcc -Wall -Werror -fPIC $CPPFLAGS $(pkg-config --cflags gstreamer-1.0 $pkg) -c -o $gstreplace.o $gstreplace.c if test $? -ne 0; then exit 1 fi |