Commit ca1906c5 authored by Matthias Klumpp's avatar Matthias Klumpp

New upstream version 3.9.0

parents ec636405 0893ff56
GtkD ChangeLog
==============
Release: 3.9.0
--------------
-Update the libraries to the latest versions.
Release: 3.8.5
--------------
-Set the correct version number.
......
......@@ -5,7 +5,6 @@ PKG_CONFIG?=pkg-config
OS=$(shell uname || uname -s)
ARCH=$(shell uname -m || arch)
datadir?=$(prefix)/share
ifeq (, $(shell which dpkg-architecture 2>/dev/null))
libdir?=lib/
else
......@@ -76,7 +75,7 @@ endif
#######################################################################
GTKD_VERSION=3.8.5
GTKD_VERSION=3.9.0
SO_VERSION=0
MAJOR = $(word 1,$(subst ., ,$(GTKD_VERSION)))
......@@ -325,7 +324,7 @@ ifeq ("$(OS)","Darwin")
install-shared: install-shared-gtkd
else
install: install-gtkd install-gtkdsv install-gstreamer install-vte install-peas
install-headers: install-headers-gtkd install-headers-gtkdsv install-shared-gstreamer install-shared-vte install-shared-peas
install-headers: install-headers-gtkd install-headers-gtkdsv install-headers-gstreamer install-headers-vte install-headers-peas
install-shared: install-shared-gtkd install-shared-gtkdsv install-shared-gstreamer install-shared-vte install-shared-peas
endif
......@@ -369,33 +368,33 @@ install-shared-peas: $(SONAME_PEASD) install-shared-gtkd
install-headers-gtkd: gtkd-$(MAJOR).pc
install -d $(DESTDIR)$(prefix)/include/d/gtkd-$(MAJOR)
install -d $(DESTDIR)$(datadir)/pkgconfig
(cd generated/gtkd; echo $(SOURCES_GTKD) | sed -e s,generated/gtkd/,,g | xargs tar cf -) | (cd $(DESTDIR)$(prefix)/include/d/gtkd-$(MAJOR); tar xv)
install -m 644 gtkd-$(MAJOR).pc $(DESTDIR)$(datadir)/pkgconfig
install -d $(DESTDIR)$(libdir)/pkgconfig
(cd generated/gtkd; echo $(SOURCES_GTKD) | sed -e s,generated/gtkd/,,g | xargs tar cf -) | (cd $(DESTDIR)$(prefix)/include/d/gtkd-$(MAJOR); tar xvf -)
install -m 644 gtkd-$(MAJOR).pc $(DESTDIR)$(libdir)/pkgconfig
install-headers-gtkdgl: gtkdgl-$(MAJOR).pc install-headers-gtkd
(cd generated/gtkdgl; echo $(SOURCES_GTKDGL) | sed -e s,generated/gtkdgl/,,g | xargs tar cf -) | (cd $(DESTDIR)$(prefix)/include/d/gtkd-$(MAJOR); tar xv)
install -m 644 gtkdgl-$(MAJOR).pc $(DESTDIR)$(datadir)/pkgconfig
(cd generated/gtkdgl; echo $(SOURCES_GTKDGL) | sed -e s,generated/gtkdgl/,,g | xargs tar cf -) | (cd $(DESTDIR)$(prefix)/include/d/gtkd-$(MAJOR); tar xvf -)
install -m 644 gtkdgl-$(MAJOR).pc $(DESTDIR)$(libdir)/pkgconfig
install-headers-gtkdsv: gtkdsv-$(MAJOR).pc install-headers-gtkd
(cd generated/sourceview; echo $(SOURCES_GTKDSV) | sed -e s,generated/sourceview/,,g | xargs tar cf -) | (cd $(DESTDIR)$(prefix)/include/d/gtkd-$(MAJOR); tar xv)
install -m 644 gtkdsv-$(MAJOR).pc $(DESTDIR)$(datadir)/pkgconfig
(cd generated/sourceview; echo $(SOURCES_GTKDSV) | sed -e s,generated/sourceview/,,g | xargs tar cf -) | (cd $(DESTDIR)$(prefix)/include/d/gtkd-$(MAJOR); tar xvf -)
install -m 644 gtkdsv-$(MAJOR).pc $(DESTDIR)$(libdir)/pkgconfig
install-headers-gstreamer: gstreamerd-$(MAJOR).pc install-headers-gtkd
(cd generated/gstreamer; echo $(SOURCES_GSTREAMERD) | sed -e s,generated/gstreamer/,,g | xargs tar cf -) | (cd $(DESTDIR)$(prefix)/include/d/gtkd-$(MAJOR); tar xv)
install -m 644 gstreamerd-$(MAJOR).pc $(DESTDIR)$(datadir)/pkgconfig
(cd generated/gstreamer; echo $(SOURCES_GSTREAMERD) | sed -e s,generated/gstreamer/,,g | xargs tar cf -) | (cd $(DESTDIR)$(prefix)/include/d/gtkd-$(MAJOR); tar xvf -)
install -m 644 gstreamerd-$(MAJOR).pc $(DESTDIR)$(libdir)/pkgconfig
install-headers-vte: vted-$(MAJOR).pc install-headers-gtkd
(cd generated/vte; echo $(SOURCES_VTED) | sed -e s,generated/vte/,,g | xargs tar cf -) | (cd $(DESTDIR)$(prefix)/include/d/gtkd-$(MAJOR); tar xv)
install -m 644 vted-$(MAJOR).pc $(DESTDIR)$(datadir)/pkgconfig
(cd generated/vte; echo $(SOURCES_VTED) | sed -e s,generated/vte/,,g | xargs tar cf -) | (cd $(DESTDIR)$(prefix)/include/d/gtkd-$(MAJOR); tar xvf -)
install -m 644 vted-$(MAJOR).pc $(DESTDIR)$(libdir)/pkgconfig
install-headers-peas: peasd-$(MAJOR).pc install-headers-gtkd
(cd generated/peas; echo $(SOURCES_PEASD) | sed -e s,generated/peas/,,g | xargs tar cf -) | (cd $(DESTDIR)$(prefix)/include/d/gtkd-$(MAJOR); tar xv)
install -m 644 peasd-$(MAJOR).pc $(DESTDIR)$(datadir)/pkgconfig
(cd generated/peas; echo $(SOURCES_PEASD) | sed -e s,generated/peas/,,g | xargs tar cf -) | (cd $(DESTDIR)$(prefix)/include/d/gtkd-$(MAJOR); tar xvf -)
install -m 644 peasd-$(MAJOR).pc $(DESTDIR)$(libdir)/pkgconfig
uninstall: uninstall-gtkdgl uninstall-gtkdsv uninstall-gstreamer uninstall-vte uninstall-peas
$(foreach dir,$(shell ls generated/gtkd) , rm -rf $(DESTDIR)$(prefix)/include/d/gtkd-$(MAJOR)/$(dir))
rm -f $(DESTDIR)$(datadir)/pkgconfig/gtkd-$(MAJOR).pc
rm -f $(DESTDIR)$(libdir)/pkgconfig/gtkd-$(MAJOR).pc
rm -f $(DESTDIR)$(prefix)/$(libdir)/$(LIBNAME_GTKD)
rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_GTKD)
rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_GTKD).$(SO_VERSION)
......@@ -403,7 +402,7 @@ uninstall: uninstall-gtkdgl uninstall-gtkdsv uninstall-gstreamer uninstall-vte u
uninstall-gtkdgl:
$(foreach dir,$(shell ls generated/gtkdgl), rm -rf $(DESTDIR)$(prefix)/include/d/gtkd-$(MAJOR)/$(dir))
rm -f $(DESTDIR)$(datadir)/pkgconfig/gtkdgl-$(MAJOR).pc
rm -f $(DESTDIR)$(libdir)/pkgconfig/gtkdgl-$(MAJOR).pc
rm -f $(DESTDIR)$(prefix)/$(libdir)/$(LIBNAME_GTKDGL)
rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_GTKDGL)
rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_GTKDGL).$(SO_VERSION)
......@@ -411,7 +410,7 @@ uninstall-gtkdgl:
uninstall-gtkdsv:
$(foreach dir,$(shell ls generated/sourceview), rm -rf $(DESTDIR)$(prefix)/include/d/$(dir))
rm -f $(DESTDIR)$(datadir)/pkgconfig/gtkdsv-$(MAJOR).pc
rm -f $(DESTDIR)$(libdir)/pkgconfig/gtkdsv-$(MAJOR).pc
rm -f $(DESTDIR)$(prefix)/$(libdir)/$(LIBNAME_GTKDSV)
rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_GTKDSV)
rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_GTKDSV).$(SO_VERSION)
......@@ -419,7 +418,7 @@ uninstall-gtkdsv:
uninstall-gstreamer:
$(foreach dir,$(shell ls generated/gstreamer), rm -rf $(DESTDIR)$(prefix)/include/d/gtkd-$(MAJOR)/$(dir))
rm -f $(DESTDIR)$(datadir)/pkgconfig/gstreamerd-$(MAJOR).pc
rm -f $(DESTDIR)$(libdir)/pkgconfig/gstreamerd-$(MAJOR).pc
rm -f $(DESTDIR)$(prefix)/$(libdir)/$(LIBNAME_GSTREAMERD)
rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_GSTREAMERD)
rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_GSTREAMERD).$(SO_VERSION)
......@@ -427,7 +426,7 @@ uninstall-gstreamer:
uninstall-vte:
$(foreach dir,$(shell ls generated/vte), rm -rf $(DESTDIR)$(prefix)/include/d/gtkd-$(MAJOR)/$(dir))
rm -f $(DESTDIR)$(datadir)/pkgconfig/vted-$(MAJOR).pc
rm -f $(DESTDIR)$(libdir)/pkgconfig/vted-$(MAJOR).pc
rm -f $(DESTDIR)$(prefix)/$(libdir)/$(LIBNAME_VTED)
rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_VTED)
rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_VTED).$(SO_VERSION)
......@@ -435,7 +434,7 @@ uninstall-vte:
uninstall-peas:
$(foreach dir,$(shell ls generated/peas), rm -rf $(DESTDIR)$(prefix)/include/d/gtkd-$(MAJOR)/$(dir))
rm -f $(DESTDIR)$(datadir)/pkgconfig/peasd-$(MAJOR).pc
rm -f $(DESTDIR)$(libdir)/pkgconfig/peasd-$(MAJOR).pc
rm -f $(DESTDIR)$(prefix)/$(libdir)/$(LIBNAME_PEASD)
rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_PEASD)
rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_PEASD).$(SO_VERSION)
......
......@@ -95,15 +95,16 @@ GtkD wraps Gtk+ 3.22 the versions of the associated libraries are:
Library | Version
--- | ---
Gtk+ | 3.22
Gdk | 3.22
Glib | 2.56
GObject | 2.56
Gio | 2.56
Pango | 1.42
Atk | 2.28
Gdk-pixbuf | 2.36
Gtk+ | 3.24
Gdk | 3.24
Glib | 2.60
GObject | 2.60
Gio | 2.60
Pango | 1.43
Atk | 2.32
Gdk-pixbuf | 2.38
Cairo | 1.12.2
GtksourceView | 3.24
GStreamer | 1.14
Vte3 | 0.52
LibRsvg | 2.44
GtksourceView | 4.2
GStreamer | 1.16
Vte3 | 0.56
......@@ -116,7 +116,7 @@ int main(string[] args)
writefln("Checking version of GStreamer...");
GStreamer.versio(major, minor, micro, nano);
GStreamer.version_(major, minor, micro, nano);
writefln("The installed version of GStreamer is %s.%s.%s", major, minor, micro );
writefln( "The file is: %s", args[1] );
......
......@@ -212,10 +212,10 @@ public:
if( source !is null )
{
fullStop();
delete source;
source.destroy();
}
if( videosink !is null )
delete videosink;
videosink.destroy();
// create elements
......
......@@ -78,7 +78,7 @@ class SpawnWindow : ApplicationWindow
private bool exec(string[] args)
{
foreach ( int i, string arg ; args)
foreach ( size_t i, string arg ; args)
{
writefln("[%s] >%s<", i, arg);
}
......@@ -141,7 +141,7 @@ class SpawnWindow : ApplicationWindow
{
TextBuffer inBuffer = viewInput.getBuffer();
string t;
foreach ( int count, string arg; args)
foreach ( size_t count, string arg; args)
{
if ( count > 0 ) t ~= " ";
t ~= arg;
......
......@@ -417,7 +417,7 @@ class TestDrawingArea : VBox
context.restore();
}
delete color;
color.destroy();
}
void onOperatorsChanged(ComboBoxText comboBoxText)
......
......@@ -83,7 +83,7 @@ WHITE = <font color=white>$0</font>
D_CODE = <pre class=\"d_code\">$0</pre>
DDOC_BACKQUOTED = $(D_INLINECODE $0)
D_INLINECODE = <pre style=\"display:inline;\" class=\"d_inline_code\">$0</pre>
D_INLINECODE = <pre style="display:inline;" class="d_inline_code">$0</pre>
D_COMMENT = $(GREEN $0)
D_STRING = $(RED $0)
D_KEYWORD = $(BLUE $0)
......
......@@ -167,3 +167,12 @@ pre.d_code
border: dotted 1px #9c9;
background-color: #eeffee;
}
pre.d_inline_code
{
padding: 1px;
border: dotted 1px #9c9;
background-color: #eeffee;
}
......@@ -298,6 +298,9 @@ public class AppSrc : BaseSrc, URIHandlerIF
* previous caps that were set on appsrc will be replaced by the caps
* associated with the sample if not equal.
*
* This function does not take ownership of the
* sample so the sample needs to be unreffed after calling this function.
*
* When the block property is TRUE, this function can block until free
* space becomes available in the queue.
*
......
......@@ -77,6 +77,8 @@ private import gstreamer.Element;
* See gst_element_class_add_static_pad_template_with_gtype().
*
* This class used to live in gst-plugins-bad and was moved to core.
*
* Since: 1.14
*/
public class Aggregator : Element
{
......@@ -203,4 +205,21 @@ public class Aggregator : Element
{
gst_aggregator_set_src_caps(gstAggregator, (caps is null) ? null : caps.getCapsStruct());
}
/**
* This is a simple #GstAggregator::get_next_time implementation that
* just looks at the #GstSegment on the srcpad of the aggregator and bases
* the next time on the running time there.
*
* This is the desired behaviour in most cases where you have a live source
* and you have a dead line based aggregator subclass.
*
* Returns: The running time based on the position
*
* Since: 1.16
*/
public GstClockTime simpleGetNextTime()
{
return gst_aggregator_simple_get_next_time(gstAggregator);
}
}
......@@ -25,16 +25,20 @@
module gst.base.AggregatorPad;
private import gobject.ObjectG;
private import gobject.Signals;
private import gst.base.c.functions;
public import gst.base.c.types;
private import gstreamer.Buffer;
private import gstreamer.Pad;
private import std.algorithm;
/**
* Pads managed by a #GstAggregor subclass.
*
* This class used to live in gst-plugins-bad and was moved to core.
*
* Since: 1.14
*/
public class AggregatorPad : Pad
{
......@@ -82,6 +86,10 @@ public class AggregatorPad : Pad
}
/**
* This checks if a pad has a buffer available that will be returned by
* a call to gst_aggregator_pad_peek_buffer() or
* gst_aggregator_pad_pop_buffer().
*
* Returns: %TRUE if the pad has a buffer available as the next thing.
*
* Since: 1.14.1
......@@ -133,4 +141,10 @@ public class AggregatorPad : Pad
return ObjectG.getDObject!(Buffer)(cast(GstBuffer*) p, true);
}
/** */
gulong addOnBufferConsumed(void delegate(Buffer, AggregatorPad) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0)
{
return Signals.connect(this, "buffer-consumed", dlg, connectFlags ^ ConnectFlags.SWAPPED);
}
}
......@@ -185,7 +185,7 @@ public struct Base
* func = A generic #GstTypeFindHelperGetRangeFunction that will
* be used to access data at random offsets when doing the typefinding
* size = The length in bytes
* extension = extension of the media
* extension = extension of the media, or %NULL
* prob = location to store the probability of the found
* caps, or %NULL
*
......@@ -203,4 +203,131 @@ public struct Base
return ObjectG.getDObject!(Caps)(cast(GstCaps*) p, true);
}
/**
* Tries to find what type of data is contained in the given #GstBuffer, the
* assumption being that the buffer represents the beginning of the stream or
* file.
*
* All available typefinders will be called on the data in order of rank. If
* a typefinding function returns a probability of %GST_TYPE_FIND_MAXIMUM,
* typefinding is stopped immediately and the found caps will be returned
* right away. Otherwise, all available typefind functions will the tried,
* and the caps with the highest probability will be returned, or %NULL if
* the content of the buffer could not be identified.
*
* When @extension is not %NULL, this function will first try the typefind
* functions for the given extension, which might speed up the typefinding
* in many cases.
*
* Free-function: gst_caps_unref
*
* Params:
* obj = object doing the typefinding, or %NULL (used for logging)
* buf = a #GstBuffer with data to typefind
* extension = extension of the media, or %NULL
* prob = location to store the probability of the found
* caps, or %NULL
*
* Returns: the #GstCaps corresponding to the data,
* or %NULL if no type could be found. The caller should free the caps
* returned with gst_caps_unref().
*
* Since: 1.16
*/
public static Caps typeFindHelperForBufferWithExtension(ObjectGst obj, Buffer buf, string extension, out GstTypeFindProbability prob)
{
auto p = gst_type_find_helper_for_buffer_with_extension((obj is null) ? null : obj.getObjectGstStruct(), (buf is null) ? null : buf.getBufferStruct(), Str.toStringz(extension), &prob);
if(p is null)
{
return null;
}
return ObjectG.getDObject!(Caps)(cast(GstCaps*) p, true);
}
/**
* Tries to find what type of data is contained in the given @data, the
* assumption being that the data represents the beginning of the stream or
* file.
*
* All available typefinders will be called on the data in order of rank. If
* a typefinding function returns a probability of %GST_TYPE_FIND_MAXIMUM,
* typefinding is stopped immediately and the found caps will be returned
* right away. Otherwise, all available typefind functions will the tried,
* and the caps with the highest probability will be returned, or %NULL if
* the content of @data could not be identified.
*
* When @extension is not %NULL, this function will first try the typefind
* functions for the given extension, which might speed up the typefinding
* in many cases.
*
* Free-function: gst_caps_unref
*
* Params:
* obj = object doing the typefinding, or %NULL (used for logging)
* data = * a pointer with data to typefind
* extension = extension of the media, or %NULL
* prob = location to store the probability of the found
* caps, or %NULL
*
* Returns: the #GstCaps corresponding to the data,
* or %NULL if no type could be found. The caller should free the caps
* returned with gst_caps_unref().
*
* Since: 1.16
*/
public static Caps typeFindHelperForDataWithExtension(ObjectGst obj, ubyte[] data, string extension, out GstTypeFindProbability prob)
{
auto p = gst_type_find_helper_for_data_with_extension((obj is null) ? null : obj.getObjectGstStruct(), data.ptr, cast(size_t)data.length, Str.toStringz(extension), &prob);
if(p is null)
{
return null;
}
return ObjectG.getDObject!(Caps)(cast(GstCaps*) p, true);
}
/**
* Utility function to do pull-based typefinding. Unlike gst_type_find_helper()
* however, this function will use the specified function @func to obtain the
* data needed by the typefind functions, rather than operating on a given
* source pad. This is useful mostly for elements like tag demuxers which
* strip off data at the beginning and/or end of a file and want to typefind
* the stripped data stream before adding their own source pad (the specified
* callback can then call the upstream peer pad with offsets adjusted for the
* tag size, for example).
*
* When @extension is not %NULL, this function will first try the typefind
* functions for the given extension, which might speed up the typefinding
* in many cases.
*
* Params:
* obj = A #GstObject that will be passed as first argument to @func
* parent = the parent of @obj or %NULL
* func = A generic #GstTypeFindHelperGetRangeFunction that will
* be used to access data at random offsets when doing the typefinding
* size = The length in bytes
* extension = extension of the media, or %NULL
* caps = returned caps
* prob = location to store the probability of the found
* caps, or %NULL
*
* Returns: the last %GstFlowReturn from pulling a buffer or %GST_FLOW_OK if
* typefinding was successful.
*
* Since: 1.14.3
*/
public static GstFlowReturn typeFindHelperGetRangeFull(ObjectGst obj, ObjectGst parent, GstTypeFindHelperGetRangeFunction func, ulong size, string extension, out Caps caps, out GstTypeFindProbability prob)
{
GstCaps* outcaps = null;
auto p = gst_type_find_helper_get_range_full((obj is null) ? null : obj.getObjectGstStruct(), (parent is null) ? null : parent.getObjectGstStruct(), func, size, Str.toStringz(extension), &outcaps, &prob);
caps = ObjectG.getDObject!(Caps)(outcaps);
return p;
}
}
......@@ -52,17 +52,17 @@ private import gstreamer.TagList;
*
* ## Set-up phase
*
* * #GstBaseParse calls @start to inform subclass that data processing is
* about to start now.
* * #GstBaseParse calls #GstBaseParseClass.start() to inform subclass
* that data processing is about to start now.
*
* * #GstBaseParse class calls @set_sink_caps to inform the subclass about
* incoming sinkpad caps. Subclass could already set the srcpad caps
* accordingly, but this might be delayed until calling
* gst_base_parse_finish_frame() with a non-queued frame.
* * #GstBaseParse class calls #GstBaseParseClass.set_sink_caps() to
* inform the subclass about incoming sinkpad caps. Subclass could
* already set the srcpad caps accordingly, but this might be delayed
* until calling gst_base_parse_finish_frame() with a non-queued frame.
*
* * At least at this point subclass needs to tell the #GstBaseParse class
* how big data chunks it wants to receive (min_frame_size). It can do
* this with gst_base_parse_set_min_frame_size().
* how big data chunks it wants to receive (minimum frame size ). It can
* do this with gst_base_parse_set_min_frame_size().
*
* * #GstBaseParse class sets up appropriate data passing mode (pull/push)
* and starts to process the data.
......@@ -73,24 +73,27 @@ private import gstreamer.TagList;
* by pulling it from upstream or collecting buffers in an internal
* #GstAdapter.
*
* * A buffer of (at least) min_frame_size bytes is passed to subclass with
* @handle_frame. Subclass checks the contents and can optionally
* return GST_FLOW_OK along with an amount of data to be skipped to find
* a valid frame (which will result in a subsequent DISCONT).
* If, otherwise, the buffer does not hold a complete frame,
* @handle_frame can merely return and will be called again when additional
* data is available. In push mode this amounts to an
* additional input buffer (thus minimal additional latency), in pull mode
* this amounts to some arbitrary reasonable buffer size increase.
* Of course, gst_base_parse_set_min_frame_size() could also be used if a
* very specific known amount of additional data is required.
* If, however, the buffer holds a complete valid frame, it can pass
* the size of this frame to gst_base_parse_finish_frame().
* If acting as a converter, it can also merely indicate consumed input data
* while simultaneously providing custom output data.
* Note that baseclass performs some processing (such as tracking
* overall consumed data rate versus duration) for each finished frame,
* but other state is only updated upon each call to @handle_frame
* * A buffer of (at least) min_frame_size bytes is passed to subclass
* with #GstBaseParseClass.handle_frame(). Subclass checks the contents
* and can optionally return #GST_FLOW_OK along with an amount of data
* to be skipped to find a valid frame (which will result in a
* subsequent DISCONT). If, otherwise, the buffer does not hold a
* complete frame, #GstBaseParseClass.handle_frame() can merely return
* and will be called again when additional data is available. In push
* mode this amounts to an additional input buffer (thus minimal
* additional latency), in pull mode this amounts to some arbitrary
* reasonable buffer size increase.
*
* Of course, gst_base_parse_set_min_frame_size() could also be used if
* a very specific known amount of additional data is required. If,
* however, the buffer holds a complete valid frame, it can pass the
* size of this frame to gst_base_parse_finish_frame().
*
* If acting as a converter, it can also merely indicate consumed input
* data while simultaneously providing custom output data. Note that
* baseclass performs some processing (such as tracking overall consumed
* data rate versus duration) for each finished frame, but other state
* is only updated upon each call to #GstBaseParseClass.handle_frame()
* (such as tracking upstream input timestamp).
*
* Subclass is also responsible for setting the buffer metadata
......@@ -101,28 +104,30 @@ private import gstreamer.TagList;
* duration obtained from configuration (see below), and offset
* if meaningful (in pull mode).
*
* Note that @check_valid_frame might receive any small
* amount of input data when leftover data is being drained (e.g. at EOS).
* Note that #GstBaseParseClass.handle_frame() might receive any small
* amount of input data when leftover data is being drained (e.g. at
* EOS).
*
* * As part of finish frame processing,
* just prior to actually pushing the buffer in question,
* it is passed to @pre_push_frame which gives subclass yet one
* last chance to examine buffer metadata, or to send some custom (tag)
* * As part of finish frame processing, just prior to actually pushing
* the buffer in question, it is passed to
* #GstBaseParseClass.pre_push_frame() which gives subclass yet one last
* chance to examine buffer metadata, or to send some custom (tag)
* events, or to perform custom (segment) filtering.
*
* * During the parsing process #GstBaseParseClass will handle both srcpad
* and sinkpad events. They will be passed to subclass if @event or
* @src_event callbacks have been provided.
* and sinkpad events. They will be passed to subclass if
* #GstBaseParseClass.event() or #GstBaseParseClass.src_event()
* implementations have been provided.
*
* ## Shutdown phase
*
* * #GstBaseParse class calls @stop to inform the subclass that data
* parsing will be stopped.
* * #GstBaseParse class calls #GstBaseParseClass.stop() to inform the
* subclass that data parsing will be stopped.
*
* Subclass is responsible for providing pad template caps for
* source and sink pads. The pads need to be named "sink" and "src". It also
* needs to set the fixed caps on srcpad, when the format is ensured (e.g.
* when base class calls subclass' @set_sink_caps function).
* Subclass is responsible for providing pad template caps for source and
* sink pads. The pads need to be named "sink" and "src". It also needs to
* set the fixed caps on srcpad, when the format is ensured (e.g. when
* base class calls subclass' #GstBaseParseClass.set_sink_caps() function).
*
* This base class uses %GST_FORMAT_DEFAULT as a meaning of frames. So,
* subclass conversion routine needs to know that conversion from
......@@ -141,9 +146,10 @@ private import gstreamer.TagList;
* * Fixate the source pad caps when appropriate
* * Inform base class how big data chunks should be retrieved. This is
* done with gst_base_parse_set_min_frame_size() function.
* * Examine data chunks passed to subclass with @handle_frame and pass
* proper frame(s) to gst_base_parse_finish_frame(), and setting src pad
* caps and timestamps on frame.
* * Examine data chunks passed to subclass with
* #GstBaseParseClass.handle_frame() and pass proper frame(s) to
* gst_base_parse_finish_frame(), and setting src pad caps and timestamps
* on frame.
* * Provide conversion functions
* * Update the duration information with gst_base_parse_set_duration()
* * Optionally passthrough using gst_base_parse_set_passthrough()
......@@ -153,13 +159,14 @@ private import gstreamer.TagList;
*
* * In particular, if subclass is unable to determine a duration, but
* parsing (or specs) yields a frames per seconds rate, then this can be
* provided to #GstBaseParse to enable it to cater for
* buffer time metadata (which will be taken from upstream as much as
* provided to #GstBaseParse to enable it to cater for buffer time
* metadata (which will be taken from upstream as much as
* possible). Internally keeping track of frame durations and respective
* sizes that have been pushed provides #GstBaseParse with an estimated
* bitrate. A default @convert (used if not overridden) will then use these
* rates to perform obvious conversions. These rates are also used to
* update (estimated) duration at regular frame intervals.
* bitrate. A default #GstBaseParseClass.convert() (used if not
* overridden) will then use these rates to perform obvious conversions.
* These rates are also used to update (estimated) duration at regular
* frame intervals.
*/
public class BaseParse : Element
{
......@@ -216,7 +223,7 @@ public class BaseParse : Element
}
/**
* Default implementation of "convert" vmethod in #GstBaseParse class.
* Default implementation of #GstBaseParseClass.convert().
*