File: Aggregator.d

package info (click to toggle)
gtk-d 3.10.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 20,152 kB
  • sloc: javascript: 565; sh: 71; makefile: 25
file content (225 lines) | stat: -rw-r--r-- 7,084 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
/*
 * This file is part of gtkD.
 *
 * gtkD is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License
 * as published by the Free Software Foundation; either version 3
 * of the License, or (at your option) any later version, with
 * some exceptions, please read the COPYING file.
 *
 * gtkD 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 Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with gtkD; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
 */

// generated automatically - do not change
// find conversion definition on APILookup.txt
// implement new conversion functionalities on the wrap.utils pakage


module gst.base.Aggregator;

private import glib.MemorySlice;
private import gobject.ObjectG;
private import gst.base.c.functions;
public  import gst.base.c.types;
private import gstreamer.AllocationParams;
private import gstreamer.Allocator;
private import gstreamer.Buffer;
private import gstreamer.BufferPool;
private import gstreamer.Caps;
private import gstreamer.Element;


/**
 * Manages a set of pads with the purpose of aggregating their buffers.
 * Control is given to the subclass when all pads have data.
 * 
 * * Base class for mixers and muxers. Subclasses should at least implement
 * the #GstAggregatorClass.aggregate() virtual method.
 * 
 * * Installs a #GstPadChainFunction, a #GstPadEventFullFunction and a
 * #GstPadQueryFunction to queue all serialized data packets per sink pad.
 * Subclasses should not overwrite those, but instead implement
 * #GstAggregatorClass.sink_event() and #GstAggregatorClass.sink_query() as
 * needed.
 * 
 * * When data is queued on all pads, the aggregate vmethod is called.
 * 
 * * One can peek at the data on any given GstAggregatorPad with the
 * gst_aggregator_pad_peek_buffer () method, and remove it from the pad
 * with the gst_aggregator_pad_pop_buffer () method. When a buffer
 * has been taken with pop_buffer (), a new buffer can be queued
 * on that pad.
 * 
 * * If the subclass wishes to push a buffer downstream in its aggregate
 * implementation, it should do so through the
 * gst_aggregator_finish_buffer () method. This method will take care
 * of sending and ordering mandatory events such as stream start, caps
 * and segment.
 * 
 * * Same goes for EOS events, which should not be pushed directly by the
 * subclass, it should instead return GST_FLOW_EOS in its aggregate
 * implementation.
 * 
 * * Note that the aggregator logic regarding gap event handling is to turn
 * these into gap buffers with matching PTS and duration. It will also
 * flag these buffers with GST_BUFFER_FLAG_GAP and GST_BUFFER_FLAG_DROPPABLE
 * to ease their identification and subsequent processing.
 * 
 * * Subclasses must use (a subclass of) #GstAggregatorPad for both their
 * sink and source pads.
 * 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
{
	/** the main Gtk struct */
	protected GstAggregator* gstAggregator;

	/** Get the main Gtk struct */
	public GstAggregator* getAggregatorStruct(bool transferOwnership = false)
	{
		if (transferOwnership)
			ownedRef = false;
		return gstAggregator;
	}

	/** the main Gtk struct as a void* */
	protected override void* getStruct()
	{
		return cast(void*)gstAggregator;
	}

	/**
	 * Sets our main struct and passes it to the parent class.
	 */
	public this (GstAggregator* gstAggregator, bool ownedRef = false)
	{
		this.gstAggregator = gstAggregator;
		super(cast(GstElement*)gstAggregator, ownedRef);
	}


	/** */
	public static GType getType()
	{
		return gst_aggregator_get_type();
	}

	/**
	 * This method will push the provided output buffer downstream. If needed,
	 * mandatory events such as stream-start, caps, and segment events will be
	 * sent before pushing the buffer.
	 *
	 * Params:
	 *     buffer = the #GstBuffer to push.
	 */
	public GstFlowReturn finishBuffer(Buffer buffer)
	{
		return gst_aggregator_finish_buffer(gstAggregator, (buffer is null) ? null : buffer.getBufferStruct());
	}

	/**
	 * Lets #GstAggregator sub-classes get the memory @allocator
	 * acquired by the base class and its @params.
	 *
	 * Unref the @allocator after use it.
	 *
	 * Params:
	 *     allocator = the #GstAllocator
	 *         used
	 *     params = the
	 *         #GstAllocationParams of @allocator
	 */
	public void getAllocator(out Allocator allocator, out AllocationParams params)
	{
		GstAllocator* outallocator = null;
		GstAllocationParams* outparams = sliceNew!GstAllocationParams();

		gst_aggregator_get_allocator(gstAggregator, &outallocator, outparams);

		allocator = ObjectG.getDObject!(Allocator)(outallocator);
		params = ObjectG.getDObject!(AllocationParams)(outparams, true);
	}

	/**
	 * Returns: the instance of the #GstBufferPool used
	 *     by @trans; free it after use it
	 */
	public BufferPool getBufferPool()
	{
		auto p = gst_aggregator_get_buffer_pool(gstAggregator);

		if(p is null)
		{
			return null;
		}

		return ObjectG.getDObject!(BufferPool)(cast(GstBufferPool*) p, true);
	}

	/**
	 * Retrieves the latency values reported by @self in response to the latency
	 * query, or %GST_CLOCK_TIME_NONE if there is not live source connected and the element
	 * will not wait for the clock.
	 *
	 * Typically only called by subclasses.
	 *
	 * Returns: The latency or %GST_CLOCK_TIME_NONE if the element does not sync
	 */
	public GstClockTime getLatency()
	{
		return gst_aggregator_get_latency(gstAggregator);
	}

	/**
	 * Lets #GstAggregator sub-classes tell the baseclass what their internal
	 * latency is. Will also post a LATENCY message on the bus so the pipeline
	 * can reconfigure its global latency.
	 *
	 * Params:
	 *     minLatency = minimum latency
	 *     maxLatency = maximum latency
	 */
	public void setLatency(GstClockTime minLatency, GstClockTime maxLatency)
	{
		gst_aggregator_set_latency(gstAggregator, minLatency, maxLatency);
	}

	/**
	 * Sets the caps to be used on the src pad.
	 *
	 * Params:
	 *     caps = The #GstCaps to set on the src pad.
	 */
	public void setSrcCaps(Caps caps)
	{
		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);
	}
}