+2005-08-01 Stefan Kost <ensonic@users.sf.net>
+
+ * configure.ac:
+ * docs/gst/tmpl/gstbasesrc.sgml:
+ * docs/gst/tmpl/gstelement.sgml:
+ * docs/gst/tmpl/gstevent.sgml:
+ * docs/gst/tmpl/gstfakesrc.sgml:
+ * docs/gst/tmpl/gstformat.sgml:
+ * docs/gst/tmpl/gstghostpad.sgml:
+ * docs/gst/tmpl/gstpad.sgml:
+ * docs/gst/tmpl/gstquery.sgml:
+ * docs/gst/tmpl/gststructure.sgml:
+ * docs/gst/tmpl/gsttaglist.sgml:
+ * docs/gst/tmpl/gstvalue.sgml:
+ * docs/libs/gstreamer-libs-docs.sgml:
+ * docs/libs/gstreamer-libs-sections.txt:
+ * docs/libs/gstreamer-libs.types:
+ * libs/gst/Makefile.am:
+ * libs/gst/control/.cvsignore:
+ * libs/gst/control/Makefile.am:
+ * libs/gst/control/control.c:
+ * libs/gst/control/control.h:
+ * libs/gst/control/dparam.c:
+ * libs/gst/control/dparam.h:
+ * libs/gst/control/dparam_smooth.c:
+ * libs/gst/control/dparam_smooth.h:
+ * libs/gst/control/dparamcommon.h:
+ * libs/gst/control/dparammanager.c:
+ * libs/gst/control/dparammanager.h:
+ * libs/gst/control/dplinearinterp.c:
+ * libs/gst/control/dplinearinterp.h:
+ * libs/gst/control/unitconvert.c:
+ * libs/gst/control/unitconvert.h:
+ * testsuite/Makefile.am:
+ * testsuite/dynparams/.cvsignore:
+ * testsuite/dynparams/Makefile.am:
+ * testsuite/dynparams/dparamstest.c:
+ * tools/Makefile.am:
+ * tools/gst-inspect.c: (print_element_info), (main):
+ * tools/gst-xmlinspect.c: (print_element_info), (main):
+ deactivate and remove dparams (libgstcontrol)
+
2005-08-01 Tim-Philipp Müller <tim at centricular dot net>
* gst/elements/gsttypefindelement.c:
gst/registries/Makefile
libs/Makefile
libs/gst/Makefile
-libs/gst/control/Makefile
libs/gst/dataprotocol/Makefile
libs/gst/getbits/Makefile
po/Makefile.in
testsuite/cleanup/Makefile
testsuite/debug/Makefile
testsuite/dlopen/Makefile
-testsuite/dynparams/Makefile
testsuite/elements/Makefile
testsuite/indexers/Makefile
testsuite/negotiation/Makefile
@segment_start:
@segment_end:
@segment_loop:
+@need_discont:
@offset:
@size:
@num_buffers:
@sinkpads:
@pads_cookie:
-<!-- ##### SIGNAL GstElement::new-pad ##### -->
+<!-- ##### SIGNAL GstElement::no-more-pads ##### -->
<para>
</para>
@gstelement: the object which received the signal.
-@arg1:
-<!-- ##### SIGNAL GstElement::no-more-pads ##### -->
+<!-- ##### SIGNAL GstElement::pad-added ##### -->
<para>
</para>
@gstelement: the object which received the signal.
+@arg1:
<!-- ##### SIGNAL GstElement::pad-removed ##### -->
<para>
@gstelement: the object which received the signal.
@arg1:
-<!-- ##### SIGNAL GstElement::state-change ##### -->
+<!-- ##### SIGNAL GstElement::state-changed ##### -->
<para>
</para>
-<!-- ##### MACRO GST_ELEMENT_QUERY_TYPE_FUNCTION ##### -->
-<para>
-Helper macro to create query type functions
-</para>
-
-@functionname: The function name
-@...: list of query types.
-
-
-<!-- ##### MACRO GST_ELEMENT_FORMATS_FUNCTION ##### -->
-<para>
-Halper macro to create element format functions
-</para>
-
-@functionname: The function name
-@...: formats
-
-
-<!-- ##### MACRO GST_ELEMENT_EVENT_MASK_FUNCTION ##### -->
-<para>
-A helper macro to create a mask function
-</para>
-
-@functionname: the name of the mask function
-@...: Masks
-
-
<!-- ##### ENUM GstElementFlags ##### -->
<para>
This enum defines the standard flags that an element may have.
</para>
@element:
+@rate:
+@format:
+@flags:
+@cur_type:
+@cur:
+@stop_type:
+@stop:
+@Returns:
+<!-- # Unused Parameters # -->
@seek_type:
@offset:
-@Returns:
<!-- ##### FUNCTION gst_element_get_query_types ##### -->
@type:
@timestamp:
@src:
+@structure:
<!-- ##### ENUM GstEventType ##### -->
<para>
</para>
@GST_EVENT_UNKNOWN: unknown event.
+@GST_EVENT_FLUSH_START:
+@GST_EVENT_FLUSH_STOP:
@GST_EVENT_EOS: an end-of-stream event.
-@GST_EVENT_FLUSH: a flush event.
-@GST_EVENT_DISCONTINUOUS: a discontinuous event to indicate the stream has a discontinuity.
+@GST_EVENT_NEWSEGMENT:
+@GST_EVENT_TAG:
+@GST_EVENT_FILLER:
@GST_EVENT_QOS: a quality of service event
@GST_EVENT_SEEK: a seek event.
-@GST_EVENT_SIZE: a size suggestion for a peer element
-@GST_EVENT_RATE: adjust the output rate of an element
@GST_EVENT_NAVIGATION:
-@GST_EVENT_TAG:
-
-<!-- ##### MACRO GST_EVENT_ANY ##### -->
-<para>
-
-</para>
-
-
+@GST_EVENT_CUSTOM_START:
<!-- ##### MACRO GST_EVENT_TRACE_NAME ##### -->
<para>
@event: The event to query
-<!-- ##### MACRO GST_EVENT_IS_INTERRUPT ##### -->
-<para>
-Check if the event is an interrupt event
-</para>
-
-@event: The event to check
-
-
-<!-- ##### MACRO GST_SEEK_FORMAT_SHIFT ##### -->
-<para>
-Shift for the format in the GstSeekType
-</para>
-
-
-
-<!-- ##### MACRO GST_SEEK_METHOD_SHIFT ##### -->
-<para>
-Shift for the method in the GstSeekType
-</para>
-
-
-
-<!-- ##### MACRO GST_SEEK_FLAGS_SHIFT ##### -->
-<para>
-Shift for the flags in the GstSeekType
-</para>
-
-
-
-<!-- ##### MACRO GST_SEEK_FORMAT_MASK ##### -->
-<para>
-Mask for the format in the GstSeekType
-</para>
-
-
-
-<!-- ##### MACRO GST_SEEK_METHOD_MASK ##### -->
-<para>
-Mask for the method in the GstSeekType
-</para>
-
-
-
-<!-- ##### MACRO GST_SEEK_FLAGS_MASK ##### -->
-<para>
-Mask for the flags in the GstSeekType
-</para>
-
-
-
-<!-- ##### ENUM GstEventFlag ##### -->
-<para>
-Event flags are used when querying for supported events
-</para>
-
-@GST_EVENT_FLAG_NONE: no value
-@GST_RATE_FLAG_NEGATIVE: indicates negative rates are supported
-
-<!-- ##### MACRO GST_EVENT_MASK_FUNCTION ##### -->
-<para>
-A convenience macro to create event mask functions
-</para>
-
-@type: The type of the first argument of the function
-@functionname: the name of the function
-@...: event masks, the last element is marked with 0
-
-
<!-- ##### ENUM GstSeekType ##### -->
<para>
The different types of seek events. When constructing a seek event a format,
</example>
</para>
-@GST_SEEK_METHOD_CUR: Seek to an relative position
-@GST_SEEK_METHOD_SET: Seek to an absolute position
-@GST_SEEK_METHOD_END: Seek relative to the end of the stream
-@GST_SEEK_FLAG_FLUSH: Flush any pending data while seeking
-@GST_SEEK_FLAG_ACCURATE: Seek as accurately as possible
-@GST_SEEK_FLAG_KEY_UNIT: Seek to a nearby key unit
-@GST_SEEK_FLAG_SEGMENT_LOOP: Loop between start and stop in a segmented seek
-
-<!-- ##### ENUM GstSeekAccuracy ##### -->
-<para>
-The accuracy about a seek operation gives more information of how the seek was
-performed, namly if the seek was accurate or fuzzy.
-</para>
-
-@GST_SEEK_CERTAIN: The seek was exact
-@GST_SEEK_FUZZY: The seek was fuzzy, exact position can not be guaranteed
-
-<!-- ##### MACRO GST_EVENT_SEEK_TYPE ##### -->
-<para>
-Get the seektype of the GST_EVENT_SEEK.
-</para>
-
-@event: The event to query.
-
+@GST_SEEK_TYPE_NONE:
+@GST_SEEK_TYPE_CUR:
+@GST_SEEK_TYPE_SET:
+@GST_SEEK_TYPE_END:
-<!-- ##### MACRO GST_EVENT_SEEK_FORMAT ##### -->
+<!-- ##### MACRO gst_event_ref ##### -->
<para>
-The format of the seek value
+Increase the refcount of this event
</para>
-@event: The event operate on
+@ev: The event to refcount
-<!-- ##### MACRO GST_EVENT_SEEK_METHOD ##### -->
+<!-- ##### MACRO gst_event_unref ##### -->
<para>
-The seek method to use as one of #GstSeekType
+Decrease the refcount of an event, freeing it if the refcount reaches 0
</para>
-@event: The event operate on
+@ev: The event to unref
-<!-- ##### MACRO GST_EVENT_SEEK_FLAGS ##### -->
+<!-- ##### MACRO gst_event_copy ##### -->
<para>
-The optional seek flags
+Copy the event using the event specific copy function
</para>
-@event: The event operate on
+@ev: The event to copy
+@Returns: A new event that is a copy of the given input event
-<!-- ##### MACRO GST_EVENT_SEEK_OFFSET ##### -->
+<!-- ##### FUNCTION gst_event_new_custom ##### -->
<para>
-Get the offset of the seek event.
-</para>
-
-@event: The event to query.
-
-<!-- ##### MACRO GST_EVENT_SEEK_ENDOFFSET ##### -->
-<para>
-The event stop position for a segment seek
</para>
-@event: The event to query
+@type:
+@structure:
+@Returns:
-<!-- ##### MACRO GST_EVENT_SEEK_ACCURACY ##### -->
+<!-- ##### FUNCTION gst_event_get_structure ##### -->
<para>
-Indicates how accurate the event was performed.
-</para>
-
-@event: The event to query
-
-<!-- ##### MACRO GST_EVENT_DISCONT_OFFSET ##### -->
-<para>
-The offset of the discont event. A discont event can hold up to 8 different
-format/value pairs.
</para>
-@event: The event to query
-@i: The offset/value pair.
+@event:
+@Returns:
-<!-- ##### MACRO GST_EVENT_DISCONT_OFFSET_LEN ##### -->
+<!-- ##### FUNCTION gst_event_new_flush_start ##### -->
<para>
-Get the number of offset/value pairs this event has.
-</para>
-
-@event: The event to query.
-
-<!-- ##### MACRO GST_EVENT_SIZE_FORMAT ##### -->
-<para>
-The format of the size event.
</para>
-@event: The event to query
+@Returns:
-<!-- ##### MACRO GST_EVENT_SIZE_VALUE ##### -->
+<!-- ##### FUNCTION gst_event_new_flush_stop ##### -->
<para>
-The value of the size event
-</para>
-
-@event: The event to query
-
-<!-- ##### MACRO GST_EVENT_RATE_VALUE ##### -->
-<para>
-Get access to the rate vale field
</para>
-@event: The event to query
+@Returns:
-<!-- ##### FUNCTION gst_event_new ##### -->
+<!-- ##### FUNCTION gst_event_new_eos ##### -->
<para>
</para>
-@type:
@Returns:
-<!-- ##### MACRO gst_event_ref ##### -->
+<!-- ##### FUNCTION gst_event_new_newsegment ##### -->
<para>
-Increase the refcount of this event
-</para>
-
-@ev: The event to refcount
-
-<!-- ##### MACRO gst_event_unref ##### -->
-<para>
-Decrease the refcount of an event, freeing it if the refcount reaches 0
</para>
-@ev: The event to unref
+@rate:
+@format:
+@start_value:
+@stop_value:
+@base:
+@Returns:
-<!-- ##### MACRO gst_event_copy ##### -->
+<!-- ##### FUNCTION gst_event_parse_newsegment ##### -->
<para>
-Copy the event using the event specific copy function
+
</para>
-@ev: The event to copy
-@Returns: A new event that is a copy of the given input event
+@event:
+@rate:
+@format:
+@start_value:
+@end_value:
+@base:
-<!-- ##### FUNCTION gst_event_masks_contains ##### -->
+<!-- ##### FUNCTION gst_event_new_tag ##### -->
<para>
</para>
-@masks:
-@mask:
+@taglist:
@Returns:
+<!-- # Unused Parameters # -->
+@list:
-<!-- ##### FUNCTION gst_event_new_seek ##### -->
+<!-- ##### FUNCTION gst_event_parse_tag ##### -->
<para>
</para>
-@type:
-@offset:
-@Returns:
+@event:
+@taglist:
-<!-- ##### FUNCTION gst_event_new_segment_seek ##### -->
+<!-- ##### FUNCTION gst_event_new_filler ##### -->
<para>
-
+Create a new dummy event that should be ignored
</para>
-@type:
-@start:
-@stop:
@Returns:
-<!-- ##### FUNCTION gst_event_new_size ##### -->
+<!-- ##### FUNCTION gst_event_new_qos ##### -->
<para>
</para>
-@format:
-@value:
+@proportion:
+@diff:
+@timestamp:
@Returns:
-<!-- ##### FUNCTION gst_event_new_discontinuous ##### -->
+<!-- ##### FUNCTION gst_event_parse_qos ##### -->
<para>
</para>
-@rate:
-@format1:
-@Varargs:
-@Returns:
-<!-- # Unused Parameters # -->
-@new_media:
+@event:
+@proportion:
+@diff:
+@timestamp:
-<!-- ##### FUNCTION gst_event_new_discontinuous_valist ##### -->
+<!-- ##### FUNCTION gst_event_new_seek ##### -->
<para>
</para>
@rate:
-@format1:
-@var_args:
+@format:
+@flags:
+@cur_type:
+@cur:
+@stop_type:
+@stop:
@Returns:
<!-- # Unused Parameters # -->
-@new_media:
+@type:
+@offset:
-<!-- ##### FUNCTION gst_event_discont_get_value ##### -->
+<!-- ##### FUNCTION gst_event_parse_seek ##### -->
<para>
</para>
@event:
+@rate:
@format:
-@start_value:
-@end_value:
-@Returns:
-<!-- # Unused Parameters # -->
-@value:
+@flags:
+@cur_type:
+@cur:
+@stop_type:
+@stop:
-<!-- ##### MACRO gst_event_new_filler ##### -->
+<!-- ##### FUNCTION gst_event_new_navigation ##### -->
<para>
-Create a new dummy event that should be ignored
-</para>
-
-
-<!-- ##### FUNCTION gst_event_new_flush ##### -->
-<para>
-Create a new flush event.
</para>
-@done:
+@structure:
@Returns:
@gstfakesrc: the object which received the signal.
@arg1:
+@:
+@:
+@:
<!-- ##### ARG GstFakeSrc:data ##### -->
<para>
@nick: A short nick of the format
@description: A longer description of the format
-<!-- ##### MACRO GST_FORMATS_FUNCTION ##### -->
-<para>
-A convenience function to define a function that returns an array
-of formats.
-</para>
-
-@type: The type of the first argument of the function
-@functionname: The name of the function
-@...: comma separated list of functions closed with 0
-
-
<!-- ##### FUNCTION gst_format_register ##### -->
<para>
</para>
-<!-- ##### ARG GstGhostPad:internal ##### -->
-<para>
-
-</para>
-
<!-- ##### FUNCTION gst_ghost_pad_new ##### -->
<para>
The result of a pad link.
</para>
-@GST_PAD_LINK_NOSCHED:
+@GST_PAD_LINK_OK: the link succeeded.
+@GST_PAD_LINK_WRONG_HIERARCHY:
+@GST_PAD_LINK_WAS_LINKED:
+@GST_PAD_LINK_WRONG_DIRECTION:
@GST_PAD_LINK_NOFORMAT:
+@GST_PAD_LINK_NOSCHED:
@GST_PAD_LINK_REFUSED: the link was refused.
-@GST_PAD_LINK_WRONG_DIRECTION:
-@GST_PAD_LINK_WAS_LINKED:
-@GST_PAD_LINK_OK: the link succeeded.
<!-- ##### ENUM GstPadPresence ##### -->
<para>
@nick: a short nick
@description: a longer description of the query type
-<!-- ##### MACRO GST_QUERY_TYPE_FUNCTION ##### -->
-<para>
-Convenience function to define a function that returns an array of query types.
-</para>
-
-@type: Type of first argument for function
-@functionname: The name of the function
-@...: query types, 0 to end the list
-
-
<!-- ##### FUNCTION gst_query_type_register ##### -->
<para>
@Returns:
+<!-- ##### FUNCTION gst_structure_has_name ##### -->
+<para>
+
+</para>
+
+@structure:
+@name:
+@Returns:
+
+
<!-- ##### FUNCTION gst_structure_set_name ##### -->
<para>
</para>
-@list:
-@Returns:
-
-
-<!-- ##### FUNCTION gst_event_tag_get_list ##### -->
-<para>
-
-</para>
-
-@tag_event:
+@taglist:
@Returns:
@x: the #GValue to check
-<!-- ##### MACRO GST_VALUE_HOLDS_FIXED_LIST ##### -->
-<para>
-Checks if the give GValue contains a FIXED_LIST value.
-</para>
-
-@x: the #GValue to check
-
-
<!-- ##### MACRO GST_VALUE_HOLDS_CAPS ##### -->
<para>
Checks if the give GValue contains a CAPS value.
@serialize:
@deserialize:
-<!-- ##### FUNCTION gst_type_is_fixed ##### -->
-<para>
-
-</para>
-
-@type:
-@Returns:
-
-
<!-- ##### FUNCTION gst_value_is_fixed ##### -->
<para>
<!ENTITY GstBytestream SYSTEM "xml/gstbytestream.xml">
<!ENTITY GstGetbits SYSTEM "xml/gstgetbits.xml">
<!-- has not yet been written
-<!ENTITY GstGetbits SYSTEM "xml/gstputbits.xml">
+<!ENTITY GstPutbits SYSTEM "xml/gstputbits.xml">
-->
-<!ENTITY GstControl SYSTEM "xml/gstcontrol.xml">
-<!ENTITY GstDParamManager SYSTEM "xml/gstdpman.xml">
-<!ENTITY GstDParam SYSTEM "xml/gstdparam.xml">
-<!ENTITY GstDParamSmooth SYSTEM "xml/gstdpsmooth.xml">
-<!ENTITY GstDParamLinInterp SYSTEM "xml/gstdplinint.xml">
-<!ENTITY GstUnitConvert SYSTEM "xml/gstunitconvert.xml">
<!ENTITY GstDataProtocol SYSTEM "xml/gstdataprotocol.xml">
<!-- generated by gtkdoc-mkdb, stupid name -->
-->
<!--link linkend="GObject">GObject</link-->
- <chapter id="gstreamer-control">
- <title>gstcontrol</title>
- &GstControl;
- &GstDParamManager;
- &GstDParam;
- &GstDParamSmooth;
- &GstDParamLinInterp;
- &GstUnitConvert;
- </chapter>
</part>
<part id="gstreamer-libs-hierarchy">
<SUBSECTION Standard>
</SECTION>
-# GstControl library
-
-<SECTION>
-<FILE>gstcontrol</FILE>
-<TITLE>GstControl</TITLE>
-<INCLUDE>libs/control/control.h</INCLUDE>
-gst_control_init
-<SUBSECTION Standard>
-<SUBSECTION Private>
-</SECTION>
-
-<SECTION>
-<FILE>gstdpman</FILE>
-<TITLE>GstDParamManager</TITLE>
-<INCLUDE>libs/control/control.h</INCLUDE>
-GstDParamManager
-gst_dpman_new
-gst_dpman_add_required_dparam_callback
-gst_dpman_add_required_dparam_direct
-gst_dpman_add_required_dparam_array
-gst_dpman_remove_required_dparam
-gst_dpman_attach_dparam
-gst_dpman_detach_dparam
-gst_dpman_get_dparam
-gst_dpman_get_dparam_type
-gst_dpman_list_dparam_specs
-gst_dpman_get_param_spec
-gst_dpman_set_rate
-gst_dpman_register_mode
-gst_dpman_set_mode
-gst_dpman_set_parent
-gst_dpman_get_manager
-gst_dpman_bypass_dparam
-<SUBSECTION Standard>
-<SUBSECTION Private>
-</SECTION>
-
-<SECTION>
-<FILE>gstdparam</FILE>
-<TITLE>GstDParam</TITLE>
-<INCLUDE>libs/control/control.h</INCLUDE>
-GstDParam
-gst_dparam_new
-gst_dparam_attach
-gst_dparam_detach
-gst_dparam_do_update_default
-<SUBSECTION Standard>
-<SUBSECTION Private>
-</SECTION>
-
-<SECTION>
-<FILE>gstdpsmooth</FILE>
-<TITLE>GstDParamSmooth</TITLE>
-<INCLUDE>libs/control/control.h</INCLUDE>
-GstDParamSmooth
-gst_dpsmooth_new
-<SUBSECTION Standard>
-<SUBSECTION Private>
-</SECTION>
-
-<SECTION>
-<FILE>gstdplinint</FILE>
-<TITLE>GstDParamLinInterp</TITLE>
-<INCLUDE>libs/control/control.h</INCLUDE>
-GstDParamLinInterp
-gst_dp_linint_new
-<SUBSECTION Standard>
-<SUBSECTION Private>
-</SECTION>
-
-<SECTION>
-<FILE>gstunitconvert</FILE>
-<TITLE>GstUnitConvert</TITLE>
-<INCLUDE>libs/control/control.h</INCLUDE>
-GstUnitConvert
-gst_unitconv_new
-gst_unitconv_set_convert_units
-gst_unitconv_convert_value
-gst_unitconv_unit_spec
-gst_unitconv_unit_exists
-gst_unitconv_unit_is_logarithmic
-gst_unitconv_register_unit
-gst_unitconv_register_convert_func
-gst_unitconv_register_convert_property
-<SUBSECTION Standard>
-<SUBSECTION Private>
-</SECTION>
-
#include <gst/gst.h>
-#include <gst/control/control.h>
-gst_object_get_type
-gst_dparam_get_type
-gst_dpman_get_type
-gst_dpsmooth_get_type
-gst_dp_linint_get_type
-gst_unitconv_get_type
+
-SUBDIRS = control dataprotocol getbits
+SUBDIRS = dataprotocol getbits
+++ /dev/null
-*.bb
-*.bbg
-*.da
-*.def
-*.gcno
+++ /dev/null
-lib_LTLIBRARIES = libgstcontrol-@GST_MAJORMINOR@.la
-
-libgstcontrol_@GST_MAJORMINOR@_includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/control
-libgstcontrol_@GST_MAJORMINOR@_include_HEADERS = \
- control.h \
- dparammanager.h \
- dparam.h \
- dparam_smooth.h \
- unitconvert.h \
- dparamcommon.h \
- dplinearinterp.h
-
-libgstcontrol_@GST_MAJORMINOR@_la_SOURCES = \
- control.c \
- dparammanager.c \
- dparam.c \
- dparam_smooth.c \
- unitconvert.c \
- dplinearinterp.c
-
-libgstcontrol_@GST_MAJORMINOR@_la_CFLAGS = $(GST_OBJ_CFLAGS) -I$(top_srcdir)/libs
-libgstcontrol_@GST_MAJORMINOR@_la_LDFLAGS = @GST_LIB_LDFLAGS@
-# control uses log and exp, so we need -lm if xml is disabled
-libgstcontrol_@GST_MAJORMINOR@_la_LIBADD = $(GST_OBJ_LIBS) -lm
-
+++ /dev/null
-/* GStreamer
- * Copyright (C) 2001 Steve Baker <stevebaker_org@yahoo.co.uk>
- *
- * gstcontrol.c: GStreamer control utility library
- *
- * 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., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include <gst/gst.h>
-
-#include "control.h"
-
-GST_DEBUG_CATEGORY (_gst_control_debug);
-#define GST_CAT_DEFAULT _gst_control_debug
-
-/**
- * gst_control_init:
- * @argc: pointer to application's argc
- * @argv: pointer to application's argv
- *
- * Initializes the GStreamer control library, registering modes and units
- */
-void
-gst_control_init (int *argc, char **argv[])
-{
- GST_DEBUG_CATEGORY_INIT (_gst_control_debug, "control", 0, "libgstcontrol");
- _gst_dpman_initialize ();
- _gst_unitconv_initialize ();
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) 2001 Steve Baker <stevebaker_org@yahoo.co.uk>
- *
- * gstcontrol.h: GStreamer control utility library
- *
- * 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., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GST_CONTROL_H__
-#define __GST_CONTROL_H__
-
-#include <gst/control/dparammanager.h>
-#include <gst/control/dparam.h>
-#include <gst/control/dparam_smooth.h>
-#include <gst/control/dplinearinterp.h>
-#include <gst/control/unitconvert.h>
-
-G_BEGIN_DECLS
-
-void gst_control_init (int *argc, char **argv[]);
-
-G_END_DECLS
-
-#endif /* __GST_CONTROL_H__ */
+++ /dev/null
-/* GStreamer
- * Copyright (C) 2001 Steve Baker <stevebaker_org@yahoo.co.uk>
- *
- * gstdparam.c: Dynamic Parameter
- *
- * 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., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <math.h>
-#include <string.h>
-#include <gst/gstinfo.h>
-
-#include "dparam.h"
-#include "dparammanager.h"
-#include <gst/gstmarshal.h>
-
-GST_DEBUG_CATEGORY_EXTERN (_gst_control_debug);
-#define GST_CAT_DEFAULT _gst_control_debug
-
-static void gst_dparam_class_init (GstDParamClass * klass);
-static void gst_dparam_init (GstDParam * dparam);
-static void gst_dparam_dispose (GObject * object);
-static void gst_dparam_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec);
-static void gst_dparam_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec);
-
-enum
-{
- ARG_0,
- ARG_VALUE_FLOAT,
- ARG_VALUE_DOUBLE,
- ARG_VALUE_INT,
- ARG_VALUE_INT64,
-};
-
-enum
-{
- VALUE_CHANGED,
- LAST_SIGNAL
-};
-
-static guint gst_dparam_signals[LAST_SIGNAL] = { 0 };
-
-GType
-gst_dparam_get_type (void)
-{
- static GType dparam_type = 0;
-
- if (!dparam_type) {
- static const GTypeInfo dparam_info = {
- sizeof (GstDParamClass),
- NULL,
- NULL,
- (GClassInitFunc) gst_dparam_class_init,
- NULL,
- NULL,
- sizeof (GstDParam),
- 0,
- (GInstanceInitFunc) gst_dparam_init,
- };
-
- dparam_type =
- g_type_register_static (GST_TYPE_OBJECT, "GstDParam", &dparam_info, 0);
- }
- return dparam_type;
-}
-
-static void
-gst_dparam_class_init (GstDParamClass * klass)
-{
- GObjectClass *gobject_class;
- GstDParamClass *dparam_class;
- GstObjectClass *gstobject_class;
-
- gobject_class = (GObjectClass *) klass;
- dparam_class = (GstDParamClass *) klass;
- gstobject_class = (GstObjectClass *) klass;
-
- gobject_class->get_property = gst_dparam_get_property;
- gobject_class->set_property = gst_dparam_set_property;
-
- g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_VALUE_FLOAT,
- g_param_spec_float ("value_float", "Float Value",
- "The value that should be changed if gfloat is the type",
- -G_MAXFLOAT, G_MAXFLOAT, 0.0F, G_PARAM_READWRITE));
- g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_VALUE_DOUBLE,
- g_param_spec_double ("value_double", "Double Value",
- "The value that should be changed if gdouble is the type",
- -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, G_PARAM_READWRITE));
- g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_VALUE_INT,
- g_param_spec_int ("value_int", "Integer Value",
- "The value that should be changed if gint is the type",
- G_MININT, G_MAXINT, 0, G_PARAM_READWRITE));
- g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_VALUE_INT64,
- g_param_spec_int64 ("value_int64", "64 bit Integer Value",
- "The value that should be changed if gint64 is the type",
- G_MININT64, G_MAXINT64, 0, G_PARAM_READWRITE));
-
- gobject_class->dispose = gst_dparam_dispose;
-
- gst_dparam_signals[VALUE_CHANGED] =
- g_signal_new ("value-changed", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstDParamClass, value_changed), NULL,
- NULL, gst_marshal_VOID__VOID, G_TYPE_NONE, 0);
- /*gstobject_class->save_thyself = gst_dparam_save_thyself; */
-
-}
-
-static void
-gst_dparam_init (GstDParam * dparam)
-{
- g_return_if_fail (dparam != NULL);
- GST_DPARAM_TYPE (dparam) = 0;
- GST_DPARAM_NEXT_UPDATE_TIMESTAMP (dparam) = 0LL;
- GST_DPARAM_LAST_UPDATE_TIMESTAMP (dparam) = 0LL;
- GST_DPARAM_READY_FOR_UPDATE (dparam) = FALSE;
- dparam->lock = g_mutex_new ();
-}
-
-/**
- * gst_dparam_new:
- * @type: the type that this dparam will store
- *
- * Create a new dynamic parameter controller.
- *
- * Returns: a new instance of GstDParam
- */
-GstDParam *
-gst_dparam_new (GType type)
-{
- GstDParam *dparam;
-
- dparam = g_object_new (gst_dparam_get_type (), NULL);
- dparam->do_update_func = gst_dparam_do_update_default;
-
- GST_DPARAM_TYPE (dparam) = type;
-
- return dparam;
-}
-
-
-static void
-gst_dparam_get_property (GObject * object, guint prop_id, GValue * value,
- GParamSpec * pspec)
-{
- GstDParam *dparam;
-
- g_return_if_fail (GST_IS_DPARAM (object));
- dparam = GST_DPARAM (object);
-
- switch (prop_id) {
- case ARG_VALUE_FLOAT:
- g_value_set_float (value, dparam->value_float);
- break;
-
- case ARG_VALUE_DOUBLE:
- g_value_set_double (value, dparam->value_double);
- break;
-
- case ARG_VALUE_INT:
- g_value_set_int (value, dparam->value_int);
- break;
-
- case ARG_VALUE_INT64:
- g_value_set_int64 (value, dparam->value_int64);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gst_dparam_set_property (GObject * object, guint prop_id, const GValue * value,
- GParamSpec * pspec)
-{
- GstDParam *dparam;
-
- g_return_if_fail (GST_IS_DPARAM (object));
- dparam = GST_DPARAM (object);
- GST_DPARAM_LOCK (dparam);
-
- switch (prop_id) {
- case ARG_VALUE_FLOAT:
- GST_DEBUG ("setting value from %g to %g", dparam->value_float,
- g_value_get_float (value));
- dparam->value_float = g_value_get_float (value);
- GST_DPARAM_NEXT_UPDATE_TIMESTAMP (dparam) =
- GST_DPARAM_LAST_UPDATE_TIMESTAMP (dparam);
- GST_DPARAM_READY_FOR_UPDATE (dparam) = TRUE;
- break;
-
- case ARG_VALUE_DOUBLE:
- GST_DEBUG ("setting value from %g to %g",
- dparam->value_double, g_value_get_double (value));
- dparam->value_double = g_value_get_double (value);
- GST_DPARAM_NEXT_UPDATE_TIMESTAMP (dparam) =
- GST_DPARAM_LAST_UPDATE_TIMESTAMP (dparam);
- GST_DPARAM_READY_FOR_UPDATE (dparam) = TRUE;
- break;
-
- case ARG_VALUE_INT:
- GST_DEBUG ("setting value from %d to %d", dparam->value_int,
- g_value_get_int (value));
- dparam->value_int = g_value_get_int (value);
- GST_DPARAM_NEXT_UPDATE_TIMESTAMP (dparam) =
- GST_DPARAM_LAST_UPDATE_TIMESTAMP (dparam);
- GST_DPARAM_READY_FOR_UPDATE (dparam) = TRUE;
- break;
-
- case ARG_VALUE_INT64:
- GST_DEBUG ("setting value from %"
- G_GINT64_FORMAT " to %"
- G_GINT64_FORMAT, dparam->value_int64, g_value_get_int64 (value));
- dparam->value_int64 = g_value_get_int64 (value);
- GST_DPARAM_NEXT_UPDATE_TIMESTAMP (dparam) =
- GST_DPARAM_LAST_UPDATE_TIMESTAMP (dparam);
- GST_DPARAM_READY_FOR_UPDATE (dparam) = TRUE;
- break;
-
- default:
- break;
- }
-
- /* note that this signal is sent while we still have the lock. */
- g_signal_emit (G_OBJECT (dparam), gst_dparam_signals[VALUE_CHANGED], 0);
- GST_DPARAM_UNLOCK (dparam);
-}
-
-/**
- * gst_dparam_do_update_default:
- * @dparam: the parameter to update
- * @timestamp: when should the update take place
- * @value: the new value
- * @update_info: unused here
- *
- * Default implementation for changing a dynamic parameter.
- * Subclasses might overwrite the behaviour of this.
- *
- */
-void
-gst_dparam_do_update_default (GstDParam * dparam, gint64 timestamp,
- GValue * value, GstDParamUpdateInfo update_info)
-{
- GST_DPARAM_LOCK (dparam);
-
- g_return_if_fail (G_VALUE_TYPE (value) == GST_DPARAM_TYPE (dparam));
- GST_DEBUG ("updating value for %s(%p)", GST_DPARAM_NAME (dparam), dparam);
-
- switch (G_VALUE_TYPE (value)) {
- case G_TYPE_FLOAT:
- g_value_set_float (value, dparam->value_float);
- break;
-
- case G_TYPE_DOUBLE:
- g_value_set_double (value, dparam->value_double);
- break;
-
- case G_TYPE_INT:
- g_value_set_int (value, dparam->value_int);
- break;
-
- case G_TYPE_INT64:
- g_value_set_int64 (value, dparam->value_int64);
- break;
-
- default:
- break;
- }
-
- GST_DPARAM_LAST_UPDATE_TIMESTAMP (dparam) = timestamp;
- GST_DPARAM_NEXT_UPDATE_TIMESTAMP (dparam) = timestamp;
- GST_DPARAM_READY_FOR_UPDATE (dparam) = FALSE;
-
- GST_DPARAM_UNLOCK (dparam);
-}
-
-static void
-gst_dparam_dispose (GObject * object)
-{
- GstDParam *dparam = GST_DPARAM (object);
- gchar *dparam_name = g_strdup (GST_DPARAM_NAME (dparam));
-
- GST_DEBUG ("disposing of %s", dparam_name);
- if (GST_DPARAM_MANAGER (dparam)) {
- gst_dpman_detach_dparam (GST_DPARAM_MANAGER (dparam), dparam_name);
- }
- g_free (dparam_name);
-}
-
-/**
- * gst_dparam_attach
- * @dparam: GstDParam instance
- * @manager: the GstDParamManager that this dparam belongs to
- * @param_spec: the specification for the parameter
- * @unit_name: the name of the unit
- *
- * Adding the parameter controller to the manager using the
- * supplied specs and unit.
- * See also gst_dpman_attach_dparam().
- */
-void
-gst_dparam_attach (GstDParam * dparam, GstDParamManager * manager,
- GParamSpec * param_spec, gchar * unit_name)
-{
- GValue value = { 0, };
-
- g_return_if_fail (dparam != NULL);
- g_return_if_fail (GST_IS_DPARAM (dparam));
- g_return_if_fail (manager != NULL);
- g_return_if_fail (GST_IS_DPMAN (manager));
- g_return_if_fail (param_spec != NULL);
- g_return_if_fail (unit_name != NULL);
- g_return_if_fail (G_IS_PARAM_SPEC (param_spec));
- g_return_if_fail (G_PARAM_SPEC_VALUE_TYPE (param_spec) ==
- GST_DPARAM_TYPE (dparam));
-
- gst_object_set_name (GST_OBJECT (dparam), g_param_spec_get_name (param_spec));
- GST_DPARAM_PARAM_SPEC (dparam) = param_spec;
- GST_DPARAM_MANAGER (dparam) = manager;
- GST_DPARAM_UNIT_NAME (dparam) = unit_name;
- GST_DPARAM_IS_LOG (dparam) = gst_unitconv_unit_is_logarithmic (unit_name);
- GST_DEBUG ("attaching %s to dparam %p", GST_DPARAM_NAME (dparam), dparam);
-
- // get default value from param-spec and set in dparam
- g_value_init (&value, param_spec->value_type);
- g_param_value_set_default (param_spec, &value);
- switch (G_PARAM_SPEC_VALUE_TYPE (param_spec)) {
- case G_TYPE_FLOAT:
- dparam->value_float = g_value_get_float (&value);
- break;
-
- case G_TYPE_DOUBLE:
- dparam->value_double = g_value_get_double (&value);
- break;
-
- case G_TYPE_INT:
- dparam->value_int = g_value_get_int (&value);
- break;
-
- case G_TYPE_INT64:
- dparam->value_int64 = g_value_get_int64 (&value);
- break;
-
- default:
- break;
- }
-}
-
-/**
- * gst_dparam_detach
- * @dparam: GstDParam instance
- *
- * Removes a previousely added parameter controller.
- */
-void
-gst_dparam_detach (GstDParam * dparam)
-{
-
- g_return_if_fail (dparam != NULL);
- g_return_if_fail (GST_IS_DPARAM (dparam));
-
- GST_DEBUG ("detaching %s from dparam %p", GST_DPARAM_NAME (dparam), dparam);
-
- gst_object_set_name (GST_OBJECT (dparam), NULL);
- GST_DPARAM_PARAM_SPEC (dparam) = NULL;
- GST_DPARAM_MANAGER (dparam) = NULL;
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) 2001 Steve Baker <stevebaker_org@yahoo.co.uk>
- *
- * gstdparam.h: Dynamic Parameter functionality
- *
- * 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., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GST_DPARAM_H__
-#define __GST_DPARAM_H__
-
-#include <gst/gstobject.h>
-#include "dparamcommon.h"
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_DPARAM (gst_dparam_get_type ())
-#define GST_DPARAM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_DPARAM,GstDParam))
-#define GST_DPARAM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_DPARAM,GstDParam))
-#define GST_IS_DPARAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_DPARAM))
-#define GST_IS_DPARAM_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_DPARAM))
-
-#define GST_DPARAM_NAME(dparam) (GST_OBJECT_NAME(dparam))
-#define GST_DPARAM_PARENT(dparam) (GST_OBJECT_PARENT(dparam))
-#define GST_DPARAM_CHANGE_VALUE(dparam) ((dparam)->change_value)
-#define GST_DPARAM_PARAM_SPEC(dparam) ((dparam)->param_spec)
-#define GST_DPARAM_MANAGER(dparam) ((dparam)->manager)
-#define GST_DPARAM_TYPE(dparam) ((dparam)->type)
-#define GST_DPARAM_UNIT_NAME(dparam) ((dparam)->unit_name)
-#define GST_DPARAM_IS_LOG(dparam) ((dparam)->is_log)
-#define GST_DPARAM_META_VALUES(dparam) ((dparam)->meta_values)
-#define GST_DPARAM_META_PARAM_SPECS(dparam) ((dparam)->meta_param_specs)
-#define GST_DPARAM_LOCK(dparam) (g_mutex_lock((dparam)->lock))
-#define GST_DPARAM_UNLOCK(dparam) (g_mutex_unlock((dparam)->lock))
-
-#define GST_DPARAM_READY_FOR_UPDATE(dparam) ((dparam)->ready_for_update)
-#define GST_DPARAM_NEXT_UPDATE_TIMESTAMP(dparam) ((dparam)->next_update_timestamp)
-#define GST_DPARAM_LAST_UPDATE_TIMESTAMP(dparam) ((dparam)->last_update_timestamp)
-
-#define GST_DPARAM_DO_UPDATE(dparam, timestamp, value, update_info) \
- ((dparam->do_update_func)(dparam, timestamp, value, update_info))
-
-typedef struct _GstDParamClass GstDParamClass;
-
-typedef enum {
- GST_DPARAM_UPDATE_FIRST,
- GST_DPARAM_UPDATE_NORMAL
-} GstDParamUpdateInfo;
-
-typedef void (*GstDParamDoUpdateFunction) (GstDParam *dparam, gint64 timestamp, GValue *value, GstDParamUpdateInfo update_info);
-
-struct _GstDParam {
- GstObject object;
-
- GstDParamDoUpdateFunction do_update_func;
-
- GMutex *lock;
-
- gfloat value_float;
- gdouble value_double;
- gint value_int;
- gint64 value_int64;
-
- GstDParamManager *manager;
- GParamSpec *param_spec;
- GType type;
- gboolean ready_for_update;
-
- gint64 next_update_timestamp;
- gint64 last_update_timestamp;
- gchar *unit_name;
- gboolean is_log;
-
- gpointer _gst_reserved[GST_PADDING];
-};
-
-struct _GstDParamClass {
- GstObjectClass parent_class;
-
- /* signal callbacks */
- void (*value_changed) (GstDParam *dparam);
-
- gpointer _gst_reserved[GST_PADDING];
-};
-
-
-GType gst_dparam_get_type (void);
-GstDParam* gst_dparam_new (GType type);
-void gst_dparam_attach (GstDParam *dparam, GstDParamManager *manager, GParamSpec *param_spec, gchar *unit_name);
-void gst_dparam_detach (GstDParam *dparam);
-void gst_dparam_do_update_default (GstDParam *dparam, gint64 timestamp, GValue *value, GstDParamUpdateInfo update_info);
-
-G_END_DECLS
-
-#endif /* __GST_DPARAM_H__ */
+++ /dev/null
-/* GStreamer
- * Copyright (C) 2001 Steve Baker <stevebaker_org@yahoo.co.uk>
- *
- * gstdparam_smooth.c: Realtime smoothed dynamic parameter
- *
- * 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., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <math.h>
-#include <string.h>
-#include <gst/gstinfo.h>
-
-#include "dparam_smooth.h"
-#include "dparammanager.h"
-
-GST_DEBUG_CATEGORY_EXTERN (_gst_control_debug);
-#define GST_CAT_DEFAULT _gst_control_debug
-
-static void gst_dpsmooth_class_init (GstDParamSmoothClass * klass);
-static void gst_dpsmooth_init (GstDParamSmooth * dparam);
-static void gst_dpsmooth_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec);
-static void gst_dpsmooth_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec);
-static void gst_dpsmooth_do_update_float (GstDParam * dparam, gint64 timestamp,
- GValue * value, GstDParamUpdateInfo update_info);
-static void gst_dpsmooth_value_changed_float (GstDParam * dparam);
-static void gst_dpsmooth_do_update_double (GstDParam * dparam, gint64 timestamp,
- GValue * value, GstDParamUpdateInfo update_info);
-static void gst_dpsmooth_value_changed_double (GstDParam * dparam);
-
-enum
-{
- ARG_0,
- ARG_UPDATE_PERIOD,
- ARG_SLOPE_TIME,
- ARG_SLOPE_DELTA_FLOAT,
- ARG_SLOPE_DELTA_DOUBLE,
- ARG_SLOPE_DELTA_INT,
- ARG_SLOPE_DELTA_INT64,
-};
-
-GType
-gst_dpsmooth_get_type (void)
-{
- static GType dpsmooth_type = 0;
-
- if (!dpsmooth_type) {
- static const GTypeInfo dpsmooth_info = {
- sizeof (GstDParamSmoothClass),
- NULL,
- NULL,
- (GClassInitFunc) gst_dpsmooth_class_init,
- NULL,
- NULL,
- sizeof (GstDParamSmooth),
- 0,
- (GInstanceInitFunc) gst_dpsmooth_init,
- };
-
- dpsmooth_type =
- g_type_register_static (GST_TYPE_DPARAM, "GstDParamSmooth",
- &dpsmooth_info, 0);
- }
- return dpsmooth_type;
-}
-
-static void
-gst_dpsmooth_class_init (GstDParamSmoothClass * klass)
-{
- GObjectClass *gobject_class;
- GstDParamSmoothClass *dpsmooth_class;
- GstObjectClass *gstobject_class;
-
- gobject_class = (GObjectClass *) klass;
- dpsmooth_class = (GstDParamSmoothClass *) klass;
- gstobject_class = (GstObjectClass *) klass;
-
- gobject_class->get_property = gst_dpsmooth_get_property;
- gobject_class->set_property = gst_dpsmooth_set_property;
-
- g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_UPDATE_PERIOD,
- g_param_spec_int64 ("update_period",
- "Update Period (nanoseconds)",
- "Number of nanoseconds between updates",
- 0LL, G_MAXINT64, 2000000LL, G_PARAM_READWRITE));
-
- g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_SLOPE_TIME,
- g_param_spec_int64 ("slope_time",
- "Slope Time (nanoseconds)",
- "The time period to define slope_delta by",
- 0LL, G_MAXINT64, 10000000LL, G_PARAM_READWRITE));
-
- g_object_class_install_property (G_OBJECT_CLASS (klass),
- ARG_SLOPE_DELTA_FLOAT,
- g_param_spec_float ("slope_delta_float", "Slope Delta float",
- "The amount a float value can change for a given slope_time",
- 0.0F, G_MAXFLOAT, 0.2F, G_PARAM_READWRITE));
-
- g_object_class_install_property (G_OBJECT_CLASS (klass),
- ARG_SLOPE_DELTA_DOUBLE,
- g_param_spec_double ("slope_delta_double", "Slope Delta double",
- "The amount a double value can change for a given slope_time",
- 0.0, G_MAXDOUBLE, 0.2, G_PARAM_READWRITE));
-
- /*gstobject_class->save_thyself = gst_dparam_save_thyself; */
-
-}
-
-static void
-gst_dpsmooth_init (GstDParamSmooth * dpsmooth)
-{
- g_return_if_fail (dpsmooth != NULL);
-}
-
-/**
- * gst_dpsmooth_new:
- * @type: the type that this dparam will store
- *
- * Create a new dynamic parameter controller which smoothes control changes.
- *
- * Returns: a new instance of GstDParam
- */
-GstDParam *
-gst_dpsmooth_new (GType type)
-{
- GstDParam *dparam;
- GstDParamSmooth *dpsmooth;
-
- dpsmooth = g_object_new (gst_dpsmooth_get_type (), NULL);
- dparam = GST_DPARAM (dpsmooth);
-
- GST_DPARAM_TYPE (dparam) = type;
-
- switch (type) {
- case G_TYPE_FLOAT:{
- dparam->do_update_func = gst_dpsmooth_do_update_float;
- g_signal_connect (G_OBJECT (dpsmooth), "value_changed",
- G_CALLBACK (gst_dpsmooth_value_changed_float), NULL);
- break;
- }
- case G_TYPE_DOUBLE:{
- dparam->do_update_func = gst_dpsmooth_do_update_double;
- g_signal_connect (G_OBJECT (dpsmooth), "value_changed",
- G_CALLBACK (gst_dpsmooth_value_changed_double), NULL);
- break;
- }
- default:
- /* we don't support this type here */
- dparam->do_update_func = gst_dparam_do_update_default;
- break;
- }
- return dparam;
-}
-
-static void
-gst_dpsmooth_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec)
-{
- GstDParam *dparam;
- GstDParamSmooth *dpsmooth;
-
- g_return_if_fail (GST_IS_DPSMOOTH (object));
-
- dpsmooth = GST_DPSMOOTH (object);
- dparam = GST_DPARAM (object);
-
- GST_DPARAM_LOCK (dparam);
-
- switch (prop_id) {
- case ARG_UPDATE_PERIOD:
- dpsmooth->update_period = g_value_get_int64 (value);
- GST_DPARAM_READY_FOR_UPDATE (dparam) = TRUE;
- break;
-
- case ARG_SLOPE_TIME:
- dpsmooth->slope_time = g_value_get_int64 (value);
- GST_DEBUG ("dpsmooth->slope_time:%"
- G_GINT64_FORMAT, dpsmooth->slope_time);
- GST_DPARAM_READY_FOR_UPDATE (dparam) = TRUE;
- break;
-
- case ARG_SLOPE_DELTA_FLOAT:
- dpsmooth->slope_delta_float = g_value_get_float (value);
- GST_DPARAM_READY_FOR_UPDATE (dparam) = TRUE;
- break;
-
- case ARG_SLOPE_DELTA_DOUBLE:
- dpsmooth->slope_delta_double = g_value_get_double (value);
- GST_DPARAM_READY_FOR_UPDATE (dparam) = TRUE;
- break;
-
- default:
- break;
- }
- GST_DPARAM_UNLOCK (dparam);
-}
-
-static void
-gst_dpsmooth_get_property (GObject * object, guint prop_id, GValue * value,
- GParamSpec * pspec)
-{
- GstDParam *dparam;
- GstDParamSmooth *dpsmooth;
-
- g_return_if_fail (GST_IS_DPSMOOTH (object));
-
- dpsmooth = GST_DPSMOOTH (object);
- dparam = GST_DPARAM (object);
-
- switch (prop_id) {
- case ARG_UPDATE_PERIOD:
- g_value_set_int64 (value, dpsmooth->update_period);
- break;
- case ARG_SLOPE_TIME:
- g_value_set_int64 (value, dpsmooth->slope_time);
- break;
- case ARG_SLOPE_DELTA_FLOAT:
- g_value_set_float (value, dpsmooth->slope_delta_float);
- break;
- case ARG_SLOPE_DELTA_DOUBLE:
- g_value_set_double (value, dpsmooth->slope_delta_double);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gst_dpsmooth_value_changed_float (GstDParam * dparam)
-{
- GstDParamSmooth *dpsmooth;
- gfloat time_ratio;
-
- g_return_if_fail (GST_IS_DPSMOOTH (dparam));
- dpsmooth = GST_DPSMOOTH (dparam);
-
- if (GST_DPARAM_IS_LOG (dparam)) {
- dparam->value_float = log (dparam->value_float);
- }
- dpsmooth->start_float = dpsmooth->current_float;
- dpsmooth->diff_float = dparam->value_float - dpsmooth->start_float;
-
- time_ratio = ABS (dpsmooth->diff_float) / dpsmooth->slope_delta_float;
- dpsmooth->duration_interp =
- (gint64) (time_ratio * (gfloat) dpsmooth->slope_time);
-
- dpsmooth->need_interp_times = TRUE;
-
- GST_DEBUG ("%f to %f ratio:%f duration:%"
- G_GINT64_FORMAT "\n",
- dpsmooth->start_float, dparam->value_float, time_ratio,
- dpsmooth->duration_interp);
-}
-
-static void
-gst_dpsmooth_do_update_float (GstDParam * dparam, gint64 timestamp,
- GValue * value, GstDParamUpdateInfo update_info)
-{
- gfloat time_ratio;
- GstDParamSmooth *dpsmooth = GST_DPSMOOTH (dparam);
-
- GST_DPARAM_LOCK (dparam);
-
- if (dpsmooth->need_interp_times) {
- dpsmooth->start_interp = timestamp;
- dpsmooth->end_interp = timestamp + dpsmooth->duration_interp;
- dpsmooth->need_interp_times = FALSE;
- }
-
- if ((update_info == GST_DPARAM_UPDATE_FIRST)
- || (timestamp >= dpsmooth->end_interp)) {
- if (GST_DPARAM_IS_LOG (dparam)) {
- g_value_set_float (value, exp (dparam->value_float));
- } else {
- g_value_set_float (value, dparam->value_float);
- }
- dpsmooth->current_float = dparam->value_float;
-
- GST_DEBUG ("interp finished at %" G_GINT64_FORMAT, timestamp);
-
- GST_DPARAM_LAST_UPDATE_TIMESTAMP (dparam) = timestamp;
- GST_DPARAM_NEXT_UPDATE_TIMESTAMP (dparam) = timestamp;
-
- GST_DPARAM_READY_FOR_UPDATE (dparam) = FALSE;
- GST_DPARAM_UNLOCK (dparam);
- return;
- }
-
- if (timestamp <= dpsmooth->start_interp) {
- if (GST_DPARAM_IS_LOG (dparam)) {
- g_value_set_float (value, exp (dpsmooth->start_float));
- } else {
- g_value_set_float (value, dpsmooth->start_float);
- }
- GST_DPARAM_LAST_UPDATE_TIMESTAMP (dparam) = timestamp;
- GST_DPARAM_NEXT_UPDATE_TIMESTAMP (dparam) =
- dpsmooth->start_interp + dpsmooth->update_period;
-
- GST_DEBUG ("interp started at %" G_GINT64_FORMAT, timestamp);
-
- GST_DPARAM_UNLOCK (dparam);
- return;
-
- }
-
- time_ratio =
- (gfloat) (timestamp -
- dpsmooth->start_interp) / (gfloat) dpsmooth->duration_interp;
-
- GST_DEBUG ("start:%" G_GINT64_FORMAT " current:%" G_GINT64_FORMAT " end:%"
- G_GINT64_FORMAT " ratio%f", dpsmooth->start_interp, timestamp,
- dpsmooth->end_interp, time_ratio);
- GST_DEBUG ("pre start:%f current:%f target:%f", dpsmooth->start_float,
- dpsmooth->current_float, dparam->value_float);
-
- dpsmooth->current_float =
- dpsmooth->start_float + (dpsmooth->diff_float * time_ratio);
-
- GST_DPARAM_NEXT_UPDATE_TIMESTAMP (dparam) =
- timestamp + dpsmooth->update_period;
- if (GST_DPARAM_NEXT_UPDATE_TIMESTAMP (dparam) > dpsmooth->end_interp) {
- GST_DPARAM_NEXT_UPDATE_TIMESTAMP (dparam) = dpsmooth->end_interp;
- }
-
- GST_DPARAM_LAST_UPDATE_TIMESTAMP (dparam) = timestamp;
-
- if (GST_DPARAM_IS_LOG (dparam)) {
- g_value_set_float (value, exp (dpsmooth->current_float));
- } else {
- g_value_set_float (value, dpsmooth->current_float);
- }
-
- GST_DEBUG ("post start:%f current:%f target:%f", dpsmooth->start_float,
- dpsmooth->current_float, dparam->value_float);
-
- GST_DPARAM_UNLOCK (dparam);
-}
-
-static void
-gst_dpsmooth_value_changed_double (GstDParam * dparam)
-{
- GstDParamSmooth *dpsmooth;
- gdouble time_ratio;
-
- g_return_if_fail (GST_IS_DPSMOOTH (dparam));
- dpsmooth = GST_DPSMOOTH (dparam);
-
- if (GST_DPARAM_IS_LOG (dparam)) {
- dparam->value_double = log (dparam->value_double);
- }
- dpsmooth->start_double = dpsmooth->current_double;
- dpsmooth->diff_double = dparam->value_double - dpsmooth->start_double;
-
- time_ratio = ABS (dpsmooth->diff_double) / dpsmooth->slope_delta_double;
- dpsmooth->duration_interp =
- (gint64) (time_ratio * (gdouble) dpsmooth->slope_time);
-
- dpsmooth->need_interp_times = TRUE;
-
- GST_DEBUG ("%f to %f ratio:%f duration:%"
- G_GINT64_FORMAT "\n",
- dpsmooth->start_double, dparam->value_double, time_ratio,
- dpsmooth->duration_interp);
-}
-
-static void
-gst_dpsmooth_do_update_double (GstDParam * dparam, gint64 timestamp,
- GValue * value, GstDParamUpdateInfo update_info)
-{
- gdouble time_ratio;
- GstDParamSmooth *dpsmooth = GST_DPSMOOTH (dparam);
-
- GST_DPARAM_LOCK (dparam);
-
- if (dpsmooth->need_interp_times) {
- dpsmooth->start_interp = timestamp;
- dpsmooth->end_interp = timestamp + dpsmooth->duration_interp;
- dpsmooth->need_interp_times = FALSE;
- }
-
- if ((update_info == GST_DPARAM_UPDATE_FIRST)
- || (timestamp >= dpsmooth->end_interp)) {
- if (GST_DPARAM_IS_LOG (dparam)) {
- g_value_set_double (value, exp (dparam->value_double));
- } else {
- g_value_set_double (value, dparam->value_double);
- }
- dpsmooth->current_double = dparam->value_double;
-
- GST_DEBUG ("interp finished at %" G_GINT64_FORMAT, timestamp);
-
- GST_DPARAM_LAST_UPDATE_TIMESTAMP (dparam) = timestamp;
- GST_DPARAM_NEXT_UPDATE_TIMESTAMP (dparam) = timestamp;
-
- GST_DPARAM_READY_FOR_UPDATE (dparam) = FALSE;
- GST_DPARAM_UNLOCK (dparam);
- return;
- }
-
- if (timestamp <= dpsmooth->start_interp) {
- if (GST_DPARAM_IS_LOG (dparam)) {
- g_value_set_double (value, exp (dpsmooth->start_double));
- } else {
- g_value_set_double (value, dpsmooth->start_double);
- }
- GST_DPARAM_LAST_UPDATE_TIMESTAMP (dparam) = timestamp;
- GST_DPARAM_NEXT_UPDATE_TIMESTAMP (dparam) =
- dpsmooth->start_interp + dpsmooth->update_period;
-
- GST_DEBUG ("interp started at %" G_GINT64_FORMAT, timestamp);
-
- GST_DPARAM_UNLOCK (dparam);
- return;
-
- }
-
- time_ratio =
- (gdouble) (timestamp -
- dpsmooth->start_interp) / (gdouble) dpsmooth->duration_interp;
-
- GST_DEBUG ("start:%" G_GINT64_FORMAT " current:%" G_GINT64_FORMAT " end:%"
- G_GINT64_FORMAT " ratio%f", dpsmooth->start_interp, timestamp,
- dpsmooth->end_interp, time_ratio);
- GST_DEBUG ("pre start:%f current:%f target:%f", dpsmooth->start_double,
- dpsmooth->current_double, dparam->value_double);
-
- dpsmooth->current_double =
- dpsmooth->start_double + (dpsmooth->diff_double * time_ratio);
-
- GST_DPARAM_NEXT_UPDATE_TIMESTAMP (dparam) =
- timestamp + dpsmooth->update_period;
- if (GST_DPARAM_NEXT_UPDATE_TIMESTAMP (dparam) > dpsmooth->end_interp) {
- GST_DPARAM_NEXT_UPDATE_TIMESTAMP (dparam) = dpsmooth->end_interp;
- }
-
- GST_DPARAM_LAST_UPDATE_TIMESTAMP (dparam) = timestamp;
-
- if (GST_DPARAM_IS_LOG (dparam)) {
- g_value_set_double (value, exp (dpsmooth->current_double));
- } else {
- g_value_set_double (value, dpsmooth->current_double);
- }
-
- GST_DEBUG ("post start:%f current:%f target:%f", dpsmooth->start_double,
- dpsmooth->current_double, dparam->value_double);
-
- GST_DPARAM_UNLOCK (dparam);
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) 2001 Steve Baker <stevebaker_org@yahoo.co.uk>
- *
- * gstdparam_smooth.h: Realtime smoothed dynamic parameter
- *
- * 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., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GST_DPSMOOTH_H__
-#define __GST_DPSMOOTH_H__
-
-#include "dparam.h"
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_DPSMOOTH (gst_dpsmooth_get_type ())
-#define GST_DPSMOOTH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_DPSMOOTH,GstDParamSmooth))
-#define GST_DPSMOOTH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_DPSMOOTH,GstDParamSmooth))
-#define GST_IS_DPSMOOTH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_DPSMOOTH))
-#define GST_IS_DPSMOOTH_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_DPSMOOTH))
-
-typedef struct _GstDParamSmoothClass GstDParamSmoothClass;
-typedef struct _GstDParamSmooth GstDParamSmooth;
-
-struct _GstDParamSmooth {
- GstDParam dparam;
-
- gint64 start_interp;
- gint64 end_interp;
- gint64 duration_interp;
-
- gfloat start_float;
- gfloat diff_float;
- gfloat current_float;
- gdouble start_double;
- gdouble diff_double;
- gdouble current_double;
-
- gint64 update_period;
- gint64 slope_time;
- gfloat slope_delta_float;
- gdouble slope_delta_double;
-
- gboolean need_interp_times;
-
- gpointer _gst_reserved[GST_PADDING];
-};
-
-struct _GstDParamSmoothClass {
- GstDParamClass parent_class;
-
- /* signal callbacks */
- gpointer _gst_reserved[GST_PADDING];
-};
-
-GType gst_dpsmooth_get_type (void);
-
-GstDParam* gst_dpsmooth_new (GType type);
-
-G_END_DECLS
-
-#endif /* __GST_DPSMOOTH_H__ */
+++ /dev/null
-/* GStreamer
- * Copyright (C) 2001 Steve Baker <stevebaker_org@yahoo.co.uk>
- *
- * gstdparamcommon.h: Dynamic Parameter common header
- *
- * 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., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GST_DPCOMMON_H__
-#define __GST_DPCOMMON_H__
-
-G_BEGIN_DECLS
-
-typedef struct _GstDParam GstDParam;
-typedef struct _GstDParamManager GstDParamManager;
-
-G_END_DECLS
-
-#endif /* __GST_DPCOMMON_H__ */
+++ /dev/null
-/* GStreamer
- * Copyright (C) 2001 Steve Baker <stevebaker_org@yahoo.co.uk>
- *
- * gstdparammanager.c: Dynamic Parameter group functionality
- *
- * 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., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include "dparammanager.h"
-#include <gst/gstelement.h>
-#include <gst/gstmarshal.h>
-#include <gst/gstinfo.h>
-
-GST_DEBUG_CATEGORY_EXTERN (_gst_control_debug);
-#define GST_CAT_DEFAULT _gst_control_debug
-
-static GHashTable *_element_registry = NULL;
-static gboolean _gst_dpman_init_done = FALSE;
-
-enum
-{
- NEW_REQUIRED_DPARAM,
- LAST_SIGNAL
-};
-
-static void gst_dpman_class_init (GstDParamManagerClass * klass);
-static void gst_dpman_init (GstDParamManager * dpman);
-static void gst_dpman_dispose (GObject * object);
-static GstDParamWrapper *gst_dpman_new_wrapper (GstDParamManager * dpman,
- GParamSpec * param_spec, gchar * unit_name,
- GstDPMUpdateMethod update_method);
-static GstDParamWrapper *gst_dpman_get_wrapper (GstDParamManager * dpman,
- const gchar * dparam_name);
-static void gst_dpman_state_changed (GstElement * element, gint old_state,
- gint new_state, GstDParamManager * dpman);
-static gboolean gst_dpman_preprocess_synchronous (GstDParamManager * dpman,
- guint frames, gint64 timestamp);
-static gboolean gst_dpman_preprocess_asynchronous (GstDParamManager * dpman,
- guint frames, gint64 timestamp);
-static gboolean gst_dpman_process_asynchronous (GstDParamManager * dpman,
- guint frame_count);
-static gboolean gst_dpman_preprocess_noop (GstDParamManager * dpman,
- guint frames, gint64 timestamp);
-static gboolean gst_dpman_process_noop (GstDParamManager * dpman,
- guint frame_count);
-static void gst_dpman_setup_synchronous (GstDParamManager * dpman);
-static void gst_dpman_setup_asynchronous (GstDParamManager * dpman);
-static void gst_dpman_setup_disabled (GstDParamManager * dpman);
-static void gst_dpman_teardown_synchronous (GstDParamManager * dpman);
-static void gst_dpman_teardown_asynchronous (GstDParamManager * dpman);
-static void gst_dpman_teardown_disabled (GstDParamManager * dpman);
-
-static GObjectClass *parent_class;
-static guint gst_dpman_signals[LAST_SIGNAL] = { 0 };
-
-void
-_gst_dpman_initialize ()
-{
- if (_gst_dpman_init_done)
- return;
-
- _gst_dpman_init_done = TRUE;
- _element_registry = g_hash_table_new (NULL, NULL);
-}
-
-GType
-gst_dpman_get_type (void)
-{
- static GType dpman_type = 0;
-
- if (!dpman_type) {
- static const GTypeInfo dpman_info = {
- sizeof (GstDParamManagerClass),
- NULL,
- NULL,
- (GClassInitFunc) gst_dpman_class_init,
- NULL,
- NULL,
- sizeof (GstDParamManager),
- 0,
- (GInstanceInitFunc) gst_dpman_init,
- };
-
- dpman_type =
- g_type_register_static (GST_TYPE_OBJECT, "GstDParamManager",
- &dpman_info, 0);
- }
- return dpman_type;
-}
-
-static void
-gst_dpman_class_init (GstDParamManagerClass * klass)
-{
- GstObjectClass *gstobject_class;
- GObjectClass *gobject_class;
-
- parent_class = g_type_class_peek_parent (klass);
-
- gstobject_class = (GstObjectClass *) klass;
- gobject_class = (GObjectClass *) klass;
- gobject_class->dispose = gst_dpman_dispose;
-
- klass->modes = g_hash_table_new (g_str_hash, g_str_equal);
-
- gst_dpman_register_mode (klass, "synchronous",
- gst_dpman_preprocess_synchronous, gst_dpman_process_noop,
- gst_dpman_setup_synchronous, gst_dpman_teardown_synchronous);
- gst_dpman_register_mode (klass, "asynchronous",
- gst_dpman_preprocess_asynchronous, gst_dpman_process_asynchronous,
- gst_dpman_setup_asynchronous, gst_dpman_teardown_asynchronous);
- gst_dpman_register_mode (klass, "disabled",
- gst_dpman_preprocess_noop, gst_dpman_process_noop,
- gst_dpman_setup_disabled, gst_dpman_teardown_disabled);
-
-
- gst_dpman_signals[NEW_REQUIRED_DPARAM] =
- g_signal_new ("new-required-dparam", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstDParamManagerClass,
- new_required_dparam), NULL, NULL, gst_marshal_VOID__STRING,
- G_TYPE_NONE, 1, G_TYPE_STRING);
-}
-
-static void
-gst_dpman_init (GstDParamManager * dpman)
-{
- GST_DPMAN_DPARAMS (dpman) = g_hash_table_new (g_str_hash, g_str_equal);
- GST_DPMAN_DPARAMS_LIST (dpman) = NULL;
- GST_DPMAN_PARENT (dpman) = NULL;
- GST_DPMAN_MODE_NAME (dpman) = NULL;
- GST_DPMAN_MODE (dpman) = NULL;
- GST_DPMAN_RATE (dpman) = 0;
-}
-
-/**
- * gst_dpman_new:
- * @name: name of the new #GstDParamManager instance to create
- * @parent: #GstElement which creates this instance
- *
- * Creates a new instance of a dynamic parameter manager.
- *
- * Returns: a new instance of #GstDParamManager.
- */
-GstDParamManager *
-gst_dpman_new (gchar * name, GstElement * parent)
-{
- GstDParamManager *dpman;
-
- g_return_val_if_fail (name != NULL, NULL);
-
- dpman = g_object_new (gst_dpman_get_type (), NULL);
- gst_object_set_name (GST_OBJECT (dpman), name);
- gst_dpman_set_parent (dpman, parent);
-
- gst_dpman_set_mode (dpman, "disabled");
-
- return dpman;
-}
-
-
-static void
-gst_dpman_dispose (GObject * object)
-{
-/* GstDParamManager *dpman = GST_DPMAN(object); */
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-/**
- * gst_dpman_add_required_dparam_callback:
- * @dpman: GstDParamManager instance
- * @param_spec: the spacification of the new dparam
- * @unit_name: the unit name of the dparam
- * @update_func: callback to update the element with the new value
- * @update_data: will be included in the call to update_func
- *
- * Add a mandatory dynamic parameter to the manager, where the value can be
- * updated by calling the supplied callback function.
- *
- * Returns: true if it was successfully added
- */
-gboolean
-gst_dpman_add_required_dparam_callback (GstDParamManager * dpman,
- GParamSpec * param_spec,
- gchar * unit_name, GstDPMUpdateFunction update_func, gpointer update_data)
-{
- GstDParamWrapper *dpwrap;
-
- g_return_val_if_fail (dpman != NULL, FALSE);
- g_return_val_if_fail (GST_IS_DPMAN (dpman), FALSE);
- g_return_val_if_fail (update_func != NULL, FALSE);
-
- dpwrap =
- gst_dpman_new_wrapper (dpman, param_spec, unit_name, GST_DPMAN_CALLBACK);
-
- if (!dpwrap) {
- GST_INFO ("failed to obtain a new dparam wrapper");
- return FALSE;
- }
-
- GST_DEBUG ("adding required callback dparam '%s'",
- g_param_spec_get_name (param_spec));
-
- dpwrap->update_func = update_func;
- dpwrap->update_data = update_data;
-
- g_signal_emit (G_OBJECT (dpman), gst_dpman_signals[NEW_REQUIRED_DPARAM], 0,
- g_param_spec_get_name (param_spec));
-
- return TRUE;
-}
-
-/**
- * gst_dpman_add_required_dparam_direct:
- * @dpman: GstDParamManager instance
- * @param_spec: the spacification of the new dparam
- * @unit_name: the unit name of the dparam
- * @update_data: pointer to the member to be updated
- *
- * Add a mandatory dynamic parameter to the manager, where the value can be
- * updated by directly storing it into the provided memory location.
- *
- * Returns: true if it was successfully added
- */
-gboolean
-gst_dpman_add_required_dparam_direct (GstDParamManager * dpman,
- GParamSpec * param_spec, gchar * unit_name, gpointer update_data)
-{
- GstDParamWrapper *dpwrap;
-
- g_return_val_if_fail (dpman != NULL, FALSE);
- g_return_val_if_fail (GST_IS_DPMAN (dpman), FALSE);
- g_return_val_if_fail (update_data != NULL, FALSE);
-
- dpwrap =
- gst_dpman_new_wrapper (dpman, param_spec, unit_name, GST_DPMAN_DIRECT);
-
- if (!dpwrap) {
- GST_INFO ("failed to obtain a new dparam wrapper");
- return FALSE;
- }
-
- GST_DEBUG ("adding required direct dparam '%s'",
- g_param_spec_get_name (param_spec));
-
- dpwrap->update_data = update_data;
-
- g_signal_emit (G_OBJECT (dpman), gst_dpman_signals[NEW_REQUIRED_DPARAM], 0,
- g_param_spec_get_name (param_spec));
-
- return TRUE;
-}
-
-/**
- * gst_dpman_add_required_dparam_array:
- * @dpman: GstDParamManager instance
- * @param_spec: the spacification of the new dparam
- * @unit_name: the unit name of the dparam
- * @update_data: pointer to where the array will be stored
- *
- * Add a mandatory dynamic parameter to the manager, where the values can be
- * updated by storing them into the provided memory location.
- *
- * Returns: true if it was successfully added
- */
-gboolean
-gst_dpman_add_required_dparam_array (GstDParamManager * dpman,
- GParamSpec * param_spec, gchar * unit_name, gpointer update_data)
-{
- GstDParamWrapper *dpwrap;
-
- g_return_val_if_fail (dpman != NULL, FALSE);
- g_return_val_if_fail (GST_IS_DPMAN (dpman), FALSE);
- g_return_val_if_fail (update_data != NULL, FALSE);
-
- dpwrap =
- gst_dpman_new_wrapper (dpman, param_spec, unit_name, GST_DPMAN_ARRAY);
-
- if (!dpwrap) {
- GST_INFO ("failed to obtain a new dparam wrapper");
- return FALSE;
- }
-
- GST_DEBUG ("adding required array dparam '%s'",
- g_param_spec_get_name (param_spec));
-
- dpwrap->update_data = update_data;
-
- g_signal_emit (G_OBJECT (dpman), gst_dpman_signals[NEW_REQUIRED_DPARAM], 0,
- g_param_spec_get_name (param_spec));
-
- return TRUE;
-}
-
-/**
- * gst_dpman_remove_required_dparam:
- * @dpman: GstDParamManager instance
- * @dparam_name: the name of an existing parameter
- *
- * Removes the named dynamic parameter from the manager.
- */
-void
-gst_dpman_remove_required_dparam (GstDParamManager * dpman,
- const gchar * dparam_name)
-{
- GstDParamWrapper *dpwrap;
-
- g_return_if_fail (dpman != NULL);
- g_return_if_fail (GST_IS_DPMAN (dpman));
- g_return_if_fail (dparam_name != NULL);
-
- dpwrap = gst_dpman_get_wrapper (dpman, dparam_name);
-
- g_return_if_fail (dpwrap != NULL);
- g_return_if_fail (dpwrap->dparam == NULL);
-
- GST_DEBUG ("removing required dparam: %s", dparam_name);
-
- g_hash_table_remove (GST_DPMAN_DPARAMS (dpman), dparam_name);
- GST_DPMAN_DPARAMS_LIST (dpman) =
- g_list_remove (GST_DPMAN_DPARAMS_LIST (dpman), dpwrap);
-
- g_free (dpwrap->value);
- g_free (dpwrap);
-}
-
-/**
- * gst_dpman_attach_dparam:
- * @dpman: GstDParamManager instance
- * @dparam_name: a name previously added with gst_dpman_add_required_dparam
- * @dparam: GstDParam instance to attach
- *
- * Adding a parameter controller to a dynamic parameter. Whenever the controller
- * changes, the dynamic parameter of the GstElement will follow.
- *
- * Returns: true if it was successfully attached
- */
-gboolean
-gst_dpman_attach_dparam (GstDParamManager * dpman, const gchar * dparam_name,
- GstDParam * dparam)
-{
- GstDParamWrapper *dpwrap;
-
- g_return_val_if_fail (dpman != NULL, FALSE);
- g_return_val_if_fail (GST_IS_DPMAN (dpman), FALSE);
- g_return_val_if_fail (dparam_name != NULL, FALSE);
- g_return_val_if_fail (dparam != NULL, FALSE);
- g_return_val_if_fail (GST_IS_DPARAM (dparam), FALSE);
- g_return_val_if_fail (dparam != NULL, FALSE);
-
- dpwrap = gst_dpman_get_wrapper (dpman, dparam_name);
-
- if (!dpwrap) {
- GST_INFO ("failed to obtain get the dparam wrapper for parameter '%s'",
- dparam_name);
- return FALSE;
- }
- // FIXME: if these are triggered convert them to messages + returns as well
- g_return_val_if_fail (dpwrap->value != NULL, FALSE);
- g_return_val_if_fail (G_PARAM_SPEC_VALUE_TYPE (dpwrap->param_spec) ==
- GST_DPARAM_TYPE (dparam), FALSE);
-
- dpwrap->dparam = dparam;
- gst_dparam_attach (dparam, dpman, dpwrap->param_spec, dpwrap->unit_name);
-
- return TRUE;
-}
-
-/**
- * gst_dpman_detach_dparam:
- * @dpman: GstDParamManager instance
- * @dparam_name: the name of a parameter with a previously attached GstDParam
- *
- * Removing a parameter controller from a dynamic parameter.
- */
-void
-gst_dpman_detach_dparam (GstDParamManager * dpman, const gchar * dparam_name)
-{
- GstDParamWrapper *dpwrap;
-
- g_return_if_fail (dpman != NULL);
- g_return_if_fail (GST_IS_DPMAN (dpman));
- g_return_if_fail (dparam_name != NULL);
-
- dpwrap = gst_dpman_get_wrapper (dpman, dparam_name);
- g_return_if_fail (dpwrap);
-
- gst_dparam_detach (dpwrap->dparam);
- dpwrap->dparam = NULL;
-
-}
-
-/**
- * gst_dpman_get_dparam:
- * @dpman: GstDParamManager instance
- * @dparam_name: the name of an existing dparam instance
- *
- * Fetches a dparam object that is registered by manager under the given name.
- *
- * Returns: the dparam with the given name - or NULL otherwise
- */
-GstDParam *
-gst_dpman_get_dparam (GstDParamManager * dpman, const gchar * dparam_name)
-{
- GstDParamWrapper *dpwrap;
-
- g_return_val_if_fail (dpman != NULL, NULL);
- g_return_val_if_fail (GST_IS_DPMAN (dpman), NULL);
- g_return_val_if_fail (dparam_name != NULL, NULL);
-
- dpwrap = gst_dpman_get_wrapper (dpman, dparam_name);
-
- if (!dpwrap) {
- GST_INFO ("failed to obtain get the dparam wrapper for parameter '%s'",
- dparam_name);
- return NULL;
- }
-
- return dpwrap->dparam;
-}
-
-/**
- * gst_dpman_get_dparam_type:
- * @dpman: GstDParamManager instance
- * @dparam_name: the name of dparam
- *
- * Fetches the type of the supplied dynamic parameter.
- *
- * Returns: the type that this dparam requires/uses
- */
-GType
-gst_dpman_get_dparam_type (GstDParamManager * dpman, const gchar * dparam_name)
-{
- GstDParamWrapper *dpwrap;
-
- g_return_val_if_fail (dpman != NULL, 0);
- g_return_val_if_fail (GST_IS_DPMAN (dpman), 0);
- g_return_val_if_fail (dparam_name != NULL, 0);
-
- dpwrap = gst_dpman_get_wrapper (dpman, dparam_name);
-
- if (!dpwrap) {
- GST_INFO ("failed to obtain get the dparam wrapper for parameter '%s'",
- dparam_name);
- return 0;
- }
-
- return G_VALUE_TYPE (dpwrap->value);
-}
-
-/**
- * gst_dpman_list_dparam_specs:
- * @dpman: GstDParamManager instance
- *
- * Fetches the list of parameter specifications, that this manager maintains.
- *
- * Returns: the the parameter specifications as a NULL terminated array
- */
-GParamSpec **
-gst_dpman_list_dparam_specs (GstDParamManager * dpman)
-{
- GstDParamWrapper *dpwrap;
- GList *dwraps;
- GParamSpec **param_specs;
- guint x = 0;
-
- g_return_val_if_fail (dpman != NULL, NULL);
- g_return_val_if_fail (GST_IS_DPMAN (dpman), NULL);
-
- dwraps = GST_DPMAN_DPARAMS_LIST (dpman);
-
- param_specs = g_new0 (GParamSpec *, g_list_length (dwraps) + 1);
-
- while (dwraps) {
- dpwrap = (GstDParamWrapper *) dwraps->data;
- param_specs[x++] = dpwrap->param_spec;
- dwraps = g_list_next (dwraps);
- }
- return param_specs;
-}
-
-/**
- * gst_dpman_get_param_spec:
- * @dpman: GstDParamManager instance
- * @dparam_name: the name of dparam
- *
- * Fetches a single parameter specification by its dparam name.
- *
- * Returns: the the parameter specifications for a given name
- */
-GParamSpec *
-gst_dpman_get_param_spec (GstDParamManager * dpman, const gchar * dparam_name)
-{
- GstDParamWrapper *dpwrap;
-
- g_return_val_if_fail (dpman != NULL, NULL);
- g_return_val_if_fail (GST_IS_DPMAN (dpman), NULL);
- g_return_val_if_fail (dparam_name != NULL, NULL);
-
- dpwrap = gst_dpman_get_wrapper (dpman, dparam_name);
- return dpwrap->param_spec;
-}
-
-/**
- * gst_dpman_set_rate:
- * @dpman: GstDParamManager instance
- * @rate: the new the frame/sample rate
- *
- * Sets the frame or sampling rate used by the machine.
- *
- */
-void
-gst_dpman_set_rate (GstDParamManager * dpman, gint rate)
-{
- g_return_if_fail (GST_IS_DPMAN (dpman));
- GST_DPMAN_RATE (dpman) = rate;
-}
-
-/**
- * gst_dpman_register_mode
- * @klass: GstDParamManagerClass class instance
- * @modename: the unique name of the new mode
- * @preprocessfunc: the function which will be called before each buffer is processed
- * @processfunc: the function which may be called throughout the processing of a buffer
- * @setupfunc: the function which initialises the mode when activated
- * @teardownfunc: the function which frees any resources the mode uses
- *
- * Registers a run-mode for the dparam manager. Each such mode has a defined
- * run-time behaviour - that is, they differ in the way dynamic parameter
- * changes are pushed into the underlying GstElements.
- *
- */
-void
-gst_dpman_register_mode (GstDParamManagerClass * klass,
- gchar * modename,
- GstDPMModePreProcessFunction preprocessfunc,
- GstDPMModeProcessFunction processfunc,
- GstDPMModeSetupFunction setupfunc, GstDPMModeTeardownFunction teardownfunc)
-{
- GstDPMMode *mode;
-
- g_return_if_fail (klass != NULL);
- g_return_if_fail (modename != NULL);
- g_return_if_fail (GST_IS_DPMAN_CLASS (klass));
-
- mode = g_new0 (GstDPMMode, 1);
-
- mode->preprocessfunc = preprocessfunc;
- mode->processfunc = processfunc;
- mode->setupfunc = setupfunc;
- mode->teardownfunc = teardownfunc;
-
- g_hash_table_insert (klass->modes, modename, mode);
-}
-
-/**
- * gst_dpman_set_mode
- * @dpman: GstDParamManager instance
- * @modename: the name of the mode to use
- *
- * Activate one of the registered modes.
- *
- * Returns: TRUE if the mode was set, FALSE otherwise
- */
-gboolean
-gst_dpman_set_mode (GstDParamManager * dpman, gchar * modename)
-{
- GstDPMMode *mode = NULL;
- GstDParamManagerClass *oclass;
-
- g_return_val_if_fail (dpman != NULL, FALSE);
- g_return_val_if_fail (GST_IS_DPMAN (dpman), FALSE);
- g_return_val_if_fail (modename != NULL, FALSE);
-
- oclass = (GstDParamManagerClass *) (G_OBJECT_GET_CLASS (dpman));
-
- mode = g_hash_table_lookup (oclass->modes, modename);
- g_return_val_if_fail (mode != NULL, FALSE);
-
- if (GST_DPMAN_MODE (dpman) == mode) {
- GST_DEBUG ("mode %s already set", modename);
- return TRUE;
- }
-
- GST_DEBUG ("setting mode to %s", modename);
- if (GST_DPMAN_MODE (dpman) && GST_DPMAN_TEARDOWNFUNC (dpman)) {
- GST_DPMAN_TEARDOWNFUNC (dpman) (dpman);
- }
-
- GST_DPMAN_MODE (dpman) = mode;
-
- if (GST_DPMAN_SETUPFUNC (dpman)) {
- GST_DPMAN_SETUPFUNC (dpman) (dpman);
- }
-
- return TRUE;
-}
-
-/**
- * gst_dpman_set_parent
- * @dpman: GstDParamManager instance
- * @parent: the element that this GstDParamManager belongs to
- *
- * Set a GstElement that parameters this manager should handle.
- */
-void
-gst_dpman_set_parent (GstDParamManager * dpman, GstElement * parent)
-{
- g_return_if_fail (dpman != NULL);
- g_return_if_fail (GST_IS_DPMAN (dpman));
- g_return_if_fail (parent != NULL);
- g_return_if_fail (GST_IS_ELEMENT (parent));
-
- g_hash_table_insert (_element_registry, parent, dpman);
- gst_object_set_parent (GST_OBJECT (dpman), GST_OBJECT (parent));
- g_signal_connect (G_OBJECT (parent), "state_changed",
- G_CALLBACK (gst_dpman_state_changed), dpman);
-}
-
-/**
- * gst_dpman_get_manager
- * @parent: the element that the desired GstDParamManager belongs to
- *
- * Fetch the GstElement that parameters are handled by this manager.
- *
- * Returns: the GstDParamManager which belongs to this element or NULL
- * if it doesn't exist. Do not call g_object_unref() on it.
- */
-GstDParamManager *
-gst_dpman_get_manager (GstElement * parent)
-{
- GstDParamManager *dpman;
-
- g_return_val_if_fail (parent != NULL, NULL);
- g_return_val_if_fail (GST_IS_ELEMENT (parent), NULL);
-
- dpman = (GstDParamManager *) g_hash_table_lookup (_element_registry, parent);
- /* FIXME: shouldn't this be g_object_ref(dpman); */
- return dpman;
-}
-
-/**
- * gst_dpman_bypass_dparam:
- * @dpman: GstDParamManager instance
- * @dparam_name: the name of dparam
- *
- * If a dparam is attached to this dparam_name, it will be detached
- * and a warning will be issued. This should be called in the _set_property
- * function of an element if the value it changes is also changed by a dparam.
- *
- */
-void
-gst_dpman_bypass_dparam (GstDParamManager * dpman, const gchar * dparam_name)
-{
- GstDParamWrapper *dpwrap;
-
- g_return_if_fail (dpman != NULL);
- g_return_if_fail (GST_IS_DPMAN (dpman));
- g_return_if_fail (dparam_name != NULL);
-
- dpwrap = gst_dpman_get_wrapper (dpman, dparam_name);
- g_return_if_fail (dpwrap != NULL);
-
- if (dpwrap->dparam != NULL) {
- GST_WARNING ("Bypassing attached dparam '%s'. It will be detached",
- dparam_name);
- gst_dpman_detach_dparam (dpman, dparam_name);
- }
-}
-
-// internal methods
-
-static GstDParamWrapper *
-gst_dpman_get_wrapper (GstDParamManager * dpman, const gchar * dparam_name)
-{
- g_return_val_if_fail (dpman != NULL, NULL);
- g_return_val_if_fail (GST_IS_DPMAN (dpman), NULL);
- g_return_val_if_fail (dparam_name != NULL, NULL);
-
- return g_hash_table_lookup (GST_DPMAN_DPARAMS (dpman), dparam_name);
-}
-
-static GstDParamWrapper *
-gst_dpman_new_wrapper (GstDParamManager * dpman,
- GParamSpec * param_spec,
- gchar * unit_name, GstDPMUpdateMethod update_method)
-{
- GstDParamWrapper *dpwrap;
- gchar *dparam_name;
-
- g_return_val_if_fail (dpman != NULL, NULL);
- g_return_val_if_fail (GST_IS_DPMAN (dpman), NULL);
- g_return_val_if_fail (param_spec != NULL, NULL);
- g_return_val_if_fail (gst_unitconv_unit_exists (unit_name), NULL);
-
- dparam_name = g_strdup (g_param_spec_get_name (param_spec));
- g_return_val_if_fail (gst_dpman_get_wrapper (dpman, dparam_name) == NULL,
- NULL);
-
- dpwrap = g_new0 (GstDParamWrapper, 1);
- dpwrap->update_method = update_method;
- dpwrap->value = g_new0 (GValue, 1);
- g_value_init (dpwrap->value, G_PARAM_SPEC_VALUE_TYPE (param_spec));
- dpwrap->param_spec = param_spec;
- dpwrap->unit_name = unit_name;
-
- g_hash_table_insert (GST_DPMAN_DPARAMS (dpman), dparam_name, dpwrap);
- GST_DPMAN_DPARAMS_LIST (dpman) =
- g_list_append (GST_DPMAN_DPARAMS_LIST (dpman), dpwrap);
-
- return dpwrap;
-}
-
-
-static void
-gst_dpman_state_changed (GstElement * element, gint old_state, gint new_state,
- GstDParamManager * dpman)
-{
- GList *dwraps;
- GstDParam *dparam;
- GstDParamWrapper *dpwrap;
-
- g_return_if_fail (dpman != NULL);
- g_return_if_fail (GST_IS_DPMAN (dpman));
-
- if (new_state == GST_STATE_PLAYING) {
- GST_DEBUG ("initialising params");
-
-
- /* force all params to be updated */
- dwraps = GST_DPMAN_DPARAMS_LIST (dpman);
- while (dwraps) {
- dpwrap = (GstDParamWrapper *) dwraps->data;
- dparam = dpwrap->dparam;
-
- if (dparam) {
- GST_DPARAM_READY_FOR_UPDATE (dparam) = TRUE;
- GST_DPARAM_NEXT_UPDATE_TIMESTAMP (dparam) = 0LL;
- }
- /* some dparams treat the first update after the pipeline starts differently */
- dpwrap->update_info = GST_DPARAM_UPDATE_FIRST;
- dwraps = g_list_next (dwraps);
- }
- }
-}
-
-static inline void
-gst_dpman_inline_direct_update (GValue * value, gpointer data)
-{
- switch (G_VALUE_TYPE (value)) {
- case G_TYPE_INT:
- *(gint *) data = g_value_get_int (value);
- break;
- case G_TYPE_INT64:
- *(gint64 *) data = g_value_get_int64 (value);
- break;
- case G_TYPE_FLOAT:
- *(gfloat *) data = g_value_get_float (value);
- break;
- case G_TYPE_DOUBLE:
- *(double *) data = g_value_get_double (value);
- break;
- default:
- break;
- }
-}
-
-static gboolean
-gst_dpman_preprocess_synchronous (GstDParamManager * dpman, guint frames,
- gint64 timestamp)
-{
- GList *dwraps;
- GstDParamWrapper *dpwrap;
-
- g_return_val_if_fail (GST_IS_DPMAN (dpman), FALSE);
-
- /* this basically means don't call GST_DPMAN_PREPROCESS at all */
- dpman->next_update_frame = frames;
- dpman->frames_to_process = frames;
-
- /* now check whether any dparams are ready for an update */
- dwraps = GST_DPMAN_DPARAMS_LIST (dpman);
- while (dwraps) {
- dpwrap = (GstDParamWrapper *) dwraps->data;
-
- if (dpwrap->dparam &&
- GST_DPARAM_READY_FOR_UPDATE (dpwrap->dparam) &&
- GST_DPARAM_NEXT_UPDATE_TIMESTAMP (dpwrap->dparam) <= timestamp) {
-
- switch (dpwrap->update_method) {
-
- /* direct method - set the value directly in the struct of the element */
- case GST_DPMAN_DIRECT:
- GST_DPARAM_DO_UPDATE (dpwrap->dparam, timestamp, dpwrap->value,
- dpwrap->update_info);
- GST_DEBUG ("doing direct update");
-
- gst_dpman_inline_direct_update (dpwrap->value, dpwrap->update_data);
- break;
-
- /* callback method - call the element's callback so it can do what it likes */
- case GST_DPMAN_CALLBACK:
- GST_DPARAM_DO_UPDATE (dpwrap->dparam, timestamp, dpwrap->value,
- dpwrap->update_info);
- GST_DEBUG ("doing callback update");
-
- GST_DPMAN_CALLBACK_UPDATE (dpwrap, dpwrap->value);
- break;
-
- case GST_DPMAN_ARRAY:
- /* FIXME do array method checking here */
- break;
- default:
- break;
- }
-
- if (dpwrap->update_info == GST_DPARAM_UPDATE_FIRST) {
- /* it is not the first update anymore */
- dpwrap->update_info = GST_DPARAM_UPDATE_NORMAL;
- }
- }
- dwraps = g_list_next (dwraps);
- }
-
-
- return FALSE;
-}
-
-static gint
-gst_dpman_dpwrap_compare (const GstDParamWrapper * a,
- const GstDParamWrapper * b)
-{
- if (a->next_update_frame > b->next_update_frame)
- return 1;
- return (a->next_update_frame < b->next_update_frame) ? -1 : 0;
-}
-
-static gboolean
-gst_dpman_preprocess_asynchronous (GstDParamManager * dpman, guint frames,
- gint64 timestamp)
-{
- GList *dwraps;
- GstDParamWrapper *dpwrap;
- gint64 current_time;
- gboolean updates_pending;
-
- g_return_val_if_fail (GST_IS_DPMAN (dpman), FALSE);
-
-
- if (GST_DPMAN_RATE (dpman) == 0) {
- GST_WARNING ("The element hasn't given GstDParamManager a frame rate");
- return FALSE;
- }
- dpman->rate_ratio = (guint) (1000000000LL / (gint64) GST_DPMAN_RATE (dpman));
-
- dpman->time_buffer_starts = timestamp;
- dpman->time_buffer_ends =
- timestamp + ((gint64) frames * (gint64) dpman->rate_ratio);
- dpman->num_frames = frames;
-
- updates_pending = FALSE;
-
- /* now check whether any dparams are ready for an update */
- dwraps = GST_DPMAN_DPARAMS_LIST (dpman);
- while (dwraps) {
- dpwrap = (GstDParamWrapper *) dwraps->data;
-
- dpwrap->next_update_frame = frames;
-
- if (dpwrap->dparam && GST_DPARAM_READY_FOR_UPDATE (dpwrap->dparam)) {
-
- current_time = GST_DPARAM_NEXT_UPDATE_TIMESTAMP (dpwrap->dparam);
- if (current_time > dpman->time_buffer_ends) {
- /* not due for an update in this buffer */
- dwraps = g_list_next (dwraps);
- continue;
- }
- if (current_time < timestamp) {
- current_time = timestamp;
- }
-
- if (current_time == timestamp) {
- /* we are overdue for an update. lets do it now */
-
- GST_DPARAM_DO_UPDATE (dpwrap->dparam, current_time, dpwrap->value,
- dpwrap->update_info);
-
- if (dpwrap->update_info == GST_DPARAM_UPDATE_FIRST) {
- /* it is not the first update anymore */
- dpwrap->update_info = GST_DPARAM_UPDATE_NORMAL;
- }
-
- switch (dpwrap->update_method) {
-
- /* direct method - set the value directly in the struct of the element */
- case GST_DPMAN_DIRECT:
- GST_DEBUG ("doing direct update");
- gst_dpman_inline_direct_update (dpwrap->value, dpwrap->update_data);
- break;
-
- /* callback method - call the element's callback so it can do what it likes */
- case GST_DPMAN_CALLBACK:
- GST_DEBUG ("doing callback update");
- GST_DPMAN_CALLBACK_UPDATE (dpwrap, dpwrap->value);
- break;
- default:
- break;
- }
-
- current_time = GST_DPARAM_NEXT_UPDATE_TIMESTAMP (dpwrap->dparam);
-
- if (!GST_DPARAM_READY_FOR_UPDATE (dpwrap->dparam) ||
- current_time > dpman->time_buffer_ends) {
- /* not due for an update in this buffer */
- dwraps = g_list_next (dwraps);
- continue;
- }
- }
-
- dpwrap->next_update_frame =
- (guint) (current_time - timestamp) / dpman->rate_ratio;
- updates_pending = TRUE;
-
- GST_DEBUG ("timestamp start: %"
- G_GINT64_FORMAT " end: %"
- G_GINT64_FORMAT " current: %"
- G_GINT64_FORMAT, timestamp, dpman->time_buffer_ends, current_time);
-
- }
- dwraps = g_list_next (dwraps);
- }
- if (updates_pending) {
- GST_DPMAN_DPARAMS_LIST (dpman) =
- g_list_sort (GST_DPMAN_DPARAMS_LIST (dpman),
- (GCompareFunc) gst_dpman_dpwrap_compare);
- dwraps = GST_DPMAN_DPARAMS_LIST (dpman);
- dpwrap = (GstDParamWrapper *) dwraps->data;
-
- dpman->next_update_frame = dpwrap->next_update_frame;
- dpman->frames_to_process = dpman->next_update_frame;
-
- GST_DEBUG ("next update frame %u, frames to process %u",
- dpman->next_update_frame, dpman->frames_to_process);
- return TRUE;
- }
-
- dpman->next_update_frame = frames;
- dpman->frames_to_process = frames;
- return FALSE;
-}
-
-static gboolean
-gst_dpman_process_asynchronous (GstDParamManager * dpman, guint frame_count)
-{
- GstDParamWrapper *dpwrap;
- GList *dwraps;
- gint64 current_time;
- gboolean needs_resort = FALSE;
-
- dwraps = GST_DPMAN_DPARAMS_LIST (dpman);
- dpwrap = (GstDParamWrapper *) dwraps->data;
-
- GST_DEBUG ("in gst_dpman_process_asynchronous");
-
- if (frame_count >= dpman->num_frames) {
- GST_WARNING ("there is no more buffer to process");
- dpman->next_update_frame = dpman->num_frames;
- dpman->frames_to_process = 0;
- return FALSE;
- }
-
- if (frame_count != dpwrap->next_update_frame) {
- GST_WARNING ("frame count %u does not match update frame %u",
- frame_count, dpwrap->next_update_frame);
- }
-
- while (dpwrap) {
-
- current_time = GST_DPARAM_NEXT_UPDATE_TIMESTAMP (dpwrap->dparam);
- GST_DPARAM_DO_UPDATE (dpwrap->dparam, current_time, dpwrap->value,
- dpwrap->update_info);
- switch (dpwrap->update_method) {
-
- /* direct method - set the value directly in the struct of the element */
- case GST_DPMAN_DIRECT:
- GST_DEBUG ("doing direct update");
- gst_dpman_inline_direct_update (dpwrap->value, dpwrap->update_data);
- break;
-
- /* callback method - call the element's callback so it can do what it likes */
- case GST_DPMAN_CALLBACK:
- GST_DEBUG ("doing callback update");
- GST_DPMAN_CALLBACK_UPDATE (dpwrap, dpwrap->value);
- break;
- default:
- break;
- }
-
- dpwrap->next_update_frame = dpman->num_frames;
- needs_resort = TRUE;
-
- if (GST_DPARAM_READY_FOR_UPDATE (dpwrap->dparam)) {
- current_time = GST_DPARAM_NEXT_UPDATE_TIMESTAMP (dpwrap->dparam);
- if (current_time <= dpman->time_buffer_ends) {
- dpwrap->next_update_frame =
- (guint) (current_time -
- dpman->time_buffer_starts) / dpman->rate_ratio;
- }
- }
-
- if ((dwraps = g_list_next (dwraps))) {
- dpwrap = (GstDParamWrapper *) dwraps->data;
- if (frame_count == dpwrap->next_update_frame) {
- continue;
- }
- }
- dpwrap = NULL;
- }
-
- if (needs_resort && g_list_length (GST_DPMAN_DPARAMS_LIST (dpman)) > 1) {
- GST_DPMAN_DPARAMS_LIST (dpman) =
- g_list_sort (GST_DPMAN_DPARAMS_LIST (dpman),
- (GCompareFunc) gst_dpman_dpwrap_compare);
- }
-
- dwraps = GST_DPMAN_DPARAMS_LIST (dpman);
- dpwrap = (GstDParamWrapper *) dwraps->data;
-
- if (dpwrap->next_update_frame == dpman->num_frames) {
- dpman->next_update_frame = dpman->num_frames;
- dpman->frames_to_process = dpman->num_frames - frame_count;
- GST_DEBUG ("no more updates, frames to process %u",
- dpman->frames_to_process);
- } else {
- dpman->next_update_frame = dpwrap->next_update_frame;
- dpman->frames_to_process = dpman->next_update_frame - frame_count;
- GST_DEBUG ("next update frame %u, frames to process %u",
- dpman->next_update_frame, dpman->frames_to_process);
- }
-
- return TRUE;
-}
-
-static gboolean
-gst_dpman_preprocess_noop (GstDParamManager * dpman, guint frames,
- gint64 timestamp)
-{
- dpman->next_update_frame = frames;
- dpman->frames_to_process = frames;
- return FALSE;
-}
-
-static gboolean
-gst_dpman_process_noop (GstDParamManager * dpman, guint frame_count)
-{
- GST_WARNING
- ("gst_dpman_process_noop should never be called - something might be wrong with your processing loop");
- return FALSE;
-}
-
-static void
-gst_dpman_setup_synchronous (GstDParamManager * dpman)
-{
- g_return_if_fail (GST_IS_DPMAN (dpman));
-
-}
-
-static void
-gst_dpman_setup_asynchronous (GstDParamManager * dpman)
-{
- g_return_if_fail (GST_IS_DPMAN (dpman));
-
-}
-
-static void
-gst_dpman_setup_disabled (GstDParamManager * dpman)
-{
- g_return_if_fail (GST_IS_DPMAN (dpman));
-
-}
-
-static void
-gst_dpman_teardown_synchronous (GstDParamManager * dpman)
-{
- g_return_if_fail (GST_IS_DPMAN (dpman));
-
-}
-
-static void
-gst_dpman_teardown_asynchronous (GstDParamManager * dpman)
-{
- g_return_if_fail (GST_IS_DPMAN (dpman));
-
-}
-
-static void
-gst_dpman_teardown_disabled (GstDParamManager * dpman)
-{
- g_return_if_fail (GST_IS_DPMAN (dpman));
-
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) 2001 Steve Baker <stevebaker_org@yahoo.co.uk>
- *
- * gstdparammanager.h: Dynamic Parameter group functionality
- *
- * 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., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GST_DPMAN_H__
-#define __GST_DPMAN_H__
-
-#include <gst/gstelement.h>
-#include <gst/control/dparamcommon.h>
-#include <gst/control/dparam.h>
-#include <gst/control/unitconvert.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_DPMAN (gst_dpman_get_type ())
-#define GST_DPMAN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_DPMAN,GstDParamManager))
-#define GST_DPMAN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_DPMAN,GstDParamManager))
-#define GST_IS_DPMAN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_DPMAN))
-#define GST_IS_DPMAN_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_DPMAN))
-
-#define GST_DPMAN_NAME(dpman) (GST_OBJECT_NAME(dpman))
-#define GST_DPMAN_PARENT(dpman) (GST_OBJECT_PARENT(dpman))
-#define GST_DPMAN_DPARAMS(dpman) ((dpman)->dparams)
-#define GST_DPMAN_DPARAMS_LIST(dpman) ((dpman)->dparams_list)
-
-#define GST_DPMAN_MODE_NAME(dpman) ((dpman)->mode_name)
-#define GST_DPMAN_MODE(dpman) ((dpman)->mode)
-#define GST_DPMAN_RATE(dpman) ((dpman)->rate)
-#define GST_DPMAN_FRAMES_TO_PROCESS(dpman) ((dpman)->frames_to_process)
-#define GST_DPMAN_NEXT_UPDATE_FRAME(dpman) ((dpman)->next_update_frame)
-
-typedef enum {
- GST_DPMAN_CALLBACK,
- GST_DPMAN_DIRECT,
- GST_DPMAN_ARRAY
-} GstDPMUpdateMethod;
-
-typedef struct _GstDParamManagerClass GstDParamManagerClass;
-typedef struct _GstDPMMode GstDPMMode;
-typedef struct _GstDParamWrapper GstDParamWrapper;
-typedef struct _GstDParamAsyncToUpdate GstDParamAsyncToUpdate;
-
-typedef gboolean (*GstDPMModePreProcessFunction) (GstDParamManager *dpman, guint frames, gint64 timestamp);
-typedef gboolean (*GstDPMModeProcessFunction) (GstDParamManager *dpman, guint frame_count);
-typedef void (*GstDPMModeSetupFunction) (GstDParamManager *dpman);
-typedef void (*GstDPMModeTeardownFunction) (GstDParamManager *dpman);
-
-typedef void (*GstDPMUpdateFunction) (const GValue *value, gpointer data);
-
-struct _GstDParamManager {
- GstObject object;
-
- GHashTable *dparams;
- GList *dparams_list;
-
- /* mode state */
- GstDPMMode* mode;
- gchar *mode_name;
-
- guint frames_to_process; /* number of frames in the current buffer */
- guint next_update_frame; /* frame when the next update is required */
-
- /* the following data is only used for async mode */
- guint rate; /* the frame/sample rate - */
- guint rate_ratio; /* used to convert between samples and time */
- guint num_frames; /* number of frames in the current buffer */
-
- gint64 time_buffer_ends;
- gint64 time_buffer_starts;
-};
-
-struct _GstDParamManagerClass {
- GstObjectClass parent_class;
- GHashTable *modes;
- /* signal callbacks */
- void (*new_required_dparam) (GstDParamManager *dpman, const gchar* dparam_name);
-};
-
-struct _GstDPMMode {
- GstDPMModePreProcessFunction preprocessfunc;
- GstDPMModeProcessFunction processfunc;
- GstDPMModeSetupFunction setupfunc;
- GstDPMModeTeardownFunction teardownfunc;
-};
-
-struct _GstDParamWrapper {
- GParamSpec* param_spec;
- GValue *value;
- GstDParam *dparam;
-
- guint next_update_frame;
-
- GstDPMUpdateMethod update_method;
- gpointer update_data;
- GstDPMUpdateFunction update_func;
-
- gchar *unit_name;
- GstDParamUpdateInfo update_info;
-};
-
-struct _GstDParamAsyncToUpdate {
- guint frame;
- GValue *value;
- GstDParamWrapper *dpwrap;
-};
-
-#define GST_DPMAN_PREPROCESSFUNC(dpman) (((dpman)->mode)->preprocessfunc)
-#define GST_DPMAN_PROCESSFUNC(dpman) (((dpman)->mode)->processfunc)
-#define GST_DPMAN_SETUPFUNC(dpman) (((dpman)->mode)->setupfunc)
-#define GST_DPMAN_TEARDOWNFUNC(dpman) (((dpman)->mode)->teardownfunc)
-
-#define GST_DPMAN_PREPROCESS(dpman, buffer_size, timestamp) \
- (GST_DPMAN_PREPROCESSFUNC(dpman)(dpman, buffer_size, timestamp))
-
-#define GST_DPMAN_PROCESS(dpman, frame_count) \
- (frame_count < dpman->next_update_frame || \
- (dpman->next_update_frame < dpman->num_frames \
- && (GST_DPMAN_PROCESSFUNC(dpman)(dpman, frame_count))))
-
-/* FIXME: this should pass dpwrap->dparam as the first arg
- * the first arg in callback is usually object that triggered the callback
- */
-#define GST_DPMAN_CALLBACK_UPDATE(dpwrap, value) ((dpwrap->update_func)(value, dpwrap->update_data))
-
-void _gst_dpman_initialize(void);
-GType gst_dpman_get_type (void);
-GstDParamManager* gst_dpman_new (gchar *name, GstElement *parent);
-void gst_dpman_set_parent (GstDParamManager *dpman, GstElement *parent);
-GstDParamManager* gst_dpman_get_manager (GstElement *parent);
-
-gboolean gst_dpman_add_required_dparam_callback (GstDParamManager *dpman,
- GParamSpec *param_spec,
- gchar *unit_name,
- GstDPMUpdateFunction update_func,
- gpointer update_data);
-gboolean gst_dpman_add_required_dparam_direct (GstDParamManager *dpman,
- GParamSpec *param_spec,
- gchar *unit_name,
- gpointer update_data);
-
-gboolean gst_dpman_add_required_dparam_array (GstDParamManager *dpman,
- GParamSpec *param_spec,
- gchar *unit_name,
- gpointer update_data);
-
-void gst_dpman_remove_required_dparam (GstDParamManager *dpman, const gchar *dparam_name);
-gboolean gst_dpman_attach_dparam (GstDParamManager *dpman, const gchar *dparam_name, GstDParam *dparam);
-void gst_dpman_detach_dparam (GstDParamManager *dpman, const gchar *dparam_name);
-GstDParam* gst_dpman_get_dparam(GstDParamManager *dpman, const gchar *dparam_name);
-GType gst_dpman_get_dparam_type (GstDParamManager *dpman, const gchar *dparam_name);
-
-GParamSpec** gst_dpman_list_dparam_specs(GstDParamManager *dpman);
-GParamSpec* gst_dpman_get_param_spec (GstDParamManager *dpman, const gchar *dparam_name);
-void gst_dpman_dparam_spec_has_changed (GstDParamManager *dpman, const gchar *dparam_name);
-
-void gst_dpman_set_rate(GstDParamManager *dpman, gint rate);
-void gst_dpman_bypass_dparam(GstDParamManager *dpman, const gchar *dparam_name);
-
-gboolean gst_dpman_set_mode(GstDParamManager *dpman, gchar *modename);
-void gst_dpman_register_mode (GstDParamManagerClass *klass,
- gchar *modename,
- GstDPMModePreProcessFunction preprocessfunc,
- GstDPMModeProcessFunction processfunc,
- GstDPMModeSetupFunction setupfunc,
- GstDPMModeTeardownFunction teardownfunc);
-
-G_END_DECLS
-
-#endif /* __GST_DPMAN_H__ */
+++ /dev/null
-/* GStreamer
- * Copyright (C) 2001 Steve Baker <stevebaker_org@yahoo.co.uk>
- *
- * gstdplinearinterp.c: linear interpolation dynamic parameter
- *
- * 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., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include "dplinearinterp.h"
-
-static void gst_dp_linint_class_init (GstDParamClass * klass);
-static void gst_dp_linint_base_class_init (GstDParamClass * klass);
-static void gst_dp_linint_init (GstDParam * dp_linint);
-
-GType
-gst_dp_linint_get_type (void)
-{
- static GType dp_linint_type = 0;
-
- if (!dp_linint_type) {
- static const GTypeInfo dp_linint_info = {
- sizeof (GstDParamClass),
- (GBaseInitFunc) gst_dp_linint_base_class_init,
- NULL,
- (GClassInitFunc) gst_dp_linint_class_init,
- NULL,
- NULL,
- sizeof (GstDParam),
- 0,
- (GInstanceInitFunc) gst_dp_linint_init,
- };
-
- dp_linint_type =
- g_type_register_static (GST_TYPE_DPARAM, "GstDParamLinInterp",
- &dp_linint_info, 0);
- }
- return dp_linint_type;
-}
-
-static void
-gst_dp_linint_base_class_init (GstDParamClass * klass)
-{
-
-}
-
-static void
-gst_dp_linint_class_init (GstDParamClass * klass)
-{
-
-}
-
-static void
-gst_dp_linint_init (GstDParam * dp_linint)
-{
- g_return_if_fail (dp_linint != NULL);
-}
-
-/**
- * gst_dp_linint_new:
- * @type: the type that this dp_linint will store
- *
- * Returns: a new instance of GstDParam
- */
-GstDParam *
-gst_dp_linint_new (GType type)
-{
- GstDParam *dparam;
- GstDParamLinInterp *dp_linint;
-
- dp_linint = g_object_new (gst_dp_linint_get_type (), NULL);
- dparam = GST_DPARAM (dp_linint);
-
- return dparam;
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) 2001 Steve Baker <stevebaker_org@yahoo.co.uk>
- *
- * gstdplinearinterp.h: linear interpolation dynamic parameter
- *
- * 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., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-
-#ifndef __GST_DP_LININT_H__
-#define __GST_DP_LININT_H__
-
-#include <gst/gstobject.h>
-#include "dparam.h"
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_DP_LININT (gst_dp_linint_get_type ())
-#define GST_DP_LININT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_DP_LININT,GstDParamLinInterp))
-#define GST_DP_LININT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_DP_LININT,GstDParamLinInterp))
-#define GST_IS_DP_LININT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_DP_LININT))
-#define GST_IS_DP_LININT_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_DP_LININT))
-
-typedef struct _GstDParamLinInterp GstDParamLinInterp;
-typedef struct _GstDParamLinInterpClass GstDParamLinInterpClass;
-
-struct _GstDParamLinInterp {
- GstDParam dparam;
-
-};
-
-struct _GstDParamLinInterpClass {
- GstDParamClass parent_class;
-
- /* signal callbacks */
-};
-
-GType gst_dp_linint_get_type (void);
-GstDParam* gst_dp_linint_new (GType type);
-
-G_END_DECLS
-
-#endif /* __GST_DP_LININT_H__ */
+++ /dev/null
-/* GStreamer
- * Copyright (C) 2001 Steve Baker <stevebaker_org@yahoo.co.uk>
- *
- * unitconvert.c: Conversion between units of measurement
- *
- * 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., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "unitconvert.h"
-#include <gst/gstinfo.h>
-
-static GHashTable *_gst_units;
-static GHashTable *_gst_unit_domain_defaults;
-static gboolean _gst_unitconv_init_done = FALSE;
-
-typedef struct _GstUnit GstUnit;
-
-struct _GstUnit
-{
- GParamSpec *unit_spec;
- const gchar *domain_name;
- gboolean domain_default;
- gboolean logarithmic;
- GHashTable *convert_to_funcs;
- GSList *convert_paramspecs;
-};
-
-static void gst_unitconv_add_core_converters (void);
-
-static void gst_unitconv_class_init (GstUnitConvertClass * klass);
-static void gst_unitconv_init (GstUnitConvert * unitconv);
-static void gst_unitconv_dispose (GObject * object);
-
-GType
-gst_unitconv_get_type (void)
-{
- static GType unitconv_type = 0;
-
- if (!unitconv_type) {
- static const GTypeInfo unitconv_info = {
- sizeof (GstUnitConvertClass),
- NULL,
- NULL,
- (GClassInitFunc) gst_unitconv_class_init,
- NULL,
- NULL,
- sizeof (GstUnitConvert),
- 0,
- (GInstanceInitFunc) gst_unitconv_init,
- };
-
- unitconv_type =
- g_type_register_static (GST_TYPE_OBJECT, "GstUnitConvert",
- &unitconv_info, 0);
- }
- return unitconv_type;
-}
-
-static void
-gst_unitconv_class_init (GstUnitConvertClass * klass)
-{
- GObjectClass *gobject_class;
- GstUnitConvertClass *unitconv_class;
- GstObjectClass *gstobject_class;
-
- gobject_class = (GObjectClass *) klass;
- unitconv_class = (GstUnitConvertClass *) klass;
- gstobject_class = (GstObjectClass *) klass;
-
- gobject_class->dispose = gst_unitconv_dispose;
-
-}
-
-static void
-gst_unitconv_init (GstUnitConvert * unitconv)
-{
- g_return_if_fail (unitconv != NULL);
-
- unitconv->convert_func_chain = NULL;
- unitconv->convert_params = g_hash_table_new (g_str_hash, g_str_equal);
-}
-
-GstUnitConvert *
-gst_unitconv_new ()
-{
- GstUnitConvert *unitconv;
-
- unitconv = g_object_new (gst_unitconv_get_type (), NULL);
-
- return unitconv;
-}
-
-static void
-gst_unitconv_init_for_change_state (GstUnitConvert * unitconv)
-{
- unitconv->convert_func_chain = NULL;
-}
-
-gboolean
-gst_unitconv_set_convert_units (GstUnitConvert * unitconv,
- gchar * from_unit_named, gchar * to_unit_named)
-{
- GHashTable *convert_funcs;
- GstUnit *from_unit, *to_unit;
- GstUnitConvertFunc convert_func;
-
- g_return_val_if_fail (unitconv != NULL, FALSE);
- g_return_val_if_fail (from_unit_named != NULL, FALSE);
- g_return_val_if_fail (to_unit_named != NULL, FALSE);
- g_return_val_if_fail (GST_IS_UNIT_CONVERT (unitconv), FALSE);
-
- from_unit = g_hash_table_lookup (_gst_units, from_unit_named);
- to_unit = g_hash_table_lookup (_gst_units, to_unit_named);
-
- g_return_val_if_fail (from_unit != NULL, FALSE);
- g_return_val_if_fail (to_unit != NULL, FALSE);
-
- convert_funcs = from_unit->convert_to_funcs;
-
- convert_func = g_hash_table_lookup (convert_funcs, to_unit);
- if (convert_func == NULL) {
- g_warning ("cannot convert from %s to %s", from_unit_named, to_unit_named);
- }
-
- gst_unitconv_init_for_change_state (unitconv);
-
- unitconv->convert_func_chain =
- g_slist_append (unitconv->convert_func_chain, convert_func);
-
-
- return TRUE;
-}
-
-gboolean
-gst_unitconv_convert_value (GstUnitConvert * unitconv, GValue * from_value,
- GValue * to_value)
-{
- GstUnitConvertFunc convert_func;
- GSList *convert_func_chain;
-
- g_return_val_if_fail (unitconv->convert_func_chain != NULL, FALSE);
-
- /* only do this until we can chain convert funcs */
- g_return_val_if_fail (g_slist_length (unitconv->convert_func_chain) == 1,
- FALSE);
-
- convert_func_chain = unitconv->convert_func_chain;
-
- convert_func = (GstUnitConvertFunc) (convert_func_chain);
- convert_func (unitconv, from_value, to_value);
-
- return TRUE;
-}
-
-gboolean
-gst_unitconv_unit_exists (gchar * unit_name)
-{
- g_return_val_if_fail (unit_name != NULL, FALSE);
- return (g_hash_table_lookup (_gst_units, unit_name) != NULL);
-}
-
-gboolean
-gst_unitconv_unit_is_logarithmic (gchar * unit_name)
-{
- GstUnit *unit;
-
- g_return_val_if_fail (unit_name != NULL, FALSE);
-
- unit = g_hash_table_lookup (_gst_units, unit_name);
- g_return_val_if_fail (unit != NULL, FALSE);
-
- return unit->logarithmic;
-}
-
-GParamSpec *
-gst_unitconv_unit_spec (gchar * unit_name)
-{
- GstUnit *unit;
-
- g_return_val_if_fail (unit_name != NULL, FALSE);
-
- unit = g_hash_table_lookup (_gst_units, unit_name);
- g_return_val_if_fail (unit != NULL, FALSE);
-
- return unit->unit_spec;
-}
-
-static void
-gst_unitconv_dispose (GObject * object)
-{
-
-}
-
-
-void
-_gst_unitconv_initialize (void)
-{
- if (_gst_unitconv_init_done)
- return;
-
- _gst_unitconv_init_done = TRUE;
-
- _gst_units = g_hash_table_new (g_str_hash, g_str_equal);
- _gst_unit_domain_defaults = g_hash_table_new (g_str_hash, g_str_equal);
-
- /* frequency based units */
-
- gst_unitconv_register_unit ("frequency", TRUE, TRUE,
- g_param_spec_float ("hertz", "Hz", "Frequency in hertz",
- 0, G_MAXFLOAT, 0, 0));
-
- gst_unitconv_register_unit ("frequency", FALSE, TRUE,
- g_param_spec_float ("hertz-rate-bound", "Hz",
- "Frequency in hertz, bound by the sample rate", 0.0, G_MAXFLOAT, 0.0,
- 0));
-
- gst_unitconv_register_unit ("frequency", FALSE, FALSE,
- g_param_spec_string ("twelve-tone-scale", "note",
- "Name of the note from the western twelve tone scale", "C", 0));
-
- gst_unitconv_register_unit ("frequency", FALSE, FALSE,
- g_param_spec_int ("midi-note", "midi note",
- "MIDI note value of the frequency", 1, 127, 1, 0));
-
- /* time based units */
- gst_unitconv_register_unit ("time", TRUE, FALSE,
- g_param_spec_float ("seconds", "s", "Time in seconds",
- -G_MAXFLOAT, G_MAXFLOAT, 0, 0));
-
- gst_unitconv_register_unit ("time", FALSE, FALSE,
- g_param_spec_int64 ("nanoseconds", "ns", "Time in nanoseconds",
- G_MININT64, G_MAXINT64, 0, 0));
-
- gst_unitconv_register_unit ("time", FALSE, FALSE,
- g_param_spec_int64 ("samples", "samples", "Time in number of samples",
- G_MININT64, G_MAXINT64, 0, 0));
-
- gst_unitconv_register_convert_property ("samples",
- g_param_spec_int ("samplerate", "samplerate", "samplerate",
- 0, G_MAXINT, 0, G_PARAM_READWRITE));
-
-
- /* magnitude based units */
- gst_unitconv_register_unit ("magnitude", TRUE, FALSE,
- g_param_spec_float ("scalar", "scalar", "Magnitude as a scalar",
- -G_MAXFLOAT, G_MAXFLOAT, 0, 0));
-
- gst_unitconv_register_unit ("magnitude", FALSE, FALSE,
- g_param_spec_int ("scalar-int", "scalar int",
- "Magnitude as an integer scalar", G_MININT, G_MAXINT, 0, 0));
-
- gst_unitconv_register_unit ("magnitude", FALSE, TRUE,
- g_param_spec_float ("decibel", "dB", "Magnitude in decibels",
- -G_MAXFLOAT, G_MAXFLOAT, 0, 0));
-
- gst_unitconv_register_unit ("magnitude", FALSE, FALSE,
- g_param_spec_float ("percent", "%", "Magnitude in percent",
- -G_MAXFLOAT, G_MAXFLOAT, 0, 0));
-
- /* generic units */
- gst_unitconv_register_unit ("float_default", TRUE, FALSE,
- g_param_spec_float ("float", "float", "Float value",
- -G_MAXFLOAT, G_MAXFLOAT, 0, 0));
-
- gst_unitconv_register_unit ("int_default", TRUE, FALSE,
- g_param_spec_int ("int", "int", "Integer value",
- G_MININT, G_MAXINT, 0, 0));
-
- gst_unitconv_register_unit ("int64_default", TRUE, FALSE,
- g_param_spec_int64 ("int64", "int64", "64 bit integer value",
- G_MININT, G_MAXINT, 0, 0));
-
-
- gst_unitconv_add_core_converters ();
-
-}
-
-gboolean
-gst_unitconv_register_unit (const gchar * domain_name,
- gboolean is_domain_default, gboolean is_logarithmic, GParamSpec * unit_spec)
-{
- GstUnit *unit;
- gchar *unit_name;
-
- g_return_val_if_fail (unit_spec != NULL, FALSE);
- g_return_val_if_fail (G_IS_PARAM_SPEC (unit_spec), FALSE);
- g_return_val_if_fail (domain_name != NULL, FALSE);
-
- unit_name = g_strdup (g_param_spec_get_name (unit_spec));
-
- /* check if this unit name already exists */
- if (g_hash_table_lookup (_gst_units, unit_name) != NULL) {
- g_free (unit_name);
- return FALSE;
- }
- if (is_domain_default) {
- /* check if an default unit already exists for this domain */
- g_return_val_if_fail (g_hash_table_lookup (_gst_unit_domain_defaults,
- domain_name) == NULL, FALSE);
- }
-
- GST_DEBUG ("creating unit: %s", unit_name);
-
- unit = g_new0 (GstUnit, 1);
-
- unit->unit_spec = unit_spec;
- unit->domain_name = domain_name;
- unit->domain_default = is_domain_default;
- unit->logarithmic = is_logarithmic;
- unit->convert_to_funcs = g_hash_table_new (NULL, NULL);
- /* unit->convert_properties = g_hash_table_new(g_str_hash,g_str_equal); */
-
- g_hash_table_insert (_gst_units, unit_name, unit);
-
- if (is_domain_default) {
- g_hash_table_insert (_gst_unit_domain_defaults, g_strdup (domain_name),
- unit);
- }
-
- return TRUE;
-}
-
-gboolean
-gst_unitconv_register_convert_func (gchar * from_unit_named,
- gchar * to_unit_named, GstUnitConvertFunc convert_func)
-{
- GHashTable *convert_funcs;
- GstUnit *from_unit, *to_unit;
-
- g_return_val_if_fail (from_unit_named != NULL, FALSE);
- g_return_val_if_fail (to_unit_named != NULL, FALSE);
-
- from_unit = g_hash_table_lookup (_gst_units, from_unit_named);
- to_unit = g_hash_table_lookup (_gst_units, to_unit_named);
-
- g_return_val_if_fail (from_unit != NULL, FALSE);
- g_return_val_if_fail (to_unit != NULL, FALSE);
-
- convert_funcs = from_unit->convert_to_funcs;
-
- g_return_val_if_fail (g_hash_table_lookup (convert_funcs, to_unit) == NULL,
- FALSE);
-
- GST_DEBUG ("adding unit converter from %s to %s",
- g_param_spec_get_name (from_unit->unit_spec),
- g_param_spec_get_name (to_unit->unit_spec));
-
- g_hash_table_insert (convert_funcs, to_unit, convert_func);
-
- return TRUE;
-}
-
-gboolean
-gst_unitconv_register_convert_property (gchar * unit_name,
- GParamSpec * convert_prop_spec)
-{
- GstUnit *unit;
-
- g_return_val_if_fail (unit_name != NULL, FALSE);
- g_return_val_if_fail (convert_prop_spec != NULL, FALSE);
- unit = g_hash_table_lookup (_gst_units, unit_name);
-
- g_return_val_if_fail (unit != NULL, FALSE);
-
- unit->convert_paramspecs =
- g_slist_append (unit->convert_paramspecs, convert_prop_spec);
-
- return TRUE;
-}
-
-static void
-gst_unitconv_time_seconds_to_nanoseconds (GstUnitConvert * unitconv,
- GValue * seconds_val, GValue * nanos_val)
-{
-
- g_value_set_int64 (nanos_val,
- (gint64) (g_value_get_float (seconds_val) * 1000000000.0));
-}
-
-static void
-gst_unitconv_time_nanoseconds_to_seconds (GstUnitConvert * unitconv,
- GValue * nanos_val, GValue * seconds_val)
-{
- g_value_set_float (seconds_val,
- ((gfloat) g_value_get_int64 (nanos_val)) / 1000000000.0);
-}
-
-static void
-gst_unitconv_time_seconds_to_samples (GstUnitConvert * unitconv,
- GValue * seconds_val, GValue * samples_val)
-{
- /* GValue *samplerate;
- GValue *samplerate = g_hash_table_lookup(unitconv->currentToUnit->convert_properties, "samplerate");
- g_value_set_int64(samples_val,
- (gint64)(g_value_get_float(seconds_val) * (gfloat)g_value_get_int(samplerate))); */
-}
-
-static void
-gst_unitconv_time_samples_to_seconds (GstUnitConvert * unitconv,
- GValue * samples_val, GValue * seconds_val)
-{
- /* GValue *samplerate;
- GValue *samplerate = g_hash_table_lookup(unitconv->currentFromUnit->convert_properties, "samplerate");
- g_value_set_float(seconds_val,
- ((gfloat)g_value_get_int64(samples_val)) / (gfloat)g_value_get_int(samplerate)); */
-}
-
-static void
-gst_unitconv_magnitude_scalar_to_percent (GstUnitConvert * unitconv,
- GValue * scalar_val, GValue * percent_val)
-{
- g_value_set_float (percent_val, g_value_get_float (scalar_val) * 100.0);
-}
-
-static void
-gst_unitconv_magnitude_percent_to_scalar (GstUnitConvert * unitconv,
- GValue * percent_val, GValue * scalar_val)
-{
- g_value_set_float (scalar_val, g_value_get_float (percent_val) / 100.0);
-}
-
-static void
-gst_unitconv_add_core_converters (void)
-{
-
- gst_unitconv_register_convert_func ("nanoseconds", "seconds",
- gst_unitconv_time_nanoseconds_to_seconds);
- gst_unitconv_register_convert_func ("seconds", "nanoseconds",
- gst_unitconv_time_seconds_to_nanoseconds);
- gst_unitconv_register_convert_func ("seconds", "samples",
- gst_unitconv_time_seconds_to_samples);
- gst_unitconv_register_convert_func ("samples", "seconds",
- gst_unitconv_time_samples_to_seconds);
-
- gst_unitconv_register_convert_func ("scalar", "percent",
- gst_unitconv_magnitude_scalar_to_percent);
- gst_unitconv_register_convert_func ("percent", "scalar",
- gst_unitconv_magnitude_percent_to_scalar);
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) 2001 Steve Baker <stevebaker_org@yahoo.co.uk>
- *
- * unitconvert.c: Conversion between units of measurement
- *
- * 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., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GST_UNITCONVERT_H__
-#define __GST_UNITCONVERT_H__
-
-#include <gst/gstobject.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_UNIT_CONVERT (gst_unitconv_get_type ())
-#define GST_UNIT_CONVERT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_UNIT_CONVERT,GstUnitConvert))
-#define GST_UNIT_CONVERT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_UNIT_CONVERT,GstUnitConvert))
-#define GST_IS_UNIT_CONVERT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_UNIT_CONVERT))
-#define GST_IS_UNIT_CONVERT_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_UNIT_CONVERT))
-
-#define GST_UNIT_CONVERT_NAME(unitconv) (GST_OBJECT_NAME(unitconv))
-#define GST_UNIT_CONVERT_PARENT(unitconv) (GST_OBJECT_PARENT(unitconv))
-
-typedef struct _GstUnitConvertClass GstUnitConvertClass;
-typedef struct _GstUnitConvert GstUnitConvert;
-
-typedef void (*GstUnitConvertFunc) (GstUnitConvert *unitconv, GValue *from_val, GValue *to_val);
-
-struct _GstUnitConvert {
- GstObject object;
-
- GHashTable *convert_params;
- GSList *convert_func_chain;
- GSList *temp_gvalues;
-};
-
-struct _GstUnitConvertClass {
- GstObjectClass parent_class;
-
- /* signal callbacks */
-};
-
-GType gst_unitconv_get_type (void);
-
-GstUnitConvert* gst_unitconv_new (void);
-void _gst_unitconv_initialize (void);
-
-gboolean gst_unitconv_set_convert_units(GstUnitConvert *unitconv, gchar *from_unit_named, gchar *to_unit_named);
-gboolean gst_unitconv_convert_value(GstUnitConvert *unitconv, GValue *from_value, GValue *to_value);
-
-GParamSpec* gst_unitconv_unit_spec(gchar *unit_name);
-gboolean gst_unitconv_unit_exists(gchar *unit_name);
-gboolean gst_unitconv_unit_is_logarithmic(gchar *unit_name);
-
-gboolean gst_unitconv_register_unit(const gchar *domain_name,
- gboolean is_domain_default,
- gboolean is_logarithmic,
- GParamSpec *unit_spec);
-
-gboolean gst_unitconv_register_convert_func(gchar *from_unit_named, gchar *to_unit_named, GstUnitConvertFunc convert_func);
-gboolean gst_unitconv_register_convert_property(gchar *unit_name, GParamSpec *convert_prop_spec);
-
-G_END_DECLS
-
-#endif /* __GST_UNITCONVERT_H__ */
SUBDIRS = \
bytestream caps cleanup \
$(GST_DEBUG_DIRS) \
- dlopen dynparams \
+ dlopen \
elements indexers negotiation pad \
$(GST_PARSE_DIRS) \
plugin refcounting schedulers states threads trigger
DIST_SUBDIRS = \
bytestream caps cleanup \
debug \
- dlopen dynparams \
+ dlopen \
elements indexers negotiation pad \
parse \
plugin refcounting schedulers states threads trigger
+++ /dev/null
-*.bb
-*.bbg
-*.da
-
-dparamstest
+++ /dev/null
-include ../Rules
-
-tests_pass = dparamstest
-tests_fail =
-tests_ignore =
-
-dparamstest_LDADD = $(top_builddir)/libs/gst/control/libgstcontrol-@GST_MAJORMINOR@.la
+++ /dev/null
-/* GStreamer
- * Copyright (C) 2001 Steve Baker <stevebaker_org@yahoo.co.uk>
- *
- * dparamstest.c:
- *
- * 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., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <gst/control/control.h>
-
-#define GST_TYPE_DPTEST (gst_dptest_get_type())
-#define GST_DPTEST(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DPTEST,GstDpTest))
-#define GST_DPTEST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DPTEST,GstDpTestClass))
-#define GST_IS_DPTEST(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DPTEST))
-#define GST_IS_DPTEST_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DPTEST))
-
-typedef struct _GstDpTest GstDpTest;
-typedef struct _GstDpTestClass GstDpTestClass;
-
-struct _GstDpTest
-{
- GstElement element;
-
- GstPad *sinkpad;
- GstPad *srcpad;
- GstDParamManager *dpman;
-
- gfloat float1;
- gfloat float2;
- gboolean bool1;
- gdouble double1;
-};
-
-struct _GstDpTestClass
-{
- GstElementClass parent_class;
-};
-
-GType gst_dptest_get_type (void);
-
-enum
-{
- ARG_0,
-};
-
-GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS_ANY);
-
-GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS_ANY);
-
-
-static void gst_dptest_base_init (gpointer g_class);
-static void gst_dptest_class_init (GstDpTestClass * klass);
-static void gst_dptest_init (GstDpTest * dptest);
-
-static void gst_dptest_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec);
-
-static GstElementStateReturn gst_dptest_change_state (GstElement * element);
-static void gst_dptest_chain (GstPad * pad, GstData * buf);
-
-static GstElementClass *parent_class = NULL;
-
-GType
-gst_dptest_get_type (void)
-{
- static GType dptest_type = 0;
-
- if (!dptest_type) {
- static const GTypeInfo dptest_info = {
- sizeof (GstDpTestClass),
- gst_dptest_base_init,
- NULL,
- (GClassInitFunc) gst_dptest_class_init,
- NULL,
- NULL,
- sizeof (GstDpTest),
- 0,
- (GInstanceInitFunc) gst_dptest_init,
- };
-
- dptest_type =
- g_type_register_static (GST_TYPE_ELEMENT, "GstDpTest", &dptest_info, 0);
- }
- return dptest_type;
-}
-
-static void
-gst_dptest_base_init (gpointer g_class)
-{
- static GstElementDetails dptest_details = GST_ELEMENT_DETAILS ("DParamTest",
- "Filter",
- "Test for the GstDParam code",
- "Steve Baker <stevebaker_org@yahoo.co.uk>");
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_set_details (element_class, &dptest_details);
-}
-
-static void
-gst_dptest_class_init (GstDpTestClass * klass)
-{
- GObjectClass *gobject_class;
- GstElementClass *gstelement_class;
-
- gobject_class = (GObjectClass *) klass;
- gstelement_class = (GstElementClass *) klass;
-
- parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
-
- gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_dptest_set_property);
-
- gstelement_class->change_state = gst_dptest_change_state;
-
-}
-
-static void
-gst_dptest_init (GstDpTest * dptest)
-{
-
- dptest->sinkpad =
- gst_pad_new_from_template (gst_static_pad_template_get (&sinktemplate),
- "sink");
- gst_element_add_pad (GST_ELEMENT (dptest), dptest->sinkpad);
- gst_pad_set_chain_function (dptest->sinkpad, gst_dptest_chain);
-
- dptest->srcpad =
- gst_pad_new_from_template (gst_static_pad_template_get (&srctemplate),
- "src");
- gst_element_add_pad (GST_ELEMENT (dptest), dptest->srcpad);
-
- dptest->dpman = gst_dpman_new ("dptest_dpman", GST_ELEMENT (dptest));
-
- gst_dpman_add_required_dparam_direct (dptest->dpman,
- g_param_spec_float ("float1", "float1", "float1",
- 0.0, 1.0, 0.5, G_PARAM_READWRITE), "float", &(dptest->float1)
- );
-
- dptest->float1 = 0.0;
-}
-
-static void
-gst_dptest_set_property (GObject * object, guint prop_id, const GValue * value,
- GParamSpec * pspec)
-{
- GstDpTest *dptest;
-
- g_return_if_fail (GST_IS_DPTEST (object));
-
- dptest = GST_DPTEST (object);
-
- switch (prop_id) {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static GstElementStateReturn
-gst_dptest_change_state (GstElement * element)
-{
- GstDpTest *dptest;
-
- g_return_val_if_fail (GST_IS_DPTEST (element), GST_STATE_FAILURE);
-
- dptest = GST_DPTEST (element);
- if (GST_ELEMENT_CLASS (parent_class)->change_state)
- return GST_ELEMENT_CLASS (parent_class)->change_state (element);
-
- return GST_STATE_SUCCESS;
-}
-
-static void
-gst_dptest_chain (GstPad * pad, GstData * data)
-{
- GstDpTest *dptest;
- gint frame_count;
-
- dptest = GST_DPTEST (gst_pad_get_parent (pad));
- g_assert (dptest);
- g_print ("dp chain\n");
-
- /* we're using a made up buffer size of 64 and a timestamp of zero */
- g_print ("preprocess\n");
- frame_count = 0;
- GST_DPMAN_PREPROCESS (dptest->dpman, 64, 0LL);
-
- while (GST_DPMAN_PROCESS (dptest->dpman, frame_count)) {
- ++frame_count;
- }
- g_print ("dp chain done\n");
-}
-
-gboolean
-gst_dptest_register_elements (GstPlugin * plugin)
-{
- return gst_element_register (plugin, "dptest", GST_RANK_NONE,
- GST_TYPE_DPTEST);
-}
-
-static GstPluginDesc plugin_desc = {
- GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- "dptest_elements",
- "test elements",
- &gst_dptest_register_elements,
- NULL,
- VERSION,
- GST_LICENSE,
- GST_PACKAGE,
- GST_ORIGIN
-};
-
-int
-main (int argc, char *argv[])
-{
-
- GstElement *src;
- GstElement *sink;
- GstElement *testelement;
- GstElement *pipeline;
- GstDParamManager *dpman;
- GstDParam *dp_float1;
- GValue *dp_float1_value;
-
- gst_init (&argc, &argv);
- gst_control_init (&argc, &argv);
-
- _gst_plugin_register_static (&plugin_desc);
-
- pipeline = gst_element_factory_make ("pipeline", "pipeline");
- g_assert (pipeline);
-
- src = gst_element_factory_make ("fakesrc", "src");
- g_assert (src);
-
- sink = gst_element_factory_make ("fakesink", "sink");
- g_assert (sink);
-
- testelement = gst_element_factory_make ("dptest", "testelement");
- g_assert (testelement);
-
- gst_bin_add_many (GST_BIN (pipeline), src, testelement, sink, NULL);
- gst_element_link_many (src, testelement, sink, NULL);
-
- g_object_set (G_OBJECT (src), "num_buffers", 1, NULL);
-
- g_print ("setting pipeline to play\n");
- gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PLAYING);
-
- /* test that dparam manager is accessable */
- g_print ("getting dparam manager\n");
- dpman = gst_dpman_get_manager (testelement);
- gst_dpman_set_mode (dpman, "synchronous");
-
- g_assert (dpman);
- g_assert (GST_IS_DPMAN (dpman));
-
- g_print ("creating dparam for float1\n");
- dp_float1 = gst_dparam_new (G_TYPE_FLOAT);;
- g_assert (dp_float1);
- g_assert (GST_IS_DPARAM (dp_float1));
-
- g_print ("attach dparam to float1\n");
- g_assert (gst_dpman_attach_dparam (dpman, "float1", dp_float1));
-
- dp_float1_value = g_new0 (GValue, 1);
- g_value_init (dp_float1_value, G_TYPE_FLOAT);
-
- g_value_set_float (dp_float1_value, 0.1);
- g_object_set_property (G_OBJECT (dp_float1), "value_float", dp_float1_value);
-
- g_print ("iterate once\n");
- gst_bin_iterate (GST_BIN (pipeline));
-
- g_print ("check that value changed\n");
- g_assert (GST_DPTEST (testelement)->float1 == 0.1F);
- g_assert (!GST_DPARAM_READY_FOR_UPDATE (dp_float1));
-
- g_print ("nulling pipeline\n");
- gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_NULL);
-
- g_print ("playing pipeline\n");
- gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PLAYING);
-
- g_print ("iterate twice\n");
-
- g_object_set (G_OBJECT (src), "num_buffers", 2, NULL);
- gst_bin_iterate (GST_BIN (pipeline));
-
- return 0;
-}
SUBDIRS = \
bytestream caps cleanup \
$(GST_DEBUG_DIRS) \
- dlopen dynparams \
+ dlopen \
elements indexers negotiation pad \
$(GST_PARSE_DIRS) \
plugin refcounting schedulers states threads trigger
DIST_SUBDIRS = \
bytestream caps cleanup \
debug \
- dlopen dynparams \
+ dlopen \
elements indexers negotiation pad \
parse \
plugin refcounting schedulers states threads trigger
+++ /dev/null
-*.bb
-*.bbg
-*.da
-
-dparamstest
+++ /dev/null
-include ../Rules
-
-tests_pass = dparamstest
-tests_fail =
-tests_ignore =
-
-dparamstest_LDADD = $(top_builddir)/libs/gst/control/libgstcontrol-@GST_MAJORMINOR@.la
+++ /dev/null
-/* GStreamer
- * Copyright (C) 2001 Steve Baker <stevebaker_org@yahoo.co.uk>
- *
- * dparamstest.c:
- *
- * 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., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <gst/control/control.h>
-
-#define GST_TYPE_DPTEST (gst_dptest_get_type())
-#define GST_DPTEST(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DPTEST,GstDpTest))
-#define GST_DPTEST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DPTEST,GstDpTestClass))
-#define GST_IS_DPTEST(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DPTEST))
-#define GST_IS_DPTEST_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DPTEST))
-
-typedef struct _GstDpTest GstDpTest;
-typedef struct _GstDpTestClass GstDpTestClass;
-
-struct _GstDpTest
-{
- GstElement element;
-
- GstPad *sinkpad;
- GstPad *srcpad;
- GstDParamManager *dpman;
-
- gfloat float1;
- gfloat float2;
- gboolean bool1;
- gdouble double1;
-};
-
-struct _GstDpTestClass
-{
- GstElementClass parent_class;
-};
-
-GType gst_dptest_get_type (void);
-
-enum
-{
- ARG_0,
-};
-
-GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS_ANY);
-
-GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS_ANY);
-
-
-static void gst_dptest_base_init (gpointer g_class);
-static void gst_dptest_class_init (GstDpTestClass * klass);
-static void gst_dptest_init (GstDpTest * dptest);
-
-static void gst_dptest_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec);
-
-static GstElementStateReturn gst_dptest_change_state (GstElement * element);
-static void gst_dptest_chain (GstPad * pad, GstData * buf);
-
-static GstElementClass *parent_class = NULL;
-
-GType
-gst_dptest_get_type (void)
-{
- static GType dptest_type = 0;
-
- if (!dptest_type) {
- static const GTypeInfo dptest_info = {
- sizeof (GstDpTestClass),
- gst_dptest_base_init,
- NULL,
- (GClassInitFunc) gst_dptest_class_init,
- NULL,
- NULL,
- sizeof (GstDpTest),
- 0,
- (GInstanceInitFunc) gst_dptest_init,
- };
-
- dptest_type =
- g_type_register_static (GST_TYPE_ELEMENT, "GstDpTest", &dptest_info, 0);
- }
- return dptest_type;
-}
-
-static void
-gst_dptest_base_init (gpointer g_class)
-{
- static GstElementDetails dptest_details = GST_ELEMENT_DETAILS ("DParamTest",
- "Filter",
- "Test for the GstDParam code",
- "Steve Baker <stevebaker_org@yahoo.co.uk>");
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_set_details (element_class, &dptest_details);
-}
-
-static void
-gst_dptest_class_init (GstDpTestClass * klass)
-{
- GObjectClass *gobject_class;
- GstElementClass *gstelement_class;
-
- gobject_class = (GObjectClass *) klass;
- gstelement_class = (GstElementClass *) klass;
-
- parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
-
- gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_dptest_set_property);
-
- gstelement_class->change_state = gst_dptest_change_state;
-
-}
-
-static void
-gst_dptest_init (GstDpTest * dptest)
-{
-
- dptest->sinkpad =
- gst_pad_new_from_template (gst_static_pad_template_get (&sinktemplate),
- "sink");
- gst_element_add_pad (GST_ELEMENT (dptest), dptest->sinkpad);
- gst_pad_set_chain_function (dptest->sinkpad, gst_dptest_chain);
-
- dptest->srcpad =
- gst_pad_new_from_template (gst_static_pad_template_get (&srctemplate),
- "src");
- gst_element_add_pad (GST_ELEMENT (dptest), dptest->srcpad);
-
- dptest->dpman = gst_dpman_new ("dptest_dpman", GST_ELEMENT (dptest));
-
- gst_dpman_add_required_dparam_direct (dptest->dpman,
- g_param_spec_float ("float1", "float1", "float1",
- 0.0, 1.0, 0.5, G_PARAM_READWRITE), "float", &(dptest->float1)
- );
-
- dptest->float1 = 0.0;
-}
-
-static void
-gst_dptest_set_property (GObject * object, guint prop_id, const GValue * value,
- GParamSpec * pspec)
-{
- GstDpTest *dptest;
-
- g_return_if_fail (GST_IS_DPTEST (object));
-
- dptest = GST_DPTEST (object);
-
- switch (prop_id) {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static GstElementStateReturn
-gst_dptest_change_state (GstElement * element)
-{
- GstDpTest *dptest;
-
- g_return_val_if_fail (GST_IS_DPTEST (element), GST_STATE_FAILURE);
-
- dptest = GST_DPTEST (element);
- if (GST_ELEMENT_CLASS (parent_class)->change_state)
- return GST_ELEMENT_CLASS (parent_class)->change_state (element);
-
- return GST_STATE_SUCCESS;
-}
-
-static void
-gst_dptest_chain (GstPad * pad, GstData * data)
-{
- GstDpTest *dptest;
- gint frame_count;
-
- dptest = GST_DPTEST (gst_pad_get_parent (pad));
- g_assert (dptest);
- g_print ("dp chain\n");
-
- /* we're using a made up buffer size of 64 and a timestamp of zero */
- g_print ("preprocess\n");
- frame_count = 0;
- GST_DPMAN_PREPROCESS (dptest->dpman, 64, 0LL);
-
- while (GST_DPMAN_PROCESS (dptest->dpman, frame_count)) {
- ++frame_count;
- }
- g_print ("dp chain done\n");
-}
-
-gboolean
-gst_dptest_register_elements (GstPlugin * plugin)
-{
- return gst_element_register (plugin, "dptest", GST_RANK_NONE,
- GST_TYPE_DPTEST);
-}
-
-static GstPluginDesc plugin_desc = {
- GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- "dptest_elements",
- "test elements",
- &gst_dptest_register_elements,
- NULL,
- VERSION,
- GST_LICENSE,
- GST_PACKAGE,
- GST_ORIGIN
-};
-
-int
-main (int argc, char *argv[])
-{
-
- GstElement *src;
- GstElement *sink;
- GstElement *testelement;
- GstElement *pipeline;
- GstDParamManager *dpman;
- GstDParam *dp_float1;
- GValue *dp_float1_value;
-
- gst_init (&argc, &argv);
- gst_control_init (&argc, &argv);
-
- _gst_plugin_register_static (&plugin_desc);
-
- pipeline = gst_element_factory_make ("pipeline", "pipeline");
- g_assert (pipeline);
-
- src = gst_element_factory_make ("fakesrc", "src");
- g_assert (src);
-
- sink = gst_element_factory_make ("fakesink", "sink");
- g_assert (sink);
-
- testelement = gst_element_factory_make ("dptest", "testelement");
- g_assert (testelement);
-
- gst_bin_add_many (GST_BIN (pipeline), src, testelement, sink, NULL);
- gst_element_link_many (src, testelement, sink, NULL);
-
- g_object_set (G_OBJECT (src), "num_buffers", 1, NULL);
-
- g_print ("setting pipeline to play\n");
- gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PLAYING);
-
- /* test that dparam manager is accessable */
- g_print ("getting dparam manager\n");
- dpman = gst_dpman_get_manager (testelement);
- gst_dpman_set_mode (dpman, "synchronous");
-
- g_assert (dpman);
- g_assert (GST_IS_DPMAN (dpman));
-
- g_print ("creating dparam for float1\n");
- dp_float1 = gst_dparam_new (G_TYPE_FLOAT);;
- g_assert (dp_float1);
- g_assert (GST_IS_DPARAM (dp_float1));
-
- g_print ("attach dparam to float1\n");
- g_assert (gst_dpman_attach_dparam (dpman, "float1", dp_float1));
-
- dp_float1_value = g_new0 (GValue, 1);
- g_value_init (dp_float1_value, G_TYPE_FLOAT);
-
- g_value_set_float (dp_float1_value, 0.1);
- g_object_set_property (G_OBJECT (dp_float1), "value_float", dp_float1_value);
-
- g_print ("iterate once\n");
- gst_bin_iterate (GST_BIN (pipeline));
-
- g_print ("check that value changed\n");
- g_assert (GST_DPTEST (testelement)->float1 == 0.1F);
- g_assert (!GST_DPARAM_READY_FOR_UPDATE (dp_float1));
-
- g_print ("nulling pipeline\n");
- gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_NULL);
-
- g_print ("playing pipeline\n");
- gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PLAYING);
-
- g_print ("iterate twice\n");
-
- g_object_set (G_OBJECT (src), "num_buffers", 2, NULL);
- gst_bin_iterate (GST_BIN (pipeline));
-
- return 0;
-}
gst_typefind_SOURCES = gst-run.c
gst_xmlinspect_SOURCES = gst-run.c
-gst_inspect_@GST_MAJORMINOR@_LDADD = ../libs/gst/control/libgstcontrol-@GST_MAJORMINOR@.la
-
-gst_xmlinspect_@GST_MAJORMINOR@_LDADD = ../libs/gst/control/libgstcontrol-@GST_MAJORMINOR@.la
-
# CFLAGS and libs for nonversioned frontend binaries
AM_CFLAGS = $(GLIB_ONLY_CFLAGS) $(POPT_CFLAGS)
LDADD = $(GLIB_ONLY_LIBS) $(POPT_LIBS)
#endif
#include <gst/gst.h>
-#include <gst/control/control.h>
#include "gst/gst-i18n-app.h"
}
}
-static void
-print_dynamic_parameters_info (GstElement * element)
-{
- GstDParamManager *dpman;
- GParamSpec **specs = NULL;
- gint x;
-
- if ((dpman = gst_dpman_get_manager (element))) {
- specs = gst_dpman_list_dparam_specs (dpman);
- }
-
- if (specs && specs[0] != NULL) {
- n_print ("\n");
- n_print ("Dynamic Parameters:\n");
-
- for (x = 0; specs[x] != NULL; x++) {
- g_print (" %-20.20s: ", g_param_spec_get_name (specs[x]));
-
- switch (G_PARAM_SPEC_VALUE_TYPE (specs[x])) {
- case G_TYPE_INT64:
- g_print ("64 Bit Integer (Default %" G_GINT64_FORMAT ", Range %"
- G_GINT64_FORMAT " -> %" G_GINT64_FORMAT ")",
- ((GParamSpecInt64 *) specs[x])->default_value,
- ((GParamSpecInt64 *) specs[x])->minimum,
- ((GParamSpecInt64 *) specs[x])->maximum);
- break;
- case G_TYPE_INT:
- g_print ("Integer (Default %d, Range %d -> %d)",
- ((GParamSpecInt *) specs[x])->default_value,
- ((GParamSpecInt *) specs[x])->minimum,
- ((GParamSpecInt *) specs[x])->maximum);
- break;
- case G_TYPE_FLOAT:
- g_print ("Float. Default: %-8.8s %15.7g\n", "",
- ((GParamSpecFloat *) specs[x])->default_value);
- g_print ("%-23.23s Range: %15.7g - %15.7g", "",
- ((GParamSpecFloat *) specs[x])->minimum,
- ((GParamSpecFloat *) specs[x])->maximum);
- break;
- case G_TYPE_DOUBLE:
- g_print ("Double. Default: %-8.8s %15.7g\n", "",
- ((GParamSpecDouble *) specs[x])->default_value);
- g_print ("%-23.23s Range: %15.7g - %15.7g", "",
- ((GParamSpecDouble *) specs[x])->minimum,
- ((GParamSpecDouble *) specs[x])->maximum);
- break;
- default:
- g_print ("unknown %ld", G_PARAM_SPEC_VALUE_TYPE (specs[x]));
- }
- g_print ("\n");
- }
- g_free (specs);
- }
-}
-
#if 0
static gint
compare_signal_names (GSignalQuery * a, GSignalQuery * b)
print_index_info (element);
print_pad_info (element);
print_element_properties_info (element);
- print_dynamic_parameters_info (element);
print_signal_info (element);
print_children_info (element);
#endif
gst_init_with_popt_table (&argc, &argv, options);
- gst_control_init (&argc, &argv);
if (print_all && argc > 2) {
g_print ("-a requires no extra arguments\n");
#endif
#include <gst/gst.h>
-#include <gst/control/control.h>
#include <string.h>
#include <locale.h>
#include <glib/gprintf.h>
}
static void
-print_element_dynparamaters (GstElement * element, gint pfx)
-{
- GstDParamManager *dpman;
- GParamSpec **specs;
- gint x;
-
- PUT_START_TAG (pfx, "dyn-params");
-
- if ((dpman = gst_dpman_get_manager (element))) {
- specs = gst_dpman_list_dparam_specs (dpman);
- for (x = 0; specs[x] != NULL; x++) {
- PUT_START_TAG (pfx + 1, "dyn-param");
-
- PUT_ESCAPED (pfx + 2, "name", g_param_spec_get_name (specs[x]));
- PUT_ESCAPED (pfx + 2, "type", g_type_name (specs[x]->value_type));
- PUT_ESCAPED (pfx + 2, "nick", g_param_spec_get_nick (specs[x]));
- PUT_ESCAPED (pfx + 2, "blurb", g_param_spec_get_blurb (specs[x]));
-
- switch (G_PARAM_SPEC_VALUE_TYPE (specs[x])) {
- case G_TYPE_INT64:
- PUT_STRING (pfx + 2,
- "<range min=\"%" G_GINT64_FORMAT "\" max=\"%" G_GINT64_FORMAT
- "\"/>", ((GParamSpecInt64 *) specs[x])->minimum,
- ((GParamSpecInt64 *) specs[x])->maximum);
- PUT_STRING (pfx + 2, "<default>%" G_GINT64_FORMAT "</default>",
- ((GParamSpecInt64 *) specs[x])->default_value);
- break;
- case G_TYPE_INT:
- PUT_STRING (pfx + 2, "<range min=\"%d\" max=\"%d\"/>",
- ((GParamSpecInt *) specs[x])->minimum,
- ((GParamSpecInt *) specs[x])->maximum);
- PUT_STRING (pfx + 2, "<default>%d</default>",
- ((GParamSpecInt *) specs[x])->default_value);
- break;
- case G_TYPE_FLOAT:
- PUT_STRING (pfx + 2, "<range min=\"%f\" max=\"%f\"/>",
- ((GParamSpecFloat *) specs[x])->minimum,
- ((GParamSpecFloat *) specs[x])->maximum);
- PUT_STRING (pfx + 2, "<default>%f</default>",
- ((GParamSpecFloat *) specs[x])->default_value);
- break;
- default:
- break;
- }
- PUT_END_TAG (pfx + 1, "dyn-param");
- }
- g_free (specs);
- }
- PUT_END_TAG (pfx, "dyn-params");
-}
-
-static void
print_element_signals (GstElement * element, gint pfx)
{
guint *signals;
PUT_END_TAG (1, "pads");
print_element_properties (element, 1);
- print_element_dynparamaters (element, 1);
print_element_signals (element, 1);
/* for compound elements */
setlocale (LC_ALL, "");
gst_init_with_popt_table (&argc, &argv, options);
- gst_control_init (&argc, &argv);
PUT_STRING (0, "<?xml version=\"1.0\"?>");