Codebase list gstreamer1.0 / f4e033e
Imported Upstream version 1.0.1 Sebastian Dröge 11 years ago
301 changed file(s) with 7828 addition(s) and 4173 deletion(s). Raw diff Collapse all Expand all
0 === release 1.0.1 ===
1
2 2012-10-07 Tim-Philipp Müller <tim@centricular.net>
3
4 * configure.ac:
5 releasing 1.0.1
6
7 2012-10-07 00:15:49 +0100 Tim-Philipp Müller <tim@centricular.net>
8
9 * tests/check/gst/struct_i386.h:
10 * tests/check/libs/struct_i386.h:
11 tests: update struct_i386.h for ABI checks
12 Fixes make check on 32-bit x86.
13
14 2012-10-06 17:26:21 +0100 Tim-Philipp Müller <tim@centricular.net>
15
16 * tests/check/gst/struct_ppc32.h:
17 * tests/check/libs/struct_ppc32.h:
18 tests: update struct_ppc32.h for ABI checks
19 Fixes make check on 32-bit PowerPC.
20
21 2012-10-06 14:55:35 +0100 Tim-Philipp Müller <tim@centricular.net>
22
23 * common:
24 Automatic update of common submodule
25 From 6c0b52c to 6bb6951
26
27 2012-10-06 12:08:34 +0100 Tim-Philipp Müller <tim@centricular.net>
28
29 * tests/examples/manual/.gitignore:
30 examples: .gitignore more binaries from the manual
31
32 2012-10-05 16:04:52 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
33
34 * docs/design/Makefile.am:
35 * docs/design/part-block.txt:
36 * docs/design/part-probes.txt:
37 docs: remove obsolete part-block document
38 Merge the part-block document into part-probes
39
40 2012-10-05 09:42:59 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
41
42 * gst/gstpad.c:
43 pad: resend dropped events
44 If we try to push sticky events but a probe dropped them, we don't mark
45 the event as received and mark the pad as PENDING_EVENTS. This ensures
46 that we resend the event the next time. For this we need to let the
47 custom flow return from the probe trickle up to
48 gst_pad_push_event_unchecked() so that we can differentiate between
49 OK and DROPPED probe returns.
50
51 2012-10-05 07:14:17 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
52
53 * gst/gstpad.c:
54 pad: don't store sticky events on flushing/EOS pads
55 Don't store sticky events on flushing or EOS pads. This was done
56 correctly for source pads but not for sink pads.
57
58 2012-10-04 11:24:09 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
59
60 * docs/libs/gstreamer-libs-sections.txt:
61 * libs/gst/base/gstbasetransform.c:
62 * win32/common/libgstbase.def:
63 docs: add Since markers for new API and add it to docs and .def file
64
65 2012-10-04 11:50:58 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
66
67 * docs/manual/advanced-dataaccess.xml:
68 * tests/examples/manual/Makefile.am:
69 manual: add dynamic capsfilter example
70
71 2012-10-04 11:18:19 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
72
73 * plugins/elements/gstcapsfilter.c:
74 capsfilter: don't prefer passthrough
75 Basetransform should not try to negotiate in passthrough mode but
76 respect the order of what we return in the transform_caps method.
77 A typical case is that you specify some specific new caps in the
78 caps property but also allow the current caps to pass.
79
80 2012-10-04 11:15:36 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
81
82 * libs/gst/base/gstbasetransform.c:
83 * libs/gst/base/gstbasetransform.h:
84 basetrans: add an option to prefer passthrough
85 Basetransform attempts to do passthrough mode regardless of the order of
86 the transform_caps method. Add a method to disable this.
87 This is needed for elements like capsfilter that want to transform caps
88 based on the order of the caps property.
89
90 2012-10-04 10:01:19 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
91
92 * libs/gst/base/gstbasetransform.c:
93 basetrans: improve some comments
94
95 2012-10-03 17:17:02 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
96
97 * docs/manual/advanced-autoplugging.xml:
98 * docs/manual/advanced-dataaccess.xml:
99 manual: talk some more about dynamic pipelines
100
101 2012-10-03 13:49:34 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
102
103 * gst/gstmeta.c:
104 meta: don't put essential logic in g_return_val_*
105
106 2012-10-03 13:45:22 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
107
108 * docs/pwg/advanced-allocation.xml:
109 * libs/gst/net/gstnetaddressmeta.c:
110 * tests/check/gst/gstmeta.c:
111 meta: do metadata registration threadsafe
112 We need to use g_once to register the metadata implementations
113 only once.
114 See https://bugzilla.gnome.org/show_bug.cgi?id=685332
115
116 2012-10-03 13:35:20 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
117
118 * gst/gstmeta.c:
119 meta: handle multiple implementation registration
120 First check that we can actually register the implementation before
121 making a GstMetaInfo. If we can't register we would otherwise end
122 up with an undefined type and an invalid GstMetaInfo.
123 It's possible that type registration fails because another metadata
124 with the same implementation name was already registered.
125
126 2012-10-03 13:12:44 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
127
128 * docs/manual/advanced-dataaccess.xml:
129 manual: use CDATA for code blocks
130 then we don't have to escape special token anymore.
131
132 2012-10-03 13:09:00 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
133
134 * docs/manual/advanced-dataaccess.xml:
135 * tests/examples/manual/Makefile.am:
136 manual: add partial preroll example with probes
137
138 2012-10-03 10:53:20 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
139
140 * docs/manual/advanced-dataaccess.xml:
141 manual: add more stuff about probes
142
143 2012-10-02 17:23:28 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
144
145 * docs/manual/advanced-dataaccess.xml:
146 manual: start talking about dynamic pipeline changes
147
148 2012-10-02 16:47:05 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
149
150 * docs/manual/advanced-dataaccess.xml:
151 manual: move section around
152
153 2012-10-02 16:44:28 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
154
155 * docs/manual/advanced-dataaccess.xml:
156 * tests/examples/manual/Makefile.am:
157 pwg: add appsink docs
158
159 2012-10-02 16:15:19 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
160
161 * docs/manual/advanced-dataaccess.xml:
162 * tests/examples/manual/Makefile.am:
163 pwg: rewite data-access chapter
164 Rewrite the data-access chapter so that we talk about appsrc instead
165 of the fakesrc hacks.
166
167 2012-10-02 13:22:35 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
168
169 * docs/design/draft-klass.txt:
170 * docs/manual/advanced-dataaccess.xml:
171 * docs/manual/advanced-metadata.xml:
172 * docs/manual/appendix-integration.xml:
173 * gst/gstpreset.c:
174 * po/README:
175 * tools/gst-plot-timeline.py:
176 docs: some 0.10 -> 1.0 changes
177
178 2012-10-02 13:12:39 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
179
180 * docs/pwg/advanced-allocation.xml:
181 pwg: add allocation query example
182
183 2012-10-02 12:49:17 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
184
185 * docs/pwg/advanced-allocation.xml:
186 pwg: add bufferpool docs
187
188 2012-10-02 11:34:47 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
189
190 * docs/manual/appendix-programs.xml:
191 * docs/manual/manual.xml:
192 * docs/pwg/advanced-allocation.xml:
193 pwg: flesh out allocation docs
194 Add more examples.
195 Add example for implementing new metadata.
196 Add programs to the docs (again?), it seems to contain useful info.
197
198 2012-10-01 16:59:41 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
199
200 * docs/pwg/titlepage.xml:
201 pwg: add new author
202
203 2012-10-01 16:55:55 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
204
205 * docs/pwg/advanced-allocation.xml:
206 pwg: add allocation docs
207
208 2012-10-01 16:46:03 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
209
210 * docs/design/part-buffer.txt:
211 * docs/design/part-bufferpool.txt:
212 * docs/design/part-meta.txt:
213 docs: update design docs
214
215 2012-10-01 13:28:54 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
216
217 * docs/design/part-bufferpool.txt:
218 * docs/design/part-memory.txt:
219 * docs/pwg/advanced-allocation.xml:
220 * docs/pwg/pwg.xml:
221 docs: more docs fixes
222 Fix allocator design doc
223 Add beginning of allocation chapter in the pwg
224
225 2012-10-01 11:47:46 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
226
227 * docs/pwg/appendix-checklist.xml:
228 * docs/pwg/appendix-porting.xml:
229 * docs/pwg/other-manager.xml:
230 * docs/pwg/other-ntoone.xml:
231 pwg: final cleanups for 1.0
232
233 2012-10-01 11:24:52 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
234
235 * docs/pwg/advanced-events.xml:
236 * docs/pwg/other-base.xml:
237 pwg: fix events and base classes
238
239 2012-10-01 10:40:54 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
240
241 * docs/pwg/advanced-tagging.xml:
242 pwg: fixup tag docs
243
244 2012-10-01 09:48:48 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
245
246 * docs/pwg/advanced-interfaces.xml:
247 pwg: patch up the section about interfaces
248
249 2012-09-30 04:05:36 +1000 Jan Schmidt <thaytan@noraisin.net>
250
251 * libs/gst/base/gstbasesrc.c:
252 basesrc: Fix seamless segment function
253 The 3rd parameter of gst_base_src_new_seamless_segment in
254 0.10 is the time associated with the start of the new segment,
255 not the position in the new segment. Fix the name of the parameter,
256 the docs, and the implementation to match the needs of the only
257 extant consumer: DVD playback.
258
259 2012-09-29 14:35:58 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
260
261 * gst/gstvalue.c:
262 * tests/check/gst/gstcaps.c:
263 value: avoid duplicates when intersecting lists
264 Fixes negotiation taking a ridiculous amount of
265 time (multiple 10s of seconds on a core2) when
266 there are duplicate entries in lists.
267 Could have a negative performance impact on other
268 scenarios because we now have to iterate the
269 dest list to avoid duplicates, but we don't
270 have a lot of lists any more these days, and
271 they tend to be small anyway. The negatives
272 are hopefully countered by the positive effects
273 of reducing the list length early on in the
274 process. And in any case, it's the right thing
275 to do.
276 Based on patch by Andre Moreira Magalhaes.
277 https://bugzilla.gnome.org/show_bug.cgi?id=684981
278
279 2012-09-29 00:27:03 +0100 Tim-Philipp Müller <tim@centricular.net>
280
281 * docs/pwg/building-boiler.xml:
282 pwg: minor update
283 https://bugzilla.gnome.org/show_bug.cgi?id=621121
284
285 2012-09-28 23:53:53 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
286
287 * docs/faq/dependencies.xml:
288 faq: add missing </para> tag
289
290 2012-09-28 15:17:27 -0400 Olivier Crête <olivier.crete@collabora.com>
291
292 * gst/gstminiobject.c:
293 * tests/check/gst/gstmemory.c:
294 miniobject: Always reject WRITE locks on READONLY miniobjects
295 Verify that mapping a read-only memory as read doesnt make it writable
296
297 2012-09-28 20:38:20 +0100 Tim-Philipp Müller <tim@centricular.net>
298
299 * docs/faq/dependencies.xml:
300 * docs/random/autotools:
301 * docs/random/moving-plugins:
302 docs: purge all mention of liboil, update FAQ
303 https://bugzilla.gnome.org/show_bug.cgi?id=673285
304
305 2012-09-28 16:03:15 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
306
307 * docs/pwg/advanced-clock.xml:
308 * docs/pwg/advanced-dparams.xml:
309 * docs/pwg/advanced-interfaces.xml:
310 pwg: update for 1.0
311 Rewrite clock part.
312 start on interfaces
313
314 2012-09-28 13:25:49 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
315
316 * docs/pwg/advanced-request.xml:
317 pwg: rework dynamic pads docs
318
319 2012-09-28 13:25:30 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
320
321 * docs/pwg/advanced-scheduling.xml:
322 pwg: rework scheduling docs
323
324 2012-09-28 13:24:52 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
325
326 * docs/pwg/building-props.xml:
327 * docs/pwg/other-base.xml:
328 pwg: remove some GST_BOILERPLATE
329
330 2012-09-28 11:18:11 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
331
332 * docs/design/part-activation.txt:
333 docs: update activation design docs
334
335 2012-09-28 10:41:54 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
336
337 * gst/gstpad.c:
338 * gst/gstpad.h:
339 pad: fix activate docs
340
341 2012-09-28 10:04:51 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
342
343 * docs/pwg/advanced-negotiation.xml:
344 pwg: fix more negotiation for 1.0
345
346 2012-09-27 16:59:04 +0200 Olivier Blin <olivier.blin@softathome.com>
347
348 * gst/gstinfo.c:
349 info: do not register printf extension for %p
350 This happened when glib was not using system printf, and caused the
351 internal gstreamer printf extensions to be used for all %p printfs,
352 causing crashes.
353 https://bugzilla.gnome.org/show_bug.cgi?id=684970
354
355 2012-09-27 17:21:53 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
356
357 * docs/pwg/advanced-negotiation.xml:
358 pwg: fix some negotiation to 1.0
359
360 2012-09-27 14:42:07 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
361
362 * docs/pwg/building-props.xml:
363 * docs/pwg/building-state.xml:
364 * docs/pwg/building-testapp.xml:
365 pwg: more updates for 1.0
366
367 2012-09-27 13:57:46 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
368
369 * docs/pwg/building-chainfn.xml:
370 * docs/pwg/building-eventfn.xml:
371 * docs/pwg/building-pads.xml:
372 * docs/pwg/pwg.xml:
373 pwg: more updates for 1.0
374
375 2012-09-27 11:53:36 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
376
377 * docs/pwg/building-boiler.xml:
378 pwg: update boiler to 1.0
379
380 2012-09-27 11:06:06 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
381
382 * gst/gstghostpad.c:
383 ghostpad: also ref the internal pad for activate functions
384 Also take a ref to the internal pad in the activate functions
385
386 2012-09-24 18:26:16 -0400 Olivier Crête <olivier.crete@collabora.com>
387
388 * gst/gstghostpad.c:
389 proxypad: Hold a reference to the internal pad while pushing through it
390 https://bugzilla.gnome.org/show_bug.cgi?id=684809
391
392 2012-09-25 14:44:54 -0400 Olivier Crête <olivier.crete@collabora.com>
393
394 * tests/check/gst/gstghostpad.c:
395 tests: Test the case where ghost pads are removed while streaming
396 https://bugzilla.gnome.org/show_bug.cgi?id=684809
397
398 2012-09-27 09:44:07 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
399
400 * tests/check/Makefile.am:
401 * tests/check/libs/libsabi.c:
402 * tests/check/libs/struct_arm.h:
403 * tests/check/libs/struct_hppa.h:
404 * tests/check/libs/struct_i386.h:
405 * tests/check/libs/struct_ppc32.h:
406 * tests/check/libs/struct_ppc64.h:
407 * tests/check/libs/struct_sparc.h:
408 * tests/check/libs/struct_x86_64.h:
409 tests: enable library abi checks
410
411 2012-09-26 23:32:35 +0100 Tim-Philipp Müller <tim@centricular.net>
412
413 * libs/gst/base/gstbasesink.c:
414 * libs/gst/base/gstbasesrc.c:
415 docs: fix up basesrc/basesink docs formatting
416
417 2012-09-26 17:08:30 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
418
419 * tests/check/Makefile.am:
420 * tests/check/gst/struct_arm.h:
421 * tests/check/gst/struct_hppa.h:
422 * tests/check/gst/struct_i386.h:
423 * tests/check/gst/struct_ppc32.h:
424 * tests/check/gst/struct_ppc64.h:
425 * tests/check/gst/struct_sparc.h:
426 * tests/check/gst/struct_x86_64.h:
427 tests: add abi checks
428 Enable abi checks again.
429 Fix abi sizes for x86_64, copy the file to other archs.
430
431 2012-09-26 16:26:48 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
432
433 * libs/gst/base/gstbasesink.c:
434 * libs/gst/base/gstbasesrc.c:
435 update docs for 1.0 API
436
437 2012-09-26 14:15:01 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
438
439 * gst/gsturi.c:
440 uri: use proper 'transfer floating' annotation
441 https://bugzilla.gnome.org/show_bug.cgi?id=664099
442
443 2012-09-26 13:19:13 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
444
445 * plugins/elements/gsttypefindelement.c:
446 * plugins/elements/gsttypefindelement.h:
447 typefind: send STREAM-START event
448 Send a STREAM_START event when we are operating in pull mode.
449 Fixes https://bugzilla.gnome.org/show_bug.cgi?id=684424
450
451 2012-09-26 10:55:28 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
452
453 * gst/gstsegment.h:
454 segment: mark GstSegmentFlags as flags rather than enum
455 ... which really makes a difference when trying to serialize
456 a flags value which is a combination of flags, which is hard
457 to do as an enum type.
458
459 2012-09-26 10:54:06 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
460
461 * plugins/elements/gstidentity.c:
462 identity: retimestamp both pts and dts when doing so
463
464 2012-09-26 15:01:42 +1000 Jan Schmidt <thaytan@noraisin.net>
465
466 * libs/gst/base/gstbaseparse.c:
467 baseparse: Move some run of the mill debug statements to LOG level
468
469 2012-09-26 14:23:52 +1000 Jan Schmidt <thaytan@noraisin.net>
470
471 * libs/gst/base/gstbaseparse.c:
472 baseparse: Output timestamps after a seek.
473 Reinitialise the DTS after a seek so as to continue
474 generating timestamps when baseparse is not downstream
475 of a demuxer.
476 Fixes: #684538
477
478 2012-09-25 17:06:45 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
479
480 * docs/manual/appendix-programs.xml:
481 * docs/manual/basics-pads.xml:
482 * docs/pwg/advanced-types.xml:
483 * docs/pwg/building-boiler.xml:
484 * docs/pwg/building-pads.xml:
485 * docs/pwg/other-ntoone.xml:
486 * tools/gst-launch.1.in:
487 * tools/gst-typefind.1.in:
488 docs: updates
489 MIME-type -> Media type
490 Fix some old gst-inspect output
491
492 2012-09-25 16:53:08 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
493
494 * docs/pwg/intro-basics.xml:
495 * docs/pwg/intro-preface.xml:
496 pwg: update for 1.0 API
497
498 2012-09-25 15:11:33 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
499
500 * docs/gst/gstreamer-sections.txt:
501 docs: add section for metadata
502
503 2012-09-25 13:09:38 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
504
505 * gst/gstelement.c:
506 * gst/gstelementfactory.c:
507 elementfactory: Fail if no valid element factory metadata is set
508
509 2012-09-25 13:09:28 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
510
511 * gst/gstplugin.c:
512 plugin: Fail if no valid plugin metadata is set
513
514 2012-09-25 15:06:43 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
515
516 * plugins/elements/gstidentity.c:
517 identity: also track and store segment info in single segment mode
518
519 2012-09-25 14:40:20 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
520
521 * docs/manual/advanced-autoplugging.xml:
522 * docs/manual/advanced-dataaccess.xml:
523 * docs/manual/advanced-interfaces.xml:
524 * docs/manual/advanced-threads.xml:
525 * docs/manual/appendix-checklist.xml:
526 * docs/manual/appendix-integration.xml:
527 * docs/manual/appendix-porting.xml:
528 * docs/manual/basics-bins.xml:
529 * docs/manual/basics-bus.xml:
530 * docs/manual/basics-data.xml:
531 * docs/manual/basics-elements.xml:
532 * docs/manual/basics-helloworld.xml:
533 * docs/manual/highlevel-components.xml:
534 * docs/manual/intro-basics.xml:
535 * docs/manual/manual.xml:
536 * docs/random/porting-to-1.0.txt:
537 * tests/examples/manual/Makefile.am:
538 manual: fix up the manual
539 MIME-type -> media types
540 Fix up the manual in various places with the 1.0 way of doing things
541 such as probes, static elements, scheduling, ...
542 Add porting from 0.10 to 1.0 chapter.
543 Add probe example to build.
544 Remove some docs for remove components such as GstMixer and
545 GstPropertyProbe, XML...
546
547 2012-09-24 16:50:50 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
548
549 * docs/manual/intro-gstreamer.xml:
550 docs: gst-python is no more
551 gst-python is no more and gst-libav is one of the main modules that
552 we release.
553
554 2012-09-24 16:31:34 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
555
556 * libs/gst/base/gstbasesink.c:
557 docs: fix basesink docs
558
559 2012-09-24 16:25:36 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
560
561 * docs/faq/getting.xml:
562 * docs/faq/troubleshooting.xml:
563 * docs/faq/using.xml:
564 docs: update FAQ
565 Change versions.
566 Use tools with version prefix.
567
568 2012-09-25 13:15:14 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
569
570 * po/af.po:
571 * po/az.po:
572 * po/be.po:
573 * po/bg.po:
574 * po/ca.po:
575 * po/cs.po:
576 * po/da.po:
577 * po/de.po:
578 * po/el.po:
579 * po/en_GB.po:
580 * po/eo.po:
581 * po/es.po:
582 * po/eu.po:
583 * po/fi.po:
584 * po/fr.po:
585 * po/gl.po:
586 * po/hu.po:
587 * po/id.po:
588 * po/it.po:
589 * po/ja.po:
590 * po/lt.po:
591 * po/nb.po:
592 * po/nl.po:
593 * po/pl.po:
594 * po/pt_BR.po:
595 * po/ro.po:
596 * po/ru.po:
597 * po/rw.po:
598 * po/sk.po:
599 * po/sl.po:
600 * po/sq.po:
601 * po/sr.po:
602 * po/sv.po:
603 * po/tr.po:
604 * po/uk.po:
605 * po/vi.po:
606 * po/zh_CN.po:
607 * po/zh_TW.po:
608 po: update translations for typo fix
609
610 2012-09-25 13:14:53 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
611
612 * gst/gsttaglist.c:
613 taglist: fix typo in translated string
614 Spotted by Chris Leonard.
615 https://bugzilla.gnome.org/show_bug.cgi?id=684755
616
617 2012-09-25 09:27:59 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
618
619 * gst/gstpluginfeature.c:
620 pluginfeature: Remove 0.11.9X->1.0.0 version mangling
621
622 2012-09-25 01:02:03 +0100 Josep Torra Valles <n770galaxy@gmail.com>
623
624 * tests/benchmarks/complexity.c:
625 * tests/benchmarks/gstpollstress.c:
626 benchmarks: printf format fixes to make intel compiler happy
627 https://bugzilla.gnome.org/show_bug.cgi?id=552657
628
629 2012-09-25 00:55:59 +0100 Josep Torra Valles <n770galaxy@gmail.com>
630
631 * libs/gst/base/gsttypefindhelper.c:
632 * plugins/elements/gstfakesink.c:
633 * plugins/elements/gstfakesrc.c:
634 * plugins/elements/gstmultiqueue.c:
635 * plugins/elements/gsttee.c:
636 * tools/gst-launch.c:
637 * tools/tools.h:
638 Make intel compiler happier
639 https://bugzilla.gnome.org/show_bug.cgi?id=552657
640
641 2012-09-24 16:31:54 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
642
643 * configure.ac:
644 * docs/plugins/inspect/plugin-coreelements.xml:
645 * win32/common/config.h:
646 * win32/common/gstversion.h:
647 Back to development (bug fixing)
648
649 === release 1.0.0 ===
650
651 2012-09-24 12:19:16 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
652
653 * NEWS:
654 * RELEASE:
655 * configure.ac:
656 * docs/plugins/inspect/plugin-coreelements.xml:
657 * gstreamer.doap:
658 * win32/common/config.h:
659 Release 1.0.0
660
661 2012-09-24 00:39:26 +0100 Tim-Philipp Müller <tim@centricular.net>
662
663 * docs/random/porting-to-1.0.txt:
664 docs: update 0.11 references in porting guide
665
666 2012-09-24 00:37:27 +0100 Tim-Philipp Müller <tim@centricular.net>
667
668 * docs/random/porting-to-0.11.txt:
669 * docs/random/porting-to-1.0.txt:
670 docs: rename porting-to-0.11.txt to porting-to-1.0.txt
671
672 2012-09-23 19:56:43 +0100 Tim-Philipp Müller <tim@centricular.net>
673
674 * libs/gst/check/gstcheck.h:
675 check: fix FIXME printing for tcase_skip_broken_test()
676
677 2012-09-23 17:30:50 +0100 Tim-Philipp Müller <tim@centricular.net>
678
679 * docs/random/release:
680 docs: update release doc
681 Create tags for releases without the ugly RELEASE- prefix.
682
683 2012-09-23 12:42:01 +0100 Tim-Philipp Müller <tim@centricular.net>
684
685 * libs/gst/base/gstcollectpads.c:
686 collectpads: don't forward random stream-start event
687 It's not right, and we don't know what extra properties
688 that event might have set in future (e.g. sparseness).
689 This change means collectpad users need to create their
690 own stream-start event now. We could add a utility
691 function that creates a stream-start event based on
692 the input stream-start events.
693
694 2012-09-22 16:07:15 +0100 Tim-Philipp Müller <tim@centricular.net>
695
696 * common:
697 Automatic update of common submodule
698 From 4f962f7 to 6c0b52c
699
700 2012-09-21 21:13:27 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
701
702 * docs/manual/advanced-dparams.xml:
703 manual: update controller documentation
704
705 2012-09-21 21:13:13 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
706
707 * gst/gstobject.c:
708 object: update controller documentation
709
710 2012-09-18 15:22:03 +0200 Bastian Winkler <buz@netbuz.org>
711
712 * tools/gst-launch.1.in:
713 man: Fix syntax for value lists in caps strings
714 Value lists use curly brackets instead of parentheses
715 https://bugzilla.gnome.org/show_bug.cgi?id=684293
716
717 2012-09-20 14:48:17 -0400 Olivier Crête <olivier.crete@collabora.com>
718
719 * gst/gstpad.c:
720 * tests/check/gst/gstpad.c:
721 pad: Remove pad probes only once
722 Also add test to make sure that if a pad probe is removed while it's
723 callback is running, the cleanup_hook isn't called again if it
724 returns GST_PAD_PROBE_REMOVE
725
726 2012-09-19 15:01:46 -0400 Olivier Crête <olivier.crete@collabora.com>
727
728 * docs/gst/gstreamer-sections.txt:
729 * gst/gstpad.c:
730 * gst/gstpad.h:
731 * win32/common/libgstreamer.def:
732 pad: Add functions to safely access GstProbeInfo data pointer
733 This is so that introspection based bindings can access it.
734 https://bugzilla.gnome.org/show_bug.cgi?id=684402
735
736 2012-09-19 23:25:54 +0100 Tim-Philipp Müller <tim@centricular.net>
737
738 * docs/manual/basics-bins.xml:
739 docs: remove reference to 0.8 GstBin API from manual
740 https://bugzilla.gnome.org/show_bug.cgi?id=684048
741
742 2012-09-19 15:14:35 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
743
744 * plugins/elements/gstidentity.c:
745 identity: transform GAP event in single segment mode
746
747 2012-09-19 09:44:08 +0100 Tim-Philipp Müller <tim@centricular.net>
748
749 * libs/gst/base/gstcollectpads.c:
750 docs: collectpads doc fixes
751
752 2012-09-18 21:49:41 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
753
754 * libs/gst/base/gstbasetransform.c:
755 basetransform: check acquire result value
756 Check the result value from _buffer_pool_acquire() and return the
757 value when allocation failed.
758 Fixes https://bugzilla.gnome.org/show_bug.cgi?id=684285
759
760 2012-09-18 12:14:34 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
761
762 * gst/gstpad.c:
763 pad: Fix refcount bug by unreffing the correct variable
764
765 === release 0.11.99 ===
766
767 2012-09-17 17:56:44 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
768
769 * configure.ac:
770 * docs/plugins/inspect/plugin-coreelements.xml:
771 * gstreamer.doap:
772 * win32/common/config.h:
773 Release 0.11.99
774
775 2012-09-17 13:35:26 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
776
777 * configure.ac:
778 * gst/Makefile.am:
779 * gst/gst.h:
780 * libs/gst/base/Makefile.am:
781 * libs/gst/check/Makefile.am:
782 * libs/gst/controller/Makefile.am:
783 * libs/gst/net/Makefile.am:
784 * win32/vs10/Common.props:
785 Remove GST_USE_UNSTABLE_API guard and defines
786
787 2012-09-17 13:09:58 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
788
789 * gst/gstpad.c:
790 * gst/gstpad.h:
791 * tests/check/gst/gstghostpad.c:
792 pad: Add parent parameter to the link and unlink functions
793 Fixes part of bug #683995.
794
795 2012-09-16 23:20:46 +0100 Tim-Philipp Müller <tim@centricular.net>
796
797 * gst/gststructure.c:
798 * gst/gstvalue.c:
799 * tests/check/gst/gsttag.c:
800 sample: add serialisation/deserialisation functions for GstSample
801 Since these things are inside taglists now, it would be good to be
802 able to print them and deserialise them.
803 https://bugzilla.gnome.org/show_bug.cgi?id=681322
804
805 2012-09-15 21:56:07 +0200 Christian Fredrik Kalager Schaller <uraeus@linuxrisin.org>
806
807 * gstreamer.spec.in:
808 Switch to F18 naming of the package
809
810 2012-09-15 18:43:39 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
811
812 * docs/manual/advanced-autoplugging.xml:
813 * docs/manual/basics-elements.xml:
814 * tools/gst-inspect.c:
815 use gst_element_factory_get_metadata to replace obsolete API
816
817 2012-09-14 17:52:14 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
818
819 * docs/manual/advanced-metadata.xml:
820 * docs/manual/basics-bus.xml:
821 replace gst_tag_list_free with gst_tag_list_unref
822
823 2012-09-14 17:00:23 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
824
825 * tests/check/gst/gstcontroller.c:
826 * tests/check/gst/gstpreset.c:
827 * tests/check/libs/controller.c:
828 * tests/check/libs/test_transform.c:
829 * tests/check/pipelines/parse-launch.c:
830 * tests/examples/controller/control-sources.c:
831 replace gst_element_class_set_details_simple with gst_element_class_set_metadata
832
833 2012-09-06 16:32:35 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
834
835 * libs/gst/base/gstbasetransform.c:
836 basetrans: whitespace fix
837
838 2012-09-14 14:08:18 +0100 Tim-Philipp Müller <tim@centricular.net>
839
840 * docs/plugins/gstreamer-plugins-docs.sgml:
841 docs: indexers are no more
842 https://bugzilla.gnome.org/show_bug.cgi?id=684018
843
844 2012-09-14 13:34:24 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
845
846 * tests/examples/stepping/framestep1.c:
847 tests: fix for appsink return value addition
848
849 2012-09-14 02:54:52 +0100 Tim-Philipp Müller <tim@centricular.net>
850
851 * configure.ac:
852 Back to development
853
854 === release 0.11.94 ===
855
856 2012-09-14 02:46:34 +0100 Tim-Philipp Müller <tim@centricular.net>
857
858 * ChangeLog:
859 * configure.ac:
860 * docs/plugins/gstreamer-plugins.args:
861 * docs/plugins/gstreamer-plugins.hierarchy:
862 * docs/plugins/inspect/plugin-coreelements.xml:
863 * gstreamer.doap:
864 * win32/common/config.h:
865 Release 0.11.94
866
867 2012-09-14 01:28:46 +0100 Olivier Crête <olivier.crete@collabora.com>
868
869 * gst/gstpad.c:
870 pad: don't try to pretty-print event after we've given away ownership
871 Might cause crashes with debug logging enabled.
872 https://bugzilla.gnome.org/show_bug.cgi?id=683996
873
874 2012-09-14 01:17:54 +0100 Tim-Philipp Müller <tim@centricular.net>
875
876 * po/af.po:
877 * po/az.po:
878 * po/be.po:
879 * po/bg.po:
880 * po/ca.po:
881 * po/cs.po:
882 * po/da.po:
883 * po/de.po:
884 * po/el.po:
885 * po/en_GB.po:
886 * po/eo.po:
887 * po/es.po:
888 * po/eu.po:
889 * po/fi.po:
890 * po/fr.po:
891 * po/gl.po:
892 * po/hu.po:
893 * po/id.po:
894 * po/it.po:
895 * po/ja.po:
896 * po/lt.po:
897 * po/nb.po:
898 * po/nl.po:
899 * po/pl.po:
900 * po/pt_BR.po:
901 * po/ro.po:
902 * po/ru.po:
903 * po/rw.po:
904 * po/sk.po:
905 * po/sl.po:
906 * po/sq.po:
907 * po/sr.po:
908 * po/sv.po:
909 * po/tr.po:
910 * po/uk.po:
911 * po/vi.po:
912 * po/zh_CN.po:
913 * po/zh_TW.po:
914 po: update translations
915
0916 2012-09-14 00:30:37 +0100 Tim-Philipp Müller <tim@centricular.net>
1917
2918 * gst/gstcompat.h:
0 This is GStreamer 1.0.0
0 This is GStreamer 1.0.1
1
2 Changes since 1.0.0:
3
4 * Capsfilter prefers filter caps over passthrough now
5 * Application Development Manual, Plugin Writer's Guide and other documentation updated and extended for 1.0
6 * Bug fixes
7
8 Bugs fixed since 1.0.0:
9
10 * 680862 : identity with single-segment=true gives buffer.pts of CLOCK_TIME_NONE
11 * 684538 : baseparse: no timestamps after seeking in mp3 or aac
12 * 684755 : typo - whithin > within
13 * 684765 : Plugins without a klass in the metadata crashes autoaudiosink
14 * 684809 : proxypad don't hold a ref to their internal pad while streaming through it
15 * 684970 : Don't register printf extension for %p when glib is not using system printf
16 * 684981 : Pipeline hangs on PREROLLING negotiating caps
17 * 685072 : memory: map(READ)/unmap clears the READONLY status
18
19 API additions since 1.0.0:
20
21 * gst_base_transform_set_prefer_passthrough()
122
223 New features in 1.0.0:
324
0 Release notes for GStreamer 1.0.0
10
2 The GStreamer project is pleased to announce the very first release of the
3 new API and ABI-stable 1.x series of the GStreamer multimedia framework.
1 Release notes for GStreamer 1.0.1
42
5 The 1.x series is a stable series targeted at end users. It is not API or ABI
6 compatible with the 0.10.x series. It can, however, be installed in parallel
7 with the 0.10.x series and will not affect an existing 0.10.x installation.
83
9 Major improvements include: more flexible memory handling; extensible and
10 negotiable metadata for buffers; caps negotiation and renegotiation mechanisms,
11 decoupled from buffer allocation; improved caps renegotiation; automatic
12 re-sending of state for dynamic pipelines; reworked and more fine-grained pad
13 probing; simpler and more descriptive audio and video caps; more efficient
14 allocation of buffers, events and other mini objects; improved timestamp
15 handling; support for gobject-inspection-based language bindings; countless
16 other improvements.
4 The GStreamer team is proud to announce a new bug-fix release
5 in the 1.x stable series of the
6 core of the GStreamer streaming media framework.
177
18 Most of these changes involve the GStreamer plugin API. The application API
19 has changed comparatively little, and most applications should be fairly easy
20 to port to the new API. There is a porting guide available.
218
22 The GStreamer team would like to thank everyone who helped bring this release
23 about, whether by submitting patches, reporting bugs, testing, sponsoring
24 development, attending hackfests, or simply supplying moral support.
9 The 1.x series is a stable series targeted at end users.
10 It is not API or ABI compatible with the stable 0.10.x series.
11 It is, however, parallel installable with the 0.10.x series and
12 will not affect an existing 0.10.x installation.
2513
26 This is the end of a long development process, but also the beginning of
27 one. This release does not mark the pinnacle of perfection, but the point
28 where the team is content with the API and stability and quality of the code
29 base in general, especially compared to the old 0.10 series.
3014
31 There will be bugs to fix, and starting from this release there will be
32 distinct bug-fixing and feature development cycles, with the goal of getting
33 bug-fixes out quicker and unencumbered by other more risky changes. See
15 The 1.x series has been reworked for more flexible memory handling, improved
16 caps negotiation and re-negotiation, better handling of dynamic pipelines,
17 and increased performance in general. It also features countless other feature
18 additions and enhancements.
3419
35 http://gstreamer.freedesktop.org/wiki/ReleasePlanning/RoadMap
36
37 for a tentative road map and possible schedule.
38
39 === Modules
4020
4121 This module, gstreamer, only contains core functionality.
42 For actual media playback, you will also need other modules:
22 For actual media playback, you will need other modules.
4323
44 gst-plugins-base : a basic set of well-supported plugins
45 gst-plugins-good : a set of well-supported plugins under our preferred license
46 gst-plugins-ugly : a set of well-supported plugins, but might pose problems
47 for distributors
48 gst-plugins-bad : a set of less supported plugins that haven't passed the
49 rigorous quality testing we expect
50 gst-libav : a set of codecs plugins based on libav (formerly gst-ffmpeg)
24 gst-plugins-base
25 contains a basic set of well-supported plugins
26 gst-plugins-good
27 contains a set of well-supported plugins under our preferred license
28 gst-plugins-ugly
29 contains a set of well-supported plugins, but might pose problems for
30 distributors
31 gst-plugins-bad
32 contains a set of less supported plugins that haven't passed the
33 rigorous quality testing we expect, or are still missing documentation
34 and/or unit tests
35 gst-libav
36 contains a set of codecs plugins based on libav (formerly gst-ffmpeg)
5137
52 ==== Download
5338
54 You can find source releases of gstreamer in the download directory:
5539
56 http://gstreamer.freedesktop.org/src/gstreamer/
40
5741
58 ==== GStreamer Homepage
42 Features of this release
43
44 * Parallel installability with 0.10.x series
45 * Capsfilter prefers filter caps over passthrough now
46 * Application Development Manual, Plugin Writer's Guide and other documentation updated and extended for 1.0
47 * Bug fixes
5948
60 More details can be found on the project's website:
49 Bugs fixed in this release
50
51 * 680862 : " identity " with single-segment=true gives buffer.pts of CLOCK_TIME_NONE
52 * 684538 : baseparse: no timestamps after seeking in mp3 or aac
53 * 684755 : typo - whithin > within
54 * 684765 : Plugins without a klass in the metadata crashes autoaudiosink
55 * 684809 : proxypad don't hold a ref to their internal pad while streaming through it
56 * 684970 : Don't register printf extension for %p when glib is not using system printf
57 * 684981 : Pipeline hangs on PREROLLING negotiating caps
58 * 685072 : memory: map(READ)/unmap clears the READONLY status
6159
62 http://gstreamer.freedesktop.org/
60 API changes in this release
61
62 - API additions:
63
64 * gst_base_transform_set_prefer_passthrough ()
6365
64 ==== Support and Bugs
66 ==== Download ====
67
68 You can find source releases of gstreamer in the download
69 directory: http://gstreamer.freedesktop.org/src/gstreamer/
70
71 The git repository and details how to clone it can be found at
72 http://cgit.freedesktop.org/gstreamer/gstreamer/
73
74 ==== Homepage ====
75
76 The project's website is http://gstreamer.freedesktop.org/
77
78 ==== Support and Bugs ====
6579
6680 We use GNOME's bugzilla for bug reports and feature requests:
81 http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer
6782
68 http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer
69 or
70 http://gstreamer.freedesktop.org/bugs/
83 Please submit patches via bugzilla as well.
7184
72 ==== Developers
85 For help and support, please subscribe to and send questions to the
86 gstreamer-devel mailing list (see below for details).
7387
74 GStreamer is stored in Git, hosted at git.freedesktop.org, and can be
75 cloned from there. Interested developers of the core library, plugins, and
76 applications should subscribe to the gstreamer-devel list and/or pop into
77 our #gstreamer IRC channel on Freenode.
88 There is also a #gstreamer IRC channel on the Freenode IRC network.
7889
79 ==== Contributors to this release
90 ==== Developers ====
8091
81 Alban Browaeys
82 Alessandro Decina
83 Alexander Saprykin
84 Andoni Morales Alastruey
85 Andreas Frisch
86 Andre Moreira Magalhaes (andrunko)
87 Antoine Tremblay
88 Anton Belka
89 Arnaud Vrac
90 Bastian Winkler
91 Bastien Nocera
92 Brian Cameron
93 Christian Fredrik Kalager Schaller
94 Christophe Fergeau
95 Chun-wei Fan
96 Colin Walters
97 David Schleef
98 David Svensson Fors
99 Edward Hervey
100 Evan Nemerson
101 Fabrizio (Misto) Milo
102 Havard Graff
103 Idar Tollefsen
104 Jan Schmidt
105 Jason DeRose
106 Jens Georg
107 João Paulo Pizani Flor
108 Johan Boulé
109 Johan Dahlin
110 Josep Torra
111 Joshua M. Doe
112 Koop Mast
113 Lionel Landwerlin
114 Luis de Bethencourt
115 Mark Nauwelaerts
116 Matej Knopp
117 Miguel Angel Cabrera Moya
118 Mike Ruprecht
119 Oleksij Rempel
120 Olivier Crête
121 Peteris Krisjanis
122 Philippe Normand
123 Raimo Järvi
124 René Stadler
125 Reynaldo H. Verdejo Pinochet
126 Ryan Lortie
127 Sebastian Dröge
128 Sebastian Rasmussen
129 Sjoerd Simons
130 Sreerenj Balachandran
131 Stefan Kost
132 Stefan Sauer
133 Thiago Santos
134 Thibault Saunier
135 Thomas Vander Stichele
136 Tim-Philipp Müller
137 Víctor Manuel Jáquez Leal
138 Vincent Penquerc'h
139 Wim Taymans
140 Youness Alaoui
141 Руслан Ижбулатов
92 GStreamer is stored in Git, hosted at git.freedesktop.org, and can be cloned
93 from there (see link above).
94
95 Interested developers of the core library, plugins, and applications should
96 subscribe to the gstreamer-devel list.
97
98
99 Contributors to this release
100
101 * Jan Schmidt
102 * Josep Torra Valles
103 * Mark Nauwelaerts
104 * Olivier Blin
105 * Olivier Crête
106 * Sebastian Dröge
107 * Tim-Philipp Müller
108 * Wim Taymans
109  
208208
209209 dnl Parse gstconfig.h and defines add the symbols and substitions
210210 dnl
211 dnl GST_CONFIGPATH=`$PKG_CONFIG --variable=includedir gstreamer-0.10`"/gst/gstconfig.h"
211 dnl GST_CONFIGPATH=`$PKG_CONFIG --variable=includedir gstreamer-1.0`"/gst/gstconfig.h"
212212 dnl AG_GST_PARSE_SUBSYSTEM_DISABLES(GST_CONFIGPATH)
213213 dnl
214214 AC_DEFUN([AG_GST_PARSE_SUBSYSTEM_DISABLES],
4343 if echo $(FORMATS) | grep ps > /dev/null; then export SRC="$$SRC $(DOC).ps"; fi; \
4444 if echo $(FORMATS) | grep pdf > /dev/null; then export SRC="$$SRC $(DOC).pdf"; fi; \
4545 \
46 # upload releases to both 0.10.X/ and head/ subdirectories \
47 if test "x$(PACKAGE_VERSION_NANO)" = x0; then \
48 export DIR=$(DOC_BASE)/gstreamer/$(VERSION)/$(DOC); \
49 echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
50 ssh $(DOC_SERVER) mkdir -p $$DIR; \
51 rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
52 ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
53 fi; \
46 # upload releases to both X.Y/ and head/ subdirectories \
47 export DIR=$(DOC_BASE)/gstreamer/$(PACKAGE_VERSION_MAJOR).$(PACKAGE_VERSION_MINOR)/$(DOC); \
48 echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
49 ssh $(DOC_SERVER) mkdir -p $$DIR; \
50 rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
51 ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
5452 \
5553 export DIR=$(DOC_BASE)/gstreamer/head/$(DOC); \
5654 echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
00 #! /bin/sh
11 # Guess values for system-dependent variables and create Makefiles.
2 # Generated by GNU Autoconf 2.69 for GStreamer 1.0.0.
2 # Generated by GNU Autoconf 2.69 for GStreamer 1.0.1.
33 #
44 # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>.
55 #
590590 # Identity of this package.
591591 PACKAGE_NAME='GStreamer'
592592 PACKAGE_TARNAME='gstreamer'
593 PACKAGE_VERSION='1.0.0'
594 PACKAGE_STRING='GStreamer 1.0.0'
593 PACKAGE_VERSION='1.0.1'
594 PACKAGE_STRING='GStreamer 1.0.1'
595595 PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer'
596596 PACKAGE_URL=''
597597
16321632 # Omit some internal or obsolete options to make the list less imposing.
16331633 # This message is too long to be a string in the A/UX 3.1 sh.
16341634 cat <<_ACEOF
1635 \`configure' configures GStreamer 1.0.0 to adapt to many kinds of systems.
1635 \`configure' configures GStreamer 1.0.1 to adapt to many kinds of systems.
16361636
16371637 Usage: $0 [OPTION]... [VAR=VALUE]...
16381638
17031703
17041704 if test -n "$ac_init_help"; then
17051705 case $ac_init_help in
1706 short | recursive ) echo "Configuration of GStreamer 1.0.0:";;
1706 short | recursive ) echo "Configuration of GStreamer 1.0.1:";;
17071707 esac
17081708 cat <<\_ACEOF
17091709
18801880 test -n "$ac_init_help" && exit $ac_status
18811881 if $ac_init_version; then
18821882 cat <<\_ACEOF
1883 GStreamer configure 1.0.0
1883 GStreamer configure 1.0.1
18841884 generated by GNU Autoconf 2.69
18851885
18861886 Copyright (C) 2012 Free Software Foundation, Inc.
26532653 This file contains any messages produced by compilers while
26542654 running configure, to aid debugging if configure makes a mistake.
26552655
2656 It was created by GStreamer $as_me 1.0.0, which was
2656 It was created by GStreamer $as_me 1.0.1, which was
26572657 generated by GNU Autoconf 2.69. Invocation command line was
26582658
26592659 $ $0 $@
35863586
35873587 # Define the identity of the package.
35883588 PACKAGE='gstreamer'
3589 VERSION='1.0.0'
3589 VERSION='1.0.1'
35903590
35913591
35923592 cat >>confdefs.h <<_ACEOF
37093709
37103710
37113711
3712 PACKAGE_VERSION_MAJOR=$(echo 1.0.0 | cut -d'.' -f1)
3713 PACKAGE_VERSION_MINOR=$(echo 1.0.0 | cut -d'.' -f2)
3714 PACKAGE_VERSION_MICRO=$(echo 1.0.0 | cut -d'.' -f3)
3712 PACKAGE_VERSION_MAJOR=$(echo 1.0.1 | cut -d'.' -f1)
3713 PACKAGE_VERSION_MINOR=$(echo 1.0.1 | cut -d'.' -f2)
3714 PACKAGE_VERSION_MICRO=$(echo 1.0.1 | cut -d'.' -f3)
37153715
37163716
37173717
37223722 { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
37233723 $as_echo_n "checking nano version... " >&6; }
37243724
3725 NANO=$(echo 1.0.0 | cut -d'.' -f4)
3725 NANO=$(echo 1.0.1 | cut -d'.' -f4)
37263726
37273727 if test x"$NANO" = x || test "x$NANO" = "x0" ; then
37283728 { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5
38163816 AM_BACKSLASH='\'
38173817
38183818
3819 GST_VERSION_MAJOR=1
3820 GST_VERSION_MINOR=0
3821 GST_VERSION_MICRO=0
3822 GST_VERSION_NANO=0
3819 GST_VERSION_MAJOR=$PACKAGE_VERSION_MAJOR
3820 GST_VERSION_MINOR=$PACKAGE_VERSION_MINOR
3821 GST_VERSION_MICRO=$PACKAGE_VERSION_MICRO
3822 GST_VERSION_NANO=$PACKAGE_VERSION_NANO
38233823
38243824
38253825
83078307 done
83088308
83098309
8310 GST_CURRENT=0
8310 GST_CURRENT=1
83118311 GST_REVISION=0
8312 GST_AGE=0
8313 GST_LIBVERSION=0:0:0
8312 GST_AGE=1
8313 GST_LIBVERSION=1:0:1
83148314
83158315
83168316
2664026640 # report actual input values of CONFIG_FILES etc. instead of their
2664126641 # values after options handling.
2664226642 ac_log="
26643 This file was extended by GStreamer $as_me 1.0.0, which was
26643 This file was extended by GStreamer $as_me 1.0.1, which was
2664426644 generated by GNU Autoconf 2.69. Invocation command line was
2664526645
2664626646 CONFIG_FILES = $CONFIG_FILES
2670626706 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
2670726707 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
2670826708 ac_cs_version="\\
26709 GStreamer config.status 1.0.0
26709 GStreamer config.status 1.0.1
2671026710 configured by $0, generated by GNU Autoconf 2.69,
2671126711 with options \\"\$ac_cs_config\\"
2671226712
33 dnl when going to/from release please set the nano (fourth number) right !
44 dnl releases only do Wall, git and prerelease does Werror too
55 dnl
6 AC_INIT(GStreamer, 1.0.0,
6 AC_INIT(GStreamer, 1.0.1,
77 http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer,
88 gstreamer)
99 AG_GST_INIT
3535 AC_SUBST(AM_DEFAULT_VERBOSITY)])
3636
3737 dnl GStreamer versioning, this is mostly informational
38 dnl GST_VERSION_MAJOR=$PACKAGE_VERSION_MAJOR
39 dnl GST_VERSION_MINOR=$PACKAGE_VERSION_MINOR
40 dnl GST_VERSION_MICRO=$PACKAGE_VERSION_MICRO
41 dnl GST_VERSION_NANO=$PACKAGE_VERSION_NANO
42 dnl Change this to the above for non-pre
43 GST_VERSION_MAJOR=1
44 GST_VERSION_MINOR=0
45 GST_VERSION_MICRO=0
46 GST_VERSION_NANO=0
38 GST_VERSION_MAJOR=$PACKAGE_VERSION_MAJOR
39 GST_VERSION_MINOR=$PACKAGE_VERSION_MINOR
40 GST_VERSION_MICRO=$PACKAGE_VERSION_MICRO
41 GST_VERSION_NANO=$PACKAGE_VERSION_NANO
4742 AC_SUBST(GST_VERSION_MAJOR)
4843 AC_SUBST(GST_VERSION_MINOR)
4944 AC_SUBST(GST_VERSION_MICRO)
6257 dnl - interfaces added -> increment AGE
6358 dnl - interfaces removed -> AGE = 0
6459 dnl sets GST_LT_LDFLAGS
65 AS_LIBTOOL(GST, 0, 0, 0)
60 AS_LIBTOOL(GST, 1, 0, 1)
6661
6762 dnl *** autotools stuff ****
6863
33 draft-push-pull.txt \
44 draft-tagreading.txt \
55 part-activation.txt \
6 part-block.txt \
76 part-buffering.txt \
87 part-caps.txt \
98 part-clocks.txt \
388388 draft-push-pull.txt \
389389 draft-tagreading.txt \
390390 part-activation.txt \
391 part-block.txt \
392391 part-buffering.txt \
393392 part-caps.txt \
394393 part-clocks.txt \
1313 The topic of defining the klass of elements should be based on use cases.
1414
1515 A list of classes that are used in a installation can be generated using:
16 gst-inspect-0.10 -a | grep -ho Class:.* | cut -c8- | sed "s/\//\\n/g" | sort | uniq
16 gst-inspect-1.0 -a | grep -ho Class:.* | cut -c8- | sed "s/\//\\n/g" | sort | uniq
1717
1818 Proposal
1919 ~~~~~~~~
2626 Because the core does not know in which mode to activate a pad (PUSH or
2727 PULL), it delegates that choice to a method on the pad, activate(). The
2828 activate() function of a pad should choose whether to operate in PUSH or
29 PULL mode. Once the choice is made, it should call one of the two
30 mode-specific activation functions, activate_push() or activate_pull().
31 The default activate() function will call activate_push(), as it is the
32 default mechanism for data flow. A sink pad that supports either mode of
33 operation might call activate_pull() if calling check_get_range()
34 returns TRUE, and activate_push() otherwise.
29 PULL mode. Once the choice is made, it should call activate_mode()
30 with the selected activation mode.
31 The default activate() function will call activate_mode() with
32 #GST_PAD_MODE_PUSH, as it is the default mechanism for data flow.
33 A sink pad that supports either mode of operation might call
34 activate_mode(PULL) if the SCHEDULING query upstream contains the
35 #GST_PAD_MODE_PULL scheduling mode, and activate_mode(PUSH) otherwise.
3536
3637 Consider the case fakesrc ! fakesink, where fakesink is configured to
3738 operate in PULL mode. State changes in the pipeline will start with
3839 fakesink, which is the most downstream element. The core will call
3940 activate() on fakesink's sink pad. For fakesink to go into PULL mode, it
4041 needs to implement a custom activate() function that will call
41 activate_pull() on its sink pad (because the default is to use PUSH
42 mode). activate_pull() is then responsible for starting the task that
43 pulls from fakesrc:src. Clearly, fakesrc needs to be notified that
44 fakesrc is about to pull on its src pad, even though the pipeline has
45 not yet changed fakesrc's state. For this reason, activate_pull() must
46 first call activate_pull() on fakesink:sink's peer before starting
47 fakesink's task.
42 activate_mode(PULL) on its sink pad (because the default is to
43 use PUSH mode). activate_mode(PULL) is then responsible for starting
44 the task that pulls from fakesrc:src. Clearly, fakesrc needs to be
45 notified that fakesrc is about to pull on its src pad, even though the
46 pipeline has not yet changed fakesrc's state. For this reason,
47 GStreamer will first call call activate_mode(PULL) on fakesink:sink's
48 peer before calling activate_mode(PULL) on fakesink:sinks.
4849
4950 In short, upstream elements operating in PULL mode must be ready to
50 produce data in READY, after having activate_pull() called on their
51 source pad. Also, a call to activate_pull() needs to propagate through
51 produce data in READY, after having activate_mode(PULL) called on their
52 source pad. Also, a call to activate_mode(PULL) needs to propagate through
5253 the pipeline to every pad that a gst_pad_pull() will reach. In the case
53 fakesrc ! identity ! fakesink, calling activate_pull() on identity's
54 fakesrc ! identity ! fakesink, calling activate_mode(PULL) on identity's
5455 source pad would need to activate its sink pad in pull mode as well,
5556 which should propagate all the way to fakesrc.
5657
5758 If, on the other hand, fakesrc ! fakesink is operating in PUSH mode, the
5859 activation sequence is different. First, activate() on fakesink:sink
59 calls activate_push() on fakesink:sink. Then fakesrc's pads are
60 calls activate_mode(PUSH) on fakesink:sink. Then fakesrc's pads are
6061 activated: sources first, then sinks (of which fakesrc has none).
6162 fakesrc:src's activation function is then called.
6263
6364 Note that it does not make sense to set an activation function on a
6465 source pad. The peer of a source pad is downstream, meaning it should
6566 have been activated first. If it was activated in PULL mode, the
66 source pad should have already had activate_pull() called on it, and
67 source pad should have already had activate_mode(PULL) called on it, and
6768 thus needs no further activation. Otherwise it should be in PUSH mode,
6869 which is the choice of the default activation function.
6970
7071 So, in the PUSH case, the default activation function chooses PUSH mode,
71 which calls activate_push(), which will then start a task on the source
72 which calls activate_mode(PUSH), which will then start a task on the source
7273 pad and begin pushing. In this way PUSH scheduling is a bit easier,
7374 because it follows the order of state changes in a pipeline. fakesink is
7475 already in PAUSED with an active sink pad by the time fakesrc starts
8081 Pad deactivation occurs when its parent goes into the READY state or when the
8182 pad is deactivated explicitly by the application or element.
8283 gst_pad_set_active() is called with a FALSE argument, which then calls
83 activate_push() or activate_pull() with a FALSE argument, depending on the
84 activation mode of the pad.
84 activate_mode(PUSH) or activate_mode(PULL) with a FALSE argument, depending
85 on the current activation mode of the pad.
8586
8687 Mode switching
8788 ~~~~~~~~~~~~~~
+0
-159
docs/design/part-block.txt less more
0 Pad block
1 ---------
2
3 The purpose of blocking a pad is to be notified of downstream dataflow
4 and events. The notification can be used for
5
6 - (Re)connecting/disconnecting the pad.
7 - performing a seek
8 - inspecting the data/events on the pad
9
10 The pad block is performed on a source pad (push based) or sink pad (pull based)
11 and will succeed when the following events happen on the pad:
12
13 - gst_pad_push()
14 - gst_pad_alloc_buffer()
15 - gst_pad_push_event() except for FLUSH_START and FLUSH_STOP events.
16 - gst_pad_pull_range () (on a sinkpad)
17
18
19 Flushing
20 ~~~~~~~~
21
22 The flushing event is used to clear any data out of the
23 downstream elements.
24
25 Generic case
26 ^^^^^^^^^^^^
27
28 Consider the following pipeline:
29
30 .-----. .-------. .-------.
31 | src | | elem1 |\/ | elem2 |
32 | src -> sink src -> sink src ....
33 '-----' '-------'/\ '-------'
34
35 Where elem1.src is blocked. If the pad block is taken (the callback
36 is called or the sync block returned) no data is flowing in elem2.sink.
37 In this situation, the streaming thread is blocked on a GCond and is
38 waiting to be unblocked.
39
40 When sending a flushing seek upstream on elem1.src, the FLUSH_START event
41 will temporary unblock the streaming thread and make all pad functions that
42 can trigger a block (_push/_query/_push_event/_pull_range) return
43 GST_FLOW_FLUSHING. This will then eventually pause the streaming thread
44 and release the STREAM_LOCK.
45
46 Since no STREAM lock is taken after the pad block it is not needed to send
47 the FLUSH_START event further downstream.
48
49 The FLUSH_STOP will set the srcpad to non-flushing again and is dropped
50 for the same reason. From then on, the new data after the flushing seek
51 will be queued when the pad block is taken again.
52
53 Case where the stream is blocking downstream
54 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
55
56 The example above is only valid if the elem1.src pad is really blocking
57 (callback called or sync block returned).
58
59 In the case where the stream is blocking further downstream (on elem2.src
60 for example, or on a blocking queue), extra care has to be taken.
61
62 Consider the following pipeline:
63
64 .-----. .-------. .-------.
65 | src | | elem1 |\/ | elem2 |
66 | src -> sink src -> sink src .... Blocking somewhere downstream
67 '-----' '-------'/\ '-------'
68
69 A pad block has been requested by the user on elem1.src , but since the stream
70 is blocking somewhere downstream, the callback is not called or the sync block
71 does not return.
72
73 In order for the block to happen, a FLUSH_START needs to be sent directly on
74 the downstream blocking element/pad so that it releases the stream lock, and it
75 gives a chance for the elem1.src pad to block.
76
77
78 Use cases
79 ~~~~~~~~~
80
81 Prerolling a partial pipeline
82 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
83
84 .---------. .---------. .----------.
85 | filesrc | | demuxer | .-----. | decoder1 |
86 | src -> sink src1 ->|queue|-> sink src
87 '---------' | | '-----' '----------' X
88 | | .----------.
89 | | .-----. | decoder2 |
90 | src2 ->|queue|-> sink src
91 '---------' '-----' '----------' X
92
93
94 The purpose is to create the pipeline dynamically up to the
95 decoders but not yet connect them to a sink and without losing
96 any data.
97
98 To do this, the source pads of the decoders is blocked so that no
99 events or buffers can escape and we don't interrupt the stream.
100
101 When all of the dynamic pad are created (no-more-pads emited by the
102 branching point, ie, the demuxer or the queues filled) and the pads
103 are blocked (blocked callback received) the pipeline is completely
104 prerolled.
105
106 It should then be possible to perform the following actions on the
107 prerolled pipeline:
108
109 - query duration/position
110 - perform a flushing seek to preroll a new position
111 - connect other elements and unblock the blocked pads.
112
113
114 dynamically switching an element in a PLAYING pipeline
115 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
116
117
118 .----------. .----------. .----------.
119 | element1 | | element2 | | element3 |
120 ... src -> sink src -> sink ...
121 '----------' '----------' '----------'
122 .----------.
123 | element4 |
124 sink src
125 '----------'
126
127 The purpose is to replace element2 with element4 in the PLAYING
128 pipeline.
129
130 1) block element1 src pad. This can be done async.
131 2) wait for block to happen. at that point nothing is flowing between
132 element1 and element2 and nothing will flow until unblocked.
133 3) unlink element1 and element2
134 4) optional step: make sure data is flushed out of element2:
135 4a) pad event probe on element2 src
136 4b) send EOS to element2, this makes sure that element2 flushes
137 out the last bits of data it holds.
138 4c) wait for EOS to appear in the probe, drop the EOS.
139 4d) remove the EOS pad event probe.
140 5) unlink element2 and element3
141 5a) optionally element2 can now be set to NULL and/or removed from the
142 pipeline.
143 6) link element4 and element3
144 7) link element1 and element4 (FIXME, how about letting element4 know
145 about the currently running segment?, see issues.)
146 8) make sure element4 is in the same state as the rest of the elements. The
147 element should at least be PAUSED.
148 9) unblock element1 src
149
150 The same flow can be used to replace an element in a PAUSED pipeline. Only
151 special care has to be taken when performing step 2) which has to be done
152 async or it might deadlock. In the async callback one can then perform the
153 steps from 3). In a playing pipeline one can of course use the async block
154 as well, so that there is a generic method for both PAUSED and PLAYING.
155
156 The same flow works as well for any chain of multiple elements and might
157 be implemented with a helper function in the future.
158
884884 if echo $(FORMATS) | grep ps > /dev/null; then export SRC="$$SRC $(DOC).ps"; fi; \
885885 if echo $(FORMATS) | grep pdf > /dev/null; then export SRC="$$SRC $(DOC).pdf"; fi; \
886886 \
887 # upload releases to both 0.10.X/ and head/ subdirectories \
888 if test "x$(PACKAGE_VERSION_NANO)" = x0; then \
889 export DIR=$(DOC_BASE)/gstreamer/$(VERSION)/$(DOC); \
890 echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
891 ssh $(DOC_SERVER) mkdir -p $$DIR; \
892 rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
893 ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
894 fi; \
887 # upload releases to both X.Y/ and head/ subdirectories \
888 export DIR=$(DOC_BASE)/gstreamer/$(PACKAGE_VERSION_MAJOR).$(PACKAGE_VERSION_MINOR)/$(DOC); \
889 echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
890 ssh $(DOC_SERVER) mkdir -p $$DIR; \
891 rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
892 ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
895893 \
896894 export DIR=$(DOC_BASE)/gstreamer/head/$(DOC); \
897895 echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
1717 <para>
1818 However, do realize that in no way you are forced to have all dependencies
1919 installed. None of the core developers has all of them installed. GStreamer
20 has only a few obligate dependencies : GLib 2.0, liboil, and very
20 has only a few obligate dependencies : GLib 2.0, liborc, and very
2121 common stuff like glibc, a C compiler, and so on. All of the other
2222 dependencies are optional.
2323 </para>
2929 </answer>
3030 </qandaentry>
3131
32 <qandaentry>
33 <question id="dependencies-glib">
34 <para>
35 Does GStreamer use GTK+ 1.2/GLib 1.2 or GLib 2.0 ?
36 </para>
37 </question>
38
39 <answer>
40 <para>
41 Since the 0.3.3 release of GStreamer, we use GLib 2.0 as the core library
42 for GStreamer, which features a move of GObject from GTK+ 2.0 to GLib 2.0.
43 If you want to compile using GTK+ 1.2/GLib 1.2, you need to get the
44 0.3.1 or earlier release. It is of course not supported.
45 </para>
46 </answer>
47 </qandaentry>
48
49 <qandaentry>
50 <question id="dependencies-dxr">
51 <para>
52 Does GStreamer offer support for DVD decoder cards like dxr2/3 ?
53 </para>
54 </question>
55
56 <answer>
57 <para>
58 We do have support for the dxr3, although dxr2 support is unknown.
59 GStreamer can easily accommodate hardware acceleration by writing new
60 device-specific elements.
61 </para>
62 </answer>
63 </qandaentry>
64
6532 <qandaentry>
6633 <question id="dependencies-x">
6734 <para>Is GStreamer X independent ?</para>
6936
7037 <answer>
7138 <para>
72 Yes, we have no X dependency in any of our core modules. There are GStreamer
73 applications that run fine without any need for X. However, until our Linux
74 Framebuffer or libsvga plugin is ready, you will not be able to play videos
75 without X. In the future, there will probably be lots of different output
76 plugins for video available.
39 Yes, we have no hard X dependency in any of our modules. There are many
40 GStreamer applications that run fine without any need for X, for example
41 streaming servers, transcoding applications, or audio applications that
42 don't output any video. Other applications output video to a framebuffer,
43 custom-made hardware sinks, or via wayland.
7744 </para>
7845 </answer>
7946 </qandaentry>
10572 adding MIDI support to GStreamer we are very interested in getting in touch
10673 with you.
10774 </para>
75 <para>
76 MIDI playback is provided by plugins such as wildmidi and timidity.
77 </para>
10878 </answer>
10979 </qandaentry>
11080
11181 <qandaentry>
11282 <question id="dependencies-gnome">
113 <para>Does GStreamer depend on GNOME ?</para>
83 <para>Does GStreamer depend on GNOME or GTK+ ?</para>
11484 </question>
11585
11686 <answer>
11787 <para>
118 No. But many of the applications developed for GStreamer do, including our
119 sample applications. There is nothing hindering people from developing
120 applications using other toolkits however and we would happily help promote
121 such efforts. A good example of an application using GStreamer, but which is
122 not using GNOME is the
123 <ulink url="http://mozstreamer.mozdev.org"><citetitle>
124 Mozstreamer</citetitle></ulink> which uses Mozilla XUL.
88 No. But many of the applications developed for GStreamer do, including some
89 of our sample applications. Other applications use the Qt toolkit, or are
90 written for Mac OS/X or Windows. We aim to provide API that is toolkit
91 agnostic and can be used from any toolkit, desktop environment or operating
92 system.
12593 </para>
12694 </answer>
12795 </qandaentry>
2323
2424 <qandaentry>
2525 <question id="gstreamer-versions-explained">
26 <para>There seem to be different GStreamer versions, like 0.8 and 0.10?
26 <para>There seem to be different GStreamer versions, like 0.10 and 1.0?
2727 What's up with that?</para>
2828 </question>
2929
3030 <answer>
3131 <para>
32 GStreamer-0.8 and GStreamer-0.10 are the main version
32 GStreamer-0.10 and GStreamer-1.0 are the main version
3333 &apos;series&apos; currently in use. For all practical purposes
3434 you should think of them as two completely different libraries
3535 which just happen to have a similar name. They can be installed
3636 in parallel and are completely independent.
3737 </para>
3838 <para>
39 For the 0.8 version you will need the 0.8 plugins and bindings
40 (gst-plugins 0.8.x, gst-ffmpeg 0.8.x, gst-python 0.8.x etc.), while
41 for the 0.10 version you will need the 0.10 plugins and bindings
42 (ie. gst-plugins-base 0.10.x, gst-plugins-good 0.10.x,
43 gst-plugins-ugly 0.10.x, gst-plugins-bad 0.10.x, gst-ffmpeg 0.10.x,
44 gst-python 0.10.x). The micro version for each main version does
39 For the 0.10 version you will need the 0.10 plugins and bindings
40 (gst-plugins 0.10.x, gst-ffmpeg 0.10.x, gst-python 0.10.x etc.), while
41 for the 1.0 version you will need the 1.0 plugins and bindings
42 (ie. gst-plugins-base 1.0.x, gst-plugins-good 1.0.x,
43 gst-plugins-ugly 1.0.x, gst-plugins-bad 1.0.x, gst-ffmpeg 1.0.x,
44 gst-python 1.0.x). The micro version for each main version does
4545 not have to match exactly, only the major versions needs to be the
4646 same (ie. it may be that the current gst-plugins-good version is
47 0.10.6 and the current GStreamer core version is 0.10.13).
48 GStreamer-0.10 will not see or use any of the GStreamer-0.8 plugins
47 1.0.6 and the current GStreamer core version is 1.0.13).
48 GStreamer-1.0 will not see or use any of the GStreamer-0.10 plugins
4949 and vice versa.
5050 </para>
5151 <para>
5252 All GStreamer command line tools are suffixed with their main
53 version, e.g. gst-launch-0.8 and gst-launch-0.10, or gst-inspect-0.8
54 and gst-inspect-0.10. The corresponding GStreamer command line
55 tools without a suffix (e.g. gst-launch) will default to the highest
56 major version.
53 version, e.g. gst-launch-0.10 and gst-launch-1.0, or gst-inspect-0.10
54 and gst-inspect-1.0.
5755 </para>
5856 <para>
59 Applications will use either GStreamer-0.8 or GStreamer-0.10, since
60 the 0.8 and 0.10 API/ABI are not compatible.
57 Applications will use either GStreamer-0.10 or GStreamer-1.0, since
58 the 0.10 and 1.0 API/ABI are not compatible.
6159 </para>
6260 <para>
6361 Odd-numbered versions such as 0.9.x, 0.11.x, etc. are unstable
7371
7472 <answer>
7573 <para>
76 You should download GStreamer-0.10. GStreamer-0.8 is not developed
77 any longer and has not been maintained for almost two years (you
78 may still find it packaged for your disto though, but that's most
79 likely for legacy applications).
74 You should download GStreamer-1.0. GStreamer-0.10 is end-of-life.
8075 </para>
8176 </answer>
8277 </qandaentry>
1212 <para>
1313 Well, start by checking if you really are missing the plug-in.
1414 <programlisting>
15 gst-inspect (plug-in)
15 gst-inspect-1.0 (plug-in)
1616 </programlisting>
1717 and replace (plug-in) with the plug-in you think is missing.
1818 If this doesn't return any result, then you either don't have it or your
155155
156156 <answer>
157157 <para>
158 GStreamer version 0.10 does not need this anymore. The registry will
158 Since GStreamer version 0.10 this is not needed anymore. The registry will
159159 be rebuilt automatically. If you suspect the registry is broken, just delete the
160 <filename>registry.*.xml</filename> files under <filename>$HOME/.gstreamer-0.X/</filename>
160 <filename>registry.*.xml</filename> files under <filename>$HOME/.gstreamer-1.X/</filename>
161161 and run
162162 <programlisting>
163 gst-inspect
163 gst-inspect-1.0
164164 </programlisting>
165165 to rebuild the registry.
166166 </para>
1111 First of all, verify that you have a working registry and that you can
1212 inspect them by typing
1313 <programlisting>
14 $ gst-inspect fakesrc
14 $ gst-inspect-1.0 fakesrc
1515 </programlisting>
1616 This should print out a bunch of information about this particular element.
1717 If this tells you that there is "no such element or plugin", you haven't
2525 that you really should have : fakesrc and fakesink. They do nothing except
2626 pass empty buffers. Type this at the command-line :
2727 <programlisting>
28 $ gst-launch -v fakesrc num-buffers=3 ! fakesink
28 $ gst-launch-1.0 -v fakesrc silent=0 num-buffers=3 ! fakesink silent=0
2929 </programlisting>
3030 This will print out output that looks similar to this :
3131 <programlisting>
5555 link the audiotestsrc element to an output element that matches your hardware.
5656 A (non-complete) list of output plug-ins for audio is
5757 <itemizedlist>
58 <listitem><para>pulsesink for Pulseaudio output</para></listitem>
5859 <listitem><para>osssink for OSS output</para></listitem>
5960 <listitem><para>esdsink for ESound output</para></listitem>
60 <listitem><para>artsdsink for aRTs output (not ported to 0.10 yet)</para></listitem>
6161 <listitem><para>alsasink for ALSA output</para></listitem>
6262 <listitem><para>alsaspdifsink for ALSA S/PDIF output</para></listitem>
6363 <listitem><para>jackaudiosink for JACK output</para></listitem>
6464 </itemizedlist>
65 First of all, run gst-inspect on the output plug-in you want to use to
66 make sure you have it installed. For example, if you use OSS, run
67 <programlisting>
68 $ gst-inspect osssink
65 First of all, run gst-inspect-1.0 on the output plug-in you want to use to
66 make sure you have it installed. For example, if you use Pulseaudio, run
67 <programlisting>
68 $ gst-inspect-1.0 pulsesink
6969 </programlisting>
7070 and see if that prints out a bunch of properties for the plug-in.
7171 </para>
7272 <para>
7373 Then try to play the sine tone by running
7474 <programlisting>
75 $ gst-launch audiotestsrc ! audioconvert ! audioresample ! osssink
75 $ gst-launch-1.0 audiotestsrc ! audioconvert ! audioresample ! pulsesink
7676 </programlisting>
7777 and see if you hear something. Make sure your volume is turned up,
7878 but also make sure it is not too loud and you are not wearing your headphones.
101101 command-line tool, which comes standard with GStreamer.
102102 Invoked without any arguments,
103103 <programlisting>
104 $ gst-inspect
104 $ gst-inspect-1.0
105105 </programlisting>
106106 will print out a listing of installed plugins.
107107 To learn more about a particular plugin, pass its name on the command line.
108108 For example,
109109 <programlisting>
110 $ gst-inspect volume
110 $ gst-inspect-1.0 volume
111111 </programlisting>
112112 will give you information about the volume plugin.
113 </para>
114 <para>
115 Also, if you install the gst-editor package, you will have a graphical
116 plugin browser available, gst-inspect-gui.
117113 </para>
118114 </answer>
119115 </qandaentry>
167163 <answer>
168164 <para>
169165 You access the GStreamer command line interface using the command gst-launch.
170 To decode an mp3 and play it through OSS, you could use
171 <programlisting>
172 gst-launch filesrc location=thesong.mp3 ! mad ! audioconvert !
173 audioresample ! osssink
166 To decode an mp3 and play it through Pulseaudio, you could use
167 <programlisting>
168 gst-launch-1.0 filesrc location=thesong.mp3 ! mad ! pulsesink
174169 </programlisting>.
175170 More examples can be found in the gst-launch man page.
176171 </para>
177172 <para>
178173 To automatically detect the right codec in a pipeline, try
179174 <programlisting>
180 gst-launch filesrc location=my-random-media-file.mpeg ! decodebin !
181 audioconvert ! pulsesink
175 gst-launch-1.0 filesrc location=my-random-media-file.mpeg ! decodebin !
176 pulsesink
182177 </programlisting>.
183178 or
184179 <programlisting>
185 gst-launch filesrc location=my-random-media-file.mpeg ! decodebin !
180 gst-launch-1.0 filesrc location=my-random-media-file.mpeg ! decodebin !
186181 videoconvert ! xvimagesink
187182 </programlisting>
188183 Something more complicated:
189184 <programlisting>
190 gst-launch filesrc location=my-random-media-file.mpeg ! decodebin name=decoder
185 gst-launch-1.0 filesrc location=my-random-media-file.mpeg ! decodebin name=decoder
191186 decoder. ! videoconvert ! xvimagesink
192187 decoder. ! audioconvert ! pulsesink
193188 </programlisting>
196191 We also have a basic media playing plugin that will take care of most things
197192 for you. This plugin is called playbin. Try this:
198193 <programlisting>
199 gst-launch playbin uri=file:///home/joe/my-random-media-file.mpeg
194 gst-launch-1.0 playbin uri=file:///home/joe/my-random-media-file.mpeg
200195 </programlisting>
201196 This should play the file if the format is supported, ie. you have all the
202197 necessary demuxing and decoding and some output plugins installed.
762762 if echo $(FORMATS) | grep ps > /dev/null; then export SRC="$$SRC $(DOC).ps"; fi; \
763763 if echo $(FORMATS) | grep pdf > /dev/null; then export SRC="$$SRC $(DOC).pdf"; fi; \
764764 \
765 # upload releases to both 0.10.X/ and head/ subdirectories \
766 if test "x$(PACKAGE_VERSION_NANO)" = x0; then \
767 export DIR=$(DOC_BASE)/gstreamer/$(VERSION)/$(DOC); \
768 echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
769 ssh $(DOC_SERVER) mkdir -p $$DIR; \
770 rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
771 ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
772 fi; \
765 # upload releases to both X.Y/ and head/ subdirectories \
766 export DIR=$(DOC_BASE)/gstreamer/$(PACKAGE_VERSION_MAJOR).$(PACKAGE_VERSION_MINOR)/$(DOC); \
767 echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
768 ssh $(DOC_SERVER) mkdir -p $$DIR; \
769 rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
770 ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
773771 \
774772 export DIR=$(DOC_BASE)/gstreamer/head/$(DOC); \
775773 echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
695695 GST_ELEMENT_INFO
696696 GST_ELEMENT_IS_LOCKED_STATE
697697
698 <SUBSECTION element-metadata>
698699 GST_ELEMENT_METADATA_AUTHOR
699700 GST_ELEMENT_METADATA_DESCRIPTION
700701 GST_ELEMENT_METADATA_DOC_URI
156156 <p>
157157 </p>
158158 <div class="refsect2">
159 <a name="idp9938176"></a><h3>Notes</h3>
159 <a name="idp8569680"></a><h3>Notes</h3>
160160 <p>
161161 A <a class="link" href="GstBin.html" title="GstBin"><span class="type">GstBin</span></a> internally intercepts every <a class="link" href="gstreamer-GstMessage.html#GstMessage" title="struct GstMessage"><span class="type">GstMessage</span></a> posted by its children and
162162 implements the following default behaviour for each of them:
196196 <em class="parameter"><code><a class="link" href="GstClock.html#GstClockTime" title="GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>,
197197 <em class="parameter"><code><a class="link" href="GstClock.html#GstClockTime" title="GstClockTime"><span class="type">GstClockTime</span></a> last_sync</code></em>);</pre>
198198 <p>
199 Sets the property of the <em class="parameter"><code>object</code></em>, according to the <a href="../gstreamer-1.0/GstControlSource.html"><span class="type">GstControlSources</span></a> that
199 Sets the property of the <em class="parameter"><code>object</code></em>, according to the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="type">GstControlSources</span></a> that
200200 handle them and for the given timestamp.
201201 </p>
202202 <p>
7676 <a name="GstControlSource.description"></a><h2>Description</h2>
7777 <p>
7878 The <a class="link" href="GstControlSource.html" title="GstControlSource"><span class="type">GstControlSource</span></a> is a base class for control value sources that could
79 be used by <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstController.html"><span class="type">GstController</span></a> to get timestamp-value pairs.
79 be used by <span class="type">GstController</span> to get timestamp-value pairs.
8080 </p>
8181 <p>
8282 A <a class="link" href="GstControlSource.html" title="GstControlSource"><span class="type">GstControlSource</span></a> is used by first getting an instance, binding it to a
83 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="type">GParamSpec</span></a> (for example by using <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstController.html#gst-controller-set-control-source"><code class="function">gst_controller_set_control_source()</code></a>) and
84 then by having it used by the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstController.html"><span class="type">GstController</span></a> or calling
83 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="type">GParamSpec</span></a> (for example by using <code class="function">gst_controller_set_control_source()</code>) and
84 then by having it used by the <span class="type">GstController</span> or calling
8585 <a class="link" href="GstControlSource.html#gst-control-source-get-value" title="gst_control_source_get_value ()"><code class="function">gst_control_source_get_value()</code></a> or <a class="link" href="GstControlSource.html#gst-control-source-get-value-array" title="gst_control_source_get_value_array ()"><code class="function">gst_control_source_get_value_array()</code></a>.
8686 </p>
8787 <p>
8888 For implementing a new <a class="link" href="GstControlSource.html" title="GstControlSource"><span class="type">GstControlSource</span></a> one has to implement a
89 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstControlSource.html#GstControlSourceBind"><span class="type">GstControlSourceBind</span></a> method, which will depending on the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="type">GParamSpec</span></a> set up
89 <span class="type">GstControlSourceBind</span> method, which will depending on the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="type">GParamSpec</span></a> set up
9090 the control source for use and sets the <a class="link" href="GstControlSource.html#GstControlSourceGetValue" title="GstControlSourceGetValue ()"><span class="type">GstControlSourceGetValue</span></a> and
9191 <a class="link" href="GstControlSource.html#GstControlSourceGetValueArray" title="GstControlSourceGetValueArray ()"><span class="type">GstControlSourceGetValueArray</span></a> functions. These are then used by
9292 <a class="link" href="GstControlSource.html#gst-control-source-get-value" title="gst_control_source_get_value ()"><code class="function">gst_control_source_get_value()</code></a> or <a class="link" href="GstControlSource.html#gst-control-source-get-value-array" title="gst_control_source_get_value_array ()"><code class="function">gst_control_source_get_value_array()</code></a>
8686 text,
8787 debug)
8888 #define <a class="link" href="GstElement.html#GST-ELEMENT-IS-LOCKED-STATE:CAPS" title="GST_ELEMENT_IS_LOCKED_STATE()">GST_ELEMENT_IS_LOCKED_STATE</a> (elem)
89
8990 #define <a class="link" href="GstElement.html#GST-ELEMENT-METADATA-AUTHOR:CAPS" title="GST_ELEMENT_METADATA_AUTHOR">GST_ELEMENT_METADATA_AUTHOR</a>
9091 #define <a class="link" href="GstElement.html#GST-ELEMENT-METADATA-DESCRIPTION:CAPS" title="GST_ELEMENT_METADATA_DESCRIPTION">GST_ELEMENT_METADATA_DESCRIPTION</a>
9192 #define <a class="link" href="GstElement.html#GST-ELEMENT-METADATA-DOC-URI:CAPS" title="GST_ELEMENT_METADATA_DOC_URI">GST_ELEMENT_METADATA_DOC_URI</a>
140140 <p>
141141 </p>
142142 <div class="example">
143 <a name="idp18064352"></a><p class="title"><b>Example 6. Using an element factory</b></p>
143 <a name="idp20912512"></a><p class="title"><b>Example 6. Using an element factory</b></p>
144144 <div class="example-contents">
145145 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
146146 <tbody>
162162 GstElement <span class="gtkdoc opt">*</span>src<span class="gtkdoc opt">;</span>
163163 GstElementFactory <span class="gtkdoc opt">*</span>srcfactory<span class="gtkdoc opt">;</span>
164164
165 <span class="function"><a href="../gstreamer-1.0/gstreamer-Gst.html#gst-init">gst_init</a></span> <span class="gtkdoc opt">(&amp;</span>argc<span class="gtkdoc opt">, &amp;</span>argv<span class="gtkdoc opt">);</span>
165 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-Gst.html#gst-init">gst_init</a></span> <span class="gtkdoc opt">(&amp;</span>argc<span class="gtkdoc opt">, &amp;</span>argv<span class="gtkdoc opt">);</span>
166166
167 srcfactory <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/GstElementFactory.html#gst-element-factory-find">gst_element_factory_find</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;filesrc&quot;</span><span class="gtkdoc opt">);</span>
167 srcfactory <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElementFactory.html#gst-element-factory-find">gst_element_factory_find</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;filesrc&quot;</span><span class="gtkdoc opt">);</span>
168168 <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-return-if-fail">g_return_if_fail</a></span> <span class="gtkdoc opt">(</span>srcfactory <span class="gtkdoc opt">!=</span> NULL<span class="gtkdoc opt">);</span>
169 src <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/GstElementFactory.html#gst-element-factory-create">gst_element_factory_create</a></span> <span class="gtkdoc opt">(</span>srcfactory<span class="gtkdoc opt">,</span> <span class="string">&quot;src&quot;</span><span class="gtkdoc opt">);</span>
169 src <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElementFactory.html#gst-element-factory-create">gst_element_factory_create</a></span> <span class="gtkdoc opt">(</span>srcfactory<span class="gtkdoc opt">,</span> <span class="string">&quot;src&quot;</span><span class="gtkdoc opt">);</span>
170170 <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-return-if-fail">g_return_if_fail</a></span> <span class="gtkdoc opt">(</span>src <span class="gtkdoc opt">!=</span> NULL<span class="gtkdoc opt">);</span>
171171 <span class="gtkdoc opt">...</span></pre></td>
172172 </tr>
185185 <p>
186186 </p>
187187 <div class="refsect2">
188 <a name="idp27685152"></a><h3>controlled properties</h3>
188 <a name="idp30161888"></a><h3>controlled properties</h3>
189189 <p>
190190 Controlled properties offers a lightweight way to adjust gobject
191191 properties over stream-time. It works by using time-stamped value pairs that
998998 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> gst_object_sync_values (<em class="parameter"><code><a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> *object</code></em>,
999999 <em class="parameter"><code><a class="link" href="GstClock.html#GstClockTime" title="GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);</pre>
10001000 <p>
1001 Sets the properties of the object, according to the <a href="../gstreamer-1.0/GstControlSource.html"><span class="type">GstControlSources</span></a> that
1001 Sets the properties of the object, according to the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="type">GstControlSources</span></a> that
10021002 (maybe) handle them and for the given timestamp.
10031003 </p>
10041004 <p>
10811081 <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *property_name</code></em>,
10821082 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> disabled</code></em>);</pre>
10831083 <p>
1084 This function is used to disable the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstController.html"><span class="type">GstController</span></a> on a property for
1085 some time, i.e. <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstController.html#gst-controller-sync-values"><code class="function">gst_controller_sync_values()</code></a> will do nothing for the
1084 This function is used to disable the <span class="type">GstController</span> on a property for
1085 some time, i.e. <code class="function">gst_controller_sync_values()</code> will do nothing for the
10861086 property.
10871087 </p>
10881088 <div class="variablelist"><table border="0">
399399 <a class="link" href="GstPad.html#gst-pad-get-parent" title="gst_pad_get_parent()"><code class="function">gst_pad_get_parent()</code></a> will retrieve the <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> that owns the pad.
400400 </p>
401401 <p>
402 After two pads are retrieved from an element with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-get-pad"><code class="function">gst_element_get_pad()</code></a>,
402 After two pads are retrieved from an element with <code class="function">gst_element_get_pad()</code>,
403403 the pads can be linked with <a class="link" href="GstPad.html#gst-pad-link" title="gst_pad_link ()"><code class="function">gst_pad_link()</code></a>. (For quick links,
404404 you can also use <a class="link" href="GstElement.html#gst-element-link" title="gst_element_link ()"><code class="function">gst_element_link()</code></a>, which will make the obvious
405405 link for you if it's straightforward.). Pads can be unlinked again with
25132513 <p>
25142514 This function is installed on a source pad with
25152515 <a class="link" href="GstPad.html#gst-pad-set-getrange-function" title="gst_pad_set_getrange_function()"><code class="function">gst_pad_set_getrange_function()</code></a> and can only be called on source pads after
2516 they are successfully activated with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-activate-pull"><code class="function">gst_pad_activate_pull()</code></a>.
2516 they are successfully activated with <a class="link" href="GstPad.html#gst-pad-activate-mode" title="gst_pad_activate_mode ()"><code class="function">gst_pad_activate_mode()</code></a> with the
2517 <a class="link" href="GstPad.html#GST-PAD-MODE-PULL:CAPS"><span class="type">GST_PAD_MODE_PULL</span></a>.
25172518 </p>
25182519 <p>
25192520 <em class="parameter"><code>offset</code></em> and <em class="parameter"><code>length</code></em> are always given in byte units. <em class="parameter"><code>offset</code></em> must normally be a value
28892890 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> gst_pad_proxy_query_accept_caps (<em class="parameter"><code><a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a> *pad</code></em>,
28902891 <em class="parameter"><code><a class="link" href="gstreamer-GstQuery.html#GstQuery" title="struct GstQuery"><span class="type">GstQuery</span></a> *query</code></em>);</pre>
28912892 <p>
2892 Calls <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-accept-caps"><code class="function">gst_pad_accept_caps()</code></a> for all internally linked pads of <em class="parameter"><code>pad</code></em> and
2893 Calls <code class="function">gst_pad_accept_caps()</code> for all internally linked pads of <em class="parameter"><code>pad</code></em> and
28932894 returns the intersection of the results.
28942895 </p>
28952896 <p>
29472948 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
29482949 <p>
29492950 Sets the given activate function for <em class="parameter"><code>pad</code></em>. The activate function will
2950 dispatch to <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-activate-push"><code class="function">gst_pad_activate_push()</code></a> or <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-activate-pull"><code class="function">gst_pad_activate_pull()</code></a> to perform
2951 the actual activation. Only makes sense to set on sink pads.
2951 dispatch to <a class="link" href="GstPad.html#gst-pad-activate-mode" title="gst_pad_activate_mode ()"><code class="function">gst_pad_activate_mode()</code></a> to perform the actual activation.
2952 Only makes sense to set on sink pads.
29522953 </p>
29532954 <p>
29542955 Call this function if your sink pad can start a pull-based task.
37263727 <p>
37273728 Gets the capabilities this pad can produce or consume.
37283729 Note that this method doesn't necessarily return the caps set by
3729 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-set-caps"><code class="function">gst_pad_set_caps()</code></a> - use <a class="link" href="GstPad.html#gst-pad-get-current-caps" title="gst_pad_get_current_caps ()"><code class="function">gst_pad_get_current_caps()</code></a> for that instead.
3730 <code class="function">gst_pad_set_caps()</code> - use <a class="link" href="GstPad.html#gst-pad-get-current-caps" title="gst_pad_get_current_caps ()"><code class="function">gst_pad_get_current_caps()</code></a> for that instead.
37303731 gst_pad_query_caps returns all possible caps a pad can operate with, using
37313732 the pad's CAPS query function, If the query fails, this function will return
37323733 <em class="parameter"><code>filter</code></em>, if not <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>, otherwise ANY.
46494650 function to perform the actual activation.
46504651 </p>
46514652 <p>
4652 If not <em class="parameter"><code>active</code></em>, checks the pad's current mode and calls
4653 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-activate-push"><code class="function">gst_pad_activate_push()</code></a> or <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-activate-pull"><code class="function">gst_pad_activate_pull()</code></a>, as appropriate, with a
4654 FALSE argument.
4653 If not <em class="parameter"><code>active</code></em>, calls <a class="link" href="GstPad.html#gst-pad-activate-mode" title="gst_pad_activate_mode ()"><code class="function">gst_pad_activate_mode()</code></a> with the pad's current mode
4654 and a FALSE argument.
46554655 </p>
46564656 <div class="variablelist"><table border="0">
46574657 <col align="left" valign="top">
131131 The following code example shows the code to create a pad from a padtemplate.
132132 </p>
133133 <div class="example">
134 <a name="idp27943152"></a><p class="title"><b>Example 11. Create a pad from a padtemplate</b></p>
134 <a name="idp30516864"></a><p class="title"><b>Example 11. Create a pad from a padtemplate</b></p>
135135 <div class="example-contents">
136136 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
137137 <tbody>
154154 16
155155 17</pre></td>
156156 <td class="listing_code"><pre class="programlisting">GstStaticPadTemplate my_template <span class="gtkdoc opt">=</span>
157 <span class="function"><a href="../gstreamer-1.0/GstPadTemplate.html#GST-STATIC-PAD-TEMPLATE:CAPS">GST_STATIC_PAD_TEMPLATE</a></span> <span class="gtkdoc opt">(</span>
157 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GST-STATIC-PAD-TEMPLATE:CAPS">GST_STATIC_PAD_TEMPLATE</a></span> <span class="gtkdoc opt">(</span>
158158 <span class="string">&quot;sink&quot;</span><span class="gtkdoc opt">,</span> <span class="gtkdoc slc">// the name of the pad</span>
159159 GST_PAD_SINK<span class="gtkdoc opt">,</span> <span class="gtkdoc slc">// the direction of the pad</span>
160160 GST_PAD_ALWAYS<span class="gtkdoc opt">,</span> <span class="gtkdoc slc">// when this pad will be present</span>
161 <span class="function"><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GST-STATIC-CAPS">GST_STATIC_CAPS</a></span> <span class="gtkdoc opt">(</span> <span class="gtkdoc slc">// the capabilities of the padtemplate</span>
161 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GST-STATIC-CAPS">GST_STATIC_CAPS</a></span> <span class="gtkdoc opt">(</span> <span class="gtkdoc slc">// the capabilities of the padtemplate</span>
162162 <span class="string">&quot;audio/x-raw, &quot;</span>
163163 <span class="string">&quot;channels = (int) [ 1, 6 ]&quot;</span>
164164 <span class="gtkdoc opt">)</span>
167167 <span class="function">my_method</span> <span class="gtkdoc opt">(</span><span class="gtkdoc kwb">void</span><span class="gtkdoc opt">)</span>
168168 <span class="gtkdoc opt">{</span>
169169 GstPad <span class="gtkdoc opt">*</span>pad<span class="gtkdoc opt">;</span>
170 pad <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/GstPad.html#gst-pad-new-from-static-template">gst_pad_new_from_static_template</a></span> <span class="gtkdoc opt">(&amp;</span>my_template<span class="gtkdoc opt">,</span> <span class="string">&quot;sink&quot;</span><span class="gtkdoc opt">);</span>
170 pad <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-new-from-static-template">gst_pad_new_from_static_template</a></span> <span class="gtkdoc opt">(&amp;</span>my_template<span class="gtkdoc opt">,</span> <span class="string">&quot;sink&quot;</span><span class="gtkdoc opt">);</span>
171171 <span class="gtkdoc opt">...</span>
172172 <span class="gtkdoc opt">}</span></pre></td>
173173 </tr>
199199 <span class="gtkdoc opt">{</span>
200200 GstElementClass <span class="gtkdoc opt">*</span>gstelement_class <span class="gtkdoc opt">=</span> <span class="function">GST_ELEMENT_CLASS</span> <span class="gtkdoc opt">(</span>klass<span class="gtkdoc opt">);</span>
201201
202 <span class="function"><a href="../gstreamer-1.0/GstElement.html#gst-element-class-add-pad-template">gst_element_class_add_pad_template</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">,</span>
203 <span class="function"><a href="../gstreamer-1.0/GstPadTemplate.html#gst-static-pad-template-get">gst_static_pad_template_get</a></span> <span class="gtkdoc opt">(&amp;</span>my_template<span class="gtkdoc opt">));</span>
202 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-class-add-pad-template">gst_element_class_add_pad_template</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">,</span>
203 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#gst-static-pad-template-get">gst_static_pad_template_get</a></span> <span class="gtkdoc opt">(&amp;</span>my_template<span class="gtkdoc opt">));</span>
204204 <span class="gtkdoc opt">}</span></pre></td>
205205 </tr>
206206 </tbody>
303303 6</pre></td>
304304 <td class="listing_code"><pre class="programlisting">GstPluginFeature <span class="gtkdoc opt">*</span>loaded_feature<span class="gtkdoc opt">;</span>
305305
306 loaded_feature <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/GstPluginFeature.html#gst-plugin-feature-load">gst_plugin_feature_load</a></span> <span class="gtkdoc opt">(</span>feature<span class="gtkdoc opt">);</span>
306 loaded_feature <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPluginFeature.html#gst-plugin-feature-load">gst_plugin_feature_load</a></span> <span class="gtkdoc opt">(</span>feature<span class="gtkdoc opt">);</span>
307307 <span class="gtkdoc slc">// presumably, we're no longer interested in the potentially-unloaded feature</span>
308 <span class="function"><a href="../gstreamer-1.0/GstObject.html#gst-object-unref">gst_object_unref</a></span> <span class="gtkdoc opt">(</span>feature<span class="gtkdoc opt">);</span>
308 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html#gst-object-unref">gst_object_unref</a></span> <span class="gtkdoc opt">(</span>feature<span class="gtkdoc opt">);</span>
309309 feature <span class="gtkdoc opt">=</span> loaded_feature<span class="gtkdoc opt">;</span></pre></td>
310310 </tr>
311311 </tbody>
148148
149149 tagsetter <span class="gtkdoc opt">=</span> <span class="function">GST_TAG_SETTER</span> <span class="gtkdoc opt">(</span>element<span class="gtkdoc opt">);</span>
150150
151 merge_mode <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/GstTagSetter.html#gst-tag-setter-get-tag-merge-mode">gst_tag_setter_get_tag_merge_mode</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">);</span>
152 application_tags <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/GstTagSetter.html#gst-tag-setter-get-tag-list">gst_tag_setter_get_tag_list</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">);</span>
151 merge_mode <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagSetter.html#gst-tag-setter-get-tag-merge-mode">gst_tag_setter_get_tag_merge_mode</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">);</span>
152 application_tags <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagSetter.html#gst-tag-setter-get-tag-list">gst_tag_setter_get_tag_list</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">);</span>
153153 event_tags <span class="gtkdoc opt">= (</span><span class="gtkdoc kwb">const</span> GstTagList <span class="gtkdoc opt">*)</span> element<span class="gtkdoc opt">-&gt;</span>event_tags<span class="gtkdoc opt">;</span>
154154
155 <span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-LOG-OBJECT:CAPS">GST_LOG_OBJECT</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">,</span> <span class="string">&quot;merging tags, merge mode = %d&quot;</span><span class="gtkdoc opt">,</span> merge_mode<span class="gtkdoc opt">);</span>
156 <span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-LOG-OBJECT:CAPS">GST_LOG_OBJECT</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">,</span> <span class="string">&quot;event tags: %&quot;</span> GST_PTR_FORMAT<span class="gtkdoc opt">,</span> event_tags<span class="gtkdoc opt">);</span>
157 <span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-LOG-OBJECT:CAPS">GST_LOG_OBJECT</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">,</span> <span class="string">&quot;set tags: %&quot;</span> GST_PTR_FORMAT<span class="gtkdoc opt">,</span> application_tags<span class="gtkdoc opt">);</span>
155 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-LOG-OBJECT:CAPS">GST_LOG_OBJECT</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">,</span> <span class="string">&quot;merging tags, merge mode = %d&quot;</span><span class="gtkdoc opt">,</span> merge_mode<span class="gtkdoc opt">);</span>
156 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-LOG-OBJECT:CAPS">GST_LOG_OBJECT</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">,</span> <span class="string">&quot;event tags: %&quot;</span> GST_PTR_FORMAT<span class="gtkdoc opt">,</span> event_tags<span class="gtkdoc opt">);</span>
157 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-LOG-OBJECT:CAPS">GST_LOG_OBJECT</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">,</span> <span class="string">&quot;set tags: %&quot;</span> GST_PTR_FORMAT<span class="gtkdoc opt">,</span> application_tags<span class="gtkdoc opt">);</span>
158158
159 result <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstTagList.html#gst-tag-list-merge">gst_tag_list_merge</a></span> <span class="gtkdoc opt">(</span>application_tags<span class="gtkdoc opt">,</span> event_tags<span class="gtkdoc opt">,</span> merge_mode<span class="gtkdoc opt">);</span>
159 result <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#gst-tag-list-merge">gst_tag_list_merge</a></span> <span class="gtkdoc opt">(</span>application_tags<span class="gtkdoc opt">,</span> event_tags<span class="gtkdoc opt">,</span> merge_mode<span class="gtkdoc opt">);</span>
160160
161 <span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-LOG-OBJECT:CAPS">GST_LOG_OBJECT</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">,</span> <span class="string">&quot;final tags: %&quot;</span> GST_PTR_FORMAT<span class="gtkdoc opt">,</span> result<span class="gtkdoc opt">);</span></pre></td>
161 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-LOG-OBJECT:CAPS">GST_LOG_OBJECT</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">,</span> <span class="string">&quot;final tags: %&quot;</span> GST_PTR_FORMAT<span class="gtkdoc opt">,</span> result<span class="gtkdoc opt">);</span></pre></td>
162162 </tr>
163163 </tbody>
164164 </table>
7272 <p>
7373 </p>
7474 <div class="example">
75 <a name="idp12151600"></a><p class="title"><b>Example 13. how to write a simple typefinder</b></p>
75 <a name="idp10697952"></a><p class="title"><b>Example 13. how to write a simple typefinder</b></p>
7676 <div class="example-contents">
7777 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
7878 <tbody>
137137 MyTypeFind <span class="gtkdoc opt">*</span>find <span class="gtkdoc opt">= (</span>MyTypeFind <span class="gtkdoc opt">*)</span> data<span class="gtkdoc opt">;</span>
138138 <span class="keyword">if</span> <span class="gtkdoc opt">(</span>probability <span class="gtkdoc opt">&gt;</span> find<span class="gtkdoc opt">-&gt;</span>probability<span class="gtkdoc opt">) {</span>
139139 find<span class="gtkdoc opt">-&gt;</span>probability <span class="gtkdoc opt">=</span> probability<span class="gtkdoc opt">;</span>
140 <span class="function"><a href="../gstreamer-1.0/gstreamer-GstCaps.html#gst-caps-replace">gst_caps_replace</a></span> <span class="gtkdoc opt">(&amp;</span>find<span class="gtkdoc opt">-&gt;</span>caps<span class="gtkdoc opt">,</span> caps<span class="gtkdoc opt">);</span>
140 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#gst-caps-replace">gst_caps_replace</a></span> <span class="gtkdoc opt">(&amp;</span>find<span class="gtkdoc opt">-&gt;</span>caps<span class="gtkdoc opt">,</span> caps<span class="gtkdoc opt">);</span>
141141 <span class="gtkdoc opt">}</span>
142142 <span class="gtkdoc opt">}</span>
143143 <span class="gtkdoc kwb">static</span> GstCaps <span class="gtkdoc opt">*</span>
146146 GList <span class="gtkdoc opt">*</span>walk<span class="gtkdoc opt">, *</span>type_list<span class="gtkdoc opt">;</span>
147147 MyTypeFind find <span class="gtkdoc opt">= {</span>data<span class="gtkdoc opt">,</span> size<span class="gtkdoc opt">,</span> <span class="number">0</span><span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">};</span>
148148 GstTypeFind gst_find <span class="gtkdoc opt">= {</span>my_peek<span class="gtkdoc opt">,</span> my_suggest<span class="gtkdoc opt">, &amp;</span>find<span class="gtkdoc opt">, };</span>
149 walk <span class="gtkdoc opt">=</span> type_list <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/GstTypeFindFactory.html#gst-type-find-factory-get-list">gst_type_find_factory_get_list</a></span> <span class="gtkdoc opt">();</span>
149 walk <span class="gtkdoc opt">=</span> type_list <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTypeFindFactory.html#gst-type-find-factory-get-list">gst_type_find_factory_get_list</a></span> <span class="gtkdoc opt">();</span>
150150 <span class="keyword">while</span> <span class="gtkdoc opt">(</span>walk<span class="gtkdoc opt">) {</span>
151151 GstTypeFindFactory <span class="gtkdoc opt">*</span>factory <span class="gtkdoc opt">=</span> <span class="function">GST_TYPE_FIND_FACTORY</span> <span class="gtkdoc opt">(</span>walk<span class="gtkdoc opt">-&gt;</span>data<span class="gtkdoc opt">);</span>
152152 walk <span class="gtkdoc opt">=</span> <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#g-list-next">g_list_next</a></span> <span class="gtkdoc opt">(</span>walk<span class="gtkdoc opt">)</span>
153 <span class="function"><a href="../gstreamer-1.0/GstTypeFindFactory.html#gst-type-find-factory-call-function">gst_type_find_factory_call_function</a></span> <span class="gtkdoc opt">(</span>factory<span class="gtkdoc opt">, &amp;</span>gst_find<span class="gtkdoc opt">);</span>
153 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTypeFindFactory.html#gst-type-find-factory-call-function">gst_type_find_factory_call_function</a></span> <span class="gtkdoc opt">(</span>factory<span class="gtkdoc opt">, &amp;</span>gst_find<span class="gtkdoc opt">);</span>
154154 <span class="gtkdoc opt">}</span>
155155 <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#g-list-free">g_list_free</a></span> <span class="gtkdoc opt">(</span>type_list<span class="gtkdoc opt">);</span>
156156 <span class="keyword">return</span> find<span class="gtkdoc opt">.</span>caps<span class="gtkdoc opt">;</span>
3030 <td valign="top" align="right"></td>
3131 </tr></table></div>
3232 <div class="refsect1">
33 <a name="idp9351824"></a><h2>Building GStreamer on UNIX</h2>
33 <a name="idp7713072"></a><h2>Building GStreamer on UNIX</h2>
3434 <p>
3535 On UNIX, GStreamer uses the standard GNU build system,
3636 using <span class="application">autoconf</span> for package
9191 </p>
9292 </div>
9393 <div class="refsect1">
94 <a name="idp9104480"></a><h2>Building GStreamer Applications</h2>
94 <a name="idp9473616"></a><h2>Building GStreamer Applications</h2>
9595 <p>
9696 Applications and libraries can use <span class="command"><strong>pkg-config</strong></span> to get all the
9797 needed compiler and linker flags to build against GStreamer. Please note that
3030 <td valign="top" align="right"></td>
3131 </tr></table></div>
3232 <div class="refsect1">
33 <a name="idp11310672"></a><h2>Running and debugging GStreamer Applications</h2>
33 <a name="idp4095488"></a><h2>Running and debugging GStreamer Applications</h2>
3434 <div class="refsect2">
35 <a name="idp9674784"></a><h3>Environment variables</h3>
35 <a name="idp9461168"></a><h3>Environment variables</h3>
3636 <p>
3737 GStreamer inspects a few of environment variables in addition to standard
3838 variables like <code class="envar">LANG</code>, <code class="envar">PATH</code> or <code class="envar">HOME</code>.
8282 <p>
8383 </p>
8484 <div class="example">
85 <a name="idp8067584"></a><p class="title"><b>Example 1. Initializing the gstreamer library</b></p>
85 <a name="idp9723616"></a><p class="title"><b>Example 1. Initializing the gstreamer library</b></p>
8686 <div class="example-contents">
8787 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
8888 <tbody>
9898 <span class="function">main</span> <span class="gtkdoc opt">(</span><span class="gtkdoc kwb">int</span> argc<span class="gtkdoc opt">,</span> <span class="gtkdoc kwb">char</span> <span class="gtkdoc opt">*</span>argv<span class="gtkdoc opt">[])</span>
9999 <span class="gtkdoc opt">{</span>
100100 <span class="gtkdoc slc">// initialize the GStreamer library</span>
101 <span class="function"><a href="../gstreamer-1.0/gstreamer-Gst.html#gst-init">gst_init</a></span> <span class="gtkdoc opt">(&amp;</span>argc<span class="gtkdoc opt">, &amp;</span>argv<span class="gtkdoc opt">);</span>
101 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-Gst.html#gst-init">gst_init</a></span> <span class="gtkdoc opt">(&amp;</span>argc<span class="gtkdoc opt">, &amp;</span>argv<span class="gtkdoc opt">);</span>
102102 <span class="gtkdoc opt">...</span>
103103 <span class="gtkdoc opt">}</span></pre></td>
104104 </tr>
118118 the next code fragment:
119119 </p>
120120 <div class="example">
121 <a name="idp10934368"></a><p class="title"><b>Example 2. Initializing own parameters when initializing gstreamer</b></p>
121 <a name="idp8478800"></a><p class="title"><b>Example 2. Initializing own parameters when initializing gstreamer</b></p>
122122 <div class="example-contents">
123123 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
124124 <tbody>
161161 <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Deprecated-Thread-APIs.html#g-thread-init">g_thread_init</a></span> <span class="gtkdoc opt">(</span>NULL<span class="gtkdoc opt">);</span>
162162 ctx <span class="gtkdoc opt">=</span> <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Commandline-option-parser.html#g-option-context-new">g_option_context_new</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;[ADDITIONAL ARGUMENTS]&quot;</span><span class="gtkdoc opt">);</span>
163163 <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Commandline-option-parser.html#g-option-context-add-main-entries">g_option_context_add_main_entries</a></span> <span class="gtkdoc opt">(</span>ctx<span class="gtkdoc opt">,</span> options<span class="gtkdoc opt">,</span> GETTEXT_PACKAGE<span class="gtkdoc opt">);</span>
164 <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Commandline-option-parser.html#g-option-context-add-group">g_option_context_add_group</a></span> <span class="gtkdoc opt">(</span>ctx<span class="gtkdoc opt">,</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-Gst.html#gst-init-get-option-group">gst_init_get_option_group</a></span> <span class="gtkdoc opt">());</span>
164 <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Commandline-option-parser.html#g-option-context-add-group">g_option_context_add_group</a></span> <span class="gtkdoc opt">(</span>ctx<span class="gtkdoc opt">,</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-Gst.html#gst-init-get-option-group">gst_init_get_option_group</a></span> <span class="gtkdoc opt">());</span>
165165 <span class="keyword">if</span> <span class="gtkdoc opt">(!</span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Commandline-option-parser.html#g-option-context-parse">g_option_context_parse</a></span> <span class="gtkdoc opt">(</span>ctx<span class="gtkdoc opt">, &amp;</span>argc<span class="gtkdoc opt">, &amp;</span>argv<span class="gtkdoc opt">, &amp;</span>err<span class="gtkdoc opt">)) {</span>
166 <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;Error initializing: %s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-STR-NULL:CAPS">GST_STR_NULL</a></span> <span class="gtkdoc opt">(</span>err<span class="gtkdoc opt">-&gt;</span>message<span class="gtkdoc opt">));</span>
166 <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;Error initializing: %s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-STR-NULL:CAPS">GST_STR_NULL</a></span> <span class="gtkdoc opt">(</span>err<span class="gtkdoc opt">-&gt;</span>message<span class="gtkdoc opt">));</span>
167167 <span class="function">exit</span> <span class="gtkdoc opt">(</span><span class="number">1</span><span class="gtkdoc opt">);</span>
168168 <span class="gtkdoc opt">}</span>
169169 <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Commandline-option-parser.html#g-option-context-free">g_option_context_free</a></span> <span class="gtkdoc opt">(</span>ctx<span class="gtkdoc opt">);</span>
211211 with a given width, height and bits per plane.
212212 </p>
213213 <div class="example">
214 <a name="idp13459264"></a><p class="title"><b>Example 3. Creating a buffer for a video frame</b></p>
214 <a name="idp14288080"></a><p class="title"><b>Example 3. Creating a buffer for a video frame</b></p>
215215 <div class="example-contents">
216216 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
217217 <tbody>
230230 gint size<span class="gtkdoc opt">,</span> width<span class="gtkdoc opt">,</span> height<span class="gtkdoc opt">,</span> bpp<span class="gtkdoc opt">;</span>
231231 <span class="gtkdoc opt">...</span>
232232 size <span class="gtkdoc opt">=</span> width <span class="gtkdoc opt">*</span> height <span class="gtkdoc opt">*</span> bpp<span class="gtkdoc opt">;</span>
233 buffer <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#gst-buffer-new">gst_buffer_new</a></span> <span class="gtkdoc opt">();</span>
234 memory <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/GstAllocator.html#gst-allocator-alloc">gst_allocator_alloc</a></span> <span class="gtkdoc opt">(</span>NULL<span class="gtkdoc opt">,</span> size<span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">);</span>
235 <span class="function"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#gst-buffer-insert-memory">gst_buffer_insert_memory</a></span> <span class="gtkdoc opt">(</span>buffer<span class="gtkdoc opt">, -</span><span class="number">1</span><span class="gtkdoc opt">,</span> memory<span class="gtkdoc opt">);</span>
233 buffer <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#gst-buffer-new">gst_buffer_new</a></span> <span class="gtkdoc opt">();</span>
234 memory <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#gst-allocator-alloc">gst_allocator_alloc</a></span> <span class="gtkdoc opt">(</span>NULL<span class="gtkdoc opt">,</span> size<span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">);</span>
235 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#gst-buffer-insert-memory">gst_buffer_insert_memory</a></span> <span class="gtkdoc opt">(</span>buffer<span class="gtkdoc opt">, -</span><span class="number">1</span><span class="gtkdoc opt">,</span> memory<span class="gtkdoc opt">);</span>
236236 <span class="gtkdoc opt">...</span></pre></td>
237237 </tr>
238238 </tbody>
294294 <p>
295295 Several flags of the buffer can be set and unset with the
296296 <a class="link" href="gstreamer-GstBuffer.html#GST-BUFFER-FLAG-SET:CAPS" title="GST_BUFFER_FLAG_SET()"><code class="function">GST_BUFFER_FLAG_SET()</code></a> and <a class="link" href="gstreamer-GstBuffer.html#GST-BUFFER-FLAG-UNSET:CAPS" title="GST_BUFFER_FLAG_UNSET()"><code class="function">GST_BUFFER_FLAG_UNSET()</code></a> macros. Use
297 <a class="link" href="gstreamer-GstBuffer.html#GST-BUFFER-FLAG-IS-SET:CAPS" title="GST_BUFFER_FLAG_IS_SET()"><code class="function">GST_BUFFER_FLAG_IS_SET()</code></a> to test if a certain <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBufferFlag"><span class="type">GstBufferFlag</span></a> is set.
297 <a class="link" href="gstreamer-GstBuffer.html#GST-BUFFER-FLAG-IS-SET:CAPS" title="GST_BUFFER_FLAG_IS_SET()"><code class="function">GST_BUFFER_FLAG_IS_SET()</code></a> to test if a certain <span class="type">GstBufferFlag</span> is set.
298298 </p>
299299 <p>
300300 Buffers can be efficiently merged into a larger buffer with
489489 <pre class="programlisting">#define GST_BUFFER_FLAGS(buf) GST_MINI_OBJECT_FLAGS(buf)
490490 </pre>
491491 <p>
492 A flags word containing <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBufferFlag"><span class="type">GstBufferFlag</span></a> flags set on this buffer.
492 A flags word containing <span class="type">GstBufferFlag</span> flags set on this buffer.
493493 </p>
494494 <div class="variablelist"><table border="0">
495495 <col align="left" valign="top">
516516 </tr>
517517 <tr>
518518 <td><p><span class="term"><em class="parameter"><code>flag</code></em> :</span></p></td>
519 <td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBufferFlag"><span class="type">GstBufferFlag</span></a> to check.</td>
519 <td>the <span class="type">GstBufferFlag</span> to check.</td>
520520 </tr>
521521 </tbody>
522522 </table></div>
538538 </tr>
539539 <tr>
540540 <td><p><span class="term"><em class="parameter"><code>flag</code></em> :</span></p></td>
541 <td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBufferFlag"><span class="type">GstBufferFlag</span></a> to set.</td>
541 <td>the <span class="type">GstBufferFlag</span> to set.</td>
542542 </tr>
543543 </tbody>
544544 </table></div>
560560 </tr>
561561 <tr>
562562 <td><p><span class="term"><em class="parameter"><code>flag</code></em> :</span></p></td>
563 <td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBufferFlag"><span class="type">GstBufferFlag</span></a> to clear.</td>
563 <td>the <span class="type">GstBufferFlag</span> to clear.</td>
564564 </tr>
565565 </tbody>
566566 </table></div>
149149 a description of the <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a>.
150150 </p>
151151 <p>
152 Caps are exposed on the element pads using the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-get-caps"><code class="function">gst_pad_get_caps()</code></a> pad
152 Caps are exposed on the element pads using the <code class="function">gst_pad_get_caps()</code> pad
153153 function. This function describes the possible types that the pad can
154154 handle or produce at runtime.
155155 </p>
159159 <p>
160160 </p>
161161 <div class="example">
162 <a name="idp17423056"></a><p class="title"><b>Example 4. Creating caps</b></p>
162 <a name="idp15247184"></a><p class="title"><b>Example 4. Creating caps</b></p>
163163 <div class="example-contents">
164164 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
165165 <tbody>
173173 7
174174 8</pre></td>
175175 <td class="listing_code"><pre class="programlisting">GstCaps <span class="gtkdoc opt">*</span>caps<span class="gtkdoc opt">;</span>
176 caps <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstCaps.html#gst-caps-new-simple">gst_caps_new_simple</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;video/x-raw&quot;</span><span class="gtkdoc opt">,</span>
176 caps <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#gst-caps-new-simple">gst_caps_new_simple</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;video/x-raw&quot;</span><span class="gtkdoc opt">,</span>
177177 <span class="string">&quot;format&quot;</span><span class="gtkdoc opt">,</span> G_TYPE_STRING<span class="gtkdoc opt">,</span> <span class="string">&quot;I420&quot;</span><span class="gtkdoc opt">,</span>
178178 <span class="string">&quot;framerate&quot;</span><span class="gtkdoc opt">,</span> GST_TYPE_FRACTION<span class="gtkdoc opt">,</span> <span class="number">25</span><span class="gtkdoc opt">,</span> <span class="number">1</span><span class="gtkdoc opt">,</span>
179179 <span class="string">&quot;pixel-aspect-ratio&quot;</span><span class="gtkdoc opt">,</span> GST_TYPE_FRACTION<span class="gtkdoc opt">,</span> <span class="number">1</span><span class="gtkdoc opt">,</span> <span class="number">1</span><span class="gtkdoc opt">,</span>
15811581 <tbody>
15821582 <tr>
15831583 <td class="listing_lines" align="right"><pre>1</pre></td>
1584 <td class="listing_code"><pre class="programlisting"><span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-LOG:CAPS">GST_LOG</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;caps are %&quot;</span> GST_PTR_FORMAT<span class="gtkdoc opt">,</span> caps<span class="gtkdoc opt">);</span></pre></td>
1584 <td class="listing_code"><pre class="programlisting"><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-LOG:CAPS">GST_LOG</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;caps are %&quot;</span> GST_PTR_FORMAT<span class="gtkdoc opt">,</span> caps<span class="gtkdoc opt">);</span></pre></td>
15851585 </tr>
15861586 </tbody>
15871587 </table>
205205 the needed parameters to specify seeking time and mode.
206206 </p>
207207 <div class="example">
208 <a name="idp22881984"></a><p class="title"><b>Example 8. performing a seek on a pipeline</b></p>
208 <a name="idp22752240"></a><p class="title"><b>Example 8. performing a seek on a pipeline</b></p>
209209 <div class="example-contents">
210210 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
211211 <tbody>
230230 <span class="gtkdoc opt">...</span>
231231 <span class="gtkdoc slc">// construct a seek event to play the media from second 2 to 5, flush</span>
232232 <span class="gtkdoc slc">// the pipeline to decrease latency.</span>
233 event <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstEvent.html#gst-event-new-seek">gst_event_new_seek</a></span> <span class="gtkdoc opt">(</span><span class="number">1.0</span><span class="gtkdoc opt">,</span>
233 event <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#gst-event-new-seek">gst_event_new_seek</a></span> <span class="gtkdoc opt">(</span><span class="number">1.0</span><span class="gtkdoc opt">,</span>
234234 GST_FORMAT_TIME<span class="gtkdoc opt">,</span>
235235 GST_SEEK_FLAG_FLUSH<span class="gtkdoc opt">,</span>
236236 GST_SEEK_TYPE_SET<span class="gtkdoc opt">,</span> <span class="number">2</span> <span class="gtkdoc opt">*</span> GST_SECOND<span class="gtkdoc opt">,</span>
237237 GST_SEEK_TYPE_SET<span class="gtkdoc opt">,</span> <span class="number">5</span> <span class="gtkdoc opt">*</span> GST_SECOND<span class="gtkdoc opt">);</span>
238238 <span class="gtkdoc opt">...</span>
239 result <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/GstElement.html#gst-element-send-event">gst_element_send_event</a></span> <span class="gtkdoc opt">(</span>pipeline<span class="gtkdoc opt">,</span> event<span class="gtkdoc opt">);</span>
239 result <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-send-event">gst_element_send_event</a></span> <span class="gtkdoc opt">(</span>pipeline<span class="gtkdoc opt">,</span> event<span class="gtkdoc opt">);</span>
240240 <span class="keyword">if</span> <span class="gtkdoc opt">(!</span>result<span class="gtkdoc opt">)</span>
241241 <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Message-Logging.html#g-warning">g_warning</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;seek failed&quot;</span><span class="gtkdoc opt">);</span>
242242 <span class="gtkdoc opt">...</span></pre></td>
114114 <p>
115115 </p>
116116 <div class="example">
117 <a name="idp9463952"></a><p class="title"><b>Example 7. Throwing an error</b></p>
117 <a name="idp9564400"></a><p class="title"><b>Example 7. Throwing an error</b></p>
118118 <div class="example-contents">
119119 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
120120 <tbody>
121121 <tr>
122122 <td class="listing_lines" align="right"><pre>1
123123 2</pre></td>
124 <td class="listing_code"><pre class="programlisting"><span class="function"><a href="../gstreamer-1.0/GstElement.html#GST-ELEMENT-ERROR:CAPS">GST_ELEMENT_ERROR</a></span> <span class="gtkdoc opt">(</span>src<span class="gtkdoc opt">,</span> RESOURCE<span class="gtkdoc opt">,</span> NOT_FOUND<span class="gtkdoc opt">,</span>
124 <td class="listing_code"><pre class="programlisting"><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-ELEMENT-ERROR:CAPS">GST_ELEMENT_ERROR</a></span> <span class="gtkdoc opt">(</span>src<span class="gtkdoc opt">,</span> RESOURCE<span class="gtkdoc opt">,</span> NOT_FOUND<span class="gtkdoc opt">,</span>
125125 <span class="gtkdoc opt">(</span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-I18N.html#gettext-macro">_</a></span><span class="gtkdoc opt">(</span><span class="string">&quot;No file name specified for reading.&quot;</span><span class="gtkdoc opt">)), (</span>NULL<span class="gtkdoc opt">));</span></pre></td>
126126 </tr>
127127 </tbody>
249249 <tr>
250250 <td class="listing_lines" align="right"><pre>1
251251 2</pre></td>
252 <td class="listing_code"><pre class="programlisting"><span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-STATIC:CAPS">GST_DEBUG_CATEGORY_STATIC</a></span> <span class="gtkdoc opt">(</span>my_category<span class="gtkdoc opt">);</span> <span class="gtkdoc slc">// define category (statically)</span>
252 <td class="listing_code"><pre class="programlisting"><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-STATIC:CAPS">GST_DEBUG_CATEGORY_STATIC</a></span> <span class="gtkdoc opt">(</span>my_category<span class="gtkdoc opt">);</span> <span class="gtkdoc slc">// define category (statically)</span>
253253 <span class="gtkdoc ppc">#define GST_CAT_DEFAULT my_category</span> <span class="gtkdoc slc">// set as default</span><span class="gtkdoc ppc"></span></pre></td>
254254 </tr>
255255 </tbody>
265265 <tr>
266266 <td class="listing_lines" align="right"><pre>1
267267 2</pre></td>
268 <td class="listing_code"><pre class="programlisting"><span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-INIT:CAPS">GST_DEBUG_CATEGORY_INIT</a></span> <span class="gtkdoc opt">(</span>my_category<span class="gtkdoc opt">,</span> <span class="string">&quot;my category&quot;</span><span class="gtkdoc opt">,</span>
268 <td class="listing_code"><pre class="programlisting"><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-INIT:CAPS">GST_DEBUG_CATEGORY_INIT</a></span> <span class="gtkdoc opt">(</span>my_category<span class="gtkdoc opt">,</span> <span class="string">&quot;my category&quot;</span><span class="gtkdoc opt">,</span>
269269 <span class="number">0</span><span class="gtkdoc opt">,</span> <span class="string">&quot;This is my very own&quot;</span><span class="gtkdoc opt">);</span></pre></td>
270270 </tr>
271271 </tbody>
12711271 4
12721272 5
12731273 6</pre></td>
1274 <td class="listing_code"><pre class="programlisting"><span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-STATIC:CAPS">GST_DEBUG_CATEGORY_STATIC</a></span> <span class="gtkdoc opt">(</span>gst_myplugin_debug<span class="gtkdoc opt">);</span>
1274 <td class="listing_code"><pre class="programlisting"><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-STATIC:CAPS">GST_DEBUG_CATEGORY_STATIC</a></span> <span class="gtkdoc opt">(</span>gst_myplugin_debug<span class="gtkdoc opt">);</span>
12751275 <span class="gtkdoc ppc">#define GST_CAT_DEFAULT gst_myplugin_debug</span>
1276 <span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-STATIC:CAPS">GST_DEBUG_CATEGORY_STATIC</a></span> <span class="gtkdoc opt">(</span>GST_CAT_PERFORMANCE<span class="gtkdoc opt">);</span>
1276 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-STATIC:CAPS">GST_DEBUG_CATEGORY_STATIC</a></span> <span class="gtkdoc opt">(</span>GST_CAT_PERFORMANCE<span class="gtkdoc opt">);</span>
12771277 <span class="gtkdoc opt">...</span>
1278 <span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-INIT:CAPS">GST_DEBUG_CATEGORY_INIT</a></span> <span class="gtkdoc opt">(</span>gst_myplugin_debug<span class="gtkdoc opt">,</span> <span class="string">&quot;myplugin&quot;</span><span class="gtkdoc opt">,</span> <span class="number">0</span><span class="gtkdoc opt">,</span> <span class="string">&quot;nice element&quot;</span><span class="gtkdoc opt">);</span>
1279 <span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-GET:CAPS">GST_DEBUG_CATEGORY_GET</a></span> <span class="gtkdoc opt">(</span>GST_CAT_PERFORMANCE<span class="gtkdoc opt">,</span> <span class="string">&quot;GST_PERFORMANCE&quot;</span><span class="gtkdoc opt">);</span></pre></td>
1278 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-INIT:CAPS">GST_DEBUG_CATEGORY_INIT</a></span> <span class="gtkdoc opt">(</span>gst_myplugin_debug<span class="gtkdoc opt">,</span> <span class="string">&quot;myplugin&quot;</span><span class="gtkdoc opt">,</span> <span class="number">0</span><span class="gtkdoc opt">,</span> <span class="string">&quot;nice element&quot;</span><span class="gtkdoc opt">);</span>
1279 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-GET:CAPS">GST_DEBUG_CATEGORY_GET</a></span> <span class="gtkdoc opt">(</span>GST_CAT_PERFORMANCE<span class="gtkdoc opt">,</span> <span class="string">&quot;GST_PERFORMANCE&quot;</span><span class="gtkdoc opt">);</span></pre></td>
12801280 </tr>
12811281 </tbody>
12821282 </table>
24392439 <tbody>
24402440 <tr>
24412441 <td class="listing_lines" align="right"><pre>1</pre></td>
2442 <td class="listing_code"><pre class="programlisting"><span class="function">printf</span><span class="gtkdoc opt">(</span><span class="string">&quot;%&quot;</span> GST_TIME_FORMAT <span class="string">&quot;</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-TIME-ARGS:CAPS">GST_TIME_ARGS</a></span><span class="gtkdoc opt">(</span>ts<span class="gtkdoc opt">));</span></pre></td>
2442 <td class="listing_code"><pre class="programlisting"><span class="function">printf</span><span class="gtkdoc opt">(</span><span class="string">&quot;%&quot;</span> GST_TIME_FORMAT <span class="string">&quot;</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-TIME-ARGS:CAPS">GST_TIME_ARGS</a></span><span class="gtkdoc opt">(</span>ts<span class="gtkdoc opt">));</span></pre></td>
24432443 </tr>
24442444 </tbody>
24452445 </table>
121121 <p>
122122 </p>
123123 <div class="example">
124 <a name="idp21236752"></a><p class="title"><b>Example 9. Using an iterator</b></p>
124 <a name="idp23319008"></a><p class="title"><b>Example 9. Using an iterator</b></p>
125125 <div class="example-contents">
126126 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
127127 <tbody>
152152 <td class="listing_code"><pre class="programlisting">it <span class="gtkdoc opt">=</span> <span class="function">_get_iterator</span><span class="gtkdoc opt">(</span>object<span class="gtkdoc opt">);</span>
153153 done <span class="gtkdoc opt">=</span> FALSE<span class="gtkdoc opt">;</span>
154154 <span class="keyword">while</span> <span class="gtkdoc opt">(!</span>done<span class="gtkdoc opt">) {</span>
155 <span class="keyword">switch</span> <span class="gtkdoc opt">(</span><span class="function"><a href="../gstreamer-1.0/gstreamer-GstIterator.html#gst-iterator-next">gst_iterator_next</a></span> <span class="gtkdoc opt">(</span>it<span class="gtkdoc opt">, &amp;</span>item<span class="gtkdoc opt">)) {</span>
155 <span class="keyword">switch</span> <span class="gtkdoc opt">(</span><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstIterator.html#gst-iterator-next">gst_iterator_next</a></span> <span class="gtkdoc opt">(</span>it<span class="gtkdoc opt">, &amp;</span>item<span class="gtkdoc opt">)) {</span>
156156 <span class="keyword">case</span> GST_ITERATOR_OK<span class="gtkdoc opt">:</span>
157157 <span class="gtkdoc opt">...</span> use<span class="gtkdoc opt">/</span>change item here<span class="gtkdoc opt">...</span>
158158 <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#g-value-reset">g_value_reset</a></span> <span class="gtkdoc opt">(&amp;</span>item<span class="gtkdoc opt">);</span>
159159 <span class="keyword">break</span><span class="gtkdoc opt">;</span>
160160 <span class="keyword">case</span> GST_ITERATOR_RESYNC<span class="gtkdoc opt">:</span>
161161 <span class="gtkdoc opt">...</span>rollback changes to items<span class="gtkdoc opt">...</span>
162 <span class="function"><a href="../gstreamer-1.0/gstreamer-GstIterator.html#gst-iterator-resync">gst_iterator_resync</a></span> <span class="gtkdoc opt">(</span>it<span class="gtkdoc opt">);</span>
162 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstIterator.html#gst-iterator-resync">gst_iterator_resync</a></span> <span class="gtkdoc opt">(</span>it<span class="gtkdoc opt">);</span>
163163 <span class="keyword">break</span><span class="gtkdoc opt">;</span>
164164 <span class="keyword">case</span> GST_ITERATOR_ERROR<span class="gtkdoc opt">:</span>
165165 <span class="gtkdoc opt">...</span>wrong parameters were given<span class="gtkdoc opt">...</span>
171171 <span class="gtkdoc opt">}</span>
172172 <span class="gtkdoc opt">}</span>
173173 <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#g-value-unset">g_value_unset</a></span> <span class="gtkdoc opt">(&amp;</span>item<span class="gtkdoc opt">);</span>
174 <span class="function"><a href="../gstreamer-1.0/gstreamer-GstIterator.html#gst-iterator-free">gst_iterator_free</a></span> <span class="gtkdoc opt">(</span>it<span class="gtkdoc opt">);</span></pre></td>
174 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstIterator.html#gst-iterator-free">gst_iterator_free</a></span> <span class="gtkdoc opt">(</span>it<span class="gtkdoc opt">);</span></pre></td>
175175 </tr>
176176 </tbody>
177177 </table>
272272 <p>
273273 </p>
274274 <div class="example">
275 <a name="idp29705072"></a><p class="title"><b>Example 10. Posting a <a class="link" href="gstreamer-GstMessage.html#GstMessage" title="struct GstMessage"><span class="type">GstMessage</span></a></b></p>
275 <a name="idp30847824"></a><p class="title"><b>Example 10. Posting a <a class="link" href="gstreamer-GstMessage.html#GstMessage" title="struct GstMessage"><span class="type">GstMessage</span></a></b></p>
276276 <div class="example-contents">
277277 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
278278 <tbody>
279279 <tr>
280280 <td class="listing_lines" align="right"><pre>1</pre></td>
281 <td class="listing_code"><pre class="programlisting"><span class="function"><a href="../gstreamer-1.0/GstBus.html#gst-bus-post">gst_bus_post</a></span> <span class="gtkdoc opt">(</span>bus<span class="gtkdoc opt">,</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstMessage.html#gst-message-new-eos">gst_message_new_eos</a></span><span class="gtkdoc opt">());</span></pre></td>
281 <td class="listing_code"><pre class="programlisting"><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBus.html#gst-bus-post">gst_bus_post</a></span> <span class="gtkdoc opt">(</span>bus<span class="gtkdoc opt">,</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#gst-message-new-eos">gst_message_new_eos</a></span><span class="gtkdoc opt">());</span></pre></td>
282282 </tr>
283283 </tbody>
284284 </table>
10811081 16
10821082 17</pre></td>
10831083 <td class="listing_code"><pre class="programlisting"><span class="gtkdoc opt">...</span>
1084 <span class="keyword">switch</span> <span class="gtkdoc opt">(</span><span class="function"><a href="../gstreamer-1.0/gstreamer-GstMessage.html#GST-MESSAGE-TYPE:CAPS">GST_MESSAGE_TYPE</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">)) {</span>
1084 <span class="keyword">switch</span> <span class="gtkdoc opt">(</span><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GST-MESSAGE-TYPE:CAPS">GST_MESSAGE_TYPE</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">)) {</span>
10851085 <span class="keyword">case</span> GST_MESSAGE_ERROR<span class="gtkdoc opt">: {</span>
10861086 GError <span class="gtkdoc opt">*</span>err <span class="gtkdoc opt">=</span> NULL<span class="gtkdoc opt">;</span>
10871087 gchar <span class="gtkdoc opt">*</span>dbg_info <span class="gtkdoc opt">=</span> NULL<span class="gtkdoc opt">;</span>
10881088
1089 <span class="function"><a href="../gstreamer-1.0/gstreamer-GstMessage.html#gst-message-parse-error">gst_message_parse_error</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">, &amp;</span>err<span class="gtkdoc opt">, &amp;</span>dbg_info<span class="gtkdoc opt">);</span>
1089 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#gst-message-parse-error">gst_message_parse_error</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">, &amp;</span>err<span class="gtkdoc opt">, &amp;</span>dbg_info<span class="gtkdoc opt">);</span>
10901090 <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-printerr">g_printerr</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;ERROR from element %s: %s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span>
1091 <span class="function"><a href="../gstreamer-1.0/GstObject.html#GST-OBJECT-NAME:CAPS">GST_OBJECT_NAME</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">-&gt;</span>src<span class="gtkdoc opt">),</span> err<span class="gtkdoc opt">-&gt;</span>message<span class="gtkdoc opt">);</span>
1091 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html#GST-OBJECT-NAME:CAPS">GST_OBJECT_NAME</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">-&gt;</span>src<span class="gtkdoc opt">),</span> err<span class="gtkdoc opt">-&gt;</span>message<span class="gtkdoc opt">);</span>
10921092 <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-printerr">g_printerr</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;Debugging info: %s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">, (</span>dbg_info<span class="gtkdoc opt">)</span> ? dbg_info <span class="gtkdoc opt">:</span> <span class="string">&quot;none&quot;</span><span class="gtkdoc opt">);</span>
10931093 <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#g-error-free">g_error_free</a></span> <span class="gtkdoc opt">(</span>err<span class="gtkdoc opt">);</span>
10941094 <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free">g_free</a></span> <span class="gtkdoc opt">(</span>dbg_info<span class="gtkdoc opt">);</span>
13321332 13
13331333 14</pre></td>
13341334 <td class="listing_code"><pre class="programlisting"><span class="gtkdoc opt">...</span>
1335 <span class="keyword">switch</span> <span class="gtkdoc opt">(</span><span class="function"><a href="../gstreamer-1.0/gstreamer-GstMessage.html#GST-MESSAGE-TYPE:CAPS">GST_MESSAGE_TYPE</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">)) {</span>
1335 <span class="keyword">switch</span> <span class="gtkdoc opt">(</span><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GST-MESSAGE-TYPE:CAPS">GST_MESSAGE_TYPE</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">)) {</span>
13361336 <span class="keyword">case</span> GST_MESSAGE_TAG<span class="gtkdoc opt">: {</span>
13371337 GstTagList <span class="gtkdoc opt">*</span>tags <span class="gtkdoc opt">=</span> NULL<span class="gtkdoc opt">;</span>
13381338
1339 <span class="function"><a href="../gstreamer-1.0/gstreamer-GstMessage.html#gst-message-parse-tag">gst_message_parse_tag</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">, &amp;</span>tags<span class="gtkdoc opt">);</span>
1340 <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;Got tags from element %s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="../gstreamer-1.0/GstObject.html#GST-OBJECT-NAME:CAPS">GST_OBJECT_NAME</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">-&gt;</span>src<span class="gtkdoc opt">));</span>
1339 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#gst-message-parse-tag">gst_message_parse_tag</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">, &amp;</span>tags<span class="gtkdoc opt">);</span>
1340 <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;Got tags from element %s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html#GST-OBJECT-NAME:CAPS">GST_OBJECT_NAME</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">-&gt;</span>src<span class="gtkdoc opt">));</span>
13411341 <span class="function">handle_tags</span> <span class="gtkdoc opt">(</span>tags<span class="gtkdoc opt">);</span>
1342 <span class="function"><a href="../gstreamer-1.0/gstreamer-GstTagList.html#gst-tag-list-unref">gst_tag_list_unref</a></span> <span class="gtkdoc opt">(</span>tags<span class="gtkdoc opt">);</span>
1342 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#gst-tag-list-unref">gst_tag_list_unref</a></span> <span class="gtkdoc opt">(</span>tags<span class="gtkdoc opt">);</span>
13431343 <span class="keyword">break</span><span class="gtkdoc opt">;</span>
13441344 <span class="gtkdoc opt">}</span>
13451345 <span class="gtkdoc opt">...</span>
15901590 14
15911591 15</pre></td>
15921592 <td class="listing_code"><pre class="programlisting"><span class="gtkdoc opt">...</span>
1593 <span class="keyword">switch</span> <span class="gtkdoc opt">(</span><span class="function"><a href="../gstreamer-1.0/gstreamer-GstMessage.html#GST-MESSAGE-TYPE:CAPS">GST_MESSAGE_TYPE</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">)) {</span>
1593 <span class="keyword">switch</span> <span class="gtkdoc opt">(</span><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GST-MESSAGE-TYPE:CAPS">GST_MESSAGE_TYPE</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">)) {</span>
15941594 <span class="keyword">case</span> GST_MESSAGE_STATE_CHANGED<span class="gtkdoc opt">: {</span>
15951595 GstState old_state<span class="gtkdoc opt">,</span> new_state<span class="gtkdoc opt">;</span>
15961596
1597 <span class="function"><a href="../gstreamer-1.0/gstreamer-GstMessage.html#gst-message-parse-state-changed">gst_message_parse_state_changed</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">, &amp;</span>old_state<span class="gtkdoc opt">, &amp;</span>new_state<span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">);</span>
1597 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#gst-message-parse-state-changed">gst_message_parse_state_changed</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">, &amp;</span>old_state<span class="gtkdoc opt">, &amp;</span>new_state<span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">);</span>
15981598 <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;Element %s changed state from %s to %s.</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span>
1599 <span class="function"><a href="../gstreamer-1.0/GstObject.html#GST-OBJECT-NAME:CAPS">GST_OBJECT_NAME</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">-&gt;</span>src<span class="gtkdoc opt">),</span>
1600 <span class="function"><a href="../gstreamer-1.0/GstElement.html#gst-element-state-get-name">gst_element_state_get_name</a></span> <span class="gtkdoc opt">(</span>old_state<span class="gtkdoc opt">),</span>
1601 <span class="function"><a href="../gstreamer-1.0/GstElement.html#gst-element-state-get-name">gst_element_state_get_name</a></span> <span class="gtkdoc opt">(</span>new_state<span class="gtkdoc opt">));</span>
1599 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html#GST-OBJECT-NAME:CAPS">GST_OBJECT_NAME</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">-&gt;</span>src<span class="gtkdoc opt">),</span>
1600 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-state-get-name">gst_element_state_get_name</a></span> <span class="gtkdoc opt">(</span>old_state<span class="gtkdoc opt">),</span>
1601 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-state-get-name">gst_element_state_get_name</a></span> <span class="gtkdoc opt">(</span>new_state<span class="gtkdoc opt">));</span>
16021602 <span class="keyword">break</span><span class="gtkdoc opt">;</span>
16031603 <span class="gtkdoc opt">}</span>
16041604 <span class="gtkdoc opt">...</span>
283283 <p>
284284 </p>
285285 <div class="example">
286 <a name="idp39816480"></a><p class="title"><b>Example 12. Query duration on a pipeline</b></p>
286 <a name="idp40848832"></a><p class="title"><b>Example 12. Query duration on a pipeline</b></p>
287287 <div class="example-contents">
288288 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
289289 <tbody>
303303 13</pre></td>
304304 <td class="listing_code"><pre class="programlisting">GstQuery <span class="gtkdoc opt">*</span>query<span class="gtkdoc opt">;</span>
305305 gboolean res<span class="gtkdoc opt">;</span>
306 query <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstQuery.html#gst-query-new-duration">gst_query_new_duration</a></span> <span class="gtkdoc opt">(</span>GST_FORMAT_TIME<span class="gtkdoc opt">);</span>
307 res <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/GstElement.html#gst-element-query">gst_element_query</a></span> <span class="gtkdoc opt">(</span>pipeline<span class="gtkdoc opt">,</span> query<span class="gtkdoc opt">);</span>
306 query <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#gst-query-new-duration">gst_query_new_duration</a></span> <span class="gtkdoc opt">(</span>GST_FORMAT_TIME<span class="gtkdoc opt">);</span>
307 res <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-query">gst_element_query</a></span> <span class="gtkdoc opt">(</span>pipeline<span class="gtkdoc opt">,</span> query<span class="gtkdoc opt">);</span>
308308 <span class="keyword">if</span> <span class="gtkdoc opt">(</span>res<span class="gtkdoc opt">) {</span>
309309 gint64 duration<span class="gtkdoc opt">;</span>
310 <span class="function"><a href="../gstreamer-1.0/gstreamer-GstQuery.html#gst-query-parse-duration">gst_query_parse_duration</a></span> <span class="gtkdoc opt">(</span>query<span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">, &amp;</span>duration<span class="gtkdoc opt">);</span>
311 <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;duration = %&quot;</span>GST_TIME_FORMAT<span class="gtkdoc opt">,</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-TIME-ARGS:CAPS">GST_TIME_ARGS</a></span> <span class="gtkdoc opt">(</span>duration<span class="gtkdoc opt">));</span>
310 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#gst-query-parse-duration">gst_query_parse_duration</a></span> <span class="gtkdoc opt">(</span>query<span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">, &amp;</span>duration<span class="gtkdoc opt">);</span>
311 <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;duration = %&quot;</span>GST_TIME_FORMAT<span class="gtkdoc opt">,</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-TIME-ARGS:CAPS">GST_TIME_ARGS</a></span> <span class="gtkdoc opt">(</span>duration<span class="gtkdoc opt">));</span>
312312 <span class="gtkdoc opt">}</span>
313313 <span class="keyword">else</span> <span class="gtkdoc opt">{</span>
314314 <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;duration query failed...&quot;</span><span class="gtkdoc opt">);</span>
315315 <span class="gtkdoc opt">}</span>
316 <span class="function"><a href="../gstreamer-1.0/gstreamer-GstQuery.html#gst-query-unref">gst_query_unref</a></span> <span class="gtkdoc opt">(</span>query<span class="gtkdoc opt">);</span></pre></td>
316 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#gst-query-unref">gst_query_unref</a></span> <span class="gtkdoc opt">(</span>query<span class="gtkdoc opt">);</span></pre></td>
317317 </tr>
318318 </tbody>
319319 </table>
225225 <div class="refsect2">
226226 <a name="GstSegmentFlags"></a><h3>enum GstSegmentFlags</h3>
227227 <pre class="programlisting">typedef enum {
228 /*&lt; flags &gt;*/
228229 GST_SEGMENT_FLAG_NONE = GST_SEEK_FLAG_NONE,
229230 GST_SEGMENT_FLAG_RESET = GST_SEEK_FLAG_FLUSH,
230231 GST_SEGMENT_FLAG_SKIP = GST_SEEK_FLAG_SKIP,
20212021 <tbody>
20222022 <tr>
20232023 <td class="listing_lines" align="right"><pre>1</pre></td>
2024 <td class="listing_code"><pre class="programlisting"><span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-LOG:CAPS">GST_LOG</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;structure is %&quot;</span> GST_PTR_FORMAT<span class="gtkdoc opt">,</span> structure<span class="gtkdoc opt">);</span></pre></td>
2024 <td class="listing_code"><pre class="programlisting"><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-LOG:CAPS">GST_LOG</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;structure is %&quot;</span> GST_PTR_FORMAT<span class="gtkdoc opt">,</span> structure<span class="gtkdoc opt">);</span></pre></td>
20252025 </tr>
20262026 </tbody>
20272027 </table>
358358 <p>
359359 </p>
360360 <div class="table">
361 <a name="idp44054384"></a><p class="title"><b>Table 1. merge mode</b></p>
361 <a name="idp45190816"></a><p class="title"><b>Table 1. merge mode</b></p>
362362 <div class="table-contents"><table summary="merge mode" border="1">
363363 <colgroup>
364364 <col>
493493 </tr>
494494 <tr>
495495 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
496 <td>a new element or NULL if none could be created. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
496 <td>a new element or NULL if none could be created. <span class="annotation">[transfer floating]</span>
497497 </td>
498498 </tr>
499499 </tbody>
236236 <tbody>
237237 <tr>
238238 <td class="listing_lines" align="right"><pre>1</pre></td>
239 <td class="listing_code"><pre class="programlisting">guint32 fourcc <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstValue.html#GST-MAKE-FOURCC:CAPS">GST_MAKE_FOURCC</a></span> <span class="gtkdoc opt">(</span><span class="string">'M'</span><span class="gtkdoc opt">,</span> <span class="string">'J'</span><span class="gtkdoc opt">,</span> <span class="string">'P'</span><span class="gtkdoc opt">,</span> <span class="string">'G'</span><span class="gtkdoc opt">);</span></pre></td>
239 <td class="listing_code"><pre class="programlisting">guint32 fourcc <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstValue.html#GST-MAKE-FOURCC:CAPS">GST_MAKE_FOURCC</a></span> <span class="gtkdoc opt">(</span><span class="string">'M'</span><span class="gtkdoc opt">,</span> <span class="string">'J'</span><span class="gtkdoc opt">,</span> <span class="string">'P'</span><span class="gtkdoc opt">,</span> <span class="string">'G'</span><span class="gtkdoc opt">);</span></pre></td>
240240 </tr>
241241 </tbody>
242242 </table>
282282 <tbody>
283283 <tr>
284284 <td class="listing_lines" align="right"><pre>1</pre></td>
285 <td class="listing_code"><pre class="programlisting">guint32 fourcc <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstValue.html#GST-STR-FOURCC:CAPS">GST_STR_FOURCC</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;MJPG&quot;</span><span class="gtkdoc opt">);</span></pre></td>
285 <td class="listing_code"><pre class="programlisting">guint32 fourcc <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstValue.html#GST-STR-FOURCC:CAPS">GST_STR_FOURCC</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;MJPG&quot;</span><span class="gtkdoc opt">);</span></pre></td>
286286 </tr>
287287 </tbody>
288288 </table>
312312 <tbody>
313313 <tr>
314314 <td class="listing_lines" align="right"><pre>1</pre></td>
315 <td class="listing_code"><pre class="programlisting"><span class="function">printf</span> <span class="gtkdoc opt">(</span><span class="string">&quot;fourcc: %&quot;</span> GST_FOURCC_FORMAT <span class="string">&quot;</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstValue.html#GST-FOURCC-ARGS:CAPS">GST_FOURCC_ARGS</a></span> <span class="gtkdoc opt">(</span>fcc<span class="gtkdoc opt">));</span></pre></td>
315 <td class="listing_code"><pre class="programlisting"><span class="function">printf</span> <span class="gtkdoc opt">(</span><span class="string">&quot;fourcc: %&quot;</span> GST_FOURCC_FORMAT <span class="string">&quot;</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstValue.html#GST-FOURCC-ARGS:CAPS">GST_FOURCC_ARGS</a></span> <span class="gtkdoc opt">(</span>fcc<span class="gtkdoc opt">));</span></pre></td>
316316 </tr>
317317 </tbody>
318318 </table>
21982198 Determines if intersecting two values will produce a valid result.
21992199 Two values will produce a valid intersection if they have the same
22002200 type, or if there is a method (registered by
2201 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstValue.html#gst-value-register-intersect-func"><code class="function">gst_value_register_intersect_func()</code></a>) to calculate the intersection.
2201 <code class="function">gst_value_register_intersect_func()</code>) to calculate the intersection.
22022202 </p>
22032203 <div class="variablelist"><table border="0">
22042204 <col align="left" valign="top">
8787 <hr>
8888 <div class="refsect2">
8989 <a name="GST-VERSION-MICRO:CAPS"></a><h3>GST_VERSION_MICRO</h3>
90 <pre class="programlisting">#define GST_VERSION_MICRO (0)
90 <pre class="programlisting">#define GST_VERSION_MICRO (1)
9191 </pre>
9292 <p>
9393 The micro version of GStreamer at compile time:
7070 <sub name="Annotation Glossary" link="annotation-glossary.html"/>
7171 </chapters>
7272 <functions>
73 <keyword type="" name="Environment variables" link="gst-running.html#idp9674784"/>
73 <keyword type="" name="Environment variables" link="gst-running.html#idp9461168"/>
7474 <keyword type="function" name="gst_init ()" link="gstreamer-Gst.html#gst-init"/>
7575 <keyword type="function" name="gst_init_check ()" link="gstreamer-Gst.html#gst-init-check"/>
7676 <keyword type="function" name="gst_init_get_option_group ()" link="gstreamer-Gst.html#gst-init-get-option-group"/>
104104 <keyword type="function" name="gst_atomic_queue_peek ()" link="gstreamer-GstAtomicQueue.html#gst-atomic-queue-peek"/>
105105 <keyword type="function" name="gst_atomic_queue_pop ()" link="gstreamer-GstAtomicQueue.html#gst-atomic-queue-pop"/>
106106 <keyword type="function" name="gst_atomic_queue_length ()" link="gstreamer-GstAtomicQueue.html#gst-atomic-queue-length"/>
107 <keyword type="" name="Notes" link="GstBin.html#idp9938176"/>
107 <keyword type="" name="Notes" link="GstBin.html#idp8569680"/>
108108 <keyword type="struct" name="struct GstBin" link="GstBin.html#GstBin-struct"/>
109109 <keyword type="struct" name="struct GstBinClass" link="GstBin.html#GstBinClass"/>
110110 <keyword type="function" name="gst_bin_new ()" link="GstBin.html#gst-bin-new"/>
905905 <keyword type="function" name="gst_mini_object_replace ()" link="gstreamer-GstMiniObject.html#gst-mini-object-replace"/>
906906 <keyword type="function" name="gst_mini_object_take ()" link="gstreamer-GstMiniObject.html#gst-mini-object-take"/>
907907 <keyword type="function" name="gst_mini_object_steal ()" link="gstreamer-GstMiniObject.html#gst-mini-object-steal"/>
908 <keyword type="" name="controlled properties" link="GstObject.html#idp27685152"/>
908 <keyword type="" name="controlled properties" link="GstObject.html#idp30161888"/>
909909 <keyword type="struct" name="struct GstObject" link="GstObject.html#GstObject-struct"/>
910910 <keyword type="struct" name="struct GstObjectClass" link="GstObject.html#GstObjectClass"/>
911911 <keyword type="enum" name="enum GstObjectFlags" link="GstObject.html#GstObjectFlags"/>
1414 <div>
1515 <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer 1.0 Core Reference Manual</p></th></tr></table></div>
1616 <div><p class="releaseinfo">
17 for GStreamer Core 1.0 (1.0.0)
17 for GStreamer Core 1.0 (1.0.1)
1818 The latest version of this documentation can be found on-line at
1919 <a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/</a>.
2020 </p></div>
749749 if echo $(FORMATS) | grep ps > /dev/null; then export SRC="$$SRC $(DOC).ps"; fi; \
750750 if echo $(FORMATS) | grep pdf > /dev/null; then export SRC="$$SRC $(DOC).pdf"; fi; \
751751 \
752 # upload releases to both 0.10.X/ and head/ subdirectories \
753 if test "x$(PACKAGE_VERSION_NANO)" = x0; then \
754 export DIR=$(DOC_BASE)/gstreamer/$(VERSION)/$(DOC); \
755 echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
756 ssh $(DOC_SERVER) mkdir -p $$DIR; \
757 rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
758 ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
759 fi; \
752 # upload releases to both X.Y/ and head/ subdirectories \
753 export DIR=$(DOC_BASE)/gstreamer/$(PACKAGE_VERSION_MAJOR).$(PACKAGE_VERSION_MINOR)/$(DOC); \
754 echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
755 ssh $(DOC_SERVER) mkdir -p $$DIR; \
756 rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
757 ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
760758 \
761759 export DIR=$(DOC_BASE)/gstreamer/head/$(DOC); \
762760 echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
292292
293293 gst_base_transform_is_passthrough
294294 gst_base_transform_set_passthrough
295 gst_base_transform_set_prefer_passthrough
295296 gst_base_transform_is_in_place
296297 gst_base_transform_set_in_place
297298 gst_base_transform_is_qos_enabled
4545 <a class="link" href="GstAdapter.html" title="GstAdapter"><span class="returnvalue">GstAdapter</span></a> * <a class="link" href="GstAdapter.html#gst-adapter-new" title="gst_adapter_new ()">gst_adapter_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
4646 <span class="returnvalue">void</span> <a class="link" href="GstAdapter.html#gst-adapter-clear" title="gst_adapter_clear ()">gst_adapter_clear</a> (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>);
4747 <span class="returnvalue">void</span> <a class="link" href="GstAdapter.html#gst-adapter-push" title="gst_adapter_push ()">gst_adapter_push</a> (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
48 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>);
48 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>);
4949 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"><span class="returnvalue">gconstpointer</span></a> <a class="link" href="GstAdapter.html#gst-adapter-map" title="gst_adapter_map ()">gst_adapter_map</a> (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
5050 <em class="parameter"><code><span class="type">gsize</span> size</code></em>);
5151 <span class="returnvalue">void</span> <a class="link" href="GstAdapter.html#gst-adapter-unmap" title="gst_adapter_unmap ()">gst_adapter_unmap</a> (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>);
5959 <span class="returnvalue">gsize</span> <a class="link" href="GstAdapter.html#gst-adapter-available-fast" title="gst_adapter_available_fast ()">gst_adapter_available_fast</a> (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>);
6060 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="returnvalue">gpointer</span></a> <a class="link" href="GstAdapter.html#gst-adapter-take" title="gst_adapter_take ()">gst_adapter_take</a> (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
6161 <em class="parameter"><code><span class="type">gsize</span> nbytes</code></em>);
62 <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * <a class="link" href="GstAdapter.html#gst-adapter-take-buffer" title="gst_adapter_take_buffer ()">gst_adapter_take_buffer</a> (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
62 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * <a class="link" href="GstAdapter.html#gst-adapter-take-buffer" title="gst_adapter_take_buffer ()">gst_adapter_take_buffer</a> (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
6363 <em class="parameter"><code><span class="type">gsize</span> nbytes</code></em>);
6464 <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * <a class="link" href="GstAdapter.html#gst-adapter-take-list" title="gst_adapter_take_list ()">gst_adapter_take_list</a> (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
6565 <em class="parameter"><code><span class="type">gsize</span> nbytes</code></em>);
66 <a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a> <a class="link" href="GstAdapter.html#gst-adapter-prev-pts" title="gst_adapter_prev_pts ()">gst_adapter_prev_pts</a> (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
66 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a> <a class="link" href="GstAdapter.html#gst-adapter-prev-pts" title="gst_adapter_prev_pts ()">gst_adapter_prev_pts</a> (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
6767 <em class="parameter"><code><span class="type">guint64</span> *distance</code></em>);
68 <a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a> <a class="link" href="GstAdapter.html#gst-adapter-prev-dts" title="gst_adapter_prev_dts ()">gst_adapter_prev_dts</a> (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
68 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a> <a class="link" href="GstAdapter.html#gst-adapter-prev-dts" title="gst_adapter_prev_dts ()">gst_adapter_prev_dts</a> (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
6969 <em class="parameter"><code><span class="type">guint64</span> *distance</code></em>);
7070 <span class="returnvalue">gsize</span> <a class="link" href="GstAdapter.html#gst-adapter-masked-scan-uint32" title="gst_adapter_masked_scan_uint32 ()">gst_adapter_masked_scan_uint32</a> (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
7171 <em class="parameter"><code><span class="type">guint32</span> mask</code></em>,
153153 GstFlowReturn ret <span class="gtkdoc opt">=</span> GST_FLOW_OK<span class="gtkdoc opt">;</span>
154154
155155 <span class="gtkdoc slc">// will give the element an extra ref; remember to drop it</span>
156 <span class="keyword">this</span> <span class="gtkdoc opt">=</span> <span class="function">MY_ELEMENT</span> <span class="gtkdoc opt">(</span><span class="function"><a href="../gstreamer-1.0/GstPad.html#gst-pad-get-parent">gst_pad_get_parent</a></span> <span class="gtkdoc opt">(</span>pad<span class="gtkdoc opt">));</span>
156 <span class="keyword">this</span> <span class="gtkdoc opt">=</span> <span class="function">MY_ELEMENT</span> <span class="gtkdoc opt">(</span><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-get-parent">gst_pad_get_parent</a></span> <span class="gtkdoc opt">(</span>pad<span class="gtkdoc opt">));</span>
157157 adapter <span class="gtkdoc opt">=</span> <span class="keyword">this</span><span class="gtkdoc opt">-&gt;</span>adapter<span class="gtkdoc opt">;</span>
158158
159159 <span class="gtkdoc slc">// put buffer into adapter</span>
160 <span class="function"><a href="../gstreamer-libs-1.0/GstAdapter.html#gst-adapter-push">gst_adapter_push</a></span> <span class="gtkdoc opt">(</span>adapter<span class="gtkdoc opt">,</span> buffer<span class="gtkdoc opt">);</span>
160 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstAdapter.html#gst-adapter-push">gst_adapter_push</a></span> <span class="gtkdoc opt">(</span>adapter<span class="gtkdoc opt">,</span> buffer<span class="gtkdoc opt">);</span>
161161 <span class="gtkdoc slc">// while we can read out 512 bytes, process them</span>
162 <span class="keyword">while</span> <span class="gtkdoc opt">(</span><span class="function"><a href="../gstreamer-libs-1.0/GstAdapter.html#gst-adapter-available">gst_adapter_available</a></span> <span class="gtkdoc opt">(</span>adapter<span class="gtkdoc opt">) &gt;=</span> <span class="number">512</span> <span class="gtkdoc opt">&amp;&amp;</span> ret <span class="gtkdoc opt">==</span> GST_FLOW_OK<span class="gtkdoc opt">) {</span>
163 <span class="gtkdoc kwb">const</span> guint8 <span class="gtkdoc opt">*</span>data <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-libs-1.0/GstAdapter.html#gst-adapter-map">gst_adapter_map</a></span> <span class="gtkdoc opt">(</span>adapter<span class="gtkdoc opt">,</span> <span class="number">512</span><span class="gtkdoc opt">);</span>
162 <span class="keyword">while</span> <span class="gtkdoc opt">(</span><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstAdapter.html#gst-adapter-available">gst_adapter_available</a></span> <span class="gtkdoc opt">(</span>adapter<span class="gtkdoc opt">) &gt;=</span> <span class="number">512</span> <span class="gtkdoc opt">&amp;&amp;</span> ret <span class="gtkdoc opt">==</span> GST_FLOW_OK<span class="gtkdoc opt">) {</span>
163 <span class="gtkdoc kwb">const</span> guint8 <span class="gtkdoc opt">*</span>data <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstAdapter.html#gst-adapter-map">gst_adapter_map</a></span> <span class="gtkdoc opt">(</span>adapter<span class="gtkdoc opt">,</span> <span class="number">512</span><span class="gtkdoc opt">);</span>
164164 <span class="gtkdoc slc">// use flowreturn as an error value</span>
165165 ret <span class="gtkdoc opt">=</span> <span class="function">my_library_foo</span> <span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">);</span>
166 <span class="function"><a href="../gstreamer-libs-1.0/GstAdapter.html#gst-adapter-unmap">gst_adapter_unmap</a></span> <span class="gtkdoc opt">(</span>adapter<span class="gtkdoc opt">);</span>
167 <span class="function"><a href="../gstreamer-libs-1.0/GstAdapter.html#gst-adapter-flush">gst_adapter_flush</a></span> <span class="gtkdoc opt">(</span>adapter<span class="gtkdoc opt">,</span> <span class="number">512</span><span class="gtkdoc opt">);</span>
166 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstAdapter.html#gst-adapter-unmap">gst_adapter_unmap</a></span> <span class="gtkdoc opt">(</span>adapter<span class="gtkdoc opt">);</span>
167 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstAdapter.html#gst-adapter-flush">gst_adapter_flush</a></span> <span class="gtkdoc opt">(</span>adapter<span class="gtkdoc opt">,</span> <span class="number">512</span><span class="gtkdoc opt">);</span>
168168 <span class="gtkdoc opt">}</span>
169169
170 <span class="function"><a href="../gstreamer-1.0/GstObject.html#gst-object-unref">gst_object_unref</a></span> <span class="gtkdoc opt">(</span><span class="keyword">this</span><span class="gtkdoc opt">);</span>
170 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html#gst-object-unref">gst_object_unref</a></span> <span class="gtkdoc opt">(</span><span class="keyword">this</span><span class="gtkdoc opt">);</span>
171171 <span class="keyword">return</span> ret<span class="gtkdoc opt">;</span>
172172 <span class="gtkdoc opt">}</span></pre></td>
173173 </tr>
185185 An element using GstAdapter in its sink pad chain function should ensure that
186186 when the FLUSH_STOP event is received, that any queued data is cleared using
187187 <a class="link" href="GstAdapter.html#gst-adapter-clear" title="gst_adapter_clear ()"><code class="function">gst_adapter_clear()</code></a>. Data should also be cleared or processed on EOS and
188 when changing state from <a href="../gstreamer-1.0/GstElement.html#GST-STATE-PAUSED:CAPS"><span class="type">GST_STATE_PAUSED</span></a> to <a href="../gstreamer-1.0/GstElement.html#GST-STATE-READY:CAPS"><span class="type">GST_STATE_READY</span></a>.
188 when changing state from <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-STATE-PAUSED:CAPS"><span class="type">GST_STATE_PAUSED</span></a> to <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-STATE-READY:CAPS"><span class="type">GST_STATE_READY</span></a>.
189189 </p>
190190 <p>
191191 Also check the GST_BUFFER_FLAG_DISCONT flag on the buffer. Some elements might
194194 <p>
195195 The adapter will keep track of the timestamps of the buffers
196196 that were pushed. The last seen timestamp before the current position
197 can be queried with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstAdapter.html#gst-adapter-prev-timestamp"><code class="function">gst_adapter_prev_timestamp()</code></a>. This function can
197 can be queried with <code class="function">gst_adapter_prev_timestamp()</code>. This function can
198198 optionally return the amount of bytes between the start of the buffer that
199199 carried the timestamp and the current adapter position. The distance is
200200 useful when dealing with, for example, raw audio samples because it allows
218218 </p>
219219 <p>
220220 Note that <a class="link" href="GstAdapter.html#gst-adapter-push" title="gst_adapter_push ()"><code class="function">gst_adapter_push()</code></a> takes ownership of the buffer passed. Use
221 <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#gst-buffer-ref"><code class="function">gst_buffer_ref()</code></a> before pushing it into the adapter if you still want to
221 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#gst-buffer-ref"><code class="function">gst_buffer_ref()</code></a> before pushing it into the adapter if you still want to
222222 access the buffer later. The adapter will never modify the data in the
223223 buffer pushed in it.
224224 </p>
271271 <div class="refsect2">
272272 <a name="gst-adapter-push"></a><h3>gst_adapter_push ()</h3>
273273 <pre class="programlisting"><span class="returnvalue">void</span> gst_adapter_push (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
274 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>);</pre>
274 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>);</pre>
275275 <p>
276276 Adds the data from <em class="parameter"><code>buf</code></em> to the data stored inside <em class="parameter"><code>adapter</code></em> and takes
277277 ownership of the buffer.
286286 </tr>
287287 <tr>
288288 <td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
289 <td>a <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> to add to queue in the adapter. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
289 <td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> to add to queue in the adapter. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
290290 </td>
291291 </tr>
292292 </tbody>
302302 valid until the next function is called on the adapter.
303303 </p>
304304 <p>
305 Note that setting the returned pointer as the data of a <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> is
305 Note that setting the returned pointer as the data of a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> is
306306 incorrect for general-purpose plugins. The reason is that if a downstream
307307 element stores the buffer so that it has access to it outside of the bounds
308308 of its chain function, the buffer will have an invalid data pointer after
309309 your element flushes the bytes. In that case you should use
310310 <a class="link" href="GstAdapter.html#gst-adapter-take" title="gst_adapter_take ()"><code class="function">gst_adapter_take()</code></a>, which returns a freshly-allocated buffer that you can set
311 as <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> malloc_data or the potentially more performant
311 as <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> malloc_data or the potentially more performant
312312 <a class="link" href="GstAdapter.html#gst-adapter-take-buffer" title="gst_adapter_take_buffer ()"><code class="function">gst_adapter_take_buffer()</code></a>.
313313 </p>
314314 <p>
505505 <hr>
506506 <div class="refsect2">
507507 <a name="gst-adapter-take-buffer"></a><h3>gst_adapter_take_buffer ()</h3>
508 <pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * gst_adapter_take_buffer (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
508 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * gst_adapter_take_buffer (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
509509 <em class="parameter"><code><span class="type">gsize</span> nbytes</code></em>);</pre>
510510 <p>
511 Returns a <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> containing the first <em class="parameter"><code>nbytes</code></em> bytes of the
511 Returns a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> containing the first <em class="parameter"><code>nbytes</code></em> bytes of the
512512 <em class="parameter"><code>adapter</code></em>. The returned bytes will be flushed from the adapter.
513513 This function is potentially more performant than <a class="link" href="GstAdapter.html#gst-adapter-take" title="gst_adapter_take ()"><code class="function">gst_adapter_take()</code></a>
514514 since it can reuse the memory in pushed buffers by subbuffering
515515 or merging.
516516 </p>
517517 <p>
518 Caller owns returned value. <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#gst-buffer-unref"><code class="function">gst_buffer_unref()</code></a> after usage.
518 Caller owns returned value. <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#gst-buffer-unref"><code class="function">gst_buffer_unref()</code></a> after usage.
519519 </p>
520520 <p>
521521 Free-function: gst_buffer_unref
534534 </tr>
535535 <tr>
536536 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
537 <td>a <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> containing the first <em class="parameter"><code>nbytes</code></em> of
537 <td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> containing the first <em class="parameter"><code>nbytes</code></em> of
538538 the adapter, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> if <em class="parameter"><code>nbytes</code></em> bytes are not available. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
539539 </td>
540540 </tr>
553553 performant because no memory should be copied.
554554 </p>
555555 <p>
556 Caller owns returned list and contained buffers. <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#gst-buffer-unref"><code class="function">gst_buffer_unref()</code></a> each
556 Caller owns returned list and contained buffers. <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#gst-buffer-unref"><code class="function">gst_buffer_unref()</code></a> each
557557 buffer in the list before freeing the list after usage.
558558 </p>
559559 <div class="variablelist"><table border="0">
581581 <hr>
582582 <div class="refsect2">
583583 <a name="gst-adapter-prev-pts"></a><h3>gst_adapter_prev_pts ()</h3>
584 <pre class="programlisting"><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a> gst_adapter_prev_pts (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
584 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a> gst_adapter_prev_pts (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
585585 <em class="parameter"><code><span class="type">guint64</span> *distance</code></em>);</pre>
586586 <p>
587587 Get the pts that was before the current byte in the adapter. When
617617 <hr>
618618 <div class="refsect2">
619619 <a name="gst-adapter-prev-dts"></a><h3>gst_adapter_prev_dts ()</h3>
620 <pre class="programlisting"><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a> gst_adapter_prev_dts (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
620 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a> gst_adapter_prev_dts (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
621621 <em class="parameter"><code><span class="type">guint64</span> *distance</code></em>);</pre>
622622 <p>
623623 Get the dts that was before the current byte in the adapter. When
3434 <div class="refnamediv"><table width="100%"><tr>
3535 <td valign="top">
3636 <h2><span class="refentrytitle"><a name="GstBaseSink.top_of_page"></a>GstBaseSink</span></h2>
37 <p>GstBaseSink</p>
37 <p>GstBaseSink — Base class for sink elements</p>
3838 </td>
3939 <td valign="top" align="right"></td>
4040 </tr></table></div>
4848 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="GstBaseSink.html#gst-base-sink-query-latency" title="gst_base_sink_query_latency ()">gst_base_sink_query_latency</a> (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
4949 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *live</code></em>,
5050 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *upstream_live</code></em>,
51 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *min_latency</code></em>,
52 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *max_latency</code></em>);
53 <a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a> <a class="link" href="GstBaseSink.html#gst-base-sink-get-latency" title="gst_base_sink_get_latency ()">gst_base_sink_get_latency</a> (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
54 <a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> <a class="link" href="GstBaseSink.html#gst-base-sink-do-preroll" title="gst_base_sink_do_preroll ()">gst_base_sink_do_preroll</a> (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
55 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstMiniObject.html#GstMiniObject"><span class="type">GstMiniObject</span></a> *obj</code></em>);
56 <a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> <a class="link" href="GstBaseSink.html#gst-base-sink-wait-preroll" title="gst_base_sink_wait_preroll ()">gst_base_sink_wait_preroll</a> (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
57 <a href="../gstreamer-1.0/GstClock.html#GstClockReturn"><span class="returnvalue">GstClockReturn</span></a> <a class="link" href="GstBaseSink.html#gst-base-sink-wait-clock" title="gst_base_sink_wait_clock ()">gst_base_sink_wait_clock</a> (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
58 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> time</code></em>,
59 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> *jitter</code></em>);
51 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *min_latency</code></em>,
52 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *max_latency</code></em>);
53 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a> <a class="link" href="GstBaseSink.html#gst-base-sink-get-latency" title="gst_base_sink_get_latency ()">gst_base_sink_get_latency</a> (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
54 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> <a class="link" href="GstBaseSink.html#gst-base-sink-do-preroll" title="gst_base_sink_do_preroll ()">gst_base_sink_do_preroll</a> (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
55 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMiniObject.html#GstMiniObject"><span class="type">GstMiniObject</span></a> *obj</code></em>);
56 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> <a class="link" href="GstBaseSink.html#gst-base-sink-wait-preroll" title="gst_base_sink_wait_preroll ()">gst_base_sink_wait_preroll</a> (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
57 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockReturn"><span class="returnvalue">GstClockReturn</span></a> <a class="link" href="GstBaseSink.html#gst-base-sink-wait-clock" title="gst_base_sink_wait_clock ()">gst_base_sink_wait_clock</a> (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
58 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> time</code></em>,
59 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> *jitter</code></em>);
6060 <span class="returnvalue">void</span> <a class="link" href="GstBaseSink.html#gst-base-sink-set-sync" title="gst_base_sink_set_sync ()">gst_base_sink_set_sync</a> (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
6161 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> sync</code></em>);
6262 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="GstBaseSink.html#gst-base-sink-get-sync" title="gst_base_sink_get_sync ()">gst_base_sink_get_sync</a> (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
7070 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);
7171 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="GstBaseSink.html#gst-base-sink-is-async-enabled" title="gst_base_sink_is_async_enabled ()">gst_base_sink_is_async_enabled</a> (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
7272 <span class="returnvalue">void</span> <a class="link" href="GstBaseSink.html#gst-base-sink-set-ts-offset" title="gst_base_sink_set_ts_offset ()">gst_base_sink_set_ts_offset</a> (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
73 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> offset</code></em>);
74 <a href="../gstreamer-1.0/GstClock.html#GstClockTimeDiff"><span class="returnvalue">GstClockTimeDiff</span></a> <a class="link" href="GstBaseSink.html#gst-base-sink-get-ts-offset" title="gst_base_sink_get_ts_offset ()">gst_base_sink_get_ts_offset</a> (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
73 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> offset</code></em>);
74 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTimeDiff"><span class="returnvalue">GstClockTimeDiff</span></a> <a class="link" href="GstBaseSink.html#gst-base-sink-get-ts-offset" title="gst_base_sink_get_ts_offset ()">gst_base_sink_get_ts_offset</a> (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
7575 <span class="returnvalue">void</span> <a class="link" href="GstBaseSink.html#gst-base-sink-set-render-delay" title="gst_base_sink_set_render_delay ()">gst_base_sink_set_render_delay</a> (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
76 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> delay</code></em>);
77 <a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a> <a class="link" href="GstBaseSink.html#gst-base-sink-get-render-delay" title="gst_base_sink_get_render_delay ()">gst_base_sink_get_render_delay</a> (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
78 <a href="../gstreamer-1.0/gstreamer-GstSample.html#GstSample"><span class="returnvalue">GstSample</span></a> * <a class="link" href="GstBaseSink.html#gst-base-sink-get-last-sample" title="gst_base_sink_get_last_sample ()">gst_base_sink_get_last_sample</a> (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
76 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> delay</code></em>);
77 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a> <a class="link" href="GstBaseSink.html#gst-base-sink-get-render-delay" title="gst_base_sink_get_render_delay ()">gst_base_sink_get_render_delay</a> (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
78 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstSample.html#GstSample"><span class="returnvalue">GstSample</span></a> * <a class="link" href="GstBaseSink.html#gst-base-sink-get-last-sample" title="gst_base_sink_get_last_sample ()">gst_base_sink_get_last_sample</a> (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
7979 <span class="returnvalue">void</span> <a class="link" href="GstBaseSink.html#gst-base-sink-set-blocksize" title="gst_base_sink_set_blocksize ()">gst_base_sink_set_blocksize</a> (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
8080 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> blocksize</code></em>);
8181 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> <a class="link" href="GstBaseSink.html#gst-base-sink-get-blocksize" title="gst_base_sink_get_blocksize ()">gst_base_sink_get_blocksize</a> (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
9898 <pre class="synopsis">
9999 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
100100 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
101 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
102 +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
101 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
102 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
103103 +----GstBaseSink
104104 </pre>
105105 </div>
109109 "<a class="link" href="GstBaseSink.html#GstBaseSink--async" title='The "async" property'>async</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write
110110 "<a class="link" href="GstBaseSink.html#GstBaseSink--blocksize" title='The "blocksize" property'>blocksize</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write
111111 "<a class="link" href="GstBaseSink.html#GstBaseSink--enable-last-sample" title='The "enable-last-sample" property'>enable-last-sample</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write
112 "<a class="link" href="GstBaseSink.html#GstBaseSink--last-sample" title='The "last-sample" property'>last-sample</a>" <a href="../gstreamer-1.0/gstreamer-GstSample.html#GstSample"><span class="type">GstSample</span></a>* : Read
112 "<a class="link" href="GstBaseSink.html#GstBaseSink--last-sample" title='The "last-sample" property'>last-sample</a>" <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstSample.html#GstSample"><span class="type">GstSample</span></a>* : Read
113113 "<a class="link" href="GstBaseSink.html#GstBaseSink--max-lateness" title='The "max-lateness" property'>max-lateness</a>" <span class="type">gint64</span> : Read / Write
114114 "<a class="link" href="GstBaseSink.html#GstBaseSink--qos" title='The "qos" property'>qos</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write
115115 "<a class="link" href="GstBaseSink.html#GstBaseSink--render-delay" title='The "render-delay" property'>render-delay</a>" <span class="type">guint64</span> : Read / Write
120120 </div>
121121 <div class="refsect1">
122122 <a name="GstBaseSink.description"></a><h2>Description</h2>
123 <p>
124 <a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> is the base class for sink elements in GStreamer, such as
125 xvimagesink or filesink. It is a layer on top of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> that provides a
126 simplified interface to plugin writers. <a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> handles many details
127 for you, for example: preroll, clock synchronization, state changes,
128 activation in push or pull mode, and queries.
129 </p>
130 <p>
131 In most cases, when writing sink elements, there is no need to implement
132 class methods from <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> or to set functions on pads, because the
133 <a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> infrastructure should be sufficient.
134 </p>
135 <p>
136 <a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> provides support for exactly one sink pad, which should be
137 named "sink". A sink implementation (subclass of <a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a>) should
138 install a pad template in its class_init function, like so:
139 </p>
140 <div class="informalexample">
141 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
142 <tbody>
143 <tr>
144 <td class="listing_lines" align="right"><pre>1
145 2
146 3
147 4
148 5
149 6
150 7
151 8
152 9
153 10
154 11
155 12
156 13
157 14
158 15
159 16</pre></td>
160 <td class="listing_code"><pre class="programlisting"><span class="gtkdoc kwb">static void</span>
161 <span class="function">my_element_class_init</span> <span class="gtkdoc opt">(</span>GstMyElementClass <span class="gtkdoc opt">*</span>klass<span class="gtkdoc opt">)</span>
162 <span class="gtkdoc opt">{</span>
163 GstElementClass <span class="gtkdoc opt">*</span>gstelement_class <span class="gtkdoc opt">=</span> <span class="function">GST_ELEMENT_CLASS</span> <span class="gtkdoc opt">(</span>klass<span class="gtkdoc opt">);</span>
164
165 <span class="gtkdoc slc">// sinktemplate should be a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate">GstStaticPadTemplate</a> with direction</span>
166 <span class="gtkdoc slc">// <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-PAD-SINK:CAPS">GST_PAD_SINK</a> and name &quot;sink&quot;</span>
167 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-class-add-pad-template">gst_element_class_add_pad_template</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">,</span>
168 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#gst-static-pad-template-get">gst_static_pad_template_get</a></span> <span class="gtkdoc opt">(&amp;</span>sinktemplate<span class="gtkdoc opt">));</span>
169
170 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-class-set-static-metadata">gst_element_class_set_static_metadata</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">,</span>
171 <span class="string">&quot;Sink name&quot;</span><span class="gtkdoc opt">,</span>
172 <span class="string">&quot;Sink&quot;</span><span class="gtkdoc opt">,</span>
173 <span class="string">&quot;My Sink element&quot;</span><span class="gtkdoc opt">,</span>
174 <span class="string">&quot;The author &lt;my.sink&#64;my.email&gt;&quot;</span><span class="gtkdoc opt">);</span>
175 <span class="gtkdoc opt">}</span></pre></td>
176 </tr>
177 </tbody>
178 </table>
179 </div>
180
181 <p>
182 </p>
183 <p>
184 <a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> will handle the prerolling correctly. This means that it will
185 return <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-STATE-CHANGE-ASYNC:CAPS"><span class="type">GST_STATE_CHANGE_ASYNC</span></a> from a state change to PAUSED until the first
186 buffer arrives in this element. The base class will call the
187 <a class="link" href="GstBaseSink.html#GstBaseSinkClass.preroll"><code class="function">GstBaseSinkClass.preroll()</code></a> vmethod with this preroll buffer and will then
188 commit the state change to the next asynchronously pending state.
189 </p>
190 <p>
191 When the element is set to PLAYING, <a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> will synchronise on the
192 clock using the times returned from <a class="link" href="GstBaseSink.html#GstBaseSinkClass.get-times"><code class="function">GstBaseSinkClass.get_times()</code></a>. If this
193 function returns <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GST-CLOCK-TIME-NONE:CAPS"><span class="type">GST_CLOCK_TIME_NONE</span></a> for the start time, no synchronisation
194 will be done. Synchronisation can be disabled entirely by setting the object
195 <a class="link" href="GstBaseSink.html#GstBaseSink--sync" title='The "sync" property'><span class="type">"sync"</span></a> property to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.
196 </p>
197 <p>
198 After synchronisation the virtual method <a class="link" href="GstBaseSink.html#GstBaseSinkClass.render"><code class="function">GstBaseSinkClass.render()</code></a> will be
199 called. Subclasses should minimally implement this method.
200 </p>
201 <p>
202 Subclasses that synchronise on the clock in the <a class="link" href="GstBaseSink.html#GstBaseSinkClass.render"><code class="function">GstBaseSinkClass.render()</code></a>
203 method are supported as well. These classes typically receive a buffer in
204 the render method and can then potentially block on the clock while
205 rendering. A typical example is an audiosink.
206 These subclasses can use <a class="link" href="GstBaseSink.html#gst-base-sink-wait-preroll" title="gst_base_sink_wait_preroll ()"><code class="function">gst_base_sink_wait_preroll()</code></a> to perform the
207 blocking wait.
208 </p>
209 <p>
210 Upon receiving the EOS event in the PLAYING state, <a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> will wait
211 for the clock to reach the time indicated by the stop time of the last
212 <a class="link" href="GstBaseSink.html#GstBaseSinkClass.get-times"><code class="function">GstBaseSinkClass.get_times()</code></a> call before posting an EOS message. When the
213 element receives EOS in PAUSED, preroll completes, the event is queued and an
214 EOS message is posted when going to PLAYING.
215 </p>
216 <p>
217 <a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> will internally use the <span class="type">GST_EVENT_NEWSEGMENT</span> events to schedule
218 synchronisation and clipping of buffers. Buffers that fall completely outside
219 of the current segment are dropped. Buffers that fall partially in the
220 segment are rendered (and prerolled). Subclasses should do any subbuffer
221 clipping themselves when needed.
222 </p>
223 <p>
224 <a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> will by default report the current playback position in
225 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GST-FORMAT-TIME:CAPS"><span class="type">GST_FORMAT_TIME</span></a> based on the current clock time and segment information.
226 If no clock has been set on the element, the query will be forwarded
227 upstream.
228 </p>
229 <p>
230 The <a class="link" href="GstBaseSink.html#GstBaseSinkClass.set-caps"><code class="function">GstBaseSinkClass.set_caps()</code></a> function will be called when the subclass
231 should configure itself to process a specific media type.
232 </p>
233 <p>
234 The <a class="link" href="GstBaseSink.html#GstBaseSinkClass.start"><code class="function">GstBaseSinkClass.start()</code></a> and <a class="link" href="GstBaseSink.html#GstBaseSinkClass.stop"><code class="function">GstBaseSinkClass.stop()</code></a> virtual methods
235 will be called when resources should be allocated. Any
236 <a class="link" href="GstBaseSink.html#GstBaseSinkClass.preroll"><code class="function">GstBaseSinkClass.preroll()</code></a>, <a class="link" href="GstBaseSink.html#GstBaseSinkClass.render"><code class="function">GstBaseSinkClass.render()</code></a> and
237 <a class="link" href="GstBaseSink.html#GstBaseSinkClass.set-caps"><code class="function">GstBaseSinkClass.set_caps()</code></a> function will be called between the
238 <a class="link" href="GstBaseSink.html#GstBaseSinkClass.start"><code class="function">GstBaseSinkClass.start()</code></a> and <a class="link" href="GstBaseSink.html#GstBaseSinkClass.stop"><code class="function">GstBaseSinkClass.stop()</code></a> calls.
239 </p>
240 <p>
241 The <a class="link" href="GstBaseSink.html#GstBaseSinkClass.event"><code class="function">GstBaseSinkClass.event()</code></a> virtual method will be called when an event is
242 received by <a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a>. Normally this method should only be overriden by
243 very specific elements (such as file sinks) which need to handle the
244 newsegment event specially.
245 </p>
246 <p>
247 The <a class="link" href="GstBaseSink.html#GstBaseSinkClass.unlock"><code class="function">GstBaseSinkClass.unlock()</code></a> method is called when the elements should
248 unblock any blocking operations they perform in the
249 <a class="link" href="GstBaseSink.html#GstBaseSinkClass.render"><code class="function">GstBaseSinkClass.render()</code></a> method. This is mostly useful when the
250 <a class="link" href="GstBaseSink.html#GstBaseSinkClass.render"><code class="function">GstBaseSinkClass.render()</code></a> method performs a blocking write on a file
251 descriptor, for example.
252 </p>
253 <p>
254 The <a class="link" href="GstBaseSink.html#GstBaseSink--max-lateness" title='The "max-lateness" property'><span class="type">"max-lateness"</span></a> property affects how the sink deals with
255 buffers that arrive too late in the sink. A buffer arrives too late in the
256 sink when the presentation time (as a combination of the last segment, buffer
257 timestamp and element base_time) plus the duration is before the current
258 time of the clock.
259 If the frame is later than max-lateness, the sink will drop the buffer
260 without calling the render method.
261 This feature is disabled if sync is disabled, the
262 <a class="link" href="GstBaseSink.html#GstBaseSinkClass.get-times"><code class="function">GstBaseSinkClass.get_times()</code></a> method does not return a valid start time or
263 max-lateness is set to -1 (the default).
264 Subclasses can use <a class="link" href="GstBaseSink.html#gst-base-sink-set-max-lateness" title="gst_base_sink_set_max_lateness ()"><code class="function">gst_base_sink_set_max_lateness()</code></a> to configure the
265 max-lateness value.
266 </p>
267 <p>
268 The <a class="link" href="GstBaseSink.html#GstBaseSink--qos" title='The "qos" property'><span class="type">"qos"</span></a> property will enable the quality-of-service features of
269 the basesink which gather statistics about the real-time performance of the
270 clock synchronisation. For each buffer received in the sink, statistics are
271 gathered and a QOS event is sent upstream with these numbers. This
272 information can then be used by upstream elements to reduce their processing
273 rate, for example.
274 </p>
275 <p>
276 The <a class="link" href="GstBaseSink.html#GstBaseSink--async" title='The "async" property'><span class="type">"async"</span></a> property can be used to instruct the sink to never
277 perform an ASYNC state change. This feature is mostly usable when dealing
278 with non-synchronized streams or sparse streams.
279 </p>
280 <p>
281 Last reviewed on 2007-08-29 (0.10.15)
282 </p>
123283 </div>
124284 <div class="refsect1">
125285 <a name="GstBaseSink.details"></a><h2>Details</h2>
193353 <col align="left" valign="top">
194354 <tbody>
195355 <tr>
196 <td><p><span class="term"><a href="../gstreamer-1.0/GstElement.html#GstElementClass"><span class="type">GstElementClass</span></a> <em class="structfield"><code><a name="GstBaseSinkClass.parent-class"></a>parent_class</code></em>;</span></p></td>
356 <td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GstElementClass"><span class="type">GstElementClass</span></a> <em class="structfield"><code><a name="GstBaseSinkClass.parent-class"></a>parent_class</code></em>;</span></p></td>
197357 <td>Element parent class</td>
198358 </tr>
199359 <tr>
246406 </tr>
247407 <tr>
248408 <td><p><span class="term"><em class="structfield"><code><a name="GstBaseSinkClass.query"></a>query</code></em> ()</span></p></td>
249 <td>perform a <a href="../gstreamer-1.0/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a> on the element.</td>
409 <td>perform a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a> on the element.</td>
250410 </tr>
251411 <tr>
252412 <td><p><span class="term"><em class="structfield"><code><a name="GstBaseSinkClass.event"></a>event</code></em> ()</span></p></td>
291451 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> gst_base_sink_query_latency (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
292452 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *live</code></em>,
293453 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *upstream_live</code></em>,
294 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *min_latency</code></em>,
295 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *max_latency</code></em>);</pre>
454 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *min_latency</code></em>,
455 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *max_latency</code></em>);</pre>
296456 <p>
297457 Query the sink for the latency parameters. The latency will be queried from
298458 the upstream elements. <em class="parameter"><code>live</code></em> will be TRUE if <em class="parameter"><code>sink</code></em> is configured to
344504 <hr>
345505 <div class="refsect2">
346506 <a name="gst-base-sink-get-latency"></a><h3>gst_base_sink_get_latency ()</h3>
347 <pre class="programlisting"><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a> gst_base_sink_get_latency (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);</pre>
507 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a> gst_base_sink_get_latency (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);</pre>
348508 <p>
349509 Get the currently configured latency.
350510 </p>
365525 <hr>
366526 <div class="refsect2">
367527 <a name="gst-base-sink-do-preroll"></a><h3>gst_base_sink_do_preroll ()</h3>
368 <pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> gst_base_sink_do_preroll (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
369 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstMiniObject.html#GstMiniObject"><span class="type">GstMiniObject</span></a> *obj</code></em>);</pre>
528 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> gst_base_sink_do_preroll (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
529 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMiniObject.html#GstMiniObject"><span class="type">GstMiniObject</span></a> *obj</code></em>);</pre>
370530 <p>
371531 If the <em class="parameter"><code>sink</code></em> spawns its own thread for pulling buffers from upstream it
372532 should call this method after it has pulled a buffer. If the element needed
391551 <tr>
392552 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
393553 <td>
394 <a href="../gstreamer-1.0/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> if the preroll completed and processing can
554 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> if the preroll completed and processing can
395555 continue. Any other return value should be returned from the render vmethod.</td>
396556 </tr>
397557 </tbody>
400560 <hr>
401561 <div class="refsect2">
402562 <a name="gst-base-sink-wait-preroll"></a><h3>gst_base_sink_wait_preroll ()</h3>
403 <pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> gst_base_sink_wait_preroll (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);</pre>
563 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> gst_base_sink_wait_preroll (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);</pre>
404564 <p>
405565 If the <a class="link" href="GstBaseSink.html#GstBaseSinkClass.render"><code class="function">GstBaseSinkClass.render()</code></a> method performs its own synchronisation
406566 against the clock it must unblock when going from PLAYING to the PAUSED state
408568 </p>
409569 <p>
410570 This function will block until a state change to PLAYING happens (in which
411 case this function returns <a href="../gstreamer-1.0/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a>) or the processing must be stopped due
571 case this function returns <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a>) or the processing must be stopped due
412572 to a state change to READY or a FLUSH event (in which case this function
413 returns <a href="../gstreamer-1.0/GstPad.html#GST-FLOW-FLUSHING:CAPS"><span class="type">GST_FLOW_FLUSHING</span></a>).
573 returns <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-FLUSHING:CAPS"><span class="type">GST_FLOW_FLUSHING</span></a>).
414574 </p>
415575 <p>
416576 This function should only be called with the PREROLL_LOCK held, like in the
426586 <tr>
427587 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
428588 <td>
429 <a href="../gstreamer-1.0/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> if the preroll completed and processing can
589 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> if the preroll completed and processing can
430590 continue. Any other return value should be returned from the render vmethod.</td>
431591 </tr>
432592 </tbody>
435595 <hr>
436596 <div class="refsect2">
437597 <a name="gst-base-sink-wait-clock"></a><h3>gst_base_sink_wait_clock ()</h3>
438 <pre class="programlisting"><a href="../gstreamer-1.0/GstClock.html#GstClockReturn"><span class="returnvalue">GstClockReturn</span></a> gst_base_sink_wait_clock (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
439 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> time</code></em>,
440 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> *jitter</code></em>);</pre>
598 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockReturn"><span class="returnvalue">GstClockReturn</span></a> gst_base_sink_wait_clock (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
599 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> time</code></em>,
600 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> *jitter</code></em>);</pre>
441601 <p>
442602 This function will block until <em class="parameter"><code>time</code></em> is reached. It is usually called by
443603 subclasses that use their own internal synchronisation.
444604 </p>
445605 <p>
446 If <em class="parameter"><code>time</code></em> is not valid, no sycnhronisation is done and <a href="../gstreamer-1.0/GstClock.html#GST-CLOCK-BADTIME:CAPS"><span class="type">GST_CLOCK_BADTIME</span></a> is
606 If <em class="parameter"><code>time</code></em> is not valid, no sycnhronisation is done and <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GST-CLOCK-BADTIME:CAPS"><span class="type">GST_CLOCK_BADTIME</span></a> is
447607 returned. Likewise, if synchronisation is disabled in the element or there
448 is no clock, no synchronisation is done and <a href="../gstreamer-1.0/GstClock.html#GST-CLOCK-BADTIME:CAPS"><span class="type">GST_CLOCK_BADTIME</span></a> is returned.
608 is no clock, no synchronisation is done and <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GST-CLOCK-BADTIME:CAPS"><span class="type">GST_CLOCK_BADTIME</span></a> is returned.
449609 </p>
450610 <p>
451611 This function should only be called with the PREROLL_LOCK held, like when
476636 </tr>
477637 <tr>
478638 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
479 <td><a href="../gstreamer-1.0/GstClock.html#GstClockReturn"><span class="type">GstClockReturn</span></a></td>
639 <td><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockReturn"><span class="type">GstClockReturn</span></a></td>
480640 </tr>
481641 </tbody>
482642 </table></div>
674834 <div class="refsect2">
675835 <a name="gst-base-sink-set-ts-offset"></a><h3>gst_base_sink_set_ts_offset ()</h3>
676836 <pre class="programlisting"><span class="returnvalue">void</span> gst_base_sink_set_ts_offset (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
677 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> offset</code></em>);</pre>
837 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> offset</code></em>);</pre>
678838 <p>
679839 Adjust the synchronisation of <em class="parameter"><code>sink</code></em> with <em class="parameter"><code>offset</code></em>. A negative value will
680840 render buffers earlier than their timestamp. A positive value will delay
698858 <hr>
699859 <div class="refsect2">
700860 <a name="gst-base-sink-get-ts-offset"></a><h3>gst_base_sink_get_ts_offset ()</h3>
701 <pre class="programlisting"><a href="../gstreamer-1.0/GstClock.html#GstClockTimeDiff"><span class="returnvalue">GstClockTimeDiff</span></a> gst_base_sink_get_ts_offset (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);</pre>
861 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTimeDiff"><span class="returnvalue">GstClockTimeDiff</span></a> gst_base_sink_get_ts_offset (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);</pre>
702862 <p>
703863 Get the synchronisation offset of <em class="parameter"><code>sink</code></em>.
704864 </p>
720880 <div class="refsect2">
721881 <a name="gst-base-sink-set-render-delay"></a><h3>gst_base_sink_set_render_delay ()</h3>
722882 <pre class="programlisting"><span class="returnvalue">void</span> gst_base_sink_set_render_delay (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
723 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> delay</code></em>);</pre>
883 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> delay</code></em>);</pre>
724884 <p>
725885 Set the render delay in <em class="parameter"><code>sink</code></em> to <em class="parameter"><code>delay</code></em>. The render delay is the time
726886 between actual rendering of a buffer and its synchronisation time. Some
752912 <hr>
753913 <div class="refsect2">
754914 <a name="gst-base-sink-get-render-delay"></a><h3>gst_base_sink_get_render_delay ()</h3>
755 <pre class="programlisting"><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a> gst_base_sink_get_render_delay (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);</pre>
915 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a> gst_base_sink_get_render_delay (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);</pre>
756916 <p>
757917 Get the render delay of <em class="parameter"><code>sink</code></em>. see <a class="link" href="GstBaseSink.html#gst-base-sink-set-render-delay" title="gst_base_sink_set_render_delay ()"><code class="function">gst_base_sink_set_render_delay()</code></a> for more
758918 information about the render delay.
775935 <hr>
776936 <div class="refsect2">
777937 <a name="gst-base-sink-get-last-sample"></a><h3>gst_base_sink_get_last_sample ()</h3>
778 <pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstSample.html#GstSample"><span class="returnvalue">GstSample</span></a> * gst_base_sink_get_last_sample (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);</pre>
938 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstSample.html#GstSample"><span class="returnvalue">GstSample</span></a> * gst_base_sink_get_last_sample (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);</pre>
779939 <p>
780940 Get the last sample that arrived in the sink and was used for preroll or for
781941 rendering. This property can be used to generate thumbnails.
782942 </p>
783943 <p>
784 The <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> on the sample can be used to determine the type of the buffer.
944 The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> on the sample can be used to determine the type of the buffer.
785945 </p>
786946 <p>
787947 Free-function: gst_sample_unref
795955 </tr>
796956 <tr>
797957 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
798 <td>a <a href="../gstreamer-1.0/gstreamer-GstSample.html#GstSample"><span class="type">GstSample</span></a>. <a href="../gstreamer-1.0/gstreamer-GstSample.html#gst-sample-unref"><code class="function">gst_sample_unref()</code></a> after usage.
958 <td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstSample.html#GstSample"><span class="type">GstSample</span></a>. <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstSample.html#gst-sample-unref"><code class="function">gst_sample_unref()</code></a> after usage.
799959 This function returns NULL when no buffer has arrived in the sink yet
800960 or when the sink is not in PAUSED or PLAYING. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
801961 </td>
9041064 <pre class="programlisting">#define GST_BASE_SINK_PAD(obj) (GST_BASE_SINK_CAST (obj)-&gt;sinkpad)
9051065 </pre>
9061066 <p>
907 Gives the pointer to the <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> object of the element.
1067 Gives the pointer to the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> object of the element.
9081068 </p>
9091069 <div class="variablelist"><table border="0">
9101070 <col align="left" valign="top">
9991159 <hr>
10001160 <div class="refsect2">
10011161 <a name="GstBaseSink--last-sample"></a><h3>The <code class="literal">"last-sample"</code> property</h3>
1002 <pre class="programlisting"> "last-sample" <a href="../gstreamer-1.0/gstreamer-GstSample.html#GstSample"><span class="type">GstSample</span></a>* : Read</pre>
1162 <pre class="programlisting"> "last-sample" <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstSample.html#GstSample"><span class="type">GstSample</span></a>* : Read</pre>
10031163 <p>
10041164 The last buffer that arrived in the sink and was used for preroll or for
10051165 rendering. This property can be used to generate thumbnails. This property
10621222 <p>Default value: 0</p>
10631223 </div>
10641224 </div>
1225 <div class="refsect1">
1226 <a name="GstBaseSink.see-also"></a><h2>See Also</h2>
1227 <a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a>, <a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a>
1228 </div>
10651229 </div>
10661230 <div class="footer">
10671231 <hr>
4646 struct <a class="link" href="GstBaseSrc.html#GstBaseSrc-struct" title="struct GstBaseSrc">GstBaseSrc</a>;
4747 struct <a class="link" href="GstBaseSrc.html#GstBaseSrcClass" title="struct GstBaseSrcClass">GstBaseSrcClass</a>;
4848 enum <a class="link" href="GstBaseSrc.html#GstBaseSrcFlags" title="enum GstBaseSrcFlags">GstBaseSrcFlags</a>;
49 <a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> <a class="link" href="GstBaseSrc.html#gst-base-src-wait-playing" title="gst_base_src_wait_playing ()">gst_base_src_wait_playing</a> (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>);
49 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> <a class="link" href="GstBaseSrc.html#gst-base-src-wait-playing" title="gst_base_src_wait_playing ()">gst_base_src_wait_playing</a> (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>);
5050 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="GstBaseSrc.html#gst-base-src-is-live" title="gst_base_src_is_live ()">gst_base_src_is_live</a> (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>);
5151 <span class="returnvalue">void</span> <a class="link" href="GstBaseSrc.html#gst-base-src-set-live" title="gst_base_src_set_live ()">gst_base_src_set_live</a> (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>,
5252 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> live</code></em>);
5353 <span class="returnvalue">void</span> <a class="link" href="GstBaseSrc.html#gst-base-src-set-format" title="gst_base_src_set_format ()">gst_base_src_set_format</a> (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>,
54 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> format</code></em>);
54 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> format</code></em>);
5555 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="GstBaseSrc.html#gst-base-src-query-latency" title="gst_base_src_query_latency ()">gst_base_src_query_latency</a> (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>,
5656 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *live</code></em>,
57 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *min_latency</code></em>,
58 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *max_latency</code></em>);
57 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *min_latency</code></em>,
58 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *max_latency</code></em>);
5959 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> <a class="link" href="GstBaseSrc.html#gst-base-src-get-blocksize" title="gst_base_src_get_blocksize ()">gst_base_src_get_blocksize</a> (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>);
6060 <span class="returnvalue">void</span> <a class="link" href="GstBaseSrc.html#gst-base-src-set-blocksize" title="gst_base_src_set_blocksize ()">gst_base_src_set_blocksize</a> (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>,
6161 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> blocksize</code></em>);
6969 <em class="parameter"><code><span class="type">gint64</span> stop</code></em>,
7070 <em class="parameter"><code><span class="type">gint64</span> position</code></em>);
7171 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="GstBaseSrc.html#gst-base-src-set-caps" title="gst_base_src_set_caps ()">gst_base_src_set_caps</a> (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>,
72 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);
72 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);
7373 <span class="returnvalue">void</span> <a class="link" href="GstBaseSrc.html#gst-base-src-get-allocator" title="gst_base_src_get_allocator ()">gst_base_src_get_allocator</a> (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>,
74 <em class="parameter"><code><a href="../gstreamer-1.0/GstAllocator.html"><span class="type">GstAllocator</span></a> **allocator</code></em>,
75 <em class="parameter"><code><a href="../gstreamer-1.0/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *params</code></em>);
76 <a href="../gstreamer-1.0/gstreamer-GstBufferPool.html#GstBufferPool"><span class="returnvalue">GstBufferPool</span></a> * <a class="link" href="GstBaseSrc.html#gst-base-src-get-buffer-pool" title="gst_base_src_get_buffer_pool ()">gst_base_src_get_buffer_pool</a> (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>);
74 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="type">GstAllocator</span></a> **allocator</code></em>,
75 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *params</code></em>);
76 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferPool.html#GstBufferPool"><span class="returnvalue">GstBufferPool</span></a> * <a class="link" href="GstBaseSrc.html#gst-base-src-get-buffer-pool" title="gst_base_src_get_buffer_pool ()">gst_base_src_get_buffer_pool</a> (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>);
7777 #define <a class="link" href="GstBaseSrc.html#GST-BASE-SRC-PAD:CAPS" title="GST_BASE_SRC_PAD()">GST_BASE_SRC_PAD</a> (obj)
7878 </pre>
7979 </div>
8282 <pre class="synopsis">
8383 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
8484 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
85 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
86 +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
85 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
86 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
8787 +----GstBaseSrc
8888 +----<a class="link" href="GstPushSrc.html" title="GstPushSrc">GstPushSrc</a>
8989 </pre>
111111 <p>
112112 </p>
113113 <p>
114 The source can be configured to operate in any <a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> with the
114 The source can be configured to operate in any <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> with the
115115 <a class="link" href="GstBaseSrc.html#gst-base-src-set-format" title="gst_base_src_set_format ()"><code class="function">gst_base_src_set_format()</code></a> method. The currently set format determines
116 the format of the internal <a href="../gstreamer-1.0/gstreamer-GstSegment.html#GstSegment"><span class="type">GstSegment</span></a> and any <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GST-EVENT-NEWSEGMENT:CAPS"><span class="type">GST_EVENT_NEWSEGMENT</span></a>
117 events. The default format for <a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> is <a href="../gstreamer-1.0/gstreamer-GstFormat.html#GST-FORMAT-BYTES:CAPS"><span class="type">GST_FORMAT_BYTES</span></a>.
116 the format of the internal <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstSegment.html#GstSegment"><span class="type">GstSegment</span></a> and any <span class="type">GST_EVENT_NEWSEGMENT</span>
117 events. The default format for <a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> is <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GST-FORMAT-BYTES:CAPS"><span class="type">GST_FORMAT_BYTES</span></a>.
118118 </p>
119119 <p>
120120 <a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> always supports push mode scheduling. If the following
121121 conditions are met, it also supports pull mode scheduling:
122122 </p>
123123 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
124 <li class="listitem"><p>The format is set to <a href="../gstreamer-1.0/gstreamer-GstFormat.html#GST-FORMAT-BYTES:CAPS"><span class="type">GST_FORMAT_BYTES</span></a> (default).</p></li>
124 <li class="listitem"><p>The format is set to <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GST-FORMAT-BYTES:CAPS"><span class="type">GST_FORMAT_BYTES</span></a> (default).</p></li>
125125 <li class="listitem"><p><a class="link" href="GstBaseSrc.html#GstBaseSrcClass.is-seekable"><code class="function">GstBaseSrcClass.is_seekable()</code></a> returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>.</p></li>
126126 </ul></div>
127127 <p>
130130 If all the conditions are met for operating in pull mode, <a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> is
131131 automatically seekable in push mode as well. The following conditions must
132132 be met to make the element seekable in push mode when the format is not
133 <a href="../gstreamer-1.0/gstreamer-GstFormat.html#GST-FORMAT-BYTES:CAPS"><span class="type">GST_FORMAT_BYTES</span></a>:
133 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GST-FORMAT-BYTES:CAPS"><span class="type">GST_FORMAT_BYTES</span></a>:
134134 </p>
135135 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
136136 <li class="listitem"><p>
167167 <a class="link" href="GstBaseSrc.html#GstBaseSrcClass.create"><code class="function">GstBaseSrcClass.create()</code></a> method will not be called in PAUSED but only in
168168 PLAYING. To signal the pipeline that the element will not produce data, the
169169 return value from the READY to PAUSED state will be
170 <a href="../gstreamer-1.0/GstElement.html#GST-STATE-CHANGE-NO-PREROLL:CAPS"><span class="type">GST_STATE_CHANGE_NO_PREROLL</span></a>.
170 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-STATE-CHANGE-NO-PREROLL:CAPS"><span class="type">GST_STATE_CHANGE_NO_PREROLL</span></a>.
171171 </p>
172172 <p>
173173 A typical live source will timestamp the buffers it creates with the
217217 8
218218 9
219219 10
220 11</pre></td>
220 11
221 12
222 13
223 14
224 15</pre></td>
221225 <td class="listing_code"><pre class="programlisting"><span class="gtkdoc kwb">static void</span>
222226 <span class="function">my_element_class_init</span> <span class="gtkdoc opt">(</span>GstMyElementClass <span class="gtkdoc opt">*</span>klass<span class="gtkdoc opt">)</span>
223227 <span class="gtkdoc opt">{</span>
224228 GstElementClass <span class="gtkdoc opt">*</span>gstelement_class <span class="gtkdoc opt">=</span> <span class="function">GST_ELEMENT_CLASS</span> <span class="gtkdoc opt">(</span>klass<span class="gtkdoc opt">);</span>
225 <span class="gtkdoc slc">// srctemplate should be a <a href="../gstreamer-1.0/GstPadTemplate.html#GstStaticPadTemplate">GstStaticPadTemplate</a> with direction</span>
226 <span class="gtkdoc slc">// <a href="../gstreamer-1.0/GstPad.html#GST-PAD-SRC:CAPS">GST_PAD_SRC</a> and name &quot;src&quot;</span>
227 <span class="function"><a href="../gstreamer-1.0/GstElement.html#gst-element-class-add-pad-template">gst_element_class_add_pad_template</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">,</span>
228 <span class="function"><a href="../gstreamer-1.0/GstPadTemplate.html#gst-static-pad-template-get">gst_static_pad_template_get</a></span> <span class="gtkdoc opt">(&amp;</span>srctemplate<span class="gtkdoc opt">));</span>
229 <span class="gtkdoc slc">// see <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElementFactory.html#GstElementDetails">GstElementDetails</a></span>
230 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-class-set-details">gst_element_class_set_details</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">, &amp;</span>details<span class="gtkdoc opt">);</span>
229 <span class="gtkdoc slc">// srctemplate should be a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate">GstStaticPadTemplate</a> with direction</span>
230 <span class="gtkdoc slc">// <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-PAD-SRC:CAPS">GST_PAD_SRC</a> and name &quot;src&quot;</span>
231 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-class-add-pad-template">gst_element_class_add_pad_template</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">,</span>
232 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#gst-static-pad-template-get">gst_static_pad_template_get</a></span> <span class="gtkdoc opt">(&amp;</span>srctemplate<span class="gtkdoc opt">));</span>
233
234 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-class-set-static-metadata">gst_element_class_set_static_metadata</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">,</span>
235 <span class="string">&quot;Source name&quot;</span><span class="gtkdoc opt">,</span>
236 <span class="string">&quot;Source&quot;</span><span class="gtkdoc opt">,</span>
237 <span class="string">&quot;My Source element&quot;</span><span class="gtkdoc opt">,</span>
238 <span class="string">&quot;The author &lt;my.sink&#64;my.email&gt;&quot;</span><span class="gtkdoc opt">);</span>
231239 <span class="gtkdoc opt">}</span></pre></td>
232240 </tr>
233241 </tbody>
239247 <p>
240248 </p>
241249 <div class="refsect2">
242 <a name="idp5184896"></a><h3>Controlled shutdown of live sources in applications</h3>
250 <a name="idp34470512"></a><h3>Controlled shutdown of live sources in applications</h3>
243251 <p>
244252 Applications that record from a live source may want to stop recording
245253 in a controlled way, so that the recording is stopped, but the data
253261 <p>
254262 An application may send an EOS event to a source element to make it
255263 perform the EOS logic (send EOS event downstream or post a
256 <a href="../gstreamer-1.0/gstreamer-GstMessage.html#GST-MESSAGE-SEGMENT-DONE:CAPS"><span class="type">GST_MESSAGE_SEGMENT_DONE</span></a> on the bus). This can typically be done
257 with the <a href="../gstreamer-1.0/GstElement.html#gst-element-send-event"><code class="function">gst_element_send_event()</code></a> function on the element or its parent bin.
264 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GST-MESSAGE-SEGMENT-DONE:CAPS"><span class="type">GST_MESSAGE_SEGMENT_DONE</span></a> on the bus). This can typically be done
265 with the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-send-event"><code class="function">gst_element_send_event()</code></a> function on the element or its parent bin.
258266 </p>
259267 <p>
260268 After the EOS has been sent to the element, the application should wait for
353361 <col align="left" valign="top">
354362 <tbody>
355363 <tr>
356 <td><p><span class="term"><a href="../gstreamer-1.0/GstElement.html#GstElementClass"><span class="type">GstElementClass</span></a> <em class="structfield"><code><a name="GstBaseSrcClass.parent-class"></a>parent_class</code></em>;</span></p></td>
364 <td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GstElementClass"><span class="type">GstElementClass</span></a> <em class="structfield"><code><a name="GstBaseSrcClass.parent-class"></a>parent_class</code></em>;</span></p></td>
357365 <td>Element parent class</td>
358366 </tr>
359367 <tr>
469477 } GstBaseSrcFlags;
470478 </pre>
471479 <p>
472 The <a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> flags that a basesrc element may have.
480 The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> flags that a basesrc element may have.
473481 </p>
474482 <div class="variablelist"><table border="0">
475483 <col align="left" valign="top">
495503 <hr>
496504 <div class="refsect2">
497505 <a name="gst-base-src-wait-playing"></a><h3>gst_base_src_wait_playing ()</h3>
498 <pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> gst_base_src_wait_playing (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>);</pre>
506 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> gst_base_src_wait_playing (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>);</pre>
499507 <p>
500508 If the <a class="link" href="GstBaseSrc.html#GstBaseSrcClass.create"><code class="function">GstBaseSrcClass.create()</code></a> method performs its own synchronisation
501509 against the clock it must unblock when going from PLAYING to the PAUSED state
503511 </p>
504512 <p>
505513 This function will block until a state change to PLAYING happens (in which
506 case this function returns <a href="../gstreamer-1.0/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a>) or the processing must be stopped due
514 case this function returns <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a>) or the processing must be stopped due
507515 to a state change to READY or a FLUSH event (in which case this function
508 returns <a href="../gstreamer-1.0/GstPad.html#GST-FLOW-FLUSHING:CAPS"><span class="type">GST_FLOW_FLUSHING</span></a>).
516 returns <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-FLUSHING:CAPS"><span class="type">GST_FLOW_FLUSHING</span></a>).
509517 </p>
510518 <div class="variablelist"><table border="0">
511519 <col align="left" valign="top">
517525 <tr>
518526 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
519527 <td>
520 <a href="../gstreamer-1.0/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> if <em class="parameter"><code>src</code></em> is PLAYING and processing can
528 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> if <em class="parameter"><code>src</code></em> is PLAYING and processing can
521529 continue. Any other return value should be returned from the create vmethod.</td>
522530 </tr>
523531 </tbody>
579587 <div class="refsect2">
580588 <a name="gst-base-src-set-format"></a><h3>gst_base_src_set_format ()</h3>
581589 <pre class="programlisting"><span class="returnvalue">void</span> gst_base_src_set_format (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>,
582 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> format</code></em>);</pre>
590 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> format</code></em>);</pre>
583591 <p>
584592 Sets the default format of the source. This will be the format used
585593 for sending NEW_SEGMENT events and for performing seeks.
589597 operate in pull mode if the <a class="link" href="GstBaseSrc.html#GstBaseSrcClass.is-seekable"><code class="function">GstBaseSrcClass.is_seekable()</code></a> returns TRUE.
590598 </p>
591599 <p>
592 This function must only be called in states &lt; <a href="../gstreamer-1.0/GstElement.html#GST-STATE-PAUSED:CAPS"><code class="literal">GST_STATE_PAUSED</code></a>.
600 This function must only be called in states &lt; <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-STATE-PAUSED:CAPS"><code class="literal">GST_STATE_PAUSED</code></a>.
593601 </p>
594602 <div class="variablelist"><table border="0">
595603 <col align="left" valign="top">
610618 <a name="gst-base-src-query-latency"></a><h3>gst_base_src_query_latency ()</h3>
611619 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> gst_base_src_query_latency (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>,
612620 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *live</code></em>,
613 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *min_latency</code></em>,
614 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *max_latency</code></em>);</pre>
621 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *min_latency</code></em>,
622 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *max_latency</code></em>);</pre>
615623 <p>
616624 Query the source for the latency parameters. <em class="parameter"><code>live</code></em> will be TRUE when <em class="parameter"><code>src</code></em> is
617625 configured as a live source. <em class="parameter"><code>min_latency</code></em> will be set to the difference
796804 <td>Stop value for the new segment</td>
797805 </tr>
798806 <tr>
799 <td><p><span class="term"><em class="parameter"><code>position</code></em> :</span></p></td>
800 <td>The position value for the new segent</td>
807 <td><p><span class="term"><em class="parameter"><code>time</code></em> :</span></p></td>
808 <td>The new time value for the start of the new segent</td>
801809 </tr>
802810 <tr>
803811 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
811819 <div class="refsect2">
812820 <a name="gst-base-src-set-caps"></a><h3>gst_base_src_set_caps ()</h3>
813821 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> gst_base_src_set_caps (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>,
814 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);</pre>
822 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);</pre>
815823 <p>
816824 Set new caps on the basesrc source pad.
817825 </p>
825833 </tr>
826834 <tr>
827835 <td><p><span class="term"><em class="parameter"><code>caps</code></em> :</span></p></td>
828 <td>a <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>
836 <td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>
829837 </td>
830838 </tr>
831839 <tr>
840848 <div class="refsect2">
841849 <a name="gst-base-src-get-allocator"></a><h3>gst_base_src_get_allocator ()</h3>
842850 <pre class="programlisting"><span class="returnvalue">void</span> gst_base_src_get_allocator (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>,
843 <em class="parameter"><code><a href="../gstreamer-1.0/GstAllocator.html"><span class="type">GstAllocator</span></a> **allocator</code></em>,
844 <em class="parameter"><code><a href="../gstreamer-1.0/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *params</code></em>);</pre>
851 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="type">GstAllocator</span></a> **allocator</code></em>,
852 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *params</code></em>);</pre>
845853 <p>
846854 Lets <a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> sub-classes to know the memory <em class="parameter"><code>allocator</code></em>
847855 used by the base class and its <em class="parameter"><code>params</code></em>.
859867 </tr>
860868 <tr>
861869 <td><p><span class="term"><em class="parameter"><code>allocator</code></em> :</span></p></td>
862 <td>the <a href="../gstreamer-1.0/GstAllocator.html"><span class="type">GstAllocator</span></a>
870 <td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="type">GstAllocator</span></a>
863871 used. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
864872 </td>
865873 </tr>
875883 <hr>
876884 <div class="refsect2">
877885 <a name="gst-base-src-get-buffer-pool"></a><h3>gst_base_src_get_buffer_pool ()</h3>
878 <pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstBufferPool.html#GstBufferPool"><span class="returnvalue">GstBufferPool</span></a> * gst_base_src_get_buffer_pool (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>);</pre>
886 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferPool.html#GstBufferPool"><span class="returnvalue">GstBufferPool</span></a> * gst_base_src_get_buffer_pool (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>);</pre>
879887 <div class="variablelist"><table border="0">
880888 <col align="left" valign="top">
881889 <tbody>
886894 </tr>
887895 <tr>
888896 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
889 <td>the instance of the <a href="../gstreamer-1.0/gstreamer-GstBufferPool.html#GstBufferPool"><span class="type">GstBufferPool</span></a> used
897 <td>the instance of the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferPool.html#GstBufferPool"><span class="type">GstBufferPool</span></a> used
890898 by the src; free it after use it. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
891899 </td>
892900 </tr>
899907 <pre class="programlisting">#define GST_BASE_SRC_PAD(obj) (GST_BASE_SRC_CAST (obj)-&gt;srcpad)
900908 </pre>
901909 <p>
902 Gives the pointer to the <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> object of the element.
910 Gives the pointer to the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> object of the element.
903911 </p>
904912 <div class="variablelist"><table border="0">
905913 <col align="left" valign="top">
4848 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="GstBaseTransform.html#gst-base-transform-is-passthrough" title="gst_base_transform_is_passthrough ()">gst_base_transform_is_passthrough</a> (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>);
4949 <span class="returnvalue">void</span> <a class="link" href="GstBaseTransform.html#gst-base-transform-set-passthrough" title="gst_base_transform_set_passthrough ()">gst_base_transform_set_passthrough</a> (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>,
5050 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> passthrough</code></em>);
51 <span class="returnvalue">void</span> <a class="link" href="GstBaseTransform.html#gst-base-transform-set-prefer-passthrough" title="gst_base_transform_set_prefer_passthrough ()">gst_base_transform_set_prefer_passthrough</a>
52 (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>,
53 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> prefer_passthrough</code></em>);
5154 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="GstBaseTransform.html#gst-base-transform-is-in-place" title="gst_base_transform_is_in_place ()">gst_base_transform_is_in_place</a> (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>);
5255 <span class="returnvalue">void</span> <a class="link" href="GstBaseTransform.html#gst-base-transform-set-in-place" title="gst_base_transform_set_in_place ()">gst_base_transform_set_in_place</a> (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>,
5356 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> in_place</code></em>);
5659 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);
5760 <span class="returnvalue">void</span> <a class="link" href="GstBaseTransform.html#gst-base-transform-update-qos" title="gst_base_transform_update_qos ()">gst_base_transform_update_qos</a> (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>,
5861 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> proportion</code></em>,
59 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> diff</code></em>,
60 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);
62 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> diff</code></em>,
63 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);
6164 <span class="returnvalue">void</span> <a class="link" href="GstBaseTransform.html#gst-base-transform-set-gap-aware" title="gst_base_transform_set_gap_aware ()">gst_base_transform_set_gap_aware</a> (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>,
6265 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> gap_aware</code></em>);
6366 <span class="returnvalue">void</span> <a class="link" href="GstBaseTransform.html#gst-base-transform-get-allocator" title="gst_base_transform_get_allocator ()">gst_base_transform_get_allocator</a> (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>,
64 <em class="parameter"><code><a href="../gstreamer-1.0/GstAllocator.html"><span class="type">GstAllocator</span></a> **allocator</code></em>,
65 <em class="parameter"><code><a href="../gstreamer-1.0/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *params</code></em>);
66 <a href="../gstreamer-1.0/gstreamer-GstBufferPool.html#GstBufferPool"><span class="returnvalue">GstBufferPool</span></a> * <a class="link" href="GstBaseTransform.html#gst-base-transform-get-buffer-pool" title="gst_base_transform_get_buffer_pool ()">gst_base_transform_get_buffer_pool</a> (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>);
67 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="type">GstAllocator</span></a> **allocator</code></em>,
68 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *params</code></em>);
69 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferPool.html#GstBufferPool"><span class="returnvalue">GstBufferPool</span></a> * <a class="link" href="GstBaseTransform.html#gst-base-transform-get-buffer-pool" title="gst_base_transform_get_buffer_pool ()">gst_base_transform_get_buffer_pool</a> (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>);
6770 #define <a class="link" href="GstBaseTransform.html#GST-BASE-TRANSFORM-SINK-NAME:CAPS" title="GST_BASE_TRANSFORM_SINK_NAME">GST_BASE_TRANSFORM_SINK_NAME</a>
6871 #define <a class="link" href="GstBaseTransform.html#GST-BASE-TRANSFORM-SRC-NAME:CAPS" title="GST_BASE_TRANSFORM_SRC_NAME">GST_BASE_TRANSFORM_SRC_NAME</a>
6972 #define <a class="link" href="GstBaseTransform.html#GST-BASE-TRANSFORM-SINK-PAD:CAPS" title="GST_BASE_TRANSFORM_SINK_PAD()">GST_BASE_TRANSFORM_SINK_PAD</a> (obj)
7679 <pre class="synopsis">
7780 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
7881 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
79 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
80 +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
82 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
83 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
8184 +----GstBaseTransform
8285 </pre>
8386 </div>
114117 <p>
115118 </p>
116119 <div class="refsect2">
117 <a name="idp5388448"></a><h3>Use Cases</h3>
120 <a name="idp35617104"></a><h3>Use Cases</h3>
118121 <p>
119122 </p>
120123 <div class="orderedlist"><ol class="orderedlist" type="1">
254257 </p>
255258 <hr>
256259 <div class="refsect2">
257 <a name="idp6912544"></a><h3>Sub-class settable flags on GstBaseTransform</h3>
260 <a name="idp38847872"></a><h3>Sub-class settable flags on GstBaseTransform</h3>
258261 <p>
259262 </p>
260263 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
391394 <col align="left" valign="top">
392395 <tbody>
393396 <tr>
394 <td><p><span class="term"><a href="../gstreamer-1.0/GstElement.html#GstElementClass"><span class="type">GstElementClass</span></a> <em class="structfield"><code><a name="GstBaseTransformClass.parent-class"></a>parent_class</code></em>;</span></p></td>
397 <td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GstElementClass"><span class="type">GstElementClass</span></a> <em class="structfield"><code><a name="GstBaseTransformClass.parent-class"></a>parent_class</code></em>;</span></p></td>
395398 <td>Element parent class</td>
396399 </tr>
397400 <tr>
606609 </div>
607610 <hr>
608611 <div class="refsect2">
612 <a name="gst-base-transform-set-prefer-passthrough"></a><h3>gst_base_transform_set_prefer_passthrough ()</h3>
613 <pre class="programlisting"><span class="returnvalue">void</span> gst_base_transform_set_prefer_passthrough
614 (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>,
615 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> prefer_passthrough</code></em>);</pre>
616 <p>
617 If <em class="parameter"><code>prefer_passthrough</code></em> is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> (the default), <em class="parameter"><code>trans</code></em> will check and
618 prefer passthrough caps from the list of caps returned by the
619 transform_caps vmethod.
620 </p>
621 <p>
622 If set to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>, the element must order the caps returned from the
623 transform_caps function in such a way that the prefered format is
624 first in the list. This can be interesting for transforms that can do
625 passthrough transforms but prefer to do something else, like a
626 capsfilter.
627 </p>
628 <p>
629 MT safe.
630 </p>
631 <div class="variablelist"><table border="0">
632 <col align="left" valign="top">
633 <tbody>
634 <tr>
635 <td><p><span class="term"><em class="parameter"><code>trans</code></em> :</span></p></td>
636 <td>a <a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a>
637 </td>
638 </tr>
639 <tr>
640 <td><p><span class="term"><em class="parameter"><code>prefer_passthrough</code></em> :</span></p></td>
641 <td>New state</td>
642 </tr>
643 </tbody>
644 </table></div>
645 <p class="since">Since 1.0.1</p>
646 </div>
647 <hr>
648 <div class="refsect2">
609649 <a name="gst-base-transform-is-in-place"></a><h3>gst_base_transform_is_in_place ()</h3>
610650 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> gst_base_transform_is_in_place (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>);</pre>
611651 <p>
713753 <a name="gst-base-transform-update-qos"></a><h3>gst_base_transform_update_qos ()</h3>
714754 <pre class="programlisting"><span class="returnvalue">void</span> gst_base_transform_update_qos (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>,
715755 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> proportion</code></em>,
716 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> diff</code></em>,
717 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);</pre>
756 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> diff</code></em>,
757 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);</pre>
718758 <p>
719759 Set the QoS parameters in the transform. This function is called internally
720760 when a QOS event is received but subclasses can provide custom information
754794 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> gap_aware</code></em>);</pre>
755795 <p>
756796 If <em class="parameter"><code>gap_aware</code></em> is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> (the default), output buffers will have the
757 <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GST-BUFFER-FLAG-GAP:CAPS"><code class="literal">GST_BUFFER_FLAG_GAP</code></a> flag unset.
797 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GST-BUFFER-FLAG-GAP:CAPS"><code class="literal">GST_BUFFER_FLAG_GAP</code></a> flag unset.
758798 </p>
759799 <p>
760800 If set to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, the element must handle output buffers with this flag set
783823 <div class="refsect2">
784824 <a name="gst-base-transform-get-allocator"></a><h3>gst_base_transform_get_allocator ()</h3>
785825 <pre class="programlisting"><span class="returnvalue">void</span> gst_base_transform_get_allocator (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>,
786 <em class="parameter"><code><a href="../gstreamer-1.0/GstAllocator.html"><span class="type">GstAllocator</span></a> **allocator</code></em>,
787 <em class="parameter"><code><a href="../gstreamer-1.0/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *params</code></em>);</pre>
826 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="type">GstAllocator</span></a> **allocator</code></em>,
827 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *params</code></em>);</pre>
788828 <p>
789829 Lets <a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> sub-classes to know the memory <em class="parameter"><code>allocator</code></em>
790830 used by the base class and its <em class="parameter"><code>params</code></em>.
802842 </tr>
803843 <tr>
804844 <td><p><span class="term"><em class="parameter"><code>allocator</code></em> :</span></p></td>
805 <td>the <a href="../gstreamer-1.0/GstAllocator.html"><span class="type">GstAllocator</span></a>
845 <td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="type">GstAllocator</span></a>
806846 used. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
807847 </td>
808848 </tr>
818858 <hr>
819859 <div class="refsect2">
820860 <a name="gst-base-transform-get-buffer-pool"></a><h3>gst_base_transform_get_buffer_pool ()</h3>
821 <pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstBufferPool.html#GstBufferPool"><span class="returnvalue">GstBufferPool</span></a> * gst_base_transform_get_buffer_pool (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>);</pre>
861 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferPool.html#GstBufferPool"><span class="returnvalue">GstBufferPool</span></a> * gst_base_transform_get_buffer_pool (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>);</pre>
822862 <div class="variablelist"><table border="0">
823863 <col align="left" valign="top">
824864 <tbody>
829869 </tr>
830870 <tr>
831871 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
832 <td>the instance of the <a href="../gstreamer-1.0/gstreamer-GstBufferPool.html#GstBufferPool"><span class="type">GstBufferPool</span></a> used
872 <td>the instance of the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferPool.html#GstBufferPool"><span class="type">GstBufferPool</span></a> used
833873 by <em class="parameter"><code>trans</code></em>; free it after use it. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
834874 </td>
835875 </tr>
860900 <pre class="programlisting">#define GST_BASE_TRANSFORM_SINK_PAD(obj) (GST_BASE_TRANSFORM_CAST (obj)-&gt;sinkpad)
861901 </pre>
862902 <p>
863 Gives the pointer to the sink <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> object of the element.
903 Gives the pointer to the sink <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> object of the element.
864904 </p>
865905 <div class="variablelist"><table border="0">
866906 <col align="left" valign="top">
876916 <pre class="programlisting">#define GST_BASE_TRANSFORM_SRC_PAD(obj) (GST_BASE_TRANSFORM_CAST (obj)-&gt;srcpad)
877917 </pre>
878918 <p>
879 Gives the pointer to the source <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> object of the element.
919 Gives the pointer to the source <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> object of the element.
880920 </p>
881921 <div class="variablelist"><table border="0">
882922 <col align="left" valign="top">
892932 <pre class="programlisting">#define GST_BASE_TRANSFORM_FLOW_DROPPED GST_FLOW_CUSTOM_SUCCESS
893933 </pre>
894934 <p>
895 A <a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> that can be returned from transform and transform_ip to
935 A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> that can be returned from transform and transform_ip to
896936 indicate that no output buffer was generated.
897937 </p>
898938 </div>
4444 struct <a class="link" href="GstCollectPads.html#GstCollectPads-struct" title="struct GstCollectPads">GstCollectPads</a>;
4545 struct <a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData">GstCollectData</a>;
4646 <span class="returnvalue">void</span> (<a class="link" href="GstCollectPads.html#GstCollectDataDestroyNotify" title="GstCollectDataDestroyNotify ()">*GstCollectDataDestroyNotify</a>) (<em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>);
47 <a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> (<a class="link" href="GstCollectPads.html#GstCollectPadsBufferFunction" title="GstCollectPadsBufferFunction ()">*GstCollectPadsBufferFunction</a>) (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
47 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> (<a class="link" href="GstCollectPads.html#GstCollectPadsBufferFunction" title="GstCollectPadsBufferFunction ()">*GstCollectPadsBufferFunction</a>) (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
4848 <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>,
49 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
49 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
5050 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
5151 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> (<a class="link" href="GstCollectPads.html#GstCollectPadsCompareFunction" title="GstCollectPadsCompareFunction ()">*GstCollectPadsCompareFunction</a>) (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
5252 <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data1</code></em>,
53 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp1</code></em>,
53 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp1</code></em>,
5454 <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data2</code></em>,
55 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp2</code></em>,
55 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp2</code></em>,
5656 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
5757 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> (<a class="link" href="GstCollectPads.html#GstCollectPadsEventFunction" title="GstCollectPadsEventFunction ()">*GstCollectPadsEventFunction</a>) (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
5858 <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *pad</code></em>,
59 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> *event</code></em>,
59 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> *event</code></em>,
6060 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
61 <a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> (<a class="link" href="GstCollectPads.html#GstCollectPadsClipFunction" title="GstCollectPadsClipFunction ()">*GstCollectPadsClipFunction</a>) (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
61 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> (<a class="link" href="GstCollectPads.html#GstCollectPadsClipFunction" title="GstCollectPadsClipFunction ()">*GstCollectPadsClipFunction</a>) (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
6262 <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>,
63 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *inbuffer</code></em>,
64 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **outbuffer</code></em>,
63 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *inbuffer</code></em>,
64 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **outbuffer</code></em>,
6565 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
66 <a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> (<a class="link" href="GstCollectPads.html#GstCollectPadsFunction" title="GstCollectPadsFunction ()">*GstCollectPadsFunction</a>) (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
66 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> (<a class="link" href="GstCollectPads.html#GstCollectPadsFunction" title="GstCollectPadsFunction ()">*GstCollectPadsFunction</a>) (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
6767 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
6868 enum <a class="link" href="GstCollectPads.html#GstCollectPadsStateFlags" title="enum GstCollectPadsStateFlags">GstCollectPadsStateFlags</a>;
6969 #define <a class="link" href="GstCollectPads.html#GST-COLLECT-PADS-STATE:CAPS" title="GST_COLLECT_PADS_STATE()">GST_COLLECT_PADS_STATE</a> (data)
7878 #define <a class="link" href="GstCollectPads.html#GST-COLLECT-PADS-STREAM-UNLOCK:CAPS" title="GST_COLLECT_PADS_STREAM_UNLOCK()">GST_COLLECT_PADS_STREAM_UNLOCK</a> (pads)
7979 <a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="returnvalue">GstCollectPads</span></a> * <a class="link" href="GstCollectPads.html#gst-collect-pads-new" title="gst_collect_pads_new ()">gst_collect_pads_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
8080 <a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="returnvalue">GstCollectData</span></a> * <a class="link" href="GstCollectPads.html#gst-collect-pads-add-pad" title="gst_collect_pads_add_pad ()">gst_collect_pads_add_pad</a> (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
81 <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>,
81 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>,
8282 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>,
8383 <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectDataDestroyNotify" title="GstCollectDataDestroyNotify ()"><span class="type">GstCollectDataDestroyNotify</span></a> destroy_notify</code></em>,
8484 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> lock</code></em>);
8585 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="GstCollectPads.html#gst-collect-pads-remove-pad" title="gst_collect_pads_remove_pad ()">gst_collect_pads_remove_pad</a> (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
86 <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);
86 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);
8787 <span class="returnvalue">void</span> <a class="link" href="GstCollectPads.html#gst-collect-pads-start" title="gst_collect_pads_start ()">gst_collect_pads_start</a> (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>);
8888 <span class="returnvalue">void</span> <a class="link" href="GstCollectPads.html#gst-collect-pads-stop" title="gst_collect_pads_stop ()">gst_collect_pads_stop</a> (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>);
8989 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> <a class="link" href="GstCollectPads.html#gst-collect-pads-available" title="gst_collect_pads_available ()">gst_collect_pads_available</a> (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>);
9090 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> <a class="link" href="GstCollectPads.html#gst-collect-pads-flush" title="gst_collect_pads_flush ()">gst_collect_pads_flush</a> (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
9191 <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>,
9292 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);
93 <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * <a class="link" href="GstCollectPads.html#gst-collect-pads-peek" title="gst_collect_pads_peek ()">gst_collect_pads_peek</a> (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
93 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * <a class="link" href="GstCollectPads.html#gst-collect-pads-peek" title="gst_collect_pads_peek ()">gst_collect_pads_peek</a> (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
9494 <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>);
95 <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * <a class="link" href="GstCollectPads.html#gst-collect-pads-pop" title="gst_collect_pads_pop ()">gst_collect_pads_pop</a> (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
95 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * <a class="link" href="GstCollectPads.html#gst-collect-pads-pop" title="gst_collect_pads_pop ()">gst_collect_pads_pop</a> (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
9696 <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>);
97 <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * <a class="link" href="GstCollectPads.html#gst-collect-pads-read-buffer" title="gst_collect_pads_read_buffer ()">gst_collect_pads_read_buffer</a> (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
97 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * <a class="link" href="GstCollectPads.html#gst-collect-pads-read-buffer" title="gst_collect_pads_read_buffer ()">gst_collect_pads_read_buffer</a> (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
9898 <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>,
9999 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);
100 <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * <a class="link" href="GstCollectPads.html#gst-collect-pads-take-buffer" title="gst_collect_pads_take_buffer ()">gst_collect_pads_take_buffer</a> (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
100 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * <a class="link" href="GstCollectPads.html#gst-collect-pads-take-buffer" title="gst_collect_pads_take_buffer ()">gst_collect_pads_take_buffer</a> (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
101101 <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>,
102102 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);
103103 <span class="returnvalue">void</span> <a class="link" href="GstCollectPads.html#gst-collect-pads-set-buffer-function" title="gst_collect_pads_set_buffer_function ()">gst_collect_pads_set_buffer_function</a>
129129 <pre class="synopsis">
130130 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
131131 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
132 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
132 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
133133 +----GstCollectPads
134134 </pre>
135135 </div>
167167 </p></li>
168168 <li class="listitem"><p>
169169 Data can also be dequeued in byte units using the <a class="link" href="GstCollectPads.html#gst-collect-pads-available" title="gst_collect_pads_available ()"><code class="function">gst_collect_pads_available()</code></a>,
170 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstCollectPads.html#gst-collect-pads-read"><code class="function">gst_collect_pads_read()</code></a> and <a class="link" href="GstCollectPads.html#gst-collect-pads-flush" title="gst_collect_pads_flush ()"><code class="function">gst_collect_pads_flush()</code></a> calls.
170 <code class="function">gst_collect_pads_read()</code> and <a class="link" href="GstCollectPads.html#gst-collect-pads-flush" title="gst_collect_pads_flush ()"><code class="function">gst_collect_pads_flush()</code></a> calls.
171171 </p></li>
172172 <li class="listitem"><p>
173173 Elements should call <a class="link" href="GstCollectPads.html#gst-collect-pads-start" title="gst_collect_pads_start ()"><code class="function">gst_collect_pads_start()</code></a> and <a class="link" href="GstCollectPads.html#gst-collect-pads-stop" title="gst_collect_pads_stop ()"><code class="function">gst_collect_pads_stop()</code></a> in
177177 no pad is blocked and the element can finish streaming.
178178 </p></li>
179179 <li class="listitem"><p>
180 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstCollectPads.html#gst-collect-pads-collect"><code class="function">gst_collect_pads_collect()</code></a> and <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstCollectPads.html#gst-collect-pads-collect-range"><code class="function">gst_collect_pads_collect_range()</code></a> can be used by
181 elements that start a <a href="../gstreamer-1.0/GstTask.html"><span class="type">GstTask</span></a> to drive the collect_pads. This feature is however
180 <code class="function">gst_collect_pads_collect()</code> and <code class="function">gst_collect_pads_collect_range()</code> can be used by
181 elements that start a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTask.html"><span class="type">GstTask</span></a> to drive the collect_pads. This feature is however
182182 not yet implemented.
183183 </p></li>
184184 <li class="listitem"><p>
238238 </td>
239239 </tr>
240240 <tr>
241 <td><p><span class="term"><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *<em class="structfield"><code><a name="GstCollectData.pad"></a>pad</code></em>;</span></p></td>
241 <td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *<em class="structfield"><code><a name="GstCollectData.pad"></a>pad</code></em>;</span></p></td>
242242 <td>
243 <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> managed by this data</td>
244 </tr>
245 <tr>
246 <td><p><span class="term"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *<em class="structfield"><code><a name="GstCollectData.buffer"></a>buffer</code></em>;</span></p></td>
243 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> managed by this data</td>
244 </tr>
245 <tr>
246 <td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *<em class="structfield"><code><a name="GstCollectData.buffer"></a>buffer</code></em>;</span></p></td>
247247 <td>currently queued buffer.</td>
248248 </tr>
249249 <tr>
251251 <td>position in the buffer</td>
252252 </tr>
253253 <tr>
254 <td><p><span class="term"><a href="../gstreamer-1.0/gstreamer-GstSegment.html#GstSegment"><span class="type">GstSegment</span></a> <em class="structfield"><code><a name="GstCollectData.segment"></a>segment</code></em>;</span></p></td>
254 <td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstSegment.html#GstSegment"><span class="type">GstSegment</span></a> <em class="structfield"><code><a name="GstCollectData.segment"></a>segment</code></em>;</span></p></td>
255255 <td>last segment received.</td>
256256 </tr>
257257 </tbody>
277277 <hr>
278278 <div class="refsect2">
279279 <a name="GstCollectPadsBufferFunction"></a><h3>GstCollectPadsBufferFunction ()</h3>
280 <pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> (*GstCollectPadsBufferFunction) (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
280 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> (*GstCollectPadsBufferFunction) (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
281281 <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>,
282 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
282 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
283283 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
284284 <p>
285285 A function that will be called when a (considered oldest) buffer can be muxed.
299299 </tr>
300300 <tr>
301301 <td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
302 <td>the <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>
302 <td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>
303303 </td>
304304 </tr>
305305 <tr>
310310 <tr>
311311 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
312312 <td>
313 <a href="../gstreamer-1.0/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> for success</td>
313 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> for success</td>
314314 </tr>
315315 </tbody>
316316 </table></div>
320320 <a name="GstCollectPadsCompareFunction"></a><h3>GstCollectPadsCompareFunction ()</h3>
321321 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> (*GstCollectPadsCompareFunction) (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
322322 <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data1</code></em>,
323 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp1</code></em>,
323 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp1</code></em>,
324324 <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data2</code></em>,
325 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp2</code></em>,
325 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp2</code></em>,
326326 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
327327 <p>
328328 A function for comparing two timestamps of buffers or newsegments collected on one pad.
371371 <a name="GstCollectPadsEventFunction"></a><h3>GstCollectPadsEventFunction ()</h3>
372372 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> (*GstCollectPadsEventFunction) (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
373373 <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *pad</code></em>,
374 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> *event</code></em>,
374 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> *event</code></em>,
375375 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
376376 <p>
377377 A function that will be called while processing an event. It takes
388388 </tr>
389389 <tr>
390390 <td><p><span class="term"><em class="parameter"><code>pad</code></em> :</span></p></td>
391 <td>the <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> that received an event</td>
391 <td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> that received an event</td>
392392 </tr>
393393 <tr>
394394 <td><p><span class="term"><em class="parameter"><code>event</code></em> :</span></p></td>
395 <td>the <a href="../gstreamer-1.0/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> received</td>
395 <td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> received</td>
396396 </tr>
397397 <tr>
398398 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
410410 <hr>
411411 <div class="refsect2">
412412 <a name="GstCollectPadsClipFunction"></a><h3>GstCollectPadsClipFunction ()</h3>
413 <pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> (*GstCollectPadsClipFunction) (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
413 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> (*GstCollectPadsClipFunction) (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
414414 <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>,
415 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *inbuffer</code></em>,
416 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **outbuffer</code></em>,
415 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *inbuffer</code></em>,
416 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **outbuffer</code></em>,
417417 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
418418 <p>
419419 A function that will be called when <em class="parameter"><code>inbuffer</code></em> is received on the pad managed
442442 </tr>
443443 <tr>
444444 <td><p><span class="term"><em class="parameter"><code>inbuffer</code></em> :</span></p></td>
445 <td>the input <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>
445 <td>the input <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>
446446 </td>
447447 </tr>
448448 <tr>
449449 <td><p><span class="term"><em class="parameter"><code>outbuffer</code></em> :</span></p></td>
450 <td>the output <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>
450 <td>the output <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>
451451 </td>
452452 </tr>
453453 <tr>
456456 </tr>
457457 <tr>
458458 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
459 <td>a <a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> that corresponds to the result of clipping.</td>
459 <td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> that corresponds to the result of clipping.</td>
460460 </tr>
461461 </tbody>
462462 </table></div>
464464 <hr>
465465 <div class="refsect2">
466466 <a name="GstCollectPadsFunction"></a><h3>GstCollectPadsFunction ()</h3>
467 <pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> (*GstCollectPadsFunction) (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
467 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> (*GstCollectPadsFunction) (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
468468 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
469469 <p>
470470 A function that will be called when all pads have received data.
484484 <tr>
485485 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
486486 <td>
487 <a href="../gstreamer-1.0/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> for success</td>
487 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> for success</td>
488488 </tr>
489489 </tbody>
490490 </table></div>
694694 <div class="refsect2">
695695 <a name="gst-collect-pads-add-pad"></a><h3>gst_collect_pads_add_pad ()</h3>
696696 <pre class="programlisting"><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="returnvalue">GstCollectData</span></a> * gst_collect_pads_add_pad (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
697 <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>,
697 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>,
698698 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>,
699699 <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectDataDestroyNotify" title="GstCollectDataDestroyNotify ()"><span class="type">GstCollectDataDestroyNotify</span></a> destroy_notify</code></em>,
700700 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> lock</code></em>);</pre>
767767 <div class="refsect2">
768768 <a name="gst-collect-pads-remove-pad"></a><h3>gst_collect_pads_remove_pad ()</h3>
769769 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> gst_collect_pads_remove_pad (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
770 <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);</pre>
770 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);</pre>
771771 <p>
772772 Remove a pad from the collection of collect pads. This function will also
773773 free the <a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> and all the resources that were allocated with
909909 <hr>
910910 <div class="refsect2">
911911 <a name="gst-collect-pads-peek"></a><h3>gst_collect_pads_peek ()</h3>
912 <pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * gst_collect_pads_peek (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
912 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * gst_collect_pads_peek (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
913913 <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>);</pre>
914914 <p>
915915 Peek at the buffer currently queued in <em class="parameter"><code>data</code></em>. This function
941941 <hr>
942942 <div class="refsect2">
943943 <a name="gst-collect-pads-pop"></a><h3>gst_collect_pads_pop ()</h3>
944 <pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * gst_collect_pads_pop (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
944 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * gst_collect_pads_pop (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
945945 <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>);</pre>
946946 <p>
947947 Pop the buffer currently queued in <em class="parameter"><code>data</code></em>. This function
974974 <hr>
975975 <div class="refsect2">
976976 <a name="gst-collect-pads-read-buffer"></a><h3>gst_collect_pads_read_buffer ()</h3>
977 <pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * gst_collect_pads_read_buffer (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
977 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * gst_collect_pads_read_buffer (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
978978 <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>,
979979 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);</pre>
980980 <p>
10151015 <hr>
10161016 <div class="refsect2">
10171017 <a name="gst-collect-pads-take-buffer"></a><h3>gst_collect_pads_take_buffer ()</h3>
1018 <pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * gst_collect_pads_take_buffer (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
1018 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * gst_collect_pads_take_buffer (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
10191019 <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>,
10201020 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);</pre>
10211021 <p>
4545
4646 struct <a class="link" href="GstInterpolationControlSource.html#GstInterpolationControlSource-struct" title="struct GstInterpolationControlSource">GstInterpolationControlSource</a>;
4747 enum <a class="link" href="GstInterpolationControlSource.html#GstInterpolationMode" title="enum GstInterpolationMode">GstInterpolationMode</a>;
48 <a href="../gstreamer-1.0/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> * <a class="link" href="GstInterpolationControlSource.html#gst-interpolation-control-source-new" title="gst_interpolation_control_source_new ()">gst_interpolation_control_source_new</a>
48 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> * <a class="link" href="GstInterpolationControlSource.html#gst-interpolation-control-source-new" title="gst_interpolation_control_source_new ()">gst_interpolation_control_source_new</a>
4949 (<em class="parameter"><code><span class="type">void</span></code></em>);
5050 </pre>
5151 </div>
5454 <pre class="synopsis">
5555 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
5656 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
57 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
58 +----<a href="../gstreamer-1.0/GstControlSource.html">GstControlSource</a>
57 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
58 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html">GstControlSource</a>
5959 +----<a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource">GstTimedValueControlSource</a>
6060 +----GstInterpolationControlSource
6161 </pre>
6969 <div class="refsect1">
7070 <a name="GstInterpolationControlSource.description"></a><h2>Description</h2>
7171 <p>
72 <a class="link" href="GstInterpolationControlSource.html" title="GstInterpolationControlSource"><span class="type">GstInterpolationControlSource</span></a> is a <a href="../gstreamer-1.0/GstControlSource.html"><span class="type">GstControlSource</span></a>, that interpolates values between user-given
72 <a class="link" href="GstInterpolationControlSource.html" title="GstInterpolationControlSource"><span class="type">GstInterpolationControlSource</span></a> is a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="type">GstControlSource</span></a>, that interpolates values between user-given
7373 control points. It supports several interpolation modes and property types.
7474 </p>
7575 <p>
8787 <a name="GstInterpolationControlSource-struct"></a><h3>struct GstInterpolationControlSource</h3>
8888 <pre class="programlisting">struct GstInterpolationControlSource;</pre>
8989 <p>
90 The instance structure of <a href="../gstreamer-1.0/GstControlSource.html"><span class="type">GstControlSource</span></a>.
90 The instance structure of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="type">GstControlSource</span></a>.
9191 </p>
9292 </div>
9393 <hr>
126126 <hr>
127127 <div class="refsect2">
128128 <a name="gst-interpolation-control-source-new"></a><h3>gst_interpolation_control_source_new ()</h3>
129 <pre class="programlisting"><a href="../gstreamer-1.0/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> * gst_interpolation_control_source_new
129 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> * gst_interpolation_control_source_new
130130 (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
131131 <p>
132132 This returns a new, unbound <a class="link" href="GstInterpolationControlSource.html" title="GstInterpolationControlSource"><span class="type">GstInterpolationControlSource</span></a>.
4545
4646 struct <a class="link" href="GstLFOControlSource.html#GstLFOControlSource-struct" title="struct GstLFOControlSource">GstLFOControlSource</a>;
4747 enum <a class="link" href="GstLFOControlSource.html#GstLFOWaveform" title="enum GstLFOWaveform">GstLFOWaveform</a>;
48 <a href="../gstreamer-1.0/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> * <a class="link" href="GstLFOControlSource.html#gst-lfo-control-source-new" title="gst_lfo_control_source_new ()">gst_lfo_control_source_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
48 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> * <a class="link" href="GstLFOControlSource.html#gst-lfo-control-source-new" title="gst_lfo_control_source_new ()">gst_lfo_control_source_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
4949 </pre>
5050 </div>
5151 <div class="refsect1">
5353 <pre class="synopsis">
5454 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
5555 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
56 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
57 +----<a href="../gstreamer-1.0/GstControlSource.html">GstControlSource</a>
56 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
57 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html">GstControlSource</a>
5858 +----GstLFOControlSource
5959 </pre>
6060 </div>
7171 <div class="refsect1">
7272 <a name="GstLFOControlSource.description"></a><h2>Description</h2>
7373 <p>
74 <a class="link" href="GstLFOControlSource.html" title="GstLFOControlSource"><span class="type">GstLFOControlSource</span></a> is a <a href="../gstreamer-1.0/GstControlSource.html"><span class="type">GstControlSource</span></a>, that provides several periodic waveforms
74 <a class="link" href="GstLFOControlSource.html" title="GstLFOControlSource"><span class="type">GstLFOControlSource</span></a> is a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="type">GstControlSource</span></a>, that provides several periodic waveforms
7575 as control values. It supports all fundamental, numeric GValue types as property.
7676 </p>
7777 <p>
8989 <a name="GstLFOControlSource-struct"></a><h3>struct GstLFOControlSource</h3>
9090 <pre class="programlisting">struct GstLFOControlSource;</pre>
9191 <p>
92 The instance structure of <a href="../gstreamer-1.0/GstControlSource.html"><span class="type">GstControlSource</span></a>.
92 The instance structure of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="type">GstControlSource</span></a>.
9393 </p>
9494 </div>
9595 <hr>
140140 <hr>
141141 <div class="refsect2">
142142 <a name="gst-lfo-control-source-new"></a><h3>gst_lfo_control_source_new ()</h3>
143 <pre class="programlisting"><a href="../gstreamer-1.0/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> * gst_lfo_control_source_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
143 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> * gst_lfo_control_source_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
144144 <p>
145145 This returns a new, unbound <a class="link" href="GstLFOControlSource.html" title="GstLFOControlSource"><span class="type">GstLFOControlSource</span></a>.
146146 </p>
4545 #include &lt;gst/net/gstnet.h&gt;
4646
4747 struct <a class="link" href="GstNetClientClock.html#GstNetClientClock-struct" title="struct GstNetClientClock">GstNetClientClock</a>;
48 <a href="../gstreamer-1.0/GstClock.html"><span class="returnvalue">GstClock</span></a> * <a class="link" href="GstNetClientClock.html#gst-net-client-clock-new" title="gst_net_client_clock_new ()">gst_net_client_clock_new</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
48 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="returnvalue">GstClock</span></a> * <a class="link" href="GstNetClientClock.html#gst-net-client-clock-new" title="gst_net_client_clock_new ()">gst_net_client_clock_new</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
4949 <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *remote_address</code></em>,
5050 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> remote_port</code></em>,
51 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> base_time</code></em>);
51 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> base_time</code></em>);
5252 </pre>
5353 </div>
5454 <div class="refsect1">
5656 <pre class="synopsis">
5757 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
5858 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
59 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
60 +----<a href="../gstreamer-1.0/GstClock.html">GstClock</a>
61 +----<a href="../gstreamer-1.0/GstSystemClock.html">GstSystemClock</a>
59 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
60 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html">GstClock</a>
61 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSystemClock.html">GstSystemClock</a>
6262 +----GstNetClientClock
6363 </pre>
6464 </div>
7272 <div class="refsect1">
7373 <a name="GstNetClientClock.description"></a><h2>Description</h2>
7474 <p>
75 This object implements a custom <a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a> that synchronizes its time
75 This object implements a custom <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> that synchronizes its time
7676 to a remote time provider such as <a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="type">GstNetTimeProvider</span></a>.
7777 </p>
7878 <p>
8585 parameters based on the local and remote observations.
8686 </p>
8787 <p>
88 Various parameters of the clock can be configured with the parent <a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a>
88 Various parameters of the clock can be configured with the parent <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a>
8989 "timeout", "window-size" and "window-threshold" object properties.
9090 </p>
9191 <p>
92 A <a class="link" href="GstNetClientClock.html" title="GstNetClientClock"><span class="type">GstNetClientClock</span></a> is typically set on a <a href="../gstreamer-1.0/GstPipeline.html"><span class="type">GstPipeline</span></a> with
93 <a href="../gstreamer-1.0/GstPipeline.html#gst-pipeline-use-clock"><code class="function">gst_pipeline_use_clock()</code></a>.
92 A <a class="link" href="GstNetClientClock.html" title="GstNetClientClock"><span class="type">GstNetClientClock</span></a> is typically set on a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPipeline.html"><span class="type">GstPipeline</span></a> with
93 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPipeline.html#gst-pipeline-use-clock"><code class="function">gst_pipeline_use_clock()</code></a>.
9494 </p>
9595 <p>
9696 Last reviewed on 2005-11-23 (0.9.5)
108108 <hr>
109109 <div class="refsect2">
110110 <a name="gst-net-client-clock-new"></a><h3>gst_net_client_clock_new ()</h3>
111 <pre class="programlisting"><a href="../gstreamer-1.0/GstClock.html"><span class="returnvalue">GstClock</span></a> * gst_net_client_clock_new (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
111 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="returnvalue">GstClock</span></a> * gst_net_client_clock_new (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
112112 <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *remote_address</code></em>,
113113 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> remote_port</code></em>,
114 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> base_time</code></em>);</pre>
114 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> base_time</code></em>);</pre>
115115 <p>
116116 Create a new <a class="link" href="GstNetClientClock.html" title="GstNetClientClock"><span class="type">GstNetClientClock</span></a> that will report the time
117117 provided by the <a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="type">GstNetTimeProvider</span></a> on <em class="parameter"><code>remote_address</code></em> and
138138 </tr>
139139 <tr>
140140 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
141 <td>a new <a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a> that receives a time from the remote
141 <td>a new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> that receives a time from the remote
142142 clock.</td>
143143 </tr>
144144 </tbody>
164164 </div>
165165 <div class="refsect1">
166166 <a name="GstNetClientClock.see-also"></a><h2>See Also</h2>
167 <a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a>, <a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="type">GstNetTimeProvider</span></a>, <a href="../gstreamer-1.0/GstPipeline.html"><span class="type">GstPipeline</span></a>
167 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a>, <a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="type">GstNetTimeProvider</span></a>, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPipeline.html"><span class="type">GstPipeline</span></a>
168168 </div>
169169 </div>
170170 <div class="footer">
4545 #include &lt;gst/net/gstnet.h&gt;
4646
4747 struct <a class="link" href="GstNetTimeProvider.html#GstNetTimeProvider-struct" title="struct GstNetTimeProvider">GstNetTimeProvider</a>;
48 <a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="returnvalue">GstNetTimeProvider</span></a> * <a class="link" href="GstNetTimeProvider.html#gst-net-time-provider-new" title="gst_net_time_provider_new ()">gst_net_time_provider_new</a> (<em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a> *clock</code></em>,
48 <a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="returnvalue">GstNetTimeProvider</span></a> * <a class="link" href="GstNetTimeProvider.html#gst-net-time-provider-new" title="gst_net_time_provider_new ()">gst_net_time_provider_new</a> (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> *clock</code></em>,
4949 <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *address</code></em>,
5050 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> port</code></em>);
5151 </pre>
5555 <pre class="synopsis">
5656 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
5757 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
58 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
58 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
5959 +----GstNetTimeProvider
6060 </pre>
6161 </div>
6464 <pre class="synopsis">
6565 "<a class="link" href="GstNetTimeProvider.html#GstNetTimeProvider--active" title='The "active" property'>active</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write
6666 "<a class="link" href="GstNetTimeProvider.html#GstNetTimeProvider--address" title='The "address" property'>address</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write
67 "<a class="link" href="GstNetTimeProvider.html#GstNetTimeProvider--clock" title='The "clock" property'>clock</a>" <a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a>* : Read / Write
67 "<a class="link" href="GstNetTimeProvider.html#GstNetTimeProvider--clock" title='The "clock" property'>clock</a>" <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a>* : Read / Write
6868 "<a class="link" href="GstNetTimeProvider.html#GstNetTimeProvider--port" title='The "port" property'>port</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read / Write
6969 </pre>
7070 </div>
7171 <div class="refsect1">
7272 <a name="GstNetTimeProvider.description"></a><h2>Description</h2>
7373 <p>
74 This object exposes the time of a <a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a> on the network.
74 This object exposes the time of a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> on the network.
7575 </p>
7676 <p>
7777 A <a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="type">GstNetTimeProvider</span></a> is created with <a class="link" href="GstNetTimeProvider.html#gst-net-time-provider-new" title="gst_net_time_provider_new ()"><code class="function">gst_net_time_provider_new()</code></a> which
78 takes a <a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a>, an address and a port number as arguments.
78 takes a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a>, an address and a port number as arguments.
7979 </p>
8080 <p>
8181 After creating the object, a client clock such as <a class="link" href="GstNetClientClock.html" title="GstNetClientClock"><span class="type">GstNetClientClock</span></a> can
8282 query the exposed clock over the network for its values.
8383 </p>
8484 <p>
85 The <a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="type">GstNetTimeProvider</span></a> typically wraps the clock used by a <a href="../gstreamer-1.0/GstPipeline.html"><span class="type">GstPipeline</span></a>.
85 The <a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="type">GstNetTimeProvider</span></a> typically wraps the clock used by a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPipeline.html"><span class="type">GstPipeline</span></a>.
8686 </p>
8787 <p>
8888 Last reviewed on 2005-11-23 (0.9.5)
100100 <hr>
101101 <div class="refsect2">
102102 <a name="gst-net-time-provider-new"></a><h3>gst_net_time_provider_new ()</h3>
103 <pre class="programlisting"><a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="returnvalue">GstNetTimeProvider</span></a> * gst_net_time_provider_new (<em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a> *clock</code></em>,
103 <pre class="programlisting"><a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="returnvalue">GstNetTimeProvider</span></a> * gst_net_time_provider_new (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> *clock</code></em>,
104104 <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *address</code></em>,
105105 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> port</code></em>);</pre>
106106 <p>
111111 <tbody>
112112 <tr>
113113 <td><p><span class="term"><em class="parameter"><code>clock</code></em> :</span></p></td>
114 <td>a <a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a> to export over the network</td>
114 <td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> to export over the network</td>
115115 </tr>
116116 <tr>
117117 <td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
148148 <hr>
149149 <div class="refsect2">
150150 <a name="GstNetTimeProvider--clock"></a><h3>The <code class="literal">"clock"</code> property</h3>
151 <pre class="programlisting"> "clock" <a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a>* : Read / Write</pre>
151 <pre class="programlisting"> "clock" <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a>* : Read / Write</pre>
152152 <p>The clock to export over the network.</p>
153153 </div>
154154 <hr>
162162 </div>
163163 <div class="refsect1">
164164 <a name="GstNetTimeProvider.see-also"></a><h2>See Also</h2>
165 <a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a>, <a class="link" href="GstNetClientClock.html" title="GstNetClientClock"><span class="type">GstNetClientClock</span></a>, <a href="../gstreamer-1.0/GstPipeline.html"><span class="type">GstPipeline</span></a>
165 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a>, <a class="link" href="GstNetClientClock.html" title="GstNetClientClock"><span class="type">GstNetClientClock</span></a>, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPipeline.html"><span class="type">GstPipeline</span></a>
166166 </div>
167167 </div>
168168 <div class="footer">
4949 <pre class="synopsis">
5050 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
5151 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
52 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
53 +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
52 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
53 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
5454 +----<a class="link" href="GstBaseSrc.html" title="GstBaseSrc">GstBaseSrc</a>
5555 +----GstPushSrc
5656 </pre>
4444 struct <a class="link" href="GstTimedValueControlSource.html#GstTimedValueControlSource-struct" title="struct GstTimedValueControlSource">GstTimedValueControlSource</a>;
4545 <a href="http://library.gnome.org/devel/glib/unstable/glib-Sequences.html#GSequenceIter"><span class="returnvalue">GSequenceIter</span></a> * <a class="link" href="GstTimedValueControlSource.html#gst-timed-value-control-source-find-control-point-iter" title="gst_timed_value_control_source_find_control_point_iter ()">gst_timed_value_control_source_find_control_point_iter</a>
4646 (<em class="parameter"><code><a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self</code></em>,
47 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);
47 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);
4848 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="GstTimedValueControlSource.html#gst-timed-value-control-source-set" title="gst_timed_value_control_source_set ()">gst_timed_value_control_source_set</a> (<em class="parameter"><code><a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self</code></em>,
49 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>,
49 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>,
5050 <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> value</code></em>);
5151 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="GstTimedValueControlSource.html#gst-timed-value-control-source-set-from-list" title="gst_timed_value_control_source_set_from_list ()">gst_timed_value_control_source_set_from_list</a>
5252 (<em class="parameter"><code><a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self</code></em>,
5555 (<em class="parameter"><code><a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self</code></em>);
5656 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="GstTimedValueControlSource.html#gst-timed-value-control-source-unset" title="gst_timed_value_control_source_unset ()">gst_timed_value_control_source_unset</a>
5757 (<em class="parameter"><code><a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self</code></em>,
58 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);
58 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);
5959 <span class="returnvalue">void</span> <a class="link" href="GstTimedValueControlSource.html#gst-timed-value-control-source-unset-all" title="gst_timed_value_control_source_unset_all ()">gst_timed_value_control_source_unset_all</a>
6060 (<em class="parameter"><code><a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self</code></em>);
6161 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> <a class="link" href="GstTimedValueControlSource.html#gst-timed-value-control-source-get-count" title="gst_timed_value_control_source_get_count ()">gst_timed_value_control_source_get_count</a>
6969 <pre class="synopsis">
7070 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
7171 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
72 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
73 +----<a href="../gstreamer-1.0/GstControlSource.html">GstControlSource</a>
72 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
73 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html">GstControlSource</a>
7474 +----GstTimedValueControlSource
7575 +----<a class="link" href="GstInterpolationControlSource.html" title="GstInterpolationControlSource">GstInterpolationControlSource</a>
7676 +----<a class="link" href="GstTriggerControlSource.html" title="GstTriggerControlSource">GstTriggerControlSource</a>
9595 <a name="GstTimedValueControlSource-struct"></a><h3>struct GstTimedValueControlSource</h3>
9696 <pre class="programlisting">struct GstTimedValueControlSource;</pre>
9797 <p>
98 The instance structure of <a href="../gstreamer-1.0/GstControlSource.html"><span class="type">GstControlSource</span></a>.
98 The instance structure of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="type">GstControlSource</span></a>.
9999 </p>
100100 </div>
101101 <hr>
103103 <a name="gst-timed-value-control-source-find-control-point-iter"></a><h3>gst_timed_value_control_source_find_control_point_iter ()</h3>
104104 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Sequences.html#GSequenceIter"><span class="returnvalue">GSequenceIter</span></a> * gst_timed_value_control_source_find_control_point_iter
105105 (<em class="parameter"><code><a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self</code></em>,
106 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);</pre>
106 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);</pre>
107107 <p>
108108 Find last value before given timestamp in control point list.
109109 If all values in the control point list come after the given
135135 <div class="refsect2">
136136 <a name="gst-timed-value-control-source-set"></a><h3>gst_timed_value_control_source_set ()</h3>
137137 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> gst_timed_value_control_source_set (<em class="parameter"><code><a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self</code></em>,
138 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>,
138 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>,
139139 <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> value</code></em>);</pre>
140140 <p>
141141 Set the value of given controller-handled property at a certain time.
181181 <tr>
182182 <td><p><span class="term"><em class="parameter"><code>timedvalues</code></em> :</span></p></td>
183183 <td>a list
184 with <a href="../gstreamer-1.0/GstControlSource.html#GstTimedValue"><span class="type">GstTimedValue</span></a> items. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstController.TimedValue]</span>
184 with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html#GstTimedValue"><span class="type">GstTimedValue</span></a> items. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstController.TimedValue]</span>
185185 </td>
186186 </tr>
187187 <tr>
197197 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * gst_timed_value_control_source_get_all
198198 (<em class="parameter"><code><a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self</code></em>);</pre>
199199 <p>
200 Returns a read-only copy of the list of <a href="../gstreamer-1.0/GstControlSource.html#GstTimedValue"><span class="type">GstTimedValue</span></a> for the given property.
200 Returns a read-only copy of the list of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html#GstTimedValue"><span class="type">GstTimedValue</span></a> for the given property.
201201 Free the list after done with it.
202202 </p>
203203 <div class="variablelist"><table border="0">
221221 <a name="gst-timed-value-control-source-unset"></a><h3>gst_timed_value_control_source_unset ()</h3>
222222 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> gst_timed_value_control_source_unset
223223 (<em class="parameter"><code><a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self</code></em>,
224 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);</pre>
224 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);</pre>
225225 <p>
226226 Used to remove the value of given controller-handled property at a certain
227227 time.
4444 #include &lt;libs/controller/gsttriggercontrolsource.h&gt;
4545
4646 struct <a class="link" href="GstTriggerControlSource.html#GstTriggerControlSource-struct" title="struct GstTriggerControlSource">GstTriggerControlSource</a>;
47 <a href="../gstreamer-1.0/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> * <a class="link" href="GstTriggerControlSource.html#gst-trigger-control-source-new" title="gst_trigger_control_source_new ()">gst_trigger_control_source_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
47 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> * <a class="link" href="GstTriggerControlSource.html#gst-trigger-control-source-new" title="gst_trigger_control_source_new ()">gst_trigger_control_source_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
4848 </pre>
4949 </div>
5050 <div class="refsect1">
5252 <pre class="synopsis">
5353 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
5454 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
55 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
56 +----<a href="../gstreamer-1.0/GstControlSource.html">GstControlSource</a>
55 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
56 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html">GstControlSource</a>
5757 +----<a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource">GstTimedValueControlSource</a>
5858 +----GstTriggerControlSource
5959 </pre>
6767 <div class="refsect1">
6868 <a name="GstTriggerControlSource.description"></a><h2>Description</h2>
6969 <p>
70 <a class="link" href="GstTriggerControlSource.html" title="GstTriggerControlSource"><span class="type">GstTriggerControlSource</span></a> is a <a href="../gstreamer-1.0/GstControlSource.html"><span class="type">GstControlSource</span></a>, that returns values from user-given
70 <a class="link" href="GstTriggerControlSource.html" title="GstTriggerControlSource"><span class="type">GstTriggerControlSource</span></a> is a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="type">GstControlSource</span></a>, that returns values from user-given
7171 control points. It allows for a tolerance on the time-stamps.
7272 </p>
7373 <p>
8585 <a name="GstTriggerControlSource-struct"></a><h3>struct GstTriggerControlSource</h3>
8686 <pre class="programlisting">struct GstTriggerControlSource;</pre>
8787 <p>
88 The instance structure of <a href="../gstreamer-1.0/GstControlSource.html"><span class="type">GstControlSource</span></a>.
88 The instance structure of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="type">GstControlSource</span></a>.
8989 </p>
9090 </div>
9191 <hr>
9292 <div class="refsect2">
9393 <a name="gst-trigger-control-source-new"></a><h3>gst_trigger_control_source_new ()</h3>
94 <pre class="programlisting"><a href="../gstreamer-1.0/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> * gst_trigger_control_source_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
94 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> * gst_trigger_control_source_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
9595 <p>
9696 This returns a new, unbound <a class="link" href="GstTriggerControlSource.html" title="GstTriggerControlSource"><span class="type">GstTriggerControlSource</span></a>.
9797 </p>
581581 </dt>
582582 <dd></dd>
583583 <dt>
584 <a class="link" href="GstBaseTransform.html#gst-base-transform-set-prefer-passthrough" title="gst_base_transform_set_prefer_passthrough ()">gst_base_transform_set_prefer_passthrough</a>, function in <a class="link" href="GstBaseTransform.html" title="GstBaseTransform">GstBaseTransform</a>
585 </dt>
586 <dd></dd>
587 <dt>
584588 <a class="link" href="GstBaseTransform.html#gst-base-transform-set-qos-enabled" title="gst_base_transform_set_qos_enabled ()">gst_base_transform_set_qos_enabled</a>, function in <a class="link" href="GstBaseTransform.html" title="GstBaseTransform">GstBaseTransform</a>
585589 </dt>
586590 <dd></dd>
2929 <span class="refentrytitle"><a href="GstBaseSrc.html">GstBaseSrc</a></span><span class="refpurpose"> — Base class for getrange based source elements</span>
3030 </dt>
3131 <dt>
32 <span class="refentrytitle"><a href="GstBaseSink.html">GstBaseSink</a></span><span class="refpurpose"></span>
32 <span class="refentrytitle"><a href="GstBaseSink.html">GstBaseSink</a></span><span class="refpurpose"> — Base class for sink elements</span>
3333 </dt>
3434 <dt>
3535 <span class="refentrytitle"><a href="GstBaseTransform.html">GstBaseTransform</a></span><span class="refpurpose"> — Base class for simple transform filters</span>
2424 <pre class="screen">
2525 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
2626 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
27 <a href="../gstreamer-1.0/GstObject.html">GstObject</a>
28 <a href="../gstreamer-1.0/GstElement.html">GstElement</a>
27 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
28 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
2929 <a class="link" href="GstBaseSrc.html" title="GstBaseSrc">GstBaseSrc</a>
3030 <a class="link" href="GstPushSrc.html" title="GstPushSrc">GstPushSrc</a>
3131 <a class="link" href="GstBaseSink.html" title="GstBaseSink">GstBaseSink</a>
3232 <a class="link" href="GstBaseTransform.html" title="GstBaseTransform">GstBaseTransform</a>
33 <a href="../gstreamer-1.0/GstClock.html">GstClock</a>
34 <a href="../gstreamer-1.0/GstSystemClock.html">GstSystemClock</a>
33 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html">GstClock</a>
34 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSystemClock.html">GstSystemClock</a>
3535 <a class="link" href="GstNetClientClock.html" title="GstNetClientClock">GstNetClientClock</a>
36 <a href="../gstreamer-1.0/GstControlSource.html">GstControlSource</a>
36 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html">GstControlSource</a>
3737 <a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource">GstTimedValueControlSource</a>
3838 <a class="link" href="GstInterpolationControlSource.html" title="GstInterpolationControlSource">GstInterpolationControlSource</a>
3939 <a class="link" href="GstTriggerControlSource.html" title="GstTriggerControlSource">GstTriggerControlSource</a>
4242 struct <a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse">GstBaseParse</a>;
4343 struct <a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseClass" title="struct GstBaseParseClass">GstBaseParseClass</a>;
4444 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstBaseParse.html#gst-base-parse-set-duration" title="gst_base_parse_set_duration ()">gst_base_parse_set_duration</a> (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
45 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> fmt</code></em>,
45 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> fmt</code></em>,
4646 <em class="parameter"><code><span class="type">gint64</span> duration</code></em>,
4747 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> interval</code></em>);
4848 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstBaseParse.html#gst-base-parse-set-average-bitrate" title="gst_base_parse_set_average_bitrate ()">gst_base_parse_set_average_bitrate</a> (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
6161 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> lead_in</code></em>,
6262 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> lead_out</code></em>);
6363 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstBaseParse.html#gst-base-parse-set-latency" title="gst_base_parse_set_latency ()">gst_base_parse_set_latency</a> (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
64 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> min_latency</code></em>,
65 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> max_latency</code></em>);
64 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> min_latency</code></em>,
65 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> max_latency</code></em>);
6666 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="gstreamer-libs-GstBaseParse.html#gst-base-parse-convert-default" title="gst_base_parse_convert_default ()">gst_base_parse_convert_default</a> (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
67 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> src_format</code></em>,
67 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> src_format</code></em>,
6868 <em class="parameter"><code><span class="type">gint64</span> src_value</code></em>,
69 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> dest_format</code></em>,
69 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> dest_format</code></em>,
7070 <em class="parameter"><code><span class="type">gint64</span> *dest_value</code></em>);
7171 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="gstreamer-libs-GstBaseParse.html#gst-base-parse-add-index-entry" title="gst_base_parse_add_index_entry ()">gst_base_parse_add_index_entry</a> (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
7272 <em class="parameter"><code><span class="type">guint64</span> offset</code></em>,
73 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> ts</code></em>,
73 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> ts</code></em>,
7474 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> key</code></em>,
7575 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> force</code></em>);
7676 <a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrame" title="GstBaseParseFrame">GstBaseParseFrame</a>;
7777 enum <a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrameFlags" title="enum GstBaseParseFrameFlags">GstBaseParseFrameFlags</a>;
78 <a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrame" title="GstBaseParseFrame"><span class="returnvalue">GstBaseParseFrame</span></a> * <a class="link" href="gstreamer-libs-GstBaseParse.html#gst-base-parse-frame-new" title="gst_base_parse_frame_new ()">gst_base_parse_frame_new</a> (<em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
78 <a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrame" title="GstBaseParseFrame"><span class="returnvalue">GstBaseParseFrame</span></a> * <a class="link" href="gstreamer-libs-GstBaseParse.html#gst-base-parse-frame-new" title="gst_base_parse_frame_new ()">gst_base_parse_frame_new</a> (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
7979 <em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrameFlags" title="enum GstBaseParseFrameFlags"><span class="type">GstBaseParseFrameFlags</span></a> flags</code></em>,
8080 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> overhead</code></em>);
8181 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstBaseParse.html#gst-base-parse-frame-init" title="gst_base_parse_frame_init ()">gst_base_parse_frame_init</a> (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrame" title="GstBaseParseFrame"><span class="type">GstBaseParseFrame</span></a> *frame</code></em>);
8282 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstBaseParse.html#gst-base-parse-frame-free" title="gst_base_parse_frame_free ()">gst_base_parse_frame_free</a> (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrame" title="GstBaseParseFrame"><span class="type">GstBaseParseFrame</span></a> *frame</code></em>);
83 <a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> <a class="link" href="gstreamer-libs-GstBaseParse.html#gst-base-parse-push-frame" title="gst_base_parse_push_frame ()">gst_base_parse_push_frame</a> (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
83 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> <a class="link" href="gstreamer-libs-GstBaseParse.html#gst-base-parse-push-frame" title="gst_base_parse_push_frame ()">gst_base_parse_push_frame</a> (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
8484 <em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrame" title="GstBaseParseFrame"><span class="type">GstBaseParseFrame</span></a> *frame</code></em>);
8585 #define <a class="link" href="gstreamer-libs-GstBaseParse.html#GST-BASE-PARSE-DRAINING:CAPS" title="GST_BASE_PARSE_DRAINING()">GST_BASE_PARSE_DRAINING</a> (parse)
8686 #define <a class="link" href="gstreamer-libs-GstBaseParse.html#GST-BASE-PARSE-FLAG-DRAINING:CAPS" title="GST_BASE_PARSE_FLAG_DRAINING">GST_BASE_PARSE_FLAG_DRAINING</a>
220220 when base class calls subclass' <em class="parameter"><code>set_sink_caps</code></em> function).
221221 </p>
222222 <p>
223 This base class uses <a href="../gstreamer-1.0/gstreamer-GstFormat.html#GST-FORMAT-DEFAULT:CAPS"><span class="type">GST_FORMAT_DEFAULT</span></a> as a meaning of frames. So,
223 This base class uses <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GST-FORMAT-DEFAULT:CAPS"><span class="type">GST_FORMAT_DEFAULT</span></a> as a meaning of frames. So,
224224 subclass conversion routine needs to know that conversion from
225 <a href="../gstreamer-1.0/gstreamer-GstFormat.html#GST-FORMAT-TIME:CAPS"><span class="type">GST_FORMAT_TIME</span></a> to <a href="../gstreamer-1.0/gstreamer-GstFormat.html#GST-FORMAT-DEFAULT:CAPS"><span class="type">GST_FORMAT_DEFAULT</span></a> must return the
225 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GST-FORMAT-TIME:CAPS"><span class="type">GST_FORMAT_TIME</span></a> to <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GST-FORMAT-DEFAULT:CAPS"><span class="type">GST_FORMAT_DEFAULT</span></a> must return the
226226 frame number that can be found from the given byte position.
227227 </p>
228228 <p>
291291 <div class="variablelist"><table border="0">
292292 <col align="left" valign="top">
293293 <tbody><tr>
294 <td><p><span class="term"><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> <em class="structfield"><code><a name="GstBaseParse.element"></a>element</code></em>;</span></p></td>
294 <td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> <em class="structfield"><code><a name="GstBaseParse.element"></a>element</code></em>;</span></p></td>
295295 <td>the parent element.</td>
296296 </tr></tbody>
297297 </table></div>
346346 <col align="left" valign="top">
347347 <tbody>
348348 <tr>
349 <td><p><span class="term"><a href="../gstreamer-1.0/GstElement.html#GstElementClass"><span class="type">GstElementClass</span></a> <em class="structfield"><code><a name="GstBaseParseClass.parent-class"></a>parent_class</code></em>;</span></p></td>
349 <td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GstElementClass"><span class="type">GstElementClass</span></a> <em class="structfield"><code><a name="GstBaseParseClass.parent-class"></a>parent_class</code></em>;</span></p></td>
350350 <td>the parent class</td>
351351 </tr>
352352 <tr>
423423 <div class="refsect2">
424424 <a name="gst-base-parse-set-duration"></a><h3>gst_base_parse_set_duration ()</h3>
425425 <pre class="programlisting"><span class="returnvalue">void</span> gst_base_parse_set_duration (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
426 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> fmt</code></em>,
426 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> fmt</code></em>,
427427 <em class="parameter"><code><span class="type">gint64</span> duration</code></em>,
428428 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> interval</code></em>);</pre>
429429 <p>
444444 <tr>
445445 <td><p><span class="term"><em class="parameter"><code>fmt</code></em> :</span></p></td>
446446 <td>
447 <a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a>.</td>
447 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a>.</td>
448448 </tr>
449449 <tr>
450450 <td><p><span class="term"><em class="parameter"><code>duration</code></em> :</span></p></td>
637637 <div class="refsect2">
638638 <a name="gst-base-parse-set-latency"></a><h3>gst_base_parse_set_latency ()</h3>
639639 <pre class="programlisting"><span class="returnvalue">void</span> gst_base_parse_set_latency (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
640 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> min_latency</code></em>,
641 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> max_latency</code></em>);</pre>
640 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> min_latency</code></em>,
641 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> max_latency</code></em>);</pre>
642642 <p>
643643 Sets the minimum and maximum (which may likely be equal) latency introduced
644644 by the parsing process. If there is such a latency, which depends on the
667667 <div class="refsect2">
668668 <a name="gst-base-parse-convert-default"></a><h3>gst_base_parse_convert_default ()</h3>
669669 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> gst_base_parse_convert_default (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
670 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> src_format</code></em>,
670 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> src_format</code></em>,
671671 <em class="parameter"><code><span class="type">gint64</span> src_value</code></em>,
672 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> dest_format</code></em>,
672 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> dest_format</code></em>,
673673 <em class="parameter"><code><span class="type">gint64</span> *dest_value</code></em>);</pre>
674674 <p>
675675 Default implementation of "convert" vmethod in <a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> class.
685685 <tr>
686686 <td><p><span class="term"><em class="parameter"><code>src_format</code></em> :</span></p></td>
687687 <td>
688 <a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> describing the source format.</td>
688 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> describing the source format.</td>
689689 </tr>
690690 <tr>
691691 <td><p><span class="term"><em class="parameter"><code>src_value</code></em> :</span></p></td>
694694 <tr>
695695 <td><p><span class="term"><em class="parameter"><code>dest_format</code></em> :</span></p></td>
696696 <td>
697 <a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> defining the converted format.</td>
697 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> defining the converted format.</td>
698698 </tr>
699699 <tr>
700700 <td><p><span class="term"><em class="parameter"><code>dest_value</code></em> :</span></p></td>
712712 <a name="gst-base-parse-add-index-entry"></a><h3>gst_base_parse_add_index_entry ()</h3>
713713 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> gst_base_parse_add_index_entry (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
714714 <em class="parameter"><code><span class="type">guint64</span> offset</code></em>,
715 <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> ts</code></em>,
715 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> ts</code></em>,
716716 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> key</code></em>,
717717 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> force</code></em>);</pre>
718718 <p>
777777 <col align="left" valign="top">
778778 <tbody>
779779 <tr>
780 <td><p><span class="term"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *<em class="structfield"><code><a name="GstBaseParseFrame.buffer"></a>buffer</code></em>;</span></p></td>
780 <td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *<em class="structfield"><code><a name="GstBaseParseFrame.buffer"></a>buffer</code></em>;</span></p></td>
781781 <td>input data to be parsed for frames.</td>
782782 </tr>
783783 <tr>
784 <td><p><span class="term"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *<em class="structfield"><code><a name="GstBaseParseFrame.out-buffer"></a>out_buffer</code></em>;</span></p></td>
784 <td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *<em class="structfield"><code><a name="GstBaseParseFrame.out-buffer"></a>out_buffer</code></em>;</span></p></td>
785785 <td>(optional) (replacement) output data.</td>
786786 </tr>
787787 <tr>
870870 <hr>
871871 <div class="refsect2">
872872 <a name="gst-base-parse-frame-new"></a><h3>gst_base_parse_frame_new ()</h3>
873 <pre class="programlisting"><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrame" title="GstBaseParseFrame"><span class="returnvalue">GstBaseParseFrame</span></a> * gst_base_parse_frame_new (<em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
873 <pre class="programlisting"><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrame" title="GstBaseParseFrame"><span class="returnvalue">GstBaseParseFrame</span></a> * gst_base_parse_frame_new (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
874874 <em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrameFlags" title="enum GstBaseParseFrameFlags"><span class="type">GstBaseParseFrameFlags</span></a> flags</code></em>,
875875 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> overhead</code></em>);</pre>
876876 <p>
883883 <tbody>
884884 <tr>
885885 <td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
886 <td>a <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
886 <td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
887887 </td>
888888 </tr>
889889 <tr>
932932 <hr>
933933 <div class="refsect2">
934934 <a name="gst-base-parse-push-frame"></a><h3>gst_base_parse_push_frame ()</h3>
935 <pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> gst_base_parse_push_frame (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
935 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> gst_base_parse_push_frame (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
936936 <em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrame" title="GstBaseParseFrame"><span class="type">GstBaseParseFrame</span></a> *frame</code></em>);</pre>
937937 <p>
938938 Pushes the frame's buffer downstream, sends any pending events and
957957 </tr>
958958 <tr>
959959 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
960 <td><a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a></td>
960 <td><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a></td>
961961 </tr>
962962 </tbody>
963963 </table></div>
997997 <pre class="programlisting">#define GST_BASE_PARSE_FLOW_DROPPED GST_FLOW_CUSTOM_SUCCESS
998998 </pre>
999999 <p>
1000 A <a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> that can be returned from parse_frame to
1000 A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> that can be returned from parse_frame to
10011001 indicate that no output buffer was generated, or from pre_push_frame to
10021002 to forego pushing buffer.
10031003 </p>
10241024 <pre class="programlisting">#define GST_BASE_PARSE_SINK_PAD(obj) (GST_BASE_PARSE_CAST (obj)-&gt;sinkpad)
10251025 </pre>
10261026 <p>
1027 Gives the pointer to the sink <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> object of the element.
1027 Gives the pointer to the sink <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> object of the element.
10281028 </p>
10291029 <div class="variablelist"><table border="0">
10301030 <col align="left" valign="top">
10401040 <pre class="programlisting">#define GST_BASE_PARSE_SRC_PAD(obj) (GST_BASE_PARSE_CAST (obj)-&gt;srcpad)
10411041 </pre>
10421042 <p>
1043 Gives the pointer to the source <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> object of the element.
1043 Gives the pointer to the source <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> object of the element.
10441044 </p>
10451045 <div class="variablelist"><table border="0">
10461046 <col align="left" valign="top">
3939 <pre class="synopsis">
4040 #include &lt;gst/check/gstbufferstraw.h&gt;
4141
42 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstBufferStraw.html#gst-buffer-straw-start-pipeline" title="gst_buffer_straw_start_pipeline ()">gst_buffer_straw_start_pipeline</a> (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
43 <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);
44 <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * <a class="link" href="gstreamer-libs-GstBufferStraw.html#gst-buffer-straw-get-buffer" title="gst_buffer_straw_get_buffer ()">gst_buffer_straw_get_buffer</a> (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
45 <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);
46 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstBufferStraw.html#gst-buffer-straw-stop-pipeline" title="gst_buffer_straw_stop_pipeline ()">gst_buffer_straw_stop_pipeline</a> (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
47 <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);
42 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstBufferStraw.html#gst-buffer-straw-start-pipeline" title="gst_buffer_straw_start_pipeline ()">gst_buffer_straw_start_pipeline</a> (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
43 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);
44 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * <a class="link" href="gstreamer-libs-GstBufferStraw.html#gst-buffer-straw-get-buffer" title="gst_buffer_straw_get_buffer ()">gst_buffer_straw_get_buffer</a> (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
45 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);
46 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstBufferStraw.html#gst-buffer-straw-stop-pipeline" title="gst_buffer_straw_stop_pipeline ()">gst_buffer_straw_stop_pipeline</a> (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
47 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);
4848 </pre>
4949 </div>
5050 <div class="refsect1">
5858 <a name="gstreamer-libs-GstBufferStraw.details"></a><h2>Details</h2>
5959 <div class="refsect2">
6060 <a name="gst-buffer-straw-start-pipeline"></a><h3>gst_buffer_straw_start_pipeline ()</h3>
61 <pre class="programlisting"><span class="returnvalue">void</span> gst_buffer_straw_start_pipeline (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
62 <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);</pre>
61 <pre class="programlisting"><span class="returnvalue">void</span> gst_buffer_straw_start_pipeline (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
62 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);</pre>
6363 <p>
6464 Sets up a pipeline for buffer sucking. This will allow you to call
6565 <a class="link" href="gstreamer-libs-GstBufferStraw.html#gst-buffer-straw-get-buffer" title="gst_buffer_straw_get_buffer ()"><code class="function">gst_buffer_straw_get_buffer()</code></a> to access buffers as they pass over <em class="parameter"><code>pad</code></em>.
6767 <p>
6868 This function is normally used in unit tests that want to verify that a
6969 particular element is outputting correct buffers. For example, you would make
70 a pipeline via <a href="../gstreamer-1.0/gstreamer-GstParse.html#gst-parse-launch"><code class="function">gst_parse_launch()</code></a>, pull out the pad you want to monitor, then
70 a pipeline via <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstParse.html#gst-parse-launch"><code class="function">gst_parse_launch()</code></a>, pull out the pad you want to monitor, then
7171 call <a class="link" href="gstreamer-libs-GstBufferStraw.html#gst-buffer-straw-get-buffer" title="gst_buffer_straw_get_buffer ()"><code class="function">gst_buffer_straw_get_buffer()</code></a> to get the buffers that pass through <em class="parameter"><code>pad</code></em>.
7272 The pipeline will block until you have sucked off the buffers.
7373 </p>
9898 <hr>
9999 <div class="refsect2">
100100 <a name="gst-buffer-straw-get-buffer"></a><h3>gst_buffer_straw_get_buffer ()</h3>
101 <pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * gst_buffer_straw_get_buffer (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
102 <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);</pre>
101 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * gst_buffer_straw_get_buffer (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
102 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);</pre>
103103 <p>
104104 Get one buffer from <em class="parameter"><code>pad</code></em>. Implemented via buffer probes. This function will
105105 block until the pipeline passes a buffer over <em class="parameter"><code>pad</code></em>, so for robust behavior
125125 </tr>
126126 <tr>
127127 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
128 <td>the captured <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>.</td>
128 <td>the captured <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>.</td>
129129 </tr>
130130 </tbody>
131131 </table></div>
133133 <hr>
134134 <div class="refsect2">
135135 <a name="gst-buffer-straw-stop-pipeline"></a><h3>gst_buffer_straw_stop_pipeline ()</h3>
136 <pre class="programlisting"><span class="returnvalue">void</span> gst_buffer_straw_stop_pipeline (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
137 <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);</pre>
136 <pre class="programlisting"><span class="returnvalue">void</span> gst_buffer_straw_stop_pipeline (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
137 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);</pre>
138138 <p>
139 Set <em class="parameter"><code>bin</code></em> to <a href="../gstreamer-1.0/GstElement.html#GST-STATE-NULL:CAPS"><span class="type">GST_STATE_NULL</span></a> and release resource allocated in
139 Set <em class="parameter"><code>bin</code></em> to <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-STATE-NULL:CAPS"><span class="type">GST_STATE_NULL</span></a> and release resource allocated in
140140 <a class="link" href="gstreamer-libs-GstBufferStraw.html#gst-buffer-straw-start-pipeline" title="gst_buffer_straw_start_pipeline ()"><code class="function">gst_buffer_straw_start_pipeline()</code></a>.
141141 </p>
142142 <p>
5656 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>,
5757 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> fixed</code></em>);
5858 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstByteWriter.html#gst-byte-writer-free" title="gst_byte_writer_free ()">gst_byte_writer_free</a> (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>);
59 <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * <a class="link" href="gstreamer-libs-GstByteWriter.html#gst-byte-writer-free-and-get-buffer" title="gst_byte_writer_free_and_get_buffer ()">gst_byte_writer_free_and_get_buffer</a> (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>);
59 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * <a class="link" href="gstreamer-libs-GstByteWriter.html#gst-byte-writer-free-and-get-buffer" title="gst_byte_writer_free_and_get_buffer ()">gst_byte_writer_free_and_get_buffer</a> (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>);
6060 <span class="returnvalue">guint8</span> * <a class="link" href="gstreamer-libs-GstByteWriter.html#gst-byte-writer-free-and-get-data" title="gst_byte_writer_free_and_get_data ()">gst_byte_writer_free_and_get_data</a> (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>);
6161 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstByteWriter.html#gst-byte-writer-reset" title="gst_byte_writer_reset ()">gst_byte_writer_reset</a> (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>);
6262 <span class="returnvalue">guint8</span> * <a class="link" href="gstreamer-libs-GstByteWriter.html#gst-byte-writer-reset-and-get-data" title="gst_byte_writer_reset_and_get_data ()">gst_byte_writer_reset_and_get_data</a> (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>);
63 <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * <a class="link" href="gstreamer-libs-GstByteWriter.html#gst-byte-writer-reset-and-get-buffer" title="gst_byte_writer_reset_and_get_buffer ()">gst_byte_writer_reset_and_get_buffer</a>
63 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * <a class="link" href="gstreamer-libs-GstByteWriter.html#gst-byte-writer-reset-and-get-buffer" title="gst_byte_writer_reset_and_get_buffer ()">gst_byte_writer_reset_and_get_buffer</a>
6464 (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>);
6565 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> <a class="link" href="gstreamer-libs-GstByteWriter.html#gst-byte-writer-get-pos" title="gst_byte_writer_get_pos ()">gst_byte_writer_get_pos</a> (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>);
6666 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="gstreamer-libs-GstByteWriter.html#gst-byte-writer-set-pos" title="gst_byte_writer_set_pos ()">gst_byte_writer_set_pos</a> (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>,
436436 <hr>
437437 <div class="refsect2">
438438 <a name="gst-byte-writer-free-and-get-buffer"></a><h3>gst_byte_writer_free_and_get_buffer ()</h3>
439 <pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * gst_byte_writer_free_and_get_buffer (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>);</pre>
439 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * gst_byte_writer_free_and_get_buffer (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>);</pre>
440440 <p>
441441 Frees <em class="parameter"><code>writer</code></em> and all memory allocated by it except
442 the current data, which is returned as <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>.
442 the current data, which is returned as <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>.
443443 </p>
444444 <p>
445445 Free-function: gst_buffer_unref
455455 </tr>
456456 <tr>
457457 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
458 <td>the current data as buffer. <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#gst-buffer-unref"><code class="function">gst_buffer_unref()</code></a>
458 <td>the current data as buffer. <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#gst-buffer-unref"><code class="function">gst_buffer_unref()</code></a>
459459 after usage. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
460460 </td>
461461 </tr>
537537 <hr>
538538 <div class="refsect2">
539539 <a name="gst-byte-writer-reset-and-get-buffer"></a><h3>gst_byte_writer_reset_and_get_buffer ()</h3>
540 <pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * gst_byte_writer_reset_and_get_buffer
540 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> * gst_byte_writer_reset_and_get_buffer
541541 (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>);</pre>
542542 <p>
543543 Resets <em class="parameter"><code>writer</code></em> and returns the current data as buffer.
555555 </tr>
556556 <tr>
557557 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
558 <td>the current data as buffer. <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#gst-buffer-unref"><code class="function">gst_buffer_unref()</code></a>
558 <td>the current data as buffer. <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#gst-buffer-unref"><code class="function">gst_buffer_unref()</code></a>
559559 after usage. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
560560 </td>
561561 </tr>
9090 c)
9191 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-init" title="gst_check_init ()">gst_check_init</a> (<em class="parameter"><code><span class="type">int</span> *argc</code></em>,
9292 <em class="parameter"><code><span class="type">char</span> **argv[]</code></em>);
93 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-message-error" title="gst_check_message_error ()">gst_check_message_error</a> (<em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
94 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstMessage.html#GstMessageType"><span class="type">GstMessageType</span></a> type</code></em>,
93 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-message-error" title="gst_check_message_error ()">gst_check_message_error</a> (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
94 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessageType"><span class="type">GstMessageType</span></a> type</code></em>,
9595 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="type">GQuark</span></a> domain</code></em>,
9696 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> code</code></em>);
97 <a href="../gstreamer-1.0/GstElement.html"><span class="returnvalue">GstElement</span></a> * <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-element" title="gst_check_setup_element ()">gst_check_setup_element</a> (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *factory</code></em>);
98 <a href="../gstreamer-1.0/GstPad.html"><span class="returnvalue">GstPad</span></a> * <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-sink-pad" title="gst_check_setup_sink_pad ()">gst_check_setup_sink_pad</a> (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
99 <em class="parameter"><code><a href="../gstreamer-1.0/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>);
100 <a href="../gstreamer-1.0/GstPad.html"><span class="returnvalue">GstPad</span></a> * <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-src-pad" title="gst_check_setup_src_pad ()">gst_check_setup_src_pad</a> (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
101 <em class="parameter"><code><a href="../gstreamer-1.0/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>);
102 <a href="../gstreamer-1.0/GstPad.html"><span class="returnvalue">GstPad</span></a> * <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-sink-pad-by-name" title="gst_check_setup_sink_pad_by_name ()">gst_check_setup_sink_pad_by_name</a> (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
103 <em class="parameter"><code><a href="../gstreamer-1.0/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>,
97 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="returnvalue">GstElement</span></a> * <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-element" title="gst_check_setup_element ()">gst_check_setup_element</a> (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *factory</code></em>);
98 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a> * <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-sink-pad" title="gst_check_setup_sink_pad ()">gst_check_setup_sink_pad</a> (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
99 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>);
100 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a> * <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-src-pad" title="gst_check_setup_src_pad ()">gst_check_setup_src_pad</a> (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
101 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>);
102 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a> * <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-sink-pad-by-name" title="gst_check_setup_sink_pad_by_name ()">gst_check_setup_sink_pad_by_name</a> (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
103 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>,
104104 <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);
105 <a href="../gstreamer-1.0/GstPad.html"><span class="returnvalue">GstPad</span></a> * <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-src-pad-by-name" title="gst_check_setup_src_pad_by_name ()">gst_check_setup_src_pad_by_name</a> (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
106 <em class="parameter"><code><a href="../gstreamer-1.0/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>,
105 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a> * <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-src-pad-by-name" title="gst_check_setup_src_pad_by_name ()">gst_check_setup_src_pad_by_name</a> (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
106 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>,
107107 <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);
108 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-teardown-pad-by-name" title="gst_check_teardown_pad_by_name ()">gst_check_teardown_pad_by_name</a> (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
108 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-teardown-pad-by-name" title="gst_check_teardown_pad_by_name ()">gst_check_teardown_pad_by_name</a> (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
109109 <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);
110 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-teardown-element" title="gst_check_teardown_element ()">gst_check_teardown_element</a> (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);
111 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-teardown-sink-pad" title="gst_check_teardown_sink_pad ()">gst_check_teardown_sink_pad</a> (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);
112 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-teardown-src-pad" title="gst_check_teardown_src_pad ()">gst_check_teardown_src_pad</a> (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);
110 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-teardown-element" title="gst_check_teardown_element ()">gst_check_teardown_element</a> (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);
111 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-teardown-sink-pad" title="gst_check_teardown_sink_pad ()">gst_check_teardown_sink_pad</a> (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);
112 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-teardown-src-pad" title="gst_check_teardown_src_pad ()">gst_check_teardown_src_pad</a> (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);
113113 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-drop-buffers" title="gst_check_drop_buffers ()">gst_check_drop_buffers</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
114 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-buffer-data" title="gst_check_buffer_data ()">gst_check_buffer_data</a> (<em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
114 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-buffer-data" title="gst_check_buffer_data ()">gst_check_buffer_data</a> (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
115115 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"><span class="type">gconstpointer</span></a> data</code></em>,
116116 <em class="parameter"><code><span class="type">gsize</span> size</code></em>);
117 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-caps-equal" title="gst_check_caps_equal ()">gst_check_caps_equal</a> (<em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps1</code></em>,
118 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps2</code></em>);
117 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-caps-equal" title="gst_check_caps_equal ()">gst_check_caps_equal</a> (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps1</code></em>,
118 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps2</code></em>);
119119 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-element-push-buffer-list" title="gst_check_element_push_buffer_list ()">gst_check_element_push_buffer_list</a> (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *element_name</code></em>,
120120 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *buffer_in</code></em>,
121 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_in</code></em>,
121 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_in</code></em>,
122122 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *buffer_out</code></em>,
123 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_out</code></em>,
124 <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> last_flow_return</code></em>);
123 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_out</code></em>,
124 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> last_flow_return</code></em>);
125125 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-element-push-buffer" title="gst_check_element_push_buffer ()">gst_check_element_push_buffer</a> (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *element_name</code></em>,
126 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer_in</code></em>,
127 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_in</code></em>,
128 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer_out</code></em>,
129 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_out</code></em>);
126 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer_in</code></em>,
127 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_in</code></em>,
128 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer_out</code></em>,
129 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_out</code></em>);
130130 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a> <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-run-suite" title="gst_check_run_suite ()">gst_check_run_suite</a> (<em class="parameter"><code><span class="type">Suite</span> *suite</code></em>,
131131 <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
132132 <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *fname</code></em>);
458458 <hr>
459459 <div class="refsect2">
460460 <a name="gst-check-message-error"></a><h3>gst_check_message_error ()</h3>
461 <pre class="programlisting"><span class="returnvalue">void</span> gst_check_message_error (<em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
462 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstMessage.html#GstMessageType"><span class="type">GstMessageType</span></a> type</code></em>,
461 <pre class="programlisting"><span class="returnvalue">void</span> gst_check_message_error (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
462 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessageType"><span class="type">GstMessageType</span></a> type</code></em>,
463463 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="type">GQuark</span></a> domain</code></em>,
464464 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> code</code></em>);</pre>
465465 </div>
466466 <hr>
467467 <div class="refsect2">
468468 <a name="gst-check-setup-element"></a><h3>gst_check_setup_element ()</h3>
469 <pre class="programlisting"><a href="../gstreamer-1.0/GstElement.html"><span class="returnvalue">GstElement</span></a> * gst_check_setup_element (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *factory</code></em>);</pre>
469 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="returnvalue">GstElement</span></a> * gst_check_setup_element (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *factory</code></em>);</pre>
470470 <p>
471471 setup an element for a filter test with mysrcpad and mysinkpad
472472 </p>
488488 <hr>
489489 <div class="refsect2">
490490 <a name="gst-check-setup-sink-pad"></a><h3>gst_check_setup_sink_pad ()</h3>
491 <pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html"><span class="returnvalue">GstPad</span></a> * gst_check_setup_sink_pad (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
492 <em class="parameter"><code><a href="../gstreamer-1.0/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>);</pre>
491 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a> * gst_check_setup_sink_pad (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
492 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>);</pre>
493493 <div class="variablelist"><table border="0">
494494 <col align="left" valign="top">
495495 <tbody>
512512 <hr>
513513 <div class="refsect2">
514514 <a name="gst-check-setup-src-pad"></a><h3>gst_check_setup_src_pad ()</h3>
515 <pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html"><span class="returnvalue">GstPad</span></a> * gst_check_setup_src_pad (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
516 <em class="parameter"><code><a href="../gstreamer-1.0/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>);</pre>
515 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a> * gst_check_setup_src_pad (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
516 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>);</pre>
517517 <div class="variablelist"><table border="0">
518518 <col align="left" valign="top">
519519 <tbody>
536536 <hr>
537537 <div class="refsect2">
538538 <a name="gst-check-setup-sink-pad-by-name"></a><h3>gst_check_setup_sink_pad_by_name ()</h3>
539 <pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html"><span class="returnvalue">GstPad</span></a> * gst_check_setup_sink_pad_by_name (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
540 <em class="parameter"><code><a href="../gstreamer-1.0/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>,
539 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a> * gst_check_setup_sink_pad_by_name (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
540 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>,
541541 <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
542542 <div class="variablelist"><table border="0">
543543 <col align="left" valign="top">
565565 <hr>
566566 <div class="refsect2">
567567 <a name="gst-check-setup-src-pad-by-name"></a><h3>gst_check_setup_src_pad_by_name ()</h3>
568 <pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html"><span class="returnvalue">GstPad</span></a> * gst_check_setup_src_pad_by_name (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
569 <em class="parameter"><code><a href="../gstreamer-1.0/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>,
568 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a> * gst_check_setup_src_pad_by_name (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
569 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>,
570570 <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
571571 <div class="variablelist"><table border="0">
572572 <col align="left" valign="top">
594594 <hr>
595595 <div class="refsect2">
596596 <a name="gst-check-teardown-pad-by-name"></a><h3>gst_check_teardown_pad_by_name ()</h3>
597 <pre class="programlisting"><span class="returnvalue">void</span> gst_check_teardown_pad_by_name (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
597 <pre class="programlisting"><span class="returnvalue">void</span> gst_check_teardown_pad_by_name (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
598598 <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
599599 </div>
600600 <hr>
601601 <div class="refsect2">
602602 <a name="gst-check-teardown-element"></a><h3>gst_check_teardown_element ()</h3>
603 <pre class="programlisting"><span class="returnvalue">void</span> gst_check_teardown_element (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);</pre>
603 <pre class="programlisting"><span class="returnvalue">void</span> gst_check_teardown_element (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);</pre>
604604 </div>
605605 <hr>
606606 <div class="refsect2">
607607 <a name="gst-check-teardown-sink-pad"></a><h3>gst_check_teardown_sink_pad ()</h3>
608 <pre class="programlisting"><span class="returnvalue">void</span> gst_check_teardown_sink_pad (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);</pre>
608 <pre class="programlisting"><span class="returnvalue">void</span> gst_check_teardown_sink_pad (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);</pre>
609609 </div>
610610 <hr>
611611 <div class="refsect2">
612612 <a name="gst-check-teardown-src-pad"></a><h3>gst_check_teardown_src_pad ()</h3>
613 <pre class="programlisting"><span class="returnvalue">void</span> gst_check_teardown_src_pad (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);</pre>
613 <pre class="programlisting"><span class="returnvalue">void</span> gst_check_teardown_src_pad (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);</pre>
614614 </div>
615615 <hr>
616616 <div class="refsect2">
624624 <hr>
625625 <div class="refsect2">
626626 <a name="gst-check-buffer-data"></a><h3>gst_check_buffer_data ()</h3>
627 <pre class="programlisting"><span class="returnvalue">void</span> gst_check_buffer_data (<em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
627 <pre class="programlisting"><span class="returnvalue">void</span> gst_check_buffer_data (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
628628 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"><span class="type">gconstpointer</span></a> data</code></em>,
629629 <em class="parameter"><code><span class="type">gsize</span> size</code></em>);</pre>
630630 <p>
651651 <hr>
652652 <div class="refsect2">
653653 <a name="gst-check-caps-equal"></a><h3>gst_check_caps_equal ()</h3>
654 <pre class="programlisting"><span class="returnvalue">void</span> gst_check_caps_equal (<em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps1</code></em>,
655 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps2</code></em>);</pre>
654 <pre class="programlisting"><span class="returnvalue">void</span> gst_check_caps_equal (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps1</code></em>,
655 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps2</code></em>);</pre>
656656 <p>
657657 Compare two caps with gst_caps_is_equal and fail unless they are
658658 equal.
676676 <a name="gst-check-element-push-buffer-list"></a><h3>gst_check_element_push_buffer_list ()</h3>
677677 <pre class="programlisting"><span class="returnvalue">void</span> gst_check_element_push_buffer_list (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *element_name</code></em>,
678678 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *buffer_in</code></em>,
679 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_in</code></em>,
679 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_in</code></em>,
680680 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *buffer_out</code></em>,
681 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_out</code></em>,
682 <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> last_flow_return</code></em>);</pre>
681 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_out</code></em>,
682 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> last_flow_return</code></em>);</pre>
683683 <p>
684684 Create an <em class="parameter"><code>element</code></em> with the factory with the name and push the buffers in
685685 <em class="parameter"><code>buffer_in</code></em> to this element. The element should create the buffers equal to
720720 <div class="refsect2">
721721 <a name="gst-check-element-push-buffer"></a><h3>gst_check_element_push_buffer ()</h3>
722722 <pre class="programlisting"><span class="returnvalue">void</span> gst_check_element_push_buffer (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *element_name</code></em>,
723 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer_in</code></em>,
724 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_in</code></em>,
725 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer_out</code></em>,
726 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_out</code></em>);</pre>
723 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer_in</code></em>,
724 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_in</code></em>,
725 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer_out</code></em>,
726 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_out</code></em>);</pre>
727727 <p>
728728 Create an <em class="parameter"><code>element</code></em> with the factory with the name and push the
729729 <em class="parameter"><code>buffer_in</code></em> to this element. The element should create one buffer
7979 <col align="left" valign="top">
8080 <tbody>
8181 <tr>
82 <td><p><span class="term"><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> <em class="structfield"><code><a name="GstNetTimePacket.local-time"></a>local_time</code></em>;</span></p></td>
82 <td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> <em class="structfield"><code><a name="GstNetTimePacket.local-time"></a>local_time</code></em>;</span></p></td>
8383 <td>the local time when this packet was sent</td>
8484 </tr>
8585 <tr>
86 <td><p><span class="term"><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> <em class="structfield"><code><a name="GstNetTimePacket.remote-time"></a>remote_time</code></em>;</span></p></td>
86 <td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> <em class="structfield"><code><a name="GstNetTimePacket.remote-time"></a>remote_time</code></em>;</span></p></td>
8787 <td>the remote time observation</td>
8888 </tr>
8989 </tbody>
109109 </p>
110110 <p>
111111 If <em class="parameter"><code>buffer</code></em> is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>, the local and remote times will be set to
112 <a href="../gstreamer-1.0/GstClock.html#GST-CLOCK-TIME-NONE:CAPS"><span class="type">GST_CLOCK_TIME_NONE</span></a>.
112 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GST-CLOCK-TIME-NONE:CAPS"><span class="type">GST_CLOCK_TIME_NONE</span></a>.
113113 </p>
114114 <p>
115115 MT safe. Caller owns return value (gst_net_time_packet_free to free).
234234 </div>
235235 <div class="refsect1">
236236 <a name="gstreamer-libs-GstNetTimePacket.see-also"></a><h2>See Also</h2>
237 <a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a>, <a class="link" href="GstNetClientClock.html" title="GstNetClientClock"><span class="type">GstNetClientClock</span></a>, <a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="type">GstNetTimeProvider</span></a>
237 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a>, <a class="link" href="GstNetClientClock.html" title="GstNetClientClock"><span class="type">GstNetClientClock</span></a>, <a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="type">GstNetTimeProvider</span></a>
238238 </div>
239239 </div>
240240 <div class="footer">
4040 #include &lt;gst/check/gstconsistencychecker.h&gt;
4141
4242 <a class="link" href="gstreamer-libs-GstStreamConsistency.html#GstStreamConsistency" title="GstStreamConsistency">GstStreamConsistency</a>;
43 <a class="link" href="gstreamer-libs-GstStreamConsistency.html#GstStreamConsistency" title="GstStreamConsistency"><span class="returnvalue">GstStreamConsistency</span></a> * <a class="link" href="gstreamer-libs-GstStreamConsistency.html#gst-consistency-checker-new" title="gst_consistency_checker_new ()">gst_consistency_checker_new</a> (<em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);
43 <a class="link" href="gstreamer-libs-GstStreamConsistency.html#GstStreamConsistency" title="GstStreamConsistency"><span class="returnvalue">GstStreamConsistency</span></a> * <a class="link" href="gstreamer-libs-GstStreamConsistency.html#gst-consistency-checker-new" title="gst_consistency_checker_new ()">gst_consistency_checker_new</a> (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);
4444 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstStreamConsistency.html#gst-consistency-checker-reset" title="gst_consistency_checker_reset ()">gst_consistency_checker_reset</a> (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstStreamConsistency.html#GstStreamConsistency" title="GstStreamConsistency"><span class="type">GstStreamConsistency</span></a> *consist</code></em>);
4545 <span class="returnvalue">void</span> <a class="link" href="gstreamer-libs-GstStreamConsistency.html#gst-consistency-checker-free" title="gst_consistency_checker_free ()">gst_consistency_checker_free</a> (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstStreamConsistency.html#GstStreamConsistency" title="GstStreamConsistency"><span class="type">GstStreamConsistency</span></a> *consist</code></em>);
4646 </pre>
6464 <hr>
6565 <div class="refsect2">
6666 <a name="gst-consistency-checker-new"></a><h3>gst_consistency_checker_new ()</h3>
67 <pre class="programlisting"><a class="link" href="gstreamer-libs-GstStreamConsistency.html#GstStreamConsistency" title="GstStreamConsistency"><span class="returnvalue">GstStreamConsistency</span></a> * gst_consistency_checker_new (<em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);</pre>
67 <pre class="programlisting"><a class="link" href="gstreamer-libs-GstStreamConsistency.html#GstStreamConsistency" title="GstStreamConsistency"><span class="returnvalue">GstStreamConsistency</span></a> * gst_consistency_checker_new (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);</pre>
6868 <p>
6969 Sets up a data probe on the given pad which will raise assertions if the
7070 data flow is inconsistent.
7474 <tbody>
7575 <tr>
7676 <td><p><span class="term"><em class="parameter"><code>pad</code></em> :</span></p></td>
77 <td>The <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> on which the dataflow will be checked.</td>
77 <td>The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> on which the dataflow will be checked.</td>
7878 </tr>
7979 <tr>
8080 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
3939 <pre class="synopsis">
4040 #include &lt;gst/base/gsttypefindhelper.h&gt;
4141
42 <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> * <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper" title="gst_type_find_helper ()">gst_type_find_helper</a> (<em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *src</code></em>,
42 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> * <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper" title="gst_type_find_helper ()">gst_type_find_helper</a> (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *src</code></em>,
4343 <em class="parameter"><code><span class="type">guint64</span> size</code></em>);
44 <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> * <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper-for-buffer" title="gst_type_find_helper_for_buffer ()">gst_type_find_helper_for_buffer</a> (<em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
45 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
46 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);
47 <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> * <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper-for-extension" title="gst_type_find_helper_for_extension ()">gst_type_find_helper_for_extension</a> (<em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
44 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> * <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper-for-buffer" title="gst_type_find_helper_for_buffer ()">gst_type_find_helper_for_buffer</a> (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
45 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
46 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);
47 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> * <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper-for-extension" title="gst_type_find_helper_for_extension ()">gst_type_find_helper_for_extension</a> (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
4848 <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *extension</code></em>);
49 <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> * <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper-for-data" title="gst_type_find_helper_for_data ()">gst_type_find_helper_for_data</a> (<em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
49 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> * <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper-for-data" title="gst_type_find_helper_for_data ()">gst_type_find_helper_for_data</a> (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
5050 <em class="parameter"><code>const <span class="type">guint8</span> *data</code></em>,
5151 <em class="parameter"><code><span class="type">gsize</span> size</code></em>,
52 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);
53 <a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> (<a class="link" href="gstreamer-libs-GstTypeFindHelper.html#GstTypeFindHelperGetRangeFunction" title="GstTypeFindHelperGetRangeFunction ()">*GstTypeFindHelperGetRangeFunction</a>)
54 (<em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
55 <em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *parent</code></em>,
52 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);
53 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> (<a class="link" href="gstreamer-libs-GstTypeFindHelper.html#GstTypeFindHelperGetRangeFunction" title="GstTypeFindHelperGetRangeFunction ()">*GstTypeFindHelperGetRangeFunction</a>)
54 (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
55 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *parent</code></em>,
5656 <em class="parameter"><code><span class="type">guint64</span> offset</code></em>,
5757 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> length</code></em>,
58 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **buffer</code></em>);
59 <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> * <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper-get-range" title="gst_type_find_helper_get_range ()">gst_type_find_helper_get_range</a> (<em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
60 <em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *parent</code></em>,
58 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **buffer</code></em>);
59 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> * <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper-get-range" title="gst_type_find_helper_get_range ()">gst_type_find_helper_get_range</a> (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
60 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *parent</code></em>,
6161 <em class="parameter"><code><a class="link" href="gstreamer-libs-GstTypeFindHelper.html#GstTypeFindHelperGetRangeFunction" title="GstTypeFindHelperGetRangeFunction ()"><span class="type">GstTypeFindHelperGetRangeFunction</span></a> func</code></em>,
6262 <em class="parameter"><code><span class="type">guint64</span> size</code></em>,
6363 <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *extension</code></em>,
64 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);
64 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);
6565 </pre>
6666 </div>
6767 <div class="refsect1">
7777 <a name="gstreamer-libs-GstTypeFindHelper.details"></a><h2>Details</h2>
7878 <div class="refsect2">
7979 <a name="gst-type-find-helper"></a><h3>gst_type_find_helper ()</h3>
80 <pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> * gst_type_find_helper (<em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *src</code></em>,
80 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> * gst_type_find_helper (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *src</code></em>,
8181 <em class="parameter"><code><span class="type">guint64</span> size</code></em>);</pre>
8282 <p>
83 Tries to find what type of data is flowing from the given source <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a>.
83 Tries to find what type of data is flowing from the given source <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>.
8484 </p>
8585 <p>
8686 Free-function: gst_caps_unref
9090 <tbody>
9191 <tr>
9292 <td><p><span class="term"><em class="parameter"><code>src</code></em> :</span></p></td>
93 <td>A source <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a>
93 <td>A source <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>
9494 </td>
9595 </tr>
9696 <tr>
9999 </tr>
100100 <tr>
101101 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
102 <td>the <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> corresponding to the data stream.
103 Returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> if no <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> matches the data stream. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
102 <td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> corresponding to the data stream.
103 Returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> if no <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> matches the data stream. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
104104 </td>
105105 </tr>
106106 </tbody>
109109 <hr>
110110 <div class="refsect2">
111111 <a name="gst-type-find-helper-for-buffer"></a><h3>gst_type_find_helper_for_buffer ()</h3>
112 <pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> * gst_type_find_helper_for_buffer (<em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
113 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
114 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);</pre>
115 <p>
116 Tries to find what type of data is contained in the given <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>, the
112 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> * gst_type_find_helper_for_buffer (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
113 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
114 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);</pre>
115 <p>
116 Tries to find what type of data is contained in the given <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>, the
117117 assumption being that the buffer represents the beginning of the stream or
118118 file.
119119 </p>
120120 <p>
121121 All available typefinders will be called on the data in order of rank. If
122 a typefinding function returns a probability of <a href="../gstreamer-1.0/gstreamer-GstTypeFind.html#GST-TYPE-FIND-MAXIMUM:CAPS"><span class="type">GST_TYPE_FIND_MAXIMUM</span></a>,
122 a typefinding function returns a probability of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTypeFind.html#GST-TYPE-FIND-MAXIMUM:CAPS"><span class="type">GST_TYPE_FIND_MAXIMUM</span></a>,
123123 typefinding is stopped immediately and the found caps will be returned
124124 right away. Otherwise, all available typefind functions will the tried,
125125 and the caps with the highest probability will be returned, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> if
137137 </tr>
138138 <tr>
139139 <td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
140 <td>a <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> with data to typefind. <span class="annotation">[<acronym title="Parameter for input. Default is transfer none."><span class="acronym">in</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
140 <td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> with data to typefind. <span class="annotation">[<acronym title="Parameter for input. Default is transfer none."><span class="acronym">in</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
141141 </td>
142142 </tr>
143143 <tr>
148148 </tr>
149149 <tr>
150150 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
151 <td>the <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> corresponding to the data, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>
151 <td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> corresponding to the data, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>
152152 if no type could be found. The caller should free the caps returned
153 with <a href="../gstreamer-1.0/gstreamer-GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
153 with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
154154 </td>
155155 </tr>
156156 </tbody>
159159 <hr>
160160 <div class="refsect2">
161161 <a name="gst-type-find-helper-for-extension"></a><h3>gst_type_find_helper_for_extension ()</h3>
162 <pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> * gst_type_find_helper_for_extension (<em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
162 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> * gst_type_find_helper_for_extension (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
163163 <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *extension</code></em>);</pre>
164164 <p>
165 Tries to find the best <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> associated with <em class="parameter"><code>extension</code></em>.
165 Tries to find the best <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> associated with <em class="parameter"><code>extension</code></em>.
166166 </p>
167167 <p>
168168 All available typefinders will be checked against the extension in order
186186 </tr>
187187 <tr>
188188 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
189 <td>the <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> corresponding to <em class="parameter"><code>extension</code></em>, or
189 <td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> corresponding to <em class="parameter"><code>extension</code></em>, or
190190 <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> if no type could be found. The caller should free the caps
191 returned with <a href="../gstreamer-1.0/gstreamer-GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
191 returned with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
192192 </td>
193193 </tr>
194194 </tbody>
197197 <hr>
198198 <div class="refsect2">
199199 <a name="gst-type-find-helper-for-data"></a><h3>gst_type_find_helper_for_data ()</h3>
200 <pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> * gst_type_find_helper_for_data (<em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
200 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> * gst_type_find_helper_for_data (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
201201 <em class="parameter"><code>const <span class="type">guint8</span> *data</code></em>,
202202 <em class="parameter"><code><span class="type">gsize</span> size</code></em>,
203 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);</pre>
203 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);</pre>
204204 <p>
205205 Tries to find what type of data is contained in the given <em class="parameter"><code>data</code></em>, the
206206 assumption being that the data represents the beginning of the stream or
208208 </p>
209209 <p>
210210 All available typefinders will be called on the data in order of rank. If
211 a typefinding function returns a probability of <a href="../gstreamer-1.0/gstreamer-GstTypeFind.html#GST-TYPE-FIND-MAXIMUM:CAPS"><span class="type">GST_TYPE_FIND_MAXIMUM</span></a>,
211 a typefinding function returns a probability of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTypeFind.html#GST-TYPE-FIND-MAXIMUM:CAPS"><span class="type">GST_TYPE_FIND_MAXIMUM</span></a>,
212212 typefinding is stopped immediately and the found caps will be returned
213213 right away. Otherwise, all available typefind functions will the tried,
214214 and the caps with the highest probability will be returned, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> if
242242 </tr>
243243 <tr>
244244 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
245 <td>the <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> corresponding to the data, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>
245 <td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> corresponding to the data, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>
246246 if no type could be found. The caller should free the caps returned
247 with <a href="../gstreamer-1.0/gstreamer-GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
247 with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
248248 </td>
249249 </tr>
250250 </tbody>
253253 <hr>
254254 <div class="refsect2">
255255 <a name="GstTypeFindHelperGetRangeFunction"></a><h3>GstTypeFindHelperGetRangeFunction ()</h3>
256 <pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> (*GstTypeFindHelperGetRangeFunction)
257 (<em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
258 <em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *parent</code></em>,
256 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a> (*GstTypeFindHelperGetRangeFunction)
257 (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
258 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *parent</code></em>,
259259 <em class="parameter"><code><span class="type">guint64</span> offset</code></em>,
260260 <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> length</code></em>,
261 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **buffer</code></em>);</pre>
261 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **buffer</code></em>);</pre>
262262 <p>
263263 This function will be called by <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper-get-range" title="gst_type_find_helper_get_range ()"><code class="function">gst_type_find_helper_get_range()</code></a> when
264264 typefinding functions request to peek at the data of a stream at certain
267267 return value.
268268 </p>
269269 <p>
270 This function is supposed to behave exactly like a <a href="../gstreamer-1.0/GstPad.html#GstPadGetRangeFunction"><span class="type">GstPadGetRangeFunction</span></a>.
271 </p>
272 <div class="variablelist"><table border="0">
273 <col align="left" valign="top">
274 <tbody>
275 <tr>
276 <td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
277 <td>a <a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> that will handle the getrange request</td>
270 This function is supposed to behave exactly like a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstPadGetRangeFunction"><span class="type">GstPadGetRangeFunction</span></a>.
271 </p>
272 <div class="variablelist"><table border="0">
273 <col align="left" valign="top">
274 <tbody>
275 <tr>
276 <td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
277 <td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> that will handle the getrange request</td>
278278 </tr>
279279 <tr>
280280 <td><p><span class="term"><em class="parameter"><code>parent</code></em> :</span></p></td>
302302 <hr>
303303 <div class="refsect2">
304304 <a name="gst-type-find-helper-get-range"></a><h3>gst_type_find_helper_get_range ()</h3>
305 <pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> * gst_type_find_helper_get_range (<em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
306 <em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *parent</code></em>,
305 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> * gst_type_find_helper_get_range (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
306 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *parent</code></em>,
307307 <em class="parameter"><code><a class="link" href="gstreamer-libs-GstTypeFindHelper.html#GstTypeFindHelperGetRangeFunction" title="GstTypeFindHelperGetRangeFunction ()"><span class="type">GstTypeFindHelperGetRangeFunction</span></a> func</code></em>,
308308 <em class="parameter"><code><span class="type">guint64</span> size</code></em>,
309309 <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *extension</code></em>,
310 <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);</pre>
310 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);</pre>
311311 <p>
312312 Utility function to do pull-based typefinding. Unlike <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper" title="gst_type_find_helper ()"><code class="function">gst_type_find_helper()</code></a>
313313 however, this function will use the specified function <em class="parameter"><code>func</code></em> to obtain the
331331 <tbody>
332332 <tr>
333333 <td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
334 <td>A <a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> that will be passed as first argument to <em class="parameter"><code>func</code></em>
334 <td>A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> that will be passed as first argument to <em class="parameter"><code>func</code></em>
335335 </td>
336336 </tr>
337337 <tr>
360360 </tr>
361361 <tr>
362362 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
363 <td>the <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> corresponding to the data stream.
364 Returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> if no <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> matches the data stream. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
363 <td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> corresponding to the data stream.
364 Returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> if no <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> matches the data stream. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
365365 </td>
366366 </tr>
367367 </tbody>
6363 <keyword type="macro" name="GST_BASE_PARSE_LOST_SYNC()" link="gstreamer-libs-GstBaseParse.html#GST-BASE-PARSE-LOST-SYNC:CAPS"/>
6464 <keyword type="macro" name="GST_BASE_PARSE_SINK_PAD()" link="gstreamer-libs-GstBaseParse.html#GST-BASE-PARSE-SINK-PAD:CAPS"/>
6565 <keyword type="macro" name="GST_BASE_PARSE_SRC_PAD()" link="gstreamer-libs-GstBaseParse.html#GST-BASE-PARSE-SRC-PAD:CAPS"/>
66 <keyword type="" name="Controlled shutdown of live sources in applications" link="GstBaseSrc.html#idp5184896"/>
66 <keyword type="" name="Controlled shutdown of live sources in applications" link="GstBaseSrc.html#idp34470512"/>
6767 <keyword type="struct" name="struct GstBaseSrc" link="GstBaseSrc.html#GstBaseSrc-struct"/>
6868 <keyword type="struct" name="struct GstBaseSrcClass" link="GstBaseSrc.html#GstBaseSrcClass"/>
6969 <keyword type="enum" name="enum GstBaseSrcFlags" link="GstBaseSrc.html#GstBaseSrcFlags"/>
129129 <keyword type="property" name="The &quot;sync&quot; property" link="GstBaseSink.html#GstBaseSink--sync"/>
130130 <keyword type="property" name="The &quot;throttle-time&quot; property" link="GstBaseSink.html#GstBaseSink--throttle-time"/>
131131 <keyword type="property" name="The &quot;ts-offset&quot; property" link="GstBaseSink.html#GstBaseSink--ts-offset"/>
132 <keyword type="" name="Use Cases" link="GstBaseTransform.html#idp5388448"/>
133 <keyword type="" name="Sub-class settable flags on GstBaseTransform" link="GstBaseTransform.html#idp6912544"/>
132 <keyword type="" name="Use Cases" link="GstBaseTransform.html#idp35617104"/>
133 <keyword type="" name="Sub-class settable flags on GstBaseTransform" link="GstBaseTransform.html#idp38847872"/>
134134 <keyword type="struct" name="struct GstBaseTransform" link="GstBaseTransform.html#GstBaseTransform-struct"/>
135135 <keyword type="struct" name="struct GstBaseTransformClass" link="GstBaseTransform.html#GstBaseTransformClass"/>
136136 <keyword type="function" name="gst_base_transform_is_passthrough ()" link="GstBaseTransform.html#gst-base-transform-is-passthrough"/>
137137 <keyword type="function" name="gst_base_transform_set_passthrough ()" link="GstBaseTransform.html#gst-base-transform-set-passthrough"/>
138 <keyword type="function" name="gst_base_transform_set_prefer_passthrough ()" link="GstBaseTransform.html#gst-base-transform-set-prefer-passthrough" since="1.0.1"/>
138139 <keyword type="function" name="gst_base_transform_is_in_place ()" link="GstBaseTransform.html#gst-base-transform-is-in-place"/>
139140 <keyword type="function" name="gst_base_transform_set_in_place ()" link="GstBaseTransform.html#gst-base-transform-set-in-place"/>
140141 <keyword type="function" name="gst_base_transform_is_qos_enabled ()" link="GstBaseTransform.html#gst-base-transform-is-qos-enabled"/>
3333 <span class="refentrytitle"><a href="GstBaseSrc.html">GstBaseSrc</a></span><span class="refpurpose"> — Base class for getrange based source elements</span>
3434 </dt>
3535 <dt>
36 <span class="refentrytitle"><a href="GstBaseSink.html">GstBaseSink</a></span><span class="refpurpose"></span>
36 <span class="refentrytitle"><a href="GstBaseSink.html">GstBaseSink</a></span><span class="refpurpose"> — Base class for sink elements</span>
3737 </dt>
3838 <dt>
3939 <span class="refentrytitle"><a href="GstBaseTransform.html">GstBaseTransform</a></span><span class="refpurpose"> — Base class for simple transform filters</span>
1414 <div>
1515 <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer 1.0 Library Reference Manual</p></th></tr></table></div>
1616 <div><p class="releaseinfo">
17 for GStreamer Library 1.0 (1.0.0)
17 for GStreamer Library 1.0 (1.0.1)
1818 The latest version of this documentation can be found on-line at
1919 <a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/</a>.
2020 </p></div>
3333 <span class="refentrytitle"><a href="GstBaseSrc.html">GstBaseSrc</a></span><span class="refpurpose"> — Base class for getrange based source elements</span>
3434 </dt>
3535 <dt>
36 <span class="refentrytitle"><a href="GstBaseSink.html">GstBaseSink</a></span><span class="refpurpose"></span>
36 <span class="refentrytitle"><a href="GstBaseSink.html">GstBaseSink</a></span><span class="refpurpose"> — Base class for sink elements</span>
3737 </dt>
3838 <dt>
3939 <span class="refentrytitle"><a href="GstBaseTransform.html">GstBaseTransform</a></span><span class="refpurpose"> — Base class for simple transform filters</span>
117117 <ANCHOR id="GstBaseSink--sync" href="gstreamer-libs-1.0/GstBaseSink.html#GstBaseSink--sync">
118118 <ANCHOR id="GstBaseSink--throttle-time" href="gstreamer-libs-1.0/GstBaseSink.html#GstBaseSink--throttle-time">
119119 <ANCHOR id="GstBaseSink--ts-offset" href="gstreamer-libs-1.0/GstBaseSink.html#GstBaseSink--ts-offset">
120 <ANCHOR id="GstBaseSink.see-also" href="gstreamer-libs-1.0/GstBaseSink.html#GstBaseSink.see-also">
120121 <ANCHOR id="GstBaseTransform" href="gstreamer-libs-1.0/GstBaseTransform.html">
121122 <ANCHOR id="GstBaseTransform.synopsis" href="gstreamer-libs-1.0/GstBaseTransform.html#GstBaseTransform.synopsis">
122123 <ANCHOR id="GstBaseTransform.object-hierarchy" href="gstreamer-libs-1.0/GstBaseTransform.html#GstBaseTransform.object-hierarchy">
127128 <ANCHOR id="GstBaseTransformClass" href="gstreamer-libs-1.0/GstBaseTransform.html#GstBaseTransformClass">
128129 <ANCHOR id="gst-base-transform-is-passthrough" href="gstreamer-libs-1.0/GstBaseTransform.html#gst-base-transform-is-passthrough">
129130 <ANCHOR id="gst-base-transform-set-passthrough" href="gstreamer-libs-1.0/GstBaseTransform.html#gst-base-transform-set-passthrough">
131 <ANCHOR id="gst-base-transform-set-prefer-passthrough" href="gstreamer-libs-1.0/GstBaseTransform.html#gst-base-transform-set-prefer-passthrough">
130132 <ANCHOR id="gst-base-transform-is-in-place" href="gstreamer-libs-1.0/GstBaseTransform.html#gst-base-transform-is-in-place">
131133 <ANCHOR id="gst-base-transform-set-in-place" href="gstreamer-libs-1.0/GstBaseTransform.html#gst-base-transform-set-in-place">
132134 <ANCHOR id="gst-base-transform-is-qos-enabled" href="gstreamer-libs-1.0/GstBaseTransform.html#gst-base-transform-is-qos-enabled">
887887 if echo $(FORMATS) | grep ps > /dev/null; then export SRC="$$SRC $(DOC).ps"; fi; \
888888 if echo $(FORMATS) | grep pdf > /dev/null; then export SRC="$$SRC $(DOC).pdf"; fi; \
889889 \
890 # upload releases to both 0.10.X/ and head/ subdirectories \
891 if test "x$(PACKAGE_VERSION_NANO)" = x0; then \
892 export DIR=$(DOC_BASE)/gstreamer/$(VERSION)/$(DOC); \
893 echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
894 ssh $(DOC_SERVER) mkdir -p $$DIR; \
895 rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
896 ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
897 fi; \
890 # upload releases to both X.Y/ and head/ subdirectories \
891 export DIR=$(DOC_BASE)/gstreamer/$(PACKAGE_VERSION_MAJOR).$(PACKAGE_VERSION_MINOR)/$(DOC); \
892 echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
893 ssh $(DOC_SERVER) mkdir -p $$DIR; \
894 rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
895 ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
898896 \
899897 export DIR=$(DOC_BASE)/gstreamer/head/$(DOC); \
900898 echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
1919 without needing any adaptations to its autopluggers.
2020 </para>
2121 <para>
22 We will first introduce the concept of MIME types as a dynamic and
22 We will first introduce the concept of Media types as a dynamic and
2323 extendible way of identifying media streams. After that, we will introduce
2424 the concept of typefinding to find the type of a media stream. Lastly,
2525 we will explain how autoplugging and the &GStreamer; registry can be
26 used to setup a pipeline that will convert media from one mimetype to
26 used to setup a pipeline that will convert media from one mediatype to
2727 another, for example for media decoding.
2828 </para>
2929
30 <sect1 id="section-mime">
31 <title>MIME-types as a way to identify streams</title>
30 <sect1 id="section-media">
31 <title>Media types as a way to identify streams</title>
3232 <para>
3333 We have previously introduced the concept of capabilities as a way
3434 for elements (or, rather, pads) to agree on a media type when
3535 streaming data from one element to the next (see <xref
3636 linkend="section-caps"/>). We have explained that a capability is
37 a combination of a mimetype and a set of properties. For most
37 a combination of a media type and a set of properties. For most
3838 container formats (those are the files that you will find on your
3939 hard disk; Ogg, for example, is a container format), no properties
40 are needed to describe the stream. Only a MIME-type is needed. A
41 full list of MIME-types and accompanying properties can be found
40 are needed to describe the stream. Only a media type is needed. A
41 full list of media types and accompanying properties can be found
4242 in <ulink type="http"
4343 url="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/pwg/html/section-types-definitions.html">the
4444 Plugin Writer's Guide</ulink>.
4545 </para>
4646 <para>
47 An element must associate a MIME-type to its source and sink pads
47 An element must associate a media type to its source and sink pads
4848 when it is loaded into the system. &GStreamer; knows about the
4949 different elements and what type of data they expect and emit through
5050 the &GStreamer; registry. This allows for very dynamic and extensible
5353
5454 <para>
5555 In <xref linkend="chapter-helloworld"/>, we've learned to build a
56 music player for Ogg/Vorbis files. Let's look at the MIME-types
56 music player for Ogg/Vorbis files. Let's look at the media types
5757 associated with each pad in this pipeline. <xref
58 linkend="section-mime-img"/> shows what MIME-type belongs to each
58 linkend="section-mime-img"/> shows what media type belongs to each
5959 pad in this pipeline.
6060 </para>
6161
6262 <figure float="1" id="section-mime-img">
63 <title>The Hello world pipeline with MIME types</title>
63 <title>The Hello world pipeline with media types</title>
6464 <mediaobject>
6565 <imageobject>
6666 <imagedata scale="75" fileref="images/mime-world.&image;" format="&IMAGE;"/>
9797 <para>
9898 Plugins in &GStreamer; can, as mentioned before, implement typefinder
9999 functionality. A plugin implementing this functionality will submit
100 a mimetype, optionally a set of file extensions commonly used for this
100 a media type, optionally a set of file extensions commonly used for this
101101 media type, and a typefind function. Once this typefind function inside
102102 the plugin is called, the plugin will see if the data in this media
103103 stream matches a specific pattern that marks the media type identified
104 by that mimetype. If it does, it will notify the typefind element of
104 by that media type. If it does, it will notify the typefind element of
105105 this fact, telling which mediatype was recognized and how certain we
106106 are that this stream is indeed that mediatype. Once this run has been
107107 completed for all plugins implementing a typefind functionality, the
232232 </sect1>
233233
234234 <sect1 id="section-dynamic">
235 <title>Plugging together dynamic pipelines</title>
235 <title>Dynamically autoplugging a pipeline</title>
236236 <warning><para>
237237 The code in this section is broken, outdated and overly complicated.
238238 Also, you should use decodebin, playbin or uridecodebin to get
256256 the registry that can decode this streamtype. For this, we will get
257257 all element factories (which we've seen before in <xref
258258 linkend="section-elements-create"/>) and find the ones with the
259 given MIME-type and capabilities on their sinkpad. Note that we will
259 given media type and capabilities on their sinkpad. Note that we will
260260 only use parsers, demuxers and decoders. We will not use factories for
261261 any other element types, or we might get into a loop of encoders and
262262 decoders. For this, we will want to build a list of <quote>allowed</quote>
415415 GstCaps *caps)
416416 {
417417 GstObject *parent = GST_OBJECT (GST_OBJECT_PARENT (pad));
418 const gchar *mime;
418 const gchar *media;
419419 const GList *item;
420420 GstCaps *res, *audiocaps;
421421
427427 }
428428
429429 /* as said above, we only try to plug audio... Omit video */
430 mime = gst_structure_get_name (gst_caps_get_structure (caps, 0));
431 if (g_strrstr (mime, "video")) {
432 g_print ("Omitting link for pad %s:%s because mimetype %s is non-audio\n",
433 GST_OBJECT_NAME (parent), GST_OBJECT_NAME (pad), mime);
430 media = gst_structure_get_name (gst_caps_get_structure (caps, 0));
431 if (g_strrstr (media, "video")) {
432 g_print ("Omitting link for pad %s:%s because media type %s is non-audio\n",
433 GST_OBJECT_NAME (parent), GST_OBJECT_NAME (pad), media);
434434 return;
435435 }
436436
488488
489489 /* if we get here, no item was found */
490490 g_print ("No compatible pad found to decode %s on %s:%s\n",
491 mime, GST_OBJECT_NAME (parent), GST_OBJECT_NAME (pad));
491 media, GST_OBJECT_NAME (parent), GST_OBJECT_NAME (pad));
492492 }
493493
494494 static void
11 <title>Pipeline manipulation</title>
22 <para>
33 This chapter will discuss how you can manipulate your pipeline in several
4 ways from your application on. Parts of this chapter are downright
5 hackish, so be assured that you'll need some programming knowledge
6 before you start reading this.
4 ways from your application on. Parts of this chapter are very
5 lowlevel, so be assured that you'll need some programming knowledge
6 and a good understanding of &GStreamer; before you start reading this.
77 </para>
88 <para>
99 Topics that will be discussed here include how you can insert data into
1212 to listen to a pipeline's data processing.
1313 </para>
1414
15 <sect1 id="section-data-probe">
16 <title>Data probing</title>
15 <sect1 id="section-using-probes">
16 <title>Using probes</title>
1717 <para>
1818 Probing is best envisioned as a pad listener. Technically, a probe is
19 nothing more than a signal callback that can be attached to a pad.
20 Those signals are by default not fired at all (since that may have a
21 negative impact on performance), but can be enabled by attaching a
22 probe using <function>gst_pad_add_buffer_probe ()</function>,
23 <function>gst_pad_add_event_probe ()</function>, or
24 <function>gst_pad_add_data_probe ()</function>.
25 Those functions attach the signal handler and
26 enable the actual signal emission. Similarly, one can use the
27 <function>gst_pad_remove_buffer_probe ()</function>,
28 <function>gst_pad_remove_event_probe ()</function>, or
29 <function>gst_pad_remove_data_probe ()</function>
30 to remove the signal handlers again.
19 nothing more than a callback that can be attached to a pad.
20 You can attach a probe using <function>gst_pad_add_probe ()</function>.
21 Similarly, one can use the
22 <function>gst_pad_remove_probe ()</function>
23 to remove the callback again. The probe notifies you of any activity
24 that happens on the pad, like buffers, events and queries. You can
25 define what kind of notifications you are interested in when you
26 add the probe.
3127 </para>
3228 <para>
33 Probes run in pipeline threading context, so callbacks should try to
34 not block and generally not do any weird stuff, since this could
35 have a negative impact on pipeline performance or, in case of bugs,
36 cause deadlocks or crashes. More precisely, one should usually not
37 call any GUI-related functions from within a probe callback, nor try
38 to change the state of the pipeline. An application may post custom
39 messages on the pipeline's bus though to communicate with the main
40 application thread and have it do things like stop the pipeline.
29 The probe can notify you of the following activity on pads:
4130 </para>
42 <para>
43 In any case, most common buffer operations
44 that elements can do in <function>_chain ()</function> functions, can
45 be done in probe callbacks as well. The example below gives a short
46 impression on how to use them (even if this usage is not entirely
47 correct, but more on that below):
48 </para>
49 <programlisting><!-- example-begin probe.c -->
50 #include &lt;gst/gst.h&gt;
51
52 static gboolean
53 cb_have_data (GstPad *pad,
54 GstBuffer *buffer,
55 gpointer u_data)
31 <itemizedlist>
32 <listitem>
33 <para>
34 A buffer is pushed or pulled. You want to specify the
35 GST_PAD_PROBE_TYPE_BUFFER when registering the probe. Because the
36 pad can be scheduled in different ways, it is possible to also
37 specify in what scheduling mode you are interested with the
38 optional GST_PAD_PROBE_TYPE_PUSH and GST_PAD_PROBE_TYPE_PULL
39 flags.
40 </para>
41 <para>
42 You can use this probe to inspect, modify or drop the buffer.
43 See <xref linkend="section-data-probes"/>.
44 </para>
45 </listitem>
46 <listitem>
47 <para>
48 A bufferlist is pushed. Use the GST_PAD_PROBE_TYPE_BUFFER_LIST
49 when registering the probe.
50 </para>
51 </listitem>
52 <listitem>
53 <para>
54 An event travels over a pad. Use the GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM
55 and GST_PAD_PROBE_TYPE_EVENT_UPSTREAM flags to select downstream
56 and upstream events. There is also a convenience
57 GST_PAD_PROBE_TYPE_EVENT_BOTH to be notified of events going both
58 upstream and downstream. By default, flush events do not cause
59 a notification. You need to explicitly enable GST_PAD_PROBE_TYPE_EVENT_FLUSH
60 to receive callbacks from flushing events. Events are always
61 only notified in push mode.
62 </para>
63 <para>
64 You can use this probe to inspect, modify or drop the event.
65 </para>
66 </listitem>
67 <listitem>
68 <para>
69 A query travels over a pad. Use the GST_PAD_PROBE_TYPE_QUERY_DOWNSTREAM
70 and GST_PAD_PROBE_TYPE_QUERY_UPSTREAM flags to select downstream
71 and upstream queries. The convenience GST_PAD_PROBE_TYPE_QUERY_BOTH
72 can also be used to select both directions. Query probes will be
73 notified twice, once when the query travels upstream/downstream and
74 once when the query result is returned. You can select in what stage
75 the callback will be called with the GST_PAD_PROBE_TYPE_PUSH and
76 GST_PAD_PROBE_TYPE_PULL, respectively when the query is performed
77 and when the query result is returned.
78 </para>
79 <para>
80 You can use this probe to inspect or modify the query. You can also
81 answer the query in the probe callback by placing the result value
82 in the query and by returning GST_PAD_PROBE_DROP from the
83 callback.
84 </para>
85 </listitem>
86 <listitem>
87 <para>
88 In addition to notifying you of dataflow, you can also ask the
89 probe to block the dataflow when the callback returns. This is
90 called a blocking probe and is activated by specifying the
91 GST_PAD_PROBE_TYPE_BLOCK flag. You can use this flag with the
92 other flags to only block dataflow on selected activity. A pad
93 becomes unblocked again if you remove the probe or when you return
94 GST_PAD_PROBE_REMOVE from the callback. You can let only the
95 currently blocked item pass by returning GST_PAD_PROBE_PASS
96 from the callback, it will block again on the next item.
97 </para>
98 <para>
99 Blocking probes are used to temporarily block pads because they
100 are unlinked or because you are going to unlink them. If the
101 dataflow is not blocked, the pipeline would go into an error
102 state if data is pushed on an unlinked pad. We will se how
103 to use blocking probes to partially preroll a pipeline.
104 See also <xref linkend="section-preroll-probes"/>.
105 </para>
106 </listitem>
107 <listitem>
108 <para>
109 Be notified when no activity is happening on a pad. You install
110 this probe with the GST_PAD_PROBE_TYPE_IDLE flag. You can specify
111 GST_PAD_PROBE_TYPE_PUSH and/or GST_PAD_PROBE_TYPE_PULL to
112 only be notified depending on the pad scheduling mode.
113 The IDLE probe is also a blocking probe in that it will not let
114 any data pass on the pad for as long as the IDLE probe is
115 installed.
116 </para>
117 <para>
118 You can use idle probes to dynamically relink a pad. We will see
119 how to use idle probes to replace an element in the pipeline.
120 See also <xref linkend="section-dynamic-pipelines"/>.
121 </para>
122 </listitem>
123 </itemizedlist>
124
125 <sect2 id="section-data-probes">
126 <title>Data probes</title>
127 <para>
128 Data probes allow you to be notified when there is data passing
129 on a pad. When adding the probe, specify the GST_PAD_PROBE_TYPE_BUFFER
130 and/or GST_PAD_PROBE_TYPE_BUFFER_LIST.
131 </para>
132 <para>
133 Data probes run in pipeline streaming thread context, so callbacks
134 should try to not block and generally not do any weird stuff, since
135 this could have a negative impact on pipeline performance or, in case
136 of bugs, cause deadlocks or crashes. More precisely, one should usually
137 not call any GUI-related functions from within a probe callback, nor try
138 to change the state of the pipeline. An application may post custom
139 messages on the pipeline's bus though to communicate with the main
140 application thread and have it do things like stop the pipeline.
141 </para>
142 <para>
143 In any case, most common buffer operations
144 that elements can do in <function>_chain ()</function> functions, can
145 be done in probe callbacks as well. The example below gives a short
146 impression on how to use them.
147 </para>
148 <programlisting>
149 <!-- example-begin probe.c -->
150 <![CDATA[
151 #include <gst/gst.h>
152
153 static GstPadProbeReturn
154 cb_have_data (GstPad *pad,
155 GstPadProbeInfo *info,
156 gpointer user_data)
56157 {
57158 gint x, y;
58 GstMapInfo info;
159 GstMapInfo map;
59160 guint16 *ptr, t;
161 GstBuffer *buffer;
162
163 buffer = GST_PAD_PROBE_INFO_BUFFER (info);
164
165 buffer = gst_buffer_make_writable (buffer);
60166
61 gst_buffer_map (buffer, &amp;info, GST_MAP_WRITE);
62
63 ptr = info.data;
167 gst_buffer_map (buffer, &map, GST_MAP_WRITE);
168
169 ptr = (guint16 *) map.data;
64170 /* invert data */
65 for (y = 0; y &lt; 288; y++) {
66 for (x = 0; x &lt; 384 / 2; x++) {
171 for (y = 0; y < 288; y++) {
172 for (x = 0; x < 384 / 2; x++) {
67173 t = ptr[384 - 1 - x];
68174 ptr[384 - 1 - x] = ptr[x];
69175 ptr[x] = t;
70176 }
71177 ptr += 384;
72178 }
73 gst_buffer_unmap (buffer, &amp;info);
74
75 return TRUE;
179 gst_buffer_unmap (buffer, &map);
180
181 GST_PAD_PROBE_INFO_DATA (info) = buffer;
182
183 return GST_PAD_PROBE_OK;
76184 }
77185
78186 gint
85193 GstPad *pad;
86194
87195 /* init GStreamer */
88 gst_init (&amp;argc, &amp;argv);
196 gst_init (&argc, &argv);
89197 loop = g_main_loop_new (NULL, FALSE);
90198
91199 /* build */
119227 g_object_set (G_OBJECT (filter), "caps", filtercaps, NULL);
120228 gst_caps_unref (filtercaps);
121229
122 pad = gst_element_get_pad (src, "src");
123 gst_pad_add_buffer_probe (pad, G_CALLBACK (cb_have_data), NULL);
230 pad = gst_element_get_static_pad (src, "src");
231 gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BUFFER,
232 (GstPadProbeCallback) cb_have_data, NULL, NULL);
124233 gst_object_unref (pad);
125234
126235 /* run */
140249
141250 return 0;
142251 }
143 <!-- example-end probe.c --></programlisting>
144 <para>
145 Compare that output with the output of <quote>gst-launch-0.10
146 videotestsrc ! xvimagesink</quote>, just so you know what you're
147 looking for.
148 </para>
149 <para>
150 The above example is not really correct though. Strictly speaking, a
151 pad probe callback is only allowed to modify the buffer content if the
152 buffer is writable, and it is only allowed to modify buffer metadata like
153 timestamps, caps, etc. if the buffer metadata is writable. Whether this
154 is the case or not depends a lot on the pipeline and the elements
155 involved. Often enough, this is the case, but sometimes it is not,
156 and if it is not then unexpected modification of the data or metadata
157 can introduce bugs that are very hard to debug and track down. You can
158 check if a buffer and its metadata are writable with
159 <function>gst_buffer_is_writable ()</function> and
160 <function>gst_buffer_is_metadata_writable ()</function>. Since you
161 can't pass back a different buffer than the one passed in, there is no
162 point of making a buffer writable in the callback function.
163 </para>
164 <para>
165 Pad probes are suited best for looking at data as it passes through
166 the pipeline. If you need to modify data, you should write your own
167 GStreamer element. Base classes like GstAudioFilter, GstVideoFilter or
168 GstBaseTransform make this fairly easy.
169 </para>
170 <para>
171 If you just want to inspect buffers as they pass through the pipeline,
172 you don't even need to set up pad probes. You could also just insert
173 an identity element into the pipeline and connect to its "handoff"
174 signal. The identity element also provides a few useful debugging tools
175 like the "dump" property or the "last-message" property (the latter is
176 enabled by passing the '-v' switch to gst-launch).
177 </para>
252 ]]>
253 <!-- example-end probe.c -->
254 </programlisting>
255 <para>
256 Compare that output with the output of <quote>gst-launch-1.0
257 videotestsrc ! xvimagesink</quote>, just so you know what you're
258 looking for.
259 </para>
260 <para>
261 Strictly speaking, a pad probe callback is only allowed to modify the
262 buffer content if the buffer is writable. Whether this is the case or
263 not depends a lot on the pipeline and the elements involved. Often
264 enough, this is the case, but sometimes it is not, and if it is not
265 then unexpected modification of the data or metadata can introduce
266 bugs that are very hard to debug and track down. You can check if a
267 buffer is writable with <function>gst_buffer_is_writable ()</function>.
268 Since you can pass back a different buffer than the one passed in,
269 it is a good idea to make the buffer writable in the callback function
270 with <function>gst_buffer_make_writable ()</function>.
271 </para>
272 <para>
273 Pad probes are suited best for looking at data as it passes through
274 the pipeline. If you need to modify data, you should better write your
275 own GStreamer element. Base classes like GstAudioFilter, GstVideoFilter or
276 GstBaseTransform make this fairly easy.
277 </para>
278 <para>
279 If you just want to inspect buffers as they pass through the pipeline,
280 you don't even need to set up pad probes. You could also just insert
281 an identity element into the pipeline and connect to its "handoff"
282 signal. The identity element also provides a few useful debugging tools
283 like the "dump" property or the "last-message" property (the latter is
284 enabled by passing the '-v' switch to gst-launch and by setting the
285 silent property on the identity to FALSE).
286 </para>
287 </sect2>
288
289 <sect2 id="section-preroll-probes">
290 <title>Play a region of a media file</title>
291 <para>
292 In this example we will show you how to play back a region of
293 a media file. The goal is to only play the part of a file
294 from 2 seconds to 5 seconds and then EOS.
295 </para>
296 <para>
297 In a first step we will set a uridecodebin element to the PAUSED
298 state and make sure that we block all the source pads that are
299 created. When all the source pads are blocked, we have data on
300 all source pads and we say that the uridecodebin is prerolled.
301 </para>
302 <para>
303 In a prerolled pipeline we can ask for the duration of the media
304 and we can also perform seeks. We are interested in performing a
305 seek operation on the pipeline to select the range of media
306 that we are interested in.
307 </para>
308 <para>
309 After we configure the region we are interested in, we can link
310 the sink element, unblock the source pads and set the pipeline to
311 the playing state. You will see that exactly the requested
312 region is played by the sink before it goes to EOS.
313 What follows
314 </para>
315 <para>
316 What follows is an example application that loosly follows this
317 algorithm.
318 </para>
319 <programlisting>
320 <!-- example-begin blockprobe.c -->
321 <![CDATA[
322 #include <gst/gst.h>
323
324 static GMainLoop *loop;
325 static volatile gint counter;
326 static GstBus *bus;
327 static gboolean prerolled = FALSE;
328 static GstPad *sinkpad;
329
330 static void
331 dec_counter (GstElement * pipeline)
332 {
333 if (prerolled)
334 return;
335
336 if (g_atomic_int_dec_and_test (&counter)) {
337 /* all probes blocked and no-more-pads signaled, post
338 * message on the bus. */
339 prerolled = TRUE;
340
341 gst_bus_post (bus, gst_message_new_application (
342 GST_OBJECT_CAST (pipeline),
343 gst_structure_new_empty ("ExPrerolled")));
344 }
345 }
346
347 /* called when a source pad of uridecodebin is blocked */
348 static GstPadProbeReturn
349 cb_blocked (GstPad *pad,
350 GstPadProbeInfo *info,
351 gpointer user_data)
352 {
353 GstElement *pipeline = GST_ELEMENT (user_data);
354
355 if (prerolled)
356 return GST_PAD_PROBE_REMOVE;
357
358 dec_counter (pipeline);
359
360 return GST_PAD_PROBE_OK;
361 }
362
363 /* called when uridecodebin has a new pad */
364 static void
365 cb_pad_added (GstElement *element,
366 GstPad *pad,
367 gpointer user_data)
368 {
369 GstElement *pipeline = GST_ELEMENT (user_data);
370
371 if (prerolled)
372 return;
373
374 g_atomic_int_inc (&counter);
375
376 gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM,
377 (GstPadProbeCallback) cb_blocked, pipeline, NULL);
378
379 /* try to link to the video pad */
380 gst_pad_link (pad, sinkpad);
381 }
382
383 /* called when uridecodebin has created all pads */
384 static void
385 cb_no_more_pads (GstElement *element,
386 gpointer user_data)
387 {
388 GstElement *pipeline = GST_ELEMENT (user_data);
389
390 if (prerolled)
391 return;
392
393 dec_counter (pipeline);
394 }
395
396 /* called when a new message is posted on the bus */
397 static void
398 cb_message (GstBus *bus,
399 GstMessage *message,
400 gpointer user_data)
401 {
402 GstElement *pipeline = GST_ELEMENT (user_data);
403
404 switch (GST_MESSAGE_TYPE (message)) {
405 case GST_MESSAGE_ERROR:
406 g_print ("we received an error!\n");
407 g_main_loop_quit (loop);
408 break;
409 case GST_MESSAGE_EOS:
410 g_print ("we reached EOS\n");
411 g_main_loop_quit (loop);
412 break;
413 case GST_MESSAGE_APPLICATION:
414 {
415 if (gst_message_has_name (message, "ExPrerolled")) {
416 /* it's our message */
417 g_print ("we are all prerolled, do seek\n");
418 gst_element_seek (pipeline,
419 1.0, GST_FORMAT_TIME,
420 GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE,
421 GST_SEEK_TYPE_SET, 2 * GST_SECOND,
422 GST_SEEK_TYPE_SET, 5 * GST_SECOND);
423
424 gst_element_set_state (pipeline, GST_STATE_PLAYING);
425 }
426 break;
427 }
428 default:
429 break;
430 }
431 }
432
433 gint
434 main (gint argc,
435 gchar *argv[])
436 {
437 GstElement *pipeline, *src, *csp, *vs, *sink;
438
439 /* init GStreamer */
440 gst_init (&argc, &argv);
441 loop = g_main_loop_new (NULL, FALSE);
442
443 if (argc < 2) {
444 g_print ("usage: %s <uri>", argv[0]);
445 return -1;
446 }
447
448 /* build */
449 pipeline = gst_pipeline_new ("my-pipeline");
450
451 bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
452 gst_bus_add_signal_watch (bus);
453 g_signal_connect (bus, "message", (GCallback) cb_message,
454 pipeline);
455
456 src = gst_element_factory_make ("uridecodebin", "src");
457 if (src == NULL)
458 g_error ("Could not create 'uridecodebin' element");
459
460 g_object_set (src, "uri", argv[1], NULL);
461
462 csp = gst_element_factory_make ("videoconvert", "csp");
463 if (csp == NULL)
464 g_error ("Could not create 'videoconvert' element");
465
466 vs = gst_element_factory_make ("videoscale", "vs");
467 if (csp == NULL)
468 g_error ("Could not create 'videoscale' element");
469
470 sink = gst_element_factory_make ("autovideosink", "sink");
471 if (sink == NULL)
472 g_error ("Could not create 'autovideosink' element");
473
474 gst_bin_add_many (GST_BIN (pipeline), src, csp, vs, sink, NULL);
475
476 /* can't link src yet, it has no pads */
477 gst_element_link_many (csp, vs, sink, NULL);
478
479 sinkpad = gst_element_get_static_pad (csp, "sink");
480
481 /* for each pad block that is installed, we will increment
482 * the counter. for each pad block that is signaled, we
483 * decrement the counter. When the counter is 0 we post
484 * an app message to tell the app that all pads are
485 * blocked. Start with 1 that is decremented when no-more-pads
486 * is signaled to make sure that we only post the message
487 * after no-more-pads */
488 g_atomic_int_set (&counter, 1);
489
490 g_signal_connect (src, "pad-added",
491 (GCallback) cb_pad_added, pipeline);
492 g_signal_connect (src, "no-more-pads",
493 (GCallback) cb_no_more_pads, pipeline);
494
495 gst_element_set_state (pipeline, GST_STATE_PAUSED);
496
497 g_main_loop_run (loop);
498
499 gst_element_set_state (pipeline, GST_STATE_NULL);
500
501 gst_object_unref (sinkpad);
502 gst_object_unref (bus);
503 gst_object_unref (pipeline);
504 g_main_loop_unref (loop);
505
506 return 0;
507 }
508 ]]>
509 <!-- example-end blockprobe.c -->
510 </programlisting>
511 <para>
512 Note that we use a custom application message to signal the
513 main thread that the uridecidebin is prerolled. The main thread
514 will then issue a flushing seek to the requested region. The
515 flush will temporarily unblock the pad and reblock them when
516 new data arrives again. We detect this second block to remove
517 the probes. Then we set the pipeline to PLAYING and it should
518 play from 2 to 5 seconds, then EOS and exit the application.
519 </para>
520 </sect2>
178521 </sect1>
179522
180523 <sect1 id="section-data-spoof">
183526 Many people have expressed the wish to use their own sources to inject
184527 data into a pipeline. Some people have also expressed the wish to grab
185528 the output in a pipeline and take care of the actual output inside
186 their application. While either of these methods are stongly
187 discouraged, &GStreamer; offers hacks to do this. <emphasis>However,
188 there is no support for those methods.</emphasis> If it doesn't work,
189 you're on your own. Also, synchronization, thread-safety and other
190 things that you've been able to take for granted so far are no longer
191 guaranteed if you use any of those methods. It's always better to
192 simply write a plugin and have the pipeline schedule and manage it.
529 their application. While either of these methods are strongly
530 discouraged, &GStreamer; offers support for this.
531 <emphasis>Beware! You need to know what you are doing.</emphasis> Since
532 you don't have any support from a base class you need to thoroughly
533 understand state changes and synchronization. If it doesn't work,
534 there are a million ways to shoot yourself in the foot. It's always
535 better to simply write a plugin and have the base class manage it.
193536 See the Plugin Writer's Guide for more information on this topic. Also
194537 see the next section, which will explain how to embed plugins statically
195538 in your application.
196539 </para>
197 <note><para>
198 <ulink type="http"
199 url="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gstreamer-app.html">New
200 API</ulink> was developed to make data insertion and extraction easy
201 for applications. It can be found as GstAppSrc and GstAppSink in the
202 <ulink type="http"
203 url="http://gstreamer.freedesktop.org/modules/gst-plugins-base.html">
204 gst-plugins-base</ulink> module.
205 </para></note>
206540 <para>
207 After all those disclaimers, let's start. There's three possible
208 elements that you can use for the above-mentioned purposes. Those are
209 called <quote>fakesrc</quote> (an imaginary source),
210 <quote>fakesink</quote> (an imaginary sink) and <quote>identity</quote>
211 (an imaginary filter). The same method applies to each of those
212 elements. Here, we will discuss how to use those elements to insert
213 (using fakesrc) or grab (using fakesink or identity) data from a
541 There's two possible elements that you can use for the above-mentioned
542 purposes. Those are called <quote>appsrc</quote> (an imaginary source)
543 and <quote>appsink</quote> (an imaginary sink). The same method applies
544 to each of those elements. Here, we will discuss how to use those
545 elements to insert (using appsrc) or grab (using appsink) data from a
214546 pipeline, and how to set negotiation.
215547 </para>
216548 <para>
217 Those who're paying close attention will notice that the purpose
218 of identity is almost identical to that of probes. Indeed, this is
219 true. Probes allow for the same purpose, and a bunch more, and
220 with less overhead plus dynamic removing/adding of handlers, but
221 apart from those, probes and identity have the same purpose, just
222 in a completely different implementation type.
549 Both appsrc and appsink provide 2 sets of API. One API uses standard
550 GObject (action) signals and properties. The same API is also
551 available as a regular C api. The C api is more performant but
552 requires you to link to the app library in order to use the elements.
223553 </para>
224554
225 <sect2 id="section-spoof-handoff">
226 <title>Inserting or grabbing data</title>
227 <para>
228 The three before-mentioned elements (fakesrc, fakesink and identity)
229 each have a <quote>handoff</quote> signal that will be called in
230 the <function>_get ()</function>- (fakesrc) or <function>_chain
231 ()</function>-function (identity, fakesink). In the signal handler,
232 you can set (fakesrc) or get (identity, fakesink) data to/from the
233 provided buffer. Note that in the case of fakesrc, you have to set
234 the size of the provided buffer using the <quote>sizemax</quote>
235 property. For both fakesrc and fakesink, you also have to set the
236 <quote>signal-handoffs</quote> property for this method to work.
237 </para>
238 <para>
239 Note that your handoff function should <emphasis>not</emphasis>
240 block, since this will block pipeline iteration. Also, do not try
241 to use all sort of weird hacks in such functions to accomplish
242 something that looks like synchronization or so; it's not the right
243 way and will lead to issues elsewhere. If you're doing any of this,
244 you're basically misunderstanding the &GStreamer; design.
245 </para>
246 </sect2>
247
248 <sect2 id="section-spoof-format">
249 <title>Forcing a format</title>
250 <para>
251 Sometimes, when using fakesrc as a source in your pipeline, you'll
252 want to set a specific format, for example a video size and format
253 or an audio bitsize and number of channels. You can do this by
254 forcing a specific <classname>GstCaps</classname> on the pipeline,
255 which is possible by using <emphasis>filtered caps</emphasis>. You
256 can set a filtered caps on a link by using the
257 <quote>capsfilter</quote> element in between the two elements, and
258 specifying a <classname>GstCaps</classname> as
259 <quote>caps</quote> property on this element. It will then
260 only allow types matching that specified capability set for
261 negotiation. See also <xref linkend="section-caps-filter"/>.
262 </para>
263 </sect2>
264
265 <sect2 id="section-spoof-example">
266 <title>Example application</title>
267 <para>
268 This example application will generate black/white (it switches
269 every second) video to an X-window output by using fakesrc as a
270 source and using filtered caps to force a format. Since the depth
271 of the image depends on your X-server settings, we use a colorspace
272 conversion element to make sure that the output to your X server
273 will have the correct bitdepth. You can also set timestamps on the
274 provided buffers to override the fixed framerate.
275 </para>
276 <programlisting><!-- example-begin fakesrc.c -->
277 #include &lt;string.h&gt; /* for memset () */
278 #include &lt;gst/gst.h&gt;
555 <sect2 id="section-spoof-appsrc">
556 <title>Inserting data with appsrc</title>
557 <para>
558 First we look at some examples for appsrc, which lets you insert data
559 into the pipeline from the application. Appsrc has some configuration
560 options that define how it will operate. You should decide about the
561 following configurations:
562 </para>
563 <itemizedlist>
564 <listitem>
565 <para>
566 Will the appsrc operate in push or pull mode. The stream-type
567 property can be used to control this. stream-type of
568 <quote>random-access</quote> will activate pull mode scheduling
569 while the other stream-types activate push mode.
570 </para>
571 </listitem>
572 <listitem>
573 <para>
574 The caps of the buffers that appsrc will push out. This needs to
575 be configured with the caps property. The caps must be set to a
576 fixed caps and will be used to negotiate a format downstream.
577 </para>
578 </listitem>
579 <listitem>
580 <para>
581 It the appsrc operates in live mode or not. This can be configured
582 with the is-live property. When operating in live-mode it is
583 important to configure the min-latency and max-latency in appsrc.
584 The min-latency should be set to the amount of time it takes between
585 capturing a buffer and when it is pushed inside appsrc.
586 In live mode, you should timestamp the buffers with the pipeline
587 running-time when the first byte of the buffer was captured before
588 feeding them to appsrc. You can let appsrc do the timestaping with
589 the do-timestamp property (but then the min-latency must be set
590 to 0 because it timestamps based on the running-time when the buffer
591 entered appsrc).
592 </para>
593 </listitem>
594 <listitem>
595 <para>
596 The format of the SEGMENT event that appsrc will push. The format
597 has implications for how the running-time of the buffers will
598 be calculated so you must be sure you understand this. For
599 live sources you probably want to set the format property to
600 GST_FORMAT_TIME. For non-live source it depends on the media type
601 that you are handling. If you plan to timestamp the buffers, you
602 should probably put a GST_FORMAT_TIME format, otherwise
603 GST_FORMAT_BYTES might be appropriate.
604 </para>
605 </listitem>
606 <listitem>
607 <para>
608 If appsrc operates in random-access mode, it is important to configure
609 the size property of appsrc with the number of bytes in the stream.
610 This will allow downstream elements to know the size of the media and
611 alows them to seek to the end of the stream when needed.
612 </para>
613 </listitem>
614 </itemizedlist>
615 <para>
616 The main way of handling data to appsrc is by using the function
617 <function>gst_app_src_push_buffer ()</function> or by emiting the
618 push-buffer action signal. This will put the buffer onto a queue from
619 which appsrc will read from in its streaming thread. It is important
620 to note that data transport will not happen from the thread that
621 performed the push-buffer call.
622 </para>
623 <para>
624 The <quote>max-bytes</quote> property controls how much data can be
625 queued in appsrc before appsrc considers the queue full. A filled
626 internal queue will always signal the <quote>enough-data</quote>
627 signal, which signals the application that it should stop pushing
628 data into appsrc. The <quote>block</quote> property will cause appsrc to
629 block the push-buffer method until free data becomes available again.
630 </para>
631 <para>
632 When the internal queue is running out of data, the
633 <quote>need-data</quote> signal is emitted, which signals the application
634 that it should start pushing more data into appsrc.
635 </para>
636 <para>
637 In addition to the <quote>need-data</quote> and <quote>enough-data</quote>
638 signals, appsrc can emit the <quote>seek-data</quote> signal when the
639 <quote>stream-mode</quote> property is set to <quote>seekable</quote>
640 or <quote>random-access</quote>. The signal argument will contain the
641 new desired position in the stream expressed in the unit set with the
642 <quote>format</quote> property. After receiving the seek-data signal,
643 the application should push-buffers from the new position.
644 </para>
645 <para>
646 When the last byte is pushed into appsrc, you must call
647 <function>gst_app_src_end_of_stream ()</function> to make it send
648 an EOS downstream.
649 </para>
650 <para>
651 These signals allow the application to operate appsrc in push and
652 pull mode as will be explained next.
653 </para>
654
655 <sect3 id="section-spoof-appsrc-push">
656 <title>Using appsrc in push mode</title>
657 <para>
658 When appsrc is configured in push mode (stream-type is stream or
659 seekable), the application repeatedly calls the push-buffer method
660 with a new buffer. Optionally, the queue size in the appsrc can be
661 controlled with the enough-data and need-data signals by respectively
662 stopping/starting the push-buffer calls. The value of the
663 min-percent property defines how empty the internal appsrc queue
664 needs to be before the need-data signal will be fired. You can set
665 this to some value >0 to avoid completely draining the queue.
666 </para>
667 <para>
668 When the stream-type is set to seekable, don't forget to implement
669 a seek-data callback.
670 </para>
671 <para>
672 Use this model when implementing various network protocols or
673 hardware devices.
674 </para>
675 </sect3>
676
677 <sect3 id="section-spoof-appsrc-pull">
678 <title>Using appsrc in pull mode</title>
679 <para>
680 In the pull model, data is fed to appsrc from the need-data signal
681 handler. You should push exactly the amount of bytes requested in the
682 need-data signal. You are only allowed to push less bytes when you are
683 at the end of the stream.
684 </para>
685 <para>
686 Use this model for file access or other randomly accessable sources.
687 </para>
688 </sect3>
689
690 <sect3 id="section-spoof-appsrc-ex">
691 <title>Appsrc example</title>
692 <para>
693 This example application will generate black/white (it switches
694 every second) video to an Xv-window output by using appsrc as a
695 source with caps to force a format. We use a colorspace
696 conversion element to make sure that we feed the right format to
697 your X server. We configure a video stream with a variable framerate
698 (0/1) and we set the timestamps on the outgoing buffers in such
699 a way that we play 2 frames per second.
700 </para>
701 <para>
702 Note how we use the pull mode method of pushing new buffers into
703 appsrc although appsrc is running in push mode.
704 </para>
705 <programlisting>
706 <!-- example-begin appsrc.c -->
707 <![CDATA[
708 #include <gst/gst.h>
709
710 static GMainLoop *loop;
279711
280712 static void
281 cb_handoff (GstElement *fakesrc,
282 GstBuffer *buffer,
283 GstPad *pad,
284 gpointer user_data)
713 cb_need_data (GstElement *appsrc,
714 guint unused_size,
715 gpointer user_data)
285716 {
286717 static gboolean white = FALSE;
287 GstMapInfo info;
718 static GstClockTime timestamp = 0;
719 GstBuffer *buffer;
720 guint size;
721 GstFlowReturn ret;
722
723 size = 385 * 288 * 2;
724
725 buffer = gst_buffer_new_allocate (NULL, size, NULL);
726
727 /* this makes the image black/white */
728 gst_buffer_memset (buffer, 0, white ? 0xff : 0x0, size);
288729
289 gst_buffer_map (buffer, &amp;info, GST_MAP_WRITE);
290
291 /* this makes the image black/white */
292 memset (info.data, white ? 0xff : 0x0, info.size);
293730 white = !white;
294731
295 gst_buffer_unmap (buffer, &amp;info);
732 GST_BUFFER_PTS (buffer) = timestamp;
733 GST_BUFFER_DURATION (buffer) = gst_util_uint64_scale_int (1, GST_SECOND, 2);
734
735 timestamp += GST_BUFFER_DURATION (buffer);
736
737 g_signal_emit_by_name (appsrc, "push-buffer", buffer, &ret);
738
739 if (ret != GST_FLOW_OK) {
740 /* something wrong, stop pushing */
741 g_main_loop_quit (loop);
742 }
296743 }
297744
298745 gint
299746 main (gint argc,
300747 gchar *argv[])
301748 {
302 GstElement *pipeline, *fakesrc, *flt, *conv, *videosink;
303 GMainLoop *loop;
749 GstElement *pipeline, *appsrc, *conv, *videosink;
304750
305751 /* init GStreamer */
306 gst_init (&amp;argc, &amp;argv);
752 gst_init (&argc, &argv);
307753 loop = g_main_loop_new (NULL, FALSE);
308754
309755 /* setup pipeline */
310756 pipeline = gst_pipeline_new ("pipeline");
311 fakesrc = gst_element_factory_make ("fakesrc", "source");
312 flt = gst_element_factory_make ("capsfilter", "flt");
757 appsrc = gst_element_factory_make ("appsrc", "source");
313758 conv = gst_element_factory_make ("videoconvert", "conv");
314759 videosink = gst_element_factory_make ("xvimagesink", "videosink");
315760
316761 /* setup */
317 g_object_set (G_OBJECT (flt), "caps",
762 g_object_set (G_OBJECT (appsrc), "caps",
318763 gst_caps_new_simple ("video/x-raw",
319764 "format", G_TYPE_STRING, "RGB16",
320765 "width", G_TYPE_INT, 384,
321766 "height", G_TYPE_INT, 288,
322 "framerate", GST_TYPE_FRACTION, 1, 1,
767 "framerate", GST_TYPE_FRACTION, 0, 1,
323768 NULL), NULL);
324 gst_bin_add_many (GST_BIN (pipeline), fakesrc, flt, conv, videosink, NULL);
325 gst_element_link_many (fakesrc, flt, conv, videosink, NULL);
326
327 /* setup fake source */
328 g_object_set (G_OBJECT (fakesrc),
329 "signal-handoffs", TRUE,
330 "sizemax", 384 * 288 * 2,
331 "sizetype", 2, NULL);
332 g_signal_connect (fakesrc, "handoff", G_CALLBACK (cb_handoff), NULL);
769 gst_bin_add_many (GST_BIN (pipeline), appsrc, conv, videosink, NULL);
770 gst_element_link_many (appsrc, conv, videosink, NULL);
771
772 /* setup appsrc */
773 g_object_set (G_OBJECT (appsrc),
774 "stream-type", 0,
775 "format", GST_FORMAT_TIME, NULL);
776 g_signal_connect (appsrc, "need-data", G_CALLBACK (cb_need_data), NULL);
333777
334778 /* play */
335779 gst_element_set_state (pipeline, GST_STATE_PLAYING);
338782 /* clean up */
339783 gst_element_set_state (pipeline, GST_STATE_NULL);
340784 gst_object_unref (GST_OBJECT (pipeline));
785 g_main_loop_unref (loop);
786
787 return 0;
788 }
789 ]]>
790 <!-- example-end appsrc.c -->
791 </programlisting>
792 </sect3>
793 </sect2>
794
795 <sect2 id="section-spoof-appsink">
796 <title>Grabbing data with appsink</title>
797 <para>
798 Unlike appsrc, appsink is a little easier to use. It also supports
799 a pull and push based model of getting data from the pipeline.
800 </para>
801 <para>
802 The normal way of retrieving samples from appsink is by using the
803 <function>gst_app_sink_pull_sample()</function> and
804 <function>gst_app_sink_pull_preroll()</function> methods or by using
805 the <quote>pull-sample</quote> and <quote>pull-preroll</quote>
806 signals. These methods block until a sample becomes available in the
807 sink or when the sink is shut down or reaches EOS.
808 </para>
809 <para>
810 Appsink will internally use a queue to collect buffers from the
811 streaming thread. If the application is not pulling samples fast
812 enough, this queue will consume a lot of memory over time. The
813 <quote>max-buffers</quote> property can be used to limit the queue
814 size. The <quote>drop</quote> property controls whether the
815 streaming thread blocks or if older buffers are dropped when the
816 maximum queue size is reached. Note that blocking the streaming thread
817 can negatively affect real-time performance and should be avoided.
818 </para>
819 <para>
820 If a blocking behaviour is not desirable, setting the
821 <quote>emit-signals</quote> property to TRUE will make appsink emit
822 the <quote>new-sample</quote> and <quote>new-preroll</quote> signals
823 when a sample can be pulled without blocking.
824 </para>
825 <para>
826 The <quote>caps</quote> property on appsink can be used to control
827 the formats that appsink can receive. This property can contain
828 non-fixed caps, the format of the pulled samples can be obtained by
829 getting the sample caps.
830 </para>
831 <para>
832 If one of the pull-preroll or pull-sample methods return NULL, the
833 appsink is stopped or in the EOS state. You can check for the EOS state
834 with the <quote>eos</quote> property or with the
835 <function>gst_app_sink_is_eos()</function> method.
836 </para>
837 <para>
838 The eos signal can also be used to be informed when the EOS state is
839 reached to avoid polling.
840 </para>
841 <para>
842 Consider configuring the following properties in the appsink:
843 </para>
844 <itemizedlist>
845 <listitem>
846 <para>
847 The <quote>sync</quote> property if you want to have the sink
848 base class synchronize the buffer against the pipeline clock
849 before handing you the sample.
850 </para>
851 </listitem>
852 <listitem>
853 <para>
854 Enable Quality-of-Service with the <quote>qos</quote> property.
855 If you are dealing with raw video frames and let the base class
856 sycnhronize on the clock, it might be a good idea to also let
857 the base class send QOS events upstream.
858 </para>
859 </listitem>
860 <listitem>
861 <para>
862 The caps property that contains the accepted caps. Upstream elements
863 will try to convert the format so that it matches the configured
864 caps on appsink. You must still check the
865 <classname>GstSample</classname> to get the actual caps of the
866 buffer.
867 </para>
868 </listitem>
869 </itemizedlist>
870
871 <sect3 id="section-spoof-appsink-ex">
872 <title>Appsink example</title>
873 <para>
874 What follows is an example on how to capture a snapshot of a video
875 stream using appsink.
876 </para>
877 <programlisting>
878 <!-- example-begin appsink.c -->
879 <![CDATA[
880 #include <gst/gst.h>
881 #ifdef HAVE_GTK
882 #include <gtk/gtk.h>
883 #endif
884
885 #include <stdlib.h>
886
887 #define CAPS "video/x-raw,format=RGB,width=160,pixel-aspect-ratio=1/1"
888
889 int
890 main (int argc, char *argv[])
891 {
892 GstElement *pipeline, *sink;
893 gint width, height;
894 GstSample *sample;
895 gchar *descr;
896 GError *error = NULL;
897 gint64 duration, position;
898 GstStateChangeReturn ret;
899 gboolean res;
900 GstMapInfo map;
901
902 gst_init (&argc, &argv);
903
904 if (argc != 2) {
905 g_print ("usage: %s <uri>\n Writes snapshot.png in the current directory\n",
906 argv[0]);
907 exit (-1);
908 }
909
910 /* create a new pipeline */
911 descr =
912 g_strdup_printf ("uridecodebin uri=%s ! videoconvert ! videoscale ! "
913 " appsink name=sink caps=\"" CAPS "\"", argv[1]);
914 pipeline = gst_parse_launch (descr, &error);
915
916 if (error != NULL) {
917 g_print ("could not construct pipeline: %s\n", error->message);
918 g_error_free (error);
919 exit (-1);
920 }
921
922 /* get sink */
923 sink = gst_bin_get_by_name (GST_BIN (pipeline), "sink");
924
925 /* set to PAUSED to make the first frame arrive in the sink */
926 ret = gst_element_set_state (pipeline, GST_STATE_PAUSED);
927 switch (ret) {
928 case GST_STATE_CHANGE_FAILURE:
929 g_print ("failed to play the file\n");
930 exit (-1);
931 case GST_STATE_CHANGE_NO_PREROLL:
932 /* for live sources, we need to set the pipeline to PLAYING before we can
933 * receive a buffer. We don't do that yet */
934 g_print ("live sources not supported yet\n");
935 exit (-1);
936 default:
937 break;
938 }
939 /* This can block for up to 5 seconds. If your machine is really overloaded,
940 * it might time out before the pipeline prerolled and we generate an error. A
941 * better way is to run a mainloop and catch errors there. */
942 ret = gst_element_get_state (pipeline, NULL, NULL, 5 * GST_SECOND);
943 if (ret == GST_STATE_CHANGE_FAILURE) {
944 g_print ("failed to play the file\n");
945 exit (-1);
946 }
947
948 /* get the duration */
949 gst_element_query_duration (pipeline, GST_FORMAT_TIME, &duration);
950
951 if (duration != -1)
952 /* we have a duration, seek to 5% */
953 position = duration * 5 / 100;
954 else
955 /* no duration, seek to 1 second, this could EOS */
956 position = 1 * GST_SECOND;
957
958 /* seek to the a position in the file. Most files have a black first frame so
959 * by seeking to somewhere else we have a bigger chance of getting something
960 * more interesting. An optimisation would be to detect black images and then
961 * seek a little more */
962 gst_element_seek_simple (pipeline, GST_FORMAT_TIME,
963 GST_SEEK_FLAG_KEY_UNIT | GST_SEEK_FLAG_FLUSH, position);
964
965 /* get the preroll buffer from appsink, this block untils appsink really
966 * prerolls */
967 g_signal_emit_by_name (sink, "pull-preroll", &sample, NULL);
968
969 /* if we have a buffer now, convert it to a pixbuf. It's possible that we
970 * don't have a buffer because we went EOS right away or had an error. */
971 if (sample) {
972 GstBuffer *buffer;
973 GstCaps *caps;
974 GstStructure *s;
975
976 /* get the snapshot buffer format now. We set the caps on the appsink so
977 * that it can only be an rgb buffer. The only thing we have not specified
978 * on the caps is the height, which is dependant on the pixel-aspect-ratio
979 * of the source material */
980 caps = gst_sample_get_caps (sample);
981 if (!caps) {
982 g_print ("could not get snapshot format\n");
983 exit (-1);
984 }
985 s = gst_caps_get_structure (caps, 0);
986
987 /* we need to get the final caps on the buffer to get the size */
988 res = gst_structure_get_int (s, "width", &width);
989 res |= gst_structure_get_int (s, "height", &height);
990 if (!res) {
991 g_print ("could not get snapshot dimension\n");
992 exit (-1);
993 }
994
995 /* create pixmap from buffer and save, gstreamer video buffers have a stride
996 * that is rounded up to the nearest multiple of 4 */
997 buffer = gst_sample_get_buffer (sample);
998 gst_buffer_map (buffer, &map, GST_MAP_READ);
999 #ifdef HAVE_GTK
1000 pixbuf = gdk_pixbuf_new_from_data (map.data,
1001 GDK_COLORSPACE_RGB, FALSE, 8, width, height,
1002 GST_ROUND_UP_4 (width * 3), NULL, NULL);
1003
1004 /* save the pixbuf */
1005 gdk_pixbuf_save (pixbuf, "snapshot.png", "png", &error, NULL);
1006 #endif
1007 gst_buffer_unmap (buffer, &map);
1008 } else {
1009 g_print ("could not make snapshot\n");
1010 }
1011
1012 /* cleanup and exit */
1013 gst_element_set_state (pipeline, GST_STATE_NULL);
1014 gst_object_unref (pipeline);
1015
1016 exit (0);
1017 }
1018 ]]>
1019 <!-- example-end appsink.c -->
1020 </programlisting>
1021 </sect3>
1022 </sect2>
1023 </sect1>
1024
1025 <sect1 id="section-spoof-format">
1026 <title>Forcing a format</title>
1027 <para>
1028 Sometimes you'll want to set a specific format, for example a video
1029 size and format or an audio bitsize and number of channels. You can
1030 do this by forcing a specific <classname>GstCaps</classname> on
1031 the pipeline, which is possible by using
1032 <emphasis>filtered caps</emphasis>. You can set a filtered caps on
1033 a link by using the <quote>capsfilter</quote> element in between the
1034 two elements, and specifying a <classname>GstCaps</classname> as
1035 <quote>caps</quote> property on this element. It will then
1036 only allow types matching that specified capability set for
1037 negotiation. See also <xref linkend="section-caps-filter"/>.
1038 </para>
1039
1040 <sect2 id="section-dynamic-format">
1041 <title>Changing format in a PLAYING pipeline</title>
1042 <para>
1043 It is also possible to dynamically change the format in a pipeline
1044 while PLAYING. This can simply be done by changing the caps
1045 property on a capsfilter. The capsfilter will send a RECONFIGURE
1046 event upstream that will make the upstream element attempt to
1047 renegotiate a new format and allocator. This only works if
1048 the upstream element is not using fixed caps on the source pad.
1049 </para>
1050 <para>
1051 Below is an example of how you can change the caps of a pipeline
1052 while in the PLAYING state:
1053 </para>
1054 <programlisting>
1055 <!-- example-begin dynformat.c -->
1056 <![CDATA[
1057 #include <stdlib.h>
1058
1059 #include <gst/gst.h>
1060
1061 #define MAX_ROUND 100
1062
1063 int
1064 main (int argc, char **argv)
1065 {
1066 GstElement *pipe, *filter;
1067 GstCaps *caps;
1068 gint width, height;
1069 gint xdir, ydir;
1070 gint round;
1071 GstMessage *message;
1072
1073 gst_init (&argc, &argv);
1074
1075 pipe = gst_parse_launch_full ("videotestsrc ! capsfilter name=filter ! "
1076 "ximagesink", NULL, GST_PARSE_FLAG_NONE, NULL);
1077 g_assert (pipe != NULL);
1078
1079 filter = gst_bin_get_by_name (GST_BIN (pipe), "filter");
1080 g_assert (filter);
1081
1082 width = 320;
1083 height = 240;
1084 xdir = ydir = -10;
1085
1086 for (round = 0; round < MAX_ROUND; round++) {
1087 gchar *capsstr;
1088 g_print ("resize to %dx%d (%d/%d) \r", width, height, round, MAX_ROUND);
1089
1090 /* we prefer our fixed width and height but allow other dimensions to pass
1091 * as well */
1092 capsstr = g_strdup_printf ("video/x-raw, width=(int)%d, height=(int)%d",
1093 width, height);
1094
1095 caps = gst_caps_from_string (capsstr);
1096 g_free (capsstr);
1097 g_object_set (filter, "caps", caps, NULL);
1098 gst_caps_unref (caps);
1099
1100 if (round == 0)
1101 gst_element_set_state (pipe, GST_STATE_PLAYING);
1102
1103 width += xdir;
1104 if (width >= 320)
1105 xdir = -10;
1106 else if (width < 200)
1107 xdir = 10;
1108
1109 height += ydir;
1110 if (height >= 240)
1111 ydir = -10;
1112 else if (height < 150)
1113 ydir = 10;
1114
1115 message =
1116 gst_bus_poll (GST_ELEMENT_BUS (pipe), GST_MESSAGE_ERROR,
1117 50 * GST_MSECOND);
1118 if (message) {
1119 g_print ("got error \n");
1120
1121 gst_message_unref (message);
1122 }
1123 }
1124 g_print ("done \n");
1125
1126 gst_object_unref (filter);
1127 gst_element_set_state (pipe, GST_STATE_NULL);
1128 gst_object_unref (pipe);
3411129
3421130 return 0;
3431131 }
344 <!-- example-end fakesrc.c --></programlisting>
1132 ]]>
1133 <!-- example-end dynformat.c -->
1134 </programlisting>
1135 <para>
1136 Note how we use <function>gst_bus_poll()</function> with a
1137 small timeout to get messages and also introduce a short
1138 sleep.
1139 </para>
1140 <para>
1141 It is possible to set multiple caps for the capsfilter separated
1142 with a ;. The capsfilter will try to renegotiate to the first
1143 possible format from the list.
1144 </para>
1145 </sect2>
1146 </sect1>
1147
1148 <sect1 id="section-dynamic-pipelines">
1149 <title>Dynamically changing the pipeline</title>
1150 <para>
1151 In this section we talk about some techniques for dynamically
1152 modifying the pipeline. We are talking specifically about changing
1153 the pipeline while it is in the PLAYING state without interrupting
1154 the flow.
1155 </para>
1156 <para>
1157 There are some important things to consider when building dynamic
1158 pipelines:
1159 </para>
1160 <itemizedlist>
1161 <listitem>
1162 <para>
1163 When removing elements from the pipeline, make sure that there
1164 is no dataflow on unlinked pads because that will cause a fatal
1165 pipeline error. Always block source pads (in push mode) or
1166 sink pads (in pull mode) before unlinking pads.
1167 See also <xref linkend="section-dynamic-changing"/>.
1168 </para>
1169 </listitem>
1170 <listitem>
1171 <para>
1172 When adding elements to a pipeline, make sure to put the element
1173 into the right state, usually the same state as the parent, before
1174 allowing dataflow the element. When an element is newly created,
1175 it is in the NULL state and will return an error when it
1176 receives data.
1177 See also <xref linkend="section-dynamic-changing"/>.
1178 </para>
1179 </listitem>
1180 <listitem>
1181 <para>
1182 When adding elements to a pipeline, &GStreamer; will by default
1183 set the clock and base-time on the element to the current values
1184 of the pipeline. This means that the element will be able to
1185 construct the same pipeline running-time as the other elements
1186 in the pipeline. This means that sinks will synchronize buffers
1187 like the other sinks in the pipeline and that sources produce
1188 buffers with a running-time that matches the other sources.
1189 </para>
1190 </listitem>
1191 <listitem>
1192 <para>
1193 When unlinking elements from an upstream chain, always make sure
1194 to flush any queued data in the element by sending an EOS event
1195 down the element sink pad(s) and by waiting that the EOS leaves
1196 the elements (with an event probe).
1197 See also <xref linkend="section-dynamic-changing"/>.
1198 </para>
1199 </listitem>
1200 <listitem>
1201 <para>
1202 A live source will produce buffers with a running-time of the
1203 current running-time in the pipeline.
1204 </para>
1205 <para>
1206 A pipeline without a live source produces buffers with a
1207 running-time starting from 0. Likewise, after a flushing seek,
1208 those pipelines reset the running-time back to 0.
1209 </para>
1210 <para>
1211 The running-time can be changed with
1212 <function>gst_pad_set_offset ()</function>. It is important to
1213 know the running-time of the elements in the pipeline in order
1214 to maintain synchronization.
1215 </para>
1216 </listitem>
1217 <listitem>
1218 <para>
1219 Adding elements might change the state of the pipeline. Adding a
1220 non-prerolled sink, for example, brings the pipeline back to the
1221 prerolling state. Removing a non-prerolled sink, for example, might
1222 change the pipeline to PAUSED and PLAYING state.
1223 </para>
1224 <para>
1225 Adding a live source cancels the preroll stage and put the pipeline
1226 to the playing state. Adding a live source or other live elements
1227 might also change the latency of a pipeline.
1228 </para>
1229 <para>
1230 Adding or removing elements to the pipeline might change the clock
1231 selection of the pipeline. If the newly added element provides a clock,
1232 it might be worth changing the clock in the pipeline to the new
1233 clock. If, on the other hand, the element that provides the clock
1234 for the pipeline is removed, a new clock has to be selected.
1235 </para>
1236 </listitem>
1237 <listitem>
1238 <para>
1239 Adding and removing elements might cause upstream or downstream
1240 elements to renegotiate caps and or allocators. You don't really
1241 need to do anything from the application, plugins largely
1242 adapt themself to the new pipeline topology in order to optimize
1243 their formats and allocation strategy.
1244 </para>
1245 <para>
1246 What is important is that when you add, remove or change elements
1247 in the pipeline, it is possible that the pipeline needs to
1248 negotiate a new format and this can fail. Usually you can fix this
1249 by inserting the right converter elements where needed.
1250 </para>
1251 </listitem>
1252 </itemizedlist>
1253
1254 <para>
1255 &GStreamer; offers support for doing about any dynamic pipeline
1256 modification but it requires you to know a bit of details before
1257 you can do this without causing pipeline errors. In the following
1258 sections we will demonstrate a couple of typical use-cases.
1259 </para>
1260
1261 <sect2 id="section-dynamic-changing">
1262 <title>Changing elements in a pipeline</title>
1263 <para>
1264 WRITEME
1265 </para>
3451266 </sect2>
3461267 </sect1>
3471268
3631284 contains an initialization function (usually called
3641285 <function>plugin_init</function>) that will be called right after that.
3651286 It's purpose is to register the elements provided by the plugin with
366 the &GStreamer; framework. If you want to embed elements directly in
1287 the &GStreamer; framework.
1288 If you want to embed elements directly in
3671289 your application, the only thing you need to do is to replace
368 <function>GST_PLUGIN_DEFINE ()</function> with
369 <function>GST_PLUGIN_DEFINE_STATIC ()</function>. This will cause the
370 elements to be registered when your application loads, and the elements
1290 <function>GST_PLUGIN_DEFINE ()</function> with a call to
1291 <function>gst_plugin_register_static ()</function>. As soon as you
1292 call <function>gst_plugin_register_static ()</function>, the elements
3711293 will from then on be available like any other element, without them
3721294 having to be dynamically loadable libraries. In the example below, you
3731295 would be able to call <function>gst_element_factory_make
3761298 </para>
3771299
3781300 <programlisting>
1301 <![CDATA[
3791302 /*
3801303 * Here, you would write the actual plugin code.
3811304 */
3891312 GST_RANK_NONE, MY_PLUGIN_TYPE);
3901313 }
3911314
392 GST_PLUGIN_DEFINE_STATIC (
393 GST_VERSION_MAJOR,
394 GST_VERSION_MINOR,
395 "my-private-plugins",
396 "Private elements of my application",
397 register_elements,
398 VERSION,
399 "LGPL",
400 "my-application",
401 "http://www.my-application.net/"
402 )
1315 static
1316 my_code_init (void)
1317 {
1318 ...
1319
1320 gst_plugin_register_static (
1321 GST_VERSION_MAJOR,
1322 GST_VERSION_MINOR,
1323 "my-private-plugins",
1324 "Private elements of my application",
1325 register_elements,
1326 VERSION,
1327 "LGPL",
1328 "my-application-source",
1329 "my-application",
1330 "http://www.my-application.net/")
1331
1332 ...
1333 }
1334 ]]>
4031335 </programlisting>
4041336 </sect1>
4051337 </chapter>
4747 </para>
4848 </sect1>
4949
50 <sect1 id="section-interfaces-mixer">
51 <title>The Mixer interface</title>
52
53 <para>
54 The mixer interface provides a uniform way to control the volume on a
55 hardware (or software) mixer. The interface is primarily intended to
56 be implemented by elements for audio inputs and outputs that talk
57 directly to the hardware (e.g. OSS or ALSA plugins).
58 </para>
59 <para>
60 Using this interface, it is possible to control a list of tracks
61 (such as Line-in, Microphone, etc.) from a mixer element. They can
62 be muted, their volume can be changed and, for input tracks, their
63 record flag can be set as well.
64 </para>
65 <para>
66 Example plugins implementing this interface include the OSS elements
67 (osssrc, osssink, ossmixer) and the ALSA plugins (alsasrc, alsasink
68 and alsamixer).
69 </para>
70 <para>
71 You should not use this interface for volume control in a playback
72 application. Either use a <classname>volume</classname> element or use
73 <classname>playbin</classname>'s <quote>volume</quote> property, or use
74 the <classname>audiosink</classname>'s <quote>volume</quote> property (if it has one).
75 </para>
76 <note>
77 <para>
78 In order for the <ulink type="http"
79 url="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstmixer.html"><classname>GstMixer</classname></ulink>
80 interface to be
81 usable, the element implementing it needs to be in the right state,
82 so that the underlying mixer device is open. This usually means the
83 element needs to be at least in <classname>GST_STATE_READY</classname>
84 before you can use this interface. You will get confusing warnings
85 if the element is not in the right state when the interface is used.
86 </para>
87 </note>
88 </sect1>
89
90 <sect1 id="section-interfaces-tuner">
91 <title>The Tuner interface</title>
92
93 <para>
94 The tuner interface is a uniform way to control inputs and outputs
95 on a multi-input selection device. This is primarily used for input
96 selection on elements for TV- and capture-cards.
97 </para>
98 <para>
99 Using this interface, it is possible to select one track from a list
100 of tracks supported by that tuner-element. The tuner will then select
101 that track for media-processing internally. This can, for example, be
102 used to switch inputs on a TV-card (e.g. from Composite to S-video).
103 </para>
104 <para>
105 This interface is currently only implemented by the Video4linux and
106 Video4linux2 elements.
107 </para>
108 <note>
109 <para>
110 In order for the <ulink type="http"
111 url="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gsttuner.html"><classname>GstTuner</classname></ulink>
112 interface to be
113 usable, the element implementing it needs to be in the right state,
114 so that the underlying device is open. This usually means the
115 element needs to be at least in <classname>GST_STATE_READY</classname>
116 before you can use this interface. You will get confusing warnings
117 if the element is not in the right state when the interface is used.
118 </para>
119 </note>
120 </sect1>
121
12250 <sect1 id="section-interfaces-colorbalance">
12351 <title>The Color Balance interface</title>
12452
13159 </para>
13260 <para>
13361 The colorbalance interface is implemented by several plugins, including
134 xvimagesink and the Video4linux and Video4linux2 elements.
62 xvimagesink and the Video4linux2 elements.
13563 </para>
13664 </sect1>
13765
138 <sect1 id="section-interfaces-proprobe">
139 <title>The Property Probe interface</title>
66 <sect1 id="section-interfaces-videooverlay">
67 <title>The Video Overlay interface</title>
14068
14169 <para>
142 The property probe is a way to autodetect allowed values for a
143 <classname>GObject</classname> property. It's primary use is to autodetect
144 devices in several elements. For example, the OSS elements use this
145 interface to detect all OSS devices on a system. Applications can then
146 <quote>probe</quote> this property and get a list of detected devices.
147 </para>
148 <note>
149 <para>
150 Given the overlap between HAL and the practical implementations of this
151 interface, this might in time be deprecated in favour of HAL.
152 </para>
153 </note>
154 <para>
155 This interface is currently implemented by many elements, including
156 the ALSA, OSS, XVideo, Video4linux and Video4linux2 elements.
157 </para>
158 </sect1>
159
160 <sect1 id="section-interfaces-xoverlay">
161 <title>The X Overlay interface</title>
162
163 <para>
164 The X Overlay interface was created to solve the problem of embedding
70 The Video Overlay interface was created to solve the problem of embedding
16571 video streams in an application window. The application provides an
166 X-window to the element implementing this interface to draw on, and
167 the element will then use this X-window to draw on rather than creating
72 window handle to the element implementing this interface to draw on, and
73 the element will then use this window handle to draw on rather than creating
16874 a new toplevel window. This is useful to embed video in video players.
16975 </para>
17076 <para>
171 This interface is implemented by, amongst others, the Video4linux and
172 Video4linux2 elements and by ximagesink, xvimagesink and sdlvideosink.
77 This interface is implemented by, amongst others, the Video4linux2
78 elements and by ximagesink, xvimagesink and sdlvideosink.
17379 </para>
17480 </sect1>
17581 </chapter>
4646 </para>
4747 <programlisting>
4848 /* compile with:
49 * gcc -o tags tags.c `pkg-config --cflags --libs gstreamer-0.10` */
49 * gcc -o tags tags.c `pkg-config --cflags --libs gstreamer-1.0` */
5050 #include &lt;gst/gst.h&gt;
5151
5252 static void
7979 <title>Scheduling in &GStreamer;</title>
8080
8181 <para>
82 Scheduling of pipelines in &GStreamer; is done by using a thread for
83 each <quote>group</quote>, where a group is a set of elements separated
84 by <quote>queue</quote> elements. Within such a group, scheduling is
85 either push-based or pull-based, depending on which mode is supported
86 by the particular element. If elements support random access to data,
87 such as file sources, then elements downstream in the pipeline become
88 the entry point of this group (i.e. the element controlling the
89 scheduling of other elements). The entry point pulls data from upstream
90 and pushes data downstream, thereby calling data handling functions on
91 either type of element.
82 Each element in the &GStreamer; pipeline decides how it is going to
83 be scheduled. Elements can choose to be scheduled push-based or
84 pull-based.
85 If elements support random access to data, such as file sources,
86 then elements downstream in the pipeline can ask to schedule the random
87 access elements in pull-based mode. Data is pulled from upstream
88 and pushed downstream. If pull-mode is not supported, the element can
89 decide to operate in push-mode.
9290 </para>
9391 <para>
9492 In practice, most elements in &GStreamer;, such as decoders, encoders,
7373 For example, <option>--gst-debug=oggdemux:5</option> would turn
7474 on debugging for the Ogg demuxer element. You can use wildcards as
7575 well. A debugging level of 0 will turn off all debugging, and a level
76 of 5 will turn on all debugging. Intermediate values only turn on
76 of 9 will turn on all debugging. Intermediate values only turn on
7777 some debugging (based on message severity; 2, for example, will only
7878 display errors and warnings). Here's a list of all available options:
7979 </para>
186186 </para>
187187 </sect2>
188188
189 <sect2 id="section-applications-gst-editor">
190 <title>GstEditor</title>
191 <para>
192 GstEditor is a set of widgets to display a graphical representation of a
193 pipeline.
194 </para>
195 </sect2>
196
197189 </sect1>
198190 </chapter>
2222 <para>
2323 For audio input and output, &GStreamer; provides input and
2424 output elements for several audio subsystems. Amongst others,
25 &GStreamer; includes elements for ALSA (alsasrc, alsamixer,
26 alsasink), OSS (osssrc, ossmixer, osssink) and Sun audio
27 (sunaudiosrc, sunaudiomixer, sunaudiosink).
25 &GStreamer; includes elements for ALSA (alsasrc,
26 alsasink), OSS (osssrc, osssink) Pulesaudio (pulsesrc, pulsesink)
27 and Sun audio (sunaudiosrc, sunaudiomixer, sunaudiosink).
2828 </para>
2929 </listitem>
3030 <listitem>
3131 <para>
3232 For video input, &GStreamer; contains source elements for
33 Video4linux (v4lsrc, v4lmjpegsrc, v4lelement and v4lmjpegisnk)
34 and Video4linux2 (v4l2src, v4l2element).
33 Video4linux2 (v4l2src, v4l2element, v4l2sink).
3534 </para>
3635 </listitem>
3736 <listitem>
235234
236235 <warning>
237236 <para>
238 Note: this section is out of date. GStreamer-0.10 has much better
237 Note: this section is out of date. GStreamer-1.0 has much better
239238 support for win32 than previous versions though and should usually compile
240239 and work out-of-the-box both using MSYS/MinGW or Microsoft compilers. The
241240 <ulink url="http://gstreamer.freedesktop.org">GStreamer web site</ulink> and the
272271 <listitem><para>libiconv</para></listitem>
273272 </itemizedlist>
274273
275 <para>Work is being done to provide pre-compiled GStreamer-0.10 libraries as
274 <para>Work is being done to provide pre-compiled GStreamer-1.0 libraries as
276275 a packages for win32. Check the <ulink url="http://gstreamer.freedesktop.org">
277276 GStreamer web site</ulink> and check our
278277 <ulink url="http://news.gmane.org/gmane.comp.video.gstreamer.devel">mailing list
300299 <sect2 id="section-win32-install">
301300 <title>Installation on the system</title>
302301
303 <para>FIXME: This section needs be updated for GStreamer-0.10.</para>
302 <para>FIXME: This section needs be updated for GStreamer-1.0.</para>
304303
305304 <!--
306305 <para>By default, GStreamer needs a registry. You have to generate it using "gst-register.exe". It will create
127127 </itemizedlist>
128128 </sect1>
129129 </chapter>
130 <chapter id="chapter-porting-1.0">
131 <title>Porting 0.10 applications to 1.0</title>
132 <para>
133 This section of the appendix will discuss shortly what changes to
134 applications will be needed to quickly and conveniently port most
135 applications from &GStreamer;-0.10 to &GStreamer;-1.0, with references
136 to the relevant sections in this Application Development Manual
137 where needed. With this list, it should be possible to port simple
138 applications to &GStreamer;-1.0 in less than a day.
139 </para>
140
141 <sect1 id="section-porting-objects-1.0">
142 <title>List of changes</title>
143 <itemizedlist>
144 <listitem>
145 <para>
146 All deprecated methods were removed. Recompile against 0.10 with
147 DISABLE_DEPRECATED and fix issues before attempting to port to 1.0.
148 </para>
149 </listitem>
150 <listitem>
151 <para>
152 "playbin2" has been renamed to "playbin", with similar API
153 </para>
154 </listitem>
155 <listitem>
156 <para>
157 "decodebin2" has been renamed to "decodebin", with similar API. Note
158 that there is no longer a "new-decoded-pad" signal, just use GstElement's
159 "pad-added" signal instead (but don't forget to remove the 'gboolean last'
160 argument from your old signal callback functino signature).
161 </para>
162 </listitem>
163 <listitem>
164 <para>
165 the names of some "formatted" pad templates has been changed from e.g.
166 "src%d" to "src%u" or "src_%u" or similar, since we don't want to see
167 negative numbers in pad names. This mostly affects applications that
168 create request pads from elements.
169 </para>
170 </listitem>
171 <listitem>
172 <para>
173 some elements that used to have a single dynamic source pad have a
174 source pad now. Example: wavparse, id3demux, iceydemux, apedemux.
175 (This does not affect applications using decodebin or playbin).
176 </para>
177 </listitem>
178 <listitem>
179 <para>
180 playbin now proxies the GstVideoOverlay (former GstXOverlay) interface,
181 so most applications can just remove the sync bus handler where they
182 would set the window ID, and instead just set the window ID on playbin
183 from the application thread before starting playback.
184 </para>
185 <para>
186 playbin also proxies the GstColorBalance and GstNavigation interfaces,
187 so applications that use this don't need to go fishing for elements
188 that may implement those any more, but can just use them unconditionally.
189 </para>
190 </listitem>
191 <listitem>
192 <para>
193 multifdsink, tcpclientsink, tcpclientsrc, tcpserversrc the protocol property
194 is removed, use gdppay and gdpdepay.
195 </para>
196 </listitem>
197 <listitem>
198 <para>
199 XML serialization was removed.
200 </para>
201 </listitem>
202 <listitem>
203 <para>
204 Probes and pad blocking was merged into new pad probes.
205 </para>
206 </listitem>
207 <listitem>
208 <para>
209 Position, duration and convert functions no longer use an inout parameter
210 for the destination format.
211 </para>
212 </listitem>
213 <listitem>
214 <para>
215 Video and audio caps were simplified. audio/x-raw-int and audio/x-raw-float
216 are now all under the audio/x-raw media type. Similarly, video/x-raw-rgb
217 and video/x-raw-yuv are now video/x-raw.
218 </para>
219 </listitem>
220 <listitem>
221 <para>
222 ffmpegcolorspace was removed and replaced with videoconvert.
223 </para>
224 </listitem>
225 <listitem>
226 <para>
227 GstMixerInterface / GstTunerInterface were removed without replacement.
228 </para>
229 </listitem>
230 <listitem>
231 <para>
232 The GstXOverlay interface was renamed to GstVideoOverlay, and now part
233 of the video library in gst-plugins-base, as the interfaces library
234 no longer exists.
235 </para>
236 <para>
237 The name of the GstXOverlay "prepare-xwindow-id" message has changed
238 to "prepare-window-handle" (and GstXOverlay has been renamed to
239 GstVideoOverlay). Code that checks for the string directly should be
240 changed to use gst_is_video_overlay_prepare_window_handle_message(message)
241 instead.
242 </para>
243 </listitem>
244 <listitem>
245 <para>
246 The GstPropertyProbe interface was removed. the is no replacement yet,
247 but a more featureful replacement for device discovery and feature
248 querying is planned, see https://bugzilla.gnome.org/show_bug.cgi?id=678402
249 </para>
250 </listitem>
251 <listitem>
252 <para>
253 gst_uri_handler_get_uri() and the get_uri vfunc now return a copy of
254 the URI string
255 </para>
256 <para>
257 gst_uri_handler_set_uri() and the set_uri vfunc now take an additional
258 GError argument so the handler can notify the caller why it didn't
259 accept a particular URI.
260 </para>
261 <para>
262 gst_uri_handler_set_uri() now checks if the protocol of the URI passed
263 is one of the protocols advertised by the uri handler, so set_uri vfunc
264 implementations no longer need to check that as well.
265 </para>
266 </listitem>
267 <listitem>
268 <para>
269 GstTagList is now an opaque mini object instead of being typedefed to a
270 GstStructure. While it was previously okay (and in some cases required because of
271 missing taglist API) to cast a GstTagList to a GstStructure or use
272 gst_structure_* API on taglists, you can no longer do that. Doing so will
273 cause crashes.
274 </para>
275 <para>
276 Also, tag lists are refcounted now, and can therefore not be freely
277 modified any longer. Make sure to call gst_tag_list_make_writable (taglist)
278 before adding, removing or changing tags in the taglist.
279 </para>
280 <para>
281 GST_TAG_IMAGE, GST_TAG_PREVIEW_IMAGE, GST_TAG_ATTACHMENT: many tags that
282 used to be of type GstBuffer are now of type GstSample (which is basically
283 a struct containing a buffer alongside caps and some other info).
284 </para>
285 </listitem>
286 <listitem>
287 <para>
288 GstController has now been merged into GstObject. It does not exists as an
289 individual object anymore. In addition core contains a GstControlSource base
290 class and the GstControlBinding. The actual control sources are in the controller
291 library as before. The 2nd big change is that control sources generate
292 a sequence of gdouble values and those are mapped to the property type and
293 value range by GstControlBindings.
294 </para>
295 <para>
296 The whole gst_controller_* API is gone and now available in simplified form
297 under gst_object_*. ControlSources are now attached via GstControlBinding
298 to properties. There are no GValue arguments used anymore when programming
299 control sources.
300 </para>
301 </listitem>
302 </itemizedlist>
303 </sect1>
304 </chapter>
7878 GError *err = NULL; /* error to show to users */
7979 gchar *dbg = NULL; /* additional debug string for developers */
8080
81 gst_message_parse_error (msg, &err, &dbg);
81 gst_message_parse_error (msg, &amp;err, &amp;dbg);
8282 if (err) {
8383 g_printerr ("ERROR: %s\n", err-&gt;message);
8484 g_error_free (err);
192192 </para>
193193
194194 <screen>
195 <![CDATA[
195196 Factory Details:
196 Long name: Audio Sink (OSS)
197 Class: Sink/Audio
198 Description: Output to a sound card via OSS
199 Version: 0.3.3.1
200 Author(s): Erik Walthinsen &lt;omega@cse.ogi.edu&gt;, Wim Taymans &lt;wim.taymans@chello.be&gt;
201 Copyright: (C) 1999
197 Rank: secondary (128)
198 Long-name: Audio Sink (OSS)
199 Klass: Sink/Audio
200 Description: Output to a sound card via OSS
201 Author: Erik Walthinsen <omega@cse.ogi.edu>, Wim Taymans <wim.taymans@chello.be>
202
203 Plugin Details:
204 Name: ossaudio
205 Description: OSS (Open Sound System) support for GStreamer
206 Filename: /home/wim/gst/head/gst-plugins-good/sys/oss/.libs/libgstossaudio.so
207 Version: 1.0.0.1
208 License: LGPL
209 Source module: gst-plugins-good
210 Source release date: 2012-09-25 12:52 (UTC)
211 Binary package: GStreamer Good Plug-ins git
212 Origin URL: Unknown package origin
202213
203214 GObject
204 +----GstObject
205 +----GstElement
206 +----GstOssSink
215 +----GInitiallyUnowned
216 +----GstObject
217 +----GstElement
218 +----GstBaseSink
219 +----GstAudioBaseSink
220 +----GstAudioSink
221 +----GstOssSink
207222
208223 Pad Templates:
209224 SINK template: 'sink'
210225 Availability: Always
211226 Capabilities:
212 'osssink_sink':
213 MIME type: 'audio/raw':
214 format: String: int
215 endianness: Integer: 1234
216 width: List:
217 Integer: 8
218 Integer: 16
219 depth: List:
220 Integer: 8
221 Integer: 16
222 channels: Integer range: 1 - 2
223 law: Integer: 0
224 signed: List:
225 Boolean: FALSE
226 Boolean: TRUE
227 rate: Integer range: 1000 - 48000
227 audio/x-raw
228 format: { S16LE, U16LE, S8, U8 }
229 layout: interleaved
230 rate: [ 1, 2147483647 ]
231 channels: 1
232 audio/x-raw
233 format: { S16LE, U16LE, S8, U8 }
234 layout: interleaved
235 rate: [ 1, 2147483647 ]
236 channels: 2
237 channel-mask: 0x0000000000000003
228238
229239
230240 Element Flags:
231 GST_ELEMENT_THREADSUGGESTED
241 no flags set
232242
233243 Element Implementation:
234 No loopfunc(), must be chain-based or not configured yet
235 Has change_state() function: gst_osssink_change_state
236 Has custom save_thyself() function: gst_element_save_thyself
237 Has custom restore_thyself() function: gst_element_restore_thyself
244 Has change_state() function: gst_audio_base_sink_change_state
238245
239246 Clocking Interaction:
240 element requires a clock
241 element provides a clock: GstOssClock
247 element is supposed to provide a clock but returned NULL
248
249 Element has no indexing capabilities.
250 Element has no URI handling capabilities.
242251
243252 Pads:
244253 SINK: 'sink'
245254 Implementation:
246 Has chainfunc(): 0x40056fc0
255 Has chainfunc(): gst_base_sink_chain
256 Has custom eventfunc(): gst_base_sink_event
257 Has custom queryfunc(): gst_base_sink_sink_query
258 Has custom iterintlinkfunc(): gst_pad_iterate_internal_links_default
247259 Pad Template: 'sink'
248260
249 Element Arguments:
250 name : String (Default "element")
251 device : String (Default "/dev/dsp")
252 mute : Boolean (Default false)
253 format : Integer (Default 16)
254 channels : Enum "GstAudiosinkChannels" (default 1)
255 (0): Silence
256 (1): Mono
257 (2): Stereo
258 frequency : Integer (Default 11025)
259 fragment : Integer (Default 6)
260 buffer-size : Integer (Default 4096)
261
262 Element Signals:
263 "handoff" : void user_function (GstOssSink* object,
264 gpointer user_data);
261 Element Properties:
262 name : The name of the object
263 flags: readable, writable
264 String. Default: "osssink0"
265 parent : The parent of the object
266 flags: readable, writable
267 Object of type "GstObject"
268 sync : Sync on the clock
269 flags: readable, writable
270 Boolean. Default: true
271 max-lateness : Maximum number of nanoseconds that a buffer can be late before it is dropped (-1 unlimited)
272 flags: readable, writable
273 Integer64. Range: -1 - 9223372036854775807 Default: -1
274 qos : Generate Quality-of-Service events upstream
275 flags: readable, writable
276 Boolean. Default: false
277 async : Go asynchronously to PAUSED
278 flags: readable, writable
279 Boolean. Default: true
280 ts-offset : Timestamp offset in nanoseconds
281 flags: readable, writable
282 Integer64. Range: -9223372036854775808 - 9223372036854775807 Default: 0
283 enable-last-sample : Enable the last-sample property
284 flags: readable, writable
285 Boolean. Default: false
286 last-sample : The last sample received in the sink
287 flags: readable
288 Boxed pointer of type "GstSample"
289 blocksize : Size in bytes to pull per buffer (0 = default)
290 flags: readable, writable
291 Unsigned Integer. Range: 0 - 4294967295 Default: 4096
292 render-delay : Additional render delay of the sink in nanoseconds
293 flags: readable, writable
294 Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0
295 throttle-time : The time to keep between rendered buffers
296 flags: readable, writable
297 Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0
298 buffer-time : Size of audio buffer in microseconds, this is the minimum latency that the sink reports
299 flags: readable, writable
300 Integer64. Range: 1 - 9223372036854775807 Default: 200000
301 latency-time : The minimum amount of data to write in each iteration in microseconds
302 flags: readable, writable
303 Integer64. Range: 1 - 9223372036854775807 Default: 10000
304 provide-clock : Provide a clock to be used as the global pipeline clock
305 flags: readable, writable
306 Boolean. Default: true
307 slave-method : Algorithm to use to match the rate of the masterclock
308 flags: readable, writable
309 Enum "GstAudioBaseSinkSlaveMethod" Default: 1, "skew"
310 (0): resample - GST_AUDIO_BASE_SINK_SLAVE_RESAMPLE
311 (1): skew - GST_AUDIO_BASE_SINK_SLAVE_SKEW
312 (2): none - GST_AUDIO_BASE_SINK_SLAVE_NONE
313 can-activate-pull : Allow pull-based scheduling
314 flags: readable, writable
315 Boolean. Default: false
316 alignment-threshold : Timestamp alignment threshold in nanoseconds
317 flags: readable, writable
318 Unsigned Integer64. Range: 1 - 18446744073709551614 Default: 40000000
319 drift-tolerance : Tolerance for clock drift in microseconds
320 flags: readable, writable
321 Integer64. Range: 1 - 9223372036854775807 Default: 40000
322 discont-wait : Window of time in nanoseconds to wait before creating a discontinuity
323 flags: readable, writable
324 Unsigned Integer64. Range: 0 - 18446744073709551614 Default: 1000000000
325 device : OSS device (usually /dev/dspN)
326 flags: readable, writable
327 String. Default: "/dev/dsp"
328 ]]>
265329 </screen>
266330
267331 <para>
1818 </para>
1919 <para>
2020 The bin will also manage the elements contained in it. It will
21 figure out how the data will flow in the bin and generate an
22 optimal plan for that data flow. Plan generation is one of the
23 most complicated procedures in &GStreamer;. You will learn more
24 about this process, called scheduling, in <xref
25 linkend="section-threads-scheduling"/>.
21 perform state changes on the elements as well as collect and
22 forward bus messages.
2623 </para>
2724
2825 <figure float="1" id="section-bin-img">
4138 <itemizedlist>
4239 <listitem>
4340 <para>
44 A pipeline: a generic container that allows scheduling of the
45 containing elements. The toplevel bin has to be a pipeline,
46 every application thus needs at least one of these. Pipelines will
47 automatically run themselves in a background thread when started.
41 A pipeline: a generic container that manages the synchronization
42 and bus messages of the contained elements. The toplevel bin has
43 to be a pipeline, every application thus needs at least one of
44 these.
4845 </para>
4946 </listitem>
5047 </itemizedlist>
138135 </programlisting>
139136 <para>
140137 (This is a silly example of course, there already exists a much more
141 powerful and versatile custom bin like this: the playbin2 element.)
138 powerful and versatile custom bin like this: the playbin element.)
142139 </para>
143140 <para>
144 Custom bins can be created with a plugin or an XML description. You
141 Custom bins can be created with a plugin or from the application. You
145142 will find more information about creating custom bin in the <ulink
146143 type="http"
147144 url="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/pwg/html/index.html">Plugin
148145 Writers Guide</ulink>.
149146 </para>
150147 <para>
151 Examples of such custom bins are the playbin2 and uridecodebin elements from<ulink
148 Examples of such custom bins are the playbin and uridecodebin elements from<ulink
152149 type="http"
153150 url="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/index.html">
154151 gst-plugins-base</ulink>.
9696 {
9797 GstElement *pipeline;
9898 GstBus *bus;
99 guint bus_watch_id;
99100
100101 /* init */
101102 gst_init (&amp;argc, &amp;argv);
108109 * GLib main loop is attached to below
109110 */
110111 bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
111 gst_bus_add_watch (bus, my_bus_callback, NULL);
112 bus_watch_id = gst_bus_add_watch (bus, my_bus_callback, NULL);
112113 gst_object_unref (bus);
113114 <!-- example-end bus.c a -->
114115 [..]<!-- example-begin bus.c b -->
126127 /* clean up */
127128 gst_element_set_state (pipeline, GST_STATE_NULL);
128129 gst_object_unref (pipeline);
130 g_source_remove (bus_watch_id);
129131 g_main_loop_unref (loop);
130132
131133 return 0;
2323 <itemizedlist>
2424 <listitem>
2525 <para>
26 A pointer to a piece of memory.
27 </para>
28 </listitem>
29 <listitem>
30 <para>
31 The size of the memory.
26 Pointers to memory objects. Memory objects encapsulate a region
27 in the memory.
3228 </para>
3329 </listitem>
3430 <listitem>
288288 The Glib Object system</ulink>.
289289 </para>
290290 <para>
291 A <ulink type="http" url="&URLAPI;GstElementFactory.html">
291 A <ulink type="http" url="&URLAPI;GstElement.html">
292292 <classname>GstElement</classname></ulink> also provides various
293293 <classname>GObject</classname> signals that can be used as a flexible
294294 callback mechanism. Here, too, you can use <command>gst-inspect</command>
302302 <title>More about element factories</title>
303303 <para>
304304 In the previous section, we briefly introduced the <ulink type="http"
305 url="&URLAPI;GstElement.html"><classname>GstElementFactory</classname></ulink>
305 url="&URLAPI;GstElementFactory.html"><classname>GstElementFactory</classname></ulink>
306306 object already as a way to create instances of an element. Element
307307 factories, however, are much more than just that. Element factories
308308 are the basic types retrieved from the &GStreamer; registry, they
309309 describe all plugins and elements that &GStreamer; can create. This
310310 means that element factories are useful for automated element
311311 instancing, such as what autopluggers do, and for creating lists
312 of available elements, such as what pipeline editing applications
313 (e.g. <ulink type="http"
314 url="http://gstreamer.freedesktop.org/modules/gst-editor.html">&GStreamer;
315 Editor</ulink>) do.
312 of available elements.
316313 </para>
317314
318315 <sect2 id="section-elements-factories-details">
4343 </para>
4444 <para>
4545 The last thing left to do is to add all elements into a container
46 element, a <classname>GstPipeline</classname>, and iterate this
47 pipeline until we've played the whole song. We've previously
46 element, a <classname>GstPipeline</classname>, and wait until
47 we've played the whole song. We've previously
4848 learned how to add elements to a container bin in <xref
4949 linkend="chapter-bins"/>, and we've learned about element states
5050 in <xref linkend="section-elements-states"/>. We will also attach
124124
125125 GstElement *pipeline, *source, *demuxer, *decoder, *conv, *sink;
126126 GstBus *bus;
127 guint bus_watch_id;
127128
128129 /* Initialisation */
129130 gst_init (&amp;argc, &amp;argv);
158159
159160 /* we add a message handler */
160161 bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
161 gst_bus_add_watch (bus, bus_call, loop);
162 bus_watch_id = gst_bus_add_watch (bus, bus_call, loop);
162163 gst_object_unref (bus);
163164
164165 /* we add all elements into the pipeline */
196197
197198 g_print ("Deleting pipeline\n");
198199 gst_object_unref (GST_OBJECT (pipeline));
200 g_source_remove (bus_watch_id);
201 g_main_loop_unref (loop);
199202
200203 return 0;
201204 }
240240 <command>gst-inspect vorbisdec</command>. You will see two pads:
241241 a source and a sink pad. Both of these pads are always available,
242242 and both have capabilities attached to them. The sink pad will
243 accept vorbis-encoded audio data, with the mime-type
243 accept vorbis-encoded audio data, with the media type
244244 <quote>audio/x-vorbis</quote>. The source pad will be used
245245 to send raw (decoded) audio samples to the next element, with
246 a raw audio mime-type (in this case,
246 a raw audio media type (in this case,
247247 <quote>audio/x-raw</quote>). The source pad will also
248248 contain properties for the audio samplerate and the amount of
249249 channels, plus some more that you don't need to worry about
171171 </itemizedlist>
172172 <para>
173173 For convenience, it is possible to test <quote>playbin</quote> on
174 the commandline, using the command <quote>gst-launch-0.10 playbin
174 the commandline, using the command <quote>gst-launch-1.0 playbin
175175 uri=file:///path/to/file</quote>.
176 </para>
177 <para>
178 New applications should use playbin2 instead of the old playbin.
179176 </para>
180177 </sect1>
181178
188185 input from a source that is linked to its sinkpad and will try to
189186 detect the media type contained in the stream, and set up decoder
190187 routines for each of those. It will automatically select decoders.
191 For each decoded stream, it will emit the <quote>new-decoded-pad</quote>
188 For each decoded stream, it will emit the <quote>pad-added</quote>
192189 signal, to let the client know about the newly found decoded stream.
193190 For unknown streams (which might be the whole stream), it will emit
194191 the <quote>unknown-type</quote> signal. The application is then
237234 static void
238235 cb_newpad (GstElement *decodebin,
239236 GstPad *pad,
240 gboolean last,
241237 gpointer data)
242238 {
243239 GstCaps *caps;
296292 src = gst_element_factory_make ("filesrc", "source");
297293 g_object_set (G_OBJECT (src), "location", argv[1], NULL);
298294 dec = gst_element_factory_make ("decodebin", "decoder");
299 g_signal_connect (dec, "new-decoded-pad", G_CALLBACK (cb_newpad), NULL);
295 g_signal_connect (dec, "pad-added", G_CALLBACK (cb_newpad), NULL);
300296 gst_bin_add_many (GST_BIN (pipeline), src, dec, NULL);
301297 gst_element_link (src, dec);
302298
366362 </itemizedlist>
367363 <para>
368364 Decodebin can be easily tested on the commandline, e.g. by using the
369 command <command>gst-launch-0.10 filesrc location=file.ogg ! decodebin
365 command <command>gst-launch-1.0 filesrc location=file.ogg ! decodebin
370366 ! audioconvert ! audioresample ! autoaudiosink</command>.
371367 </para>
372368 <para>
373 New applications should use decodebin2 instead of the old decodebin.
374 </para>
375 <para>
376 The uridecodebin element is very similar to decodebin2, only that it
369 The uridecodebin element is very similar to decodebin, only that it
377370 automatically plugs a source plugin based on the protocol of the URI
378371 given.
379372 </para>
5858 through one or more <emphasis>sink pads</emphasis>. Source and sink
5959 elements have only source and sink pads, respectively. Data usually
6060 means buffers (described by the <ulink type="http"
61 url="&URLAPI;gstreamer-GstBuffer.html"><classname>GstBuffer
62 </classname></ulink> object) and events (described by the <ulink
63 type="http" url="&URLAPI;gstreamer-GstEvent.html"><classname>
64 GstEvent</classname></ulink> object).
61 url="&URLAPI;gstreamer-GstBuffer.html">
62 <classname>GstBuffer</classname></ulink> object) and events (described
63 by the <ulink type="http" url="&URLAPI;gstreamer-GstEvent.html">
64 <classname>GstEvent</classname></ulink> object).
6565 </para>
6666 </sect1>
6767
7070
7171 <para>
7272 A <emphasis>bin</emphasis> is a container for a collection of elements.
73 A <emphasis>pipeline</emphasis> is a special subtype of a bin that allows execution of all
74 of its contained child elements. Since bins are subclasses of elements
73 Since bins are subclasses of elements
7574 themselves, you can mostly control a bin as if it were an element,
7675 thereby abstracting away a lot of complexity for your application. You
7776 can, for example change state on all elements in a bin by changing the
7978 contained children (such as error messages, tag messages or EOS messages).
8079 </para>
8180 <para>
82 A <emphasis>pipeline</emphasis> is a top-level bin. As you set it to PAUSED or PLAYING state,
83 data flow will start and media processing will take place. Once started,
84 pipelines will run in a separate thread until you stop them or the end
81 A <emphasis>pipeline</emphasis> is a top-level bin. It provides a bus for
82 the application and manages the synchronization for its children.
83 As you set it to PAUSED or PLAYING state, data flow will start and media
84 processing will take place. Once started, pipelines will run in a
85 separate thread until you stop them or the end
8586 of the data stream is reached.
8687 </para>
8788
8888 <listitem><para>gst-plugins-good: a set of good-quality plug-ins under LGPL</para></listitem>
8989 <listitem><para>gst-plugins-ugly: a set of good-quality plug-ins that might pose distribution problems</para></listitem>
9090 <listitem><para>gst-plugins-bad: a set of plug-ins that need more quality</para></listitem>
91 <listitem><para>gst-python: the python bindings</para></listitem>
91 <listitem><para>gst-libav: a set of plug-ins that wrap libav for decoding and encoding</para></listitem>
9292 <listitem><para>a few others packages</para></listitem>
9393 </itemizedlist>
9494 </para>
4646 <!ENTITY DATAACCESS SYSTEM "advanced-dataaccess.xml">
4747
4848 <!-- Part 4: Higher-level interfaces -->
49 <!ENTITY XML SYSTEM "highlevel-xml.xml">
5049 <!ENTITY COMPONENTS SYSTEM "highlevel-components.xml">
5150
5251 <!-- Appendices -->
52 <!ENTITY PROGRAMS SYSTEM "appendix-programs.xml">
5353 <!ENTITY CHECKLIST SYSTEM "appendix-checklist.xml">
5454 <!ENTITY PORTING SYSTEM "appendix-porting.xml">
5555 <!ENTITY INTEGRATION SYSTEM "appendix-integration.xml">
190190 much control (and as much code), but will prefer to use a standard
191191 playback interface that does most of the difficult internals for
192192 them. In this chapter, we will introduce you into the concept of
193 autopluggers, playback managing elements, XML-based pipelines and
194 other such things. Those higher-level interfaces are intended to
193 autopluggers, playback managing elements and other such things.
194 Those higher-level interfaces are intended to
195195 simplify &GStreamer;-based application programming. They do, however,
196196 also reduce the flexibility. It is up to the application developer
197197 to choose which interface he will want to use.
199199 </partintro>
200200
201201 &COMPONENTS;
202 &XML;
203202
204203 </part>
205204
220219 </para>
221220 <para>
222221 In addition, we also provide a porting guide which will explain
223 easily how to port &GStreamer;-0.8 applications to &GStreamer;-0.10.
222 easily how to port &GStreamer;-0.10 applications to &GStreamer;-1.0.
224223 </para>
225224 </partintro>
226225
254253 - table please...
255254 -->
256255
256 &PROGRAMS;
257257 &CHECKLIST;
258258 &PORTING;
259259 &INTEGRATION;
809809 if echo $(FORMATS) | grep ps > /dev/null; then export SRC="$$SRC $(DOC).ps"; fi; \
810810 if echo $(FORMATS) | grep pdf > /dev/null; then export SRC="$$SRC $(DOC).pdf"; fi; \
811811 \
812 # upload releases to both 0.10.X/ and head/ subdirectories \
813 if test "x$(PACKAGE_VERSION_NANO)" = x0; then \
814 export DIR=$(DOC_BASE)/gstreamer/$(VERSION)/$(DOC); \
815 echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
816 ssh $(DOC_SERVER) mkdir -p $$DIR; \
817 rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
818 ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
819 fi; \
812 # upload releases to both X.Y/ and head/ subdirectories \
813 export DIR=$(DOC_BASE)/gstreamer/$(PACKAGE_VERSION_MAJOR).$(PACKAGE_VERSION_MINOR)/$(DOC); \
814 echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
815 ssh $(DOC_SERVER) mkdir -p $$DIR; \
816 rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
817 ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
820818 \
821819 export DIR=$(DOC_BASE)/gstreamer/head/$(DOC); \
822820 echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
2020 </tr></table>
2121 <div class="chapter">
2222 <div class="titlepage"><div><div><h2 class="title">
23 <a name="idp4395232"></a>gstreamer Elements</h2></div></div></div>
23 <a name="idp546320"></a>gstreamer Elements</h2></div></div></div>
2424 <div class="toc"><dl>
2525 <dt>
2626 <span class="refentrytitle"><a href="gstreamer-plugins-capsfilter.html">capsfilter</a></span><span class="refpurpose"> — Pass data without modification, limiting formats</span>
2020 </tr></table>
2121 <div class="chapter">
2222 <div class="titlepage"><div><div><h2 class="title">
23 <a name="idp179376"></a>gstreamer Plugins</h2></div></div></div>
23 <a name="idp3821056"></a>gstreamer Plugins</h2></div></div></div>
2424 <div class="toc"><dl><dt>
2525 <span class="refentrytitle"><a href="gstreamer-plugins-plugin-coreelements.html">coreelements</a></span><span class="refpurpose"> — <a name="plugin-coreelements"></a> GStreamer core elements</span>
2626 </dt></dl></div>
4848 <pre class="synopsis">
4949 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
5050 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
51 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
52 +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
53 +----<a href="../gstreamer-libs-1.0/GstBaseTransform.html">GstBaseTransform</a>
51 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
52 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
53 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html">GstBaseTransform</a>
5454 +----GstCapsFilter
5555 </pre>
5656 </div>
5757 <div class="refsect1">
5858 <a name="gstreamer-plugins-capsfilter.properties"></a><h2>Properties</h2>
5959 <pre class="synopsis">
60 "<a class="link" href="gstreamer-plugins-capsfilter.html#GstCapsFilter--caps" title='The "caps" property'>caps</a>" <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>* : Read / Write
60 "<a class="link" href="gstreamer-plugins-capsfilter.html#GstCapsFilter--caps" title='The "caps" property'>caps</a>" <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>* : Read / Write
6161 </pre>
6262 </div>
6363 <div class="refsect1">
6969 <p>
7070 </p>
7171 <div class="refsect2">
72 <a name="idp9006336"></a><h3>Example launch line</h3>
72 <a name="idp7718544"></a><h3>Example launch line</h3>
7373 <div class="informalexample">
7474 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
7575 <tbody>
8787 <div class="refsynopsisdiv">
8888 <h2>Synopsis</h2>
8989 <div class="refsect2">
90 <a name="idp9217088"></a><h3>Element Information</h3>
90 <a name="idp8004944"></a><h3>Element Information</h3>
9191 <div class="variablelist"><table border="0">
9292 <col align="left" valign="top">
9393 <tbody>
110110 </div>
111111 <hr>
112112 <div class="refsect2">
113 <a name="idp32112"></a><h3>Element Pads</h3>
113 <a name="idp134944"></a><h3>Element Pads</h3>
114114 <div class="variablelist"><table border="0">
115115 <col align="left" valign="top">
116116 <tbody>
172172 <a name="gstreamer-plugins-capsfilter.property-details"></a><h2>Property Details</h2>
173173 <div class="refsect2">
174174 <a name="GstCapsFilter--caps"></a><h3>The <code class="literal">"caps"</code> property</h3>
175 <pre class="programlisting"> "caps" <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>* : Read / Write</pre>
175 <pre class="programlisting"> "caps" <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>* : Read / Write</pre>
176176 <p>Restrict the possible allowed capabilities (NULL means ANY). Setting this property takes a reference to the supplied GstCaps object.</p>
177177 </div>
178178 </div>
5151 <pre class="synopsis">
5252 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
5353 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
54 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
55 +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
56 +----<a href="../gstreamer-libs-1.0/GstBaseSink.html">GstBaseSink</a>
54 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
55 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
56 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
5757 +----GstFakeSink
5858 </pre>
5959 </div>
8585 <p>
8686 </p>
8787 <div class="refsect2">
88 <a name="idp9474080"></a><h3>Example launch line</h3>
88 <a name="idp9553712"></a><h3>Example launch line</h3>
8989 <div class="informalexample">
9090 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
9191 <tbody>
103103 <div class="refsynopsisdiv">
104104 <h2>Synopsis</h2>
105105 <div class="refsect2">
106 <a name="idp6125200"></a><h3>Element Information</h3>
106 <a name="idp9556320"></a><h3>Element Information</h3>
107107 <div class="variablelist"><table border="0">
108108 <col align="left" valign="top">
109109 <tbody>
126126 </div>
127127 <hr>
128128 <div class="refsect2">
129 <a name="idp6132624"></a><h3>Element Pads</h3>
129 <a name="idp7211360"></a><h3>Element Pads</h3>
130130 <div class="variablelist"><table border="0">
131131 <col align="left" valign="top">
132132 <tbody>
284284 <div class="refsect2">
285285 <a name="GstFakeSink-handoff"></a><h3>The <code class="literal">"handoff"</code> signal</h3>
286286 <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="gstreamer-plugins-fakesink.html#GstFakeSink"><span class="type">GstFakeSink</span></a> *fakesink,
287 <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer,
288 <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad,
287 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer,
288 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad,
289289 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
290290 <p>
291291 This signal gets emitted before unreffing the buffer.
316316 <div class="refsect2">
317317 <a name="GstFakeSink-preroll-handoff"></a><h3>The <code class="literal">"preroll-handoff"</code> signal</h3>
318318 <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="gstreamer-plugins-fakesink.html#GstFakeSink"><span class="type">GstFakeSink</span></a> *fakesink,
319 <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer,
320 <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad,
319 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer,
320 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad,
321321 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
322322 <p>
323323 This signal gets emitted before unreffing the buffer.
5454 <pre class="synopsis">
5555 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
5656 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
57 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
58 +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
59 +----<a href="../gstreamer-libs-1.0/GstBaseSrc.html">GstBaseSrc</a>
57 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
58 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
59 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
6060 +----GstFakeSrc
6161 </pre>
6262 </div>
7979 "<a class="link" href="gstreamer-plugins-fakesrc.html#GstFakeSrc--sizemin" title='The "sizemin" property'>sizemin</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read / Write
8080 "<a class="link" href="gstreamer-plugins-fakesrc.html#GstFakeSrc--sizetype" title='The "sizetype" property'>sizetype</a>" <a class="link" href="gstreamer-plugins-fakesrc.html#GstFakeSrcSizeType" title="enum GstFakeSrcSizeType"><span class="type">GstFakeSrcSizeType</span></a> : Read / Write
8181 "<a class="link" href="gstreamer-plugins-fakesrc.html#GstFakeSrc--sync" title='The "sync" property'>sync</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write
82 "<a class="link" href="gstreamer-plugins-fakesrc.html#GstFakeSrc--format" title='The "format" property'>format</a>" <a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> : Read / Write
82 "<a class="link" href="gstreamer-plugins-fakesrc.html#GstFakeSrc--format" title='The "format" property'>format</a>" <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> : Read / Write
8383 </pre>
8484 </div>
8585 <div class="refsect1">
101101 <p>
102102 </p>
103103 <div class="refsect2">
104 <a name="idp9730432"></a><h3>Example launch line</h3>
104 <a name="idp8516432"></a><h3>Example launch line</h3>
105105 <div class="informalexample">
106106 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
107107 <tbody>
123123 <div class="refsynopsisdiv">
124124 <h2>Synopsis</h2>
125125 <div class="refsect2">
126 <a name="idp9733616"></a><h3>Element Information</h3>
126 <a name="idp8519616"></a><h3>Element Information</h3>
127127 <div class="variablelist"><table border="0">
128128 <col align="left" valign="top">
129129 <tbody>
146146 </div>
147147 <hr>
148148 <div class="refsect2">
149 <a name="idp9741024"></a><h3>Element Pads</h3>
149 <a name="idp8527024"></a><h3>Element Pads</h3>
150150 <div class="variablelist"><table border="0">
151151 <col align="left" valign="top">
152152 <tbody>
471471 <hr>
472472 <div class="refsect2">
473473 <a name="GstFakeSrc--format"></a><h3>The <code class="literal">"format"</code> property</h3>
474 <pre class="programlisting"> "format" <a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> : Read / Write</pre>
474 <pre class="programlisting"> "format" <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> : Read / Write</pre>
475475 <p>
476476 Set the format of the newsegment events to produce.
477477 </p>
483483 <div class="refsect2">
484484 <a name="GstFakeSrc-handoff"></a><h3>The <code class="literal">"handoff"</code> signal</h3>
485485 <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="gstreamer-plugins-fakesrc.html#GstFakeSrc"><span class="type">GstFakeSrc</span></a> *fakesrc,
486 <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer,
487 <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad,
486 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer,
487 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad,
488488 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
489489 <p>
490490 This signal gets emitted before sending the buffer.
5050 <pre class="synopsis">
5151 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
5252 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
53 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
54 +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
55 +----<a href="../gstreamer-libs-1.0/GstBaseSink.html">GstBaseSink</a>
53 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
54 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
55 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
5656 +----GstFdSink
5757 </pre>
5858 </div>
6060 <a name="gstreamer-plugins-fdsink.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
6161 <p>
6262 GstFdSink implements
63 <a href="../gstreamer-1.0/gstreamer-GstUriHandler.html#GstURIHandler">GstURIHandler</a>.</p>
63 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstUriHandler.html#GstURIHandler">GstURIHandler</a>.</p>
6464 </div>
6565 <div class="refsect1">
6666 <a name="gstreamer-plugins-fdsink.properties"></a><h2>Properties</h2>
7676 <p>
7777 This element will synchronize on the clock before writing the data on the
7878 socket. For file descriptors where this does not make sense (files, ...) the
79 <a href="../gstreamer-libs-1.0/GstBaseSink.html#GstBaseSink--sync"><span class="type">"sync"</span></a> property can be used to disable synchronisation.
79 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html#GstBaseSink--sync"><span class="type">"sync"</span></a> property can be used to disable synchronisation.
8080 </p>
8181 <p>
8282 Last reviewed on 2006-04-28 (0.10.6)
8484 <div class="refsynopsisdiv">
8585 <h2>Synopsis</h2>
8686 <div class="refsect2">
87 <a name="idp9024688"></a><h3>Element Information</h3>
87 <a name="idp7622240"></a><h3>Element Information</h3>
8888 <div class="variablelist"><table border="0">
8989 <col align="left" valign="top">
9090 <tbody>
107107 </div>
108108 <hr>
109109 <div class="refsect2">
110 <a name="idp7652304"></a><h3>Element Pads</h3>
110 <a name="idp7657744"></a><h3>Element Pads</h3>
111111 <div class="variablelist"><table border="0">
112112 <col align="left" valign="top">
113113 <tbody>
5050 <pre class="synopsis">
5151 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
5252 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
53 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
54 +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
55 +----<a href="../gstreamer-libs-1.0/GstBaseSrc.html">GstBaseSrc</a>
56 +----<a href="../gstreamer-libs-1.0/GstPushSrc.html">GstPushSrc</a>
53 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
54 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
55 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
56 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstPushSrc.html">GstPushSrc</a>
5757 +----GstFdSrc
5858 </pre>
5959 </div>
6161 <a name="gstreamer-plugins-fdsrc.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
6262 <p>
6363 GstFdSrc implements
64 <a href="../gstreamer-1.0/gstreamer-GstUriHandler.html#GstURIHandler">GstURIHandler</a>.</p>
64 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstUriHandler.html#GstURIHandler">GstURIHandler</a>.</p>
6565 </div>
6666 <div class="refsect1">
6767 <a name="gstreamer-plugins-fdsrc.properties"></a><h2>Properties</h2>
9696 <p>
9797 </p>
9898 <div class="refsect2">
99 <a name="idp6773120"></a><h3>Example launch line</h3>
99 <a name="idp9288096"></a><h3>Example launch line</h3>
100100 <div class="informalexample">
101101 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
102102 <tbody>
118118 <div class="refsynopsisdiv">
119119 <h2>Synopsis</h2>
120120 <div class="refsect2">
121 <a name="idp6776272"></a><h3>Element Information</h3>
121 <a name="idp9291200"></a><h3>Element Information</h3>
122122 <div class="variablelist"><table border="0">
123123 <col align="left" valign="top">
124124 <tbody>
141141 </div>
142142 <hr>
143143 <div class="refsect2">
144 <a name="idp6783728"></a><h3>Element Pads</h3>
144 <a name="idp9591808"></a><h3>Element Pads</h3>
145145 <div class="variablelist"><table border="0">
146146 <col align="left" valign="top">
147147 <tbody>
5050 <pre class="synopsis">
5151 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
5252 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
53 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
54 +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
55 +----<a href="../gstreamer-libs-1.0/GstBaseSink.html">GstBaseSink</a>
53 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
54 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
55 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
5656 +----GstFileSink
5757 </pre>
5858 </div>
6060 <a name="gstreamer-plugins-filesink.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
6161 <p>
6262 GstFileSink implements
63 <a href="../gstreamer-1.0/gstreamer-GstUriHandler.html#GstURIHandler">GstURIHandler</a>.</p>
63 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstUriHandler.html#GstURIHandler">GstURIHandler</a>.</p>
6464 </div>
6565 <div class="refsect1">
6666 <a name="gstreamer-plugins-filesink.properties"></a><h2>Properties</h2>
7979 <p>
8080 </p>
8181 <div class="refsect2">
82 <a name="idp5037280"></a><h3>Example launch line</h3>
82 <a name="idp6010672"></a><h3>Example launch line</h3>
8383 <div class="informalexample">
8484 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
8585 <tbody>
9797 <div class="refsynopsisdiv">
9898 <h2>Synopsis</h2>
9999 <div class="refsect2">
100 <a name="idp10876976"></a><h3>Element Information</h3>
100 <a name="idp6013232"></a><h3>Element Information</h3>
101101 <div class="variablelist"><table border="0">
102102 <col align="left" valign="top">
103103 <tbody>
120120 </div>
121121 <hr>
122122 <div class="refsect2">
123 <a name="idp10924704"></a><h3>Element Pads</h3>
123 <a name="idp6020640"></a><h3>Element Pads</h3>
124124 <div class="variablelist"><table border="0">
125125 <col align="left" valign="top">
126126 <tbody>
5050 <pre class="synopsis">
5151 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
5252 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
53 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
54 +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
55 +----<a href="../gstreamer-libs-1.0/GstBaseSrc.html">GstBaseSrc</a>
53 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
54 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
55 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
5656 +----GstFileSrc
5757 </pre>
5858 </div>
6060 <a name="gstreamer-plugins-filesrc.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
6161 <p>
6262 GstFileSrc implements
63 <a href="../gstreamer-1.0/gstreamer-GstUriHandler.html#GstURIHandler">GstURIHandler</a>.</p>
63 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstUriHandler.html#GstURIHandler">GstURIHandler</a>.</p>
6464 </div>
6565 <div class="refsect1">
6666 <a name="gstreamer-plugins-filesrc.properties"></a><h2>Properties</h2>
8181 <p>
8282 </p>
8383 <div class="refsect2">
84 <a name="idp6869664"></a><h3>Example launch line</h3>
84 <a name="idp7329248"></a><h3>Example launch line</h3>
8585 <div class="informalexample">
8686 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
8787 <tbody>
9999 <div class="refsynopsisdiv">
100100 <h2>Synopsis</h2>
101101 <div class="refsect2">
102 <a name="idp6872272"></a><h3>Element Information</h3>
102 <a name="idp7331856"></a><h3>Element Information</h3>
103103 <div class="variablelist"><table border="0">
104104 <col align="left" valign="top">
105105 <tbody>
122122 </div>
123123 <hr>
124124 <div class="refsect2">
125 <a name="idp10528784"></a><h3>Element Pads</h3>
125 <a name="idp9626240"></a><h3>Element Pads</h3>
126126 <div class="variablelist"><table border="0">
127127 <col align="left" valign="top">
128128 <tbody>
4646 <pre class="synopsis">
4747 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
4848 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
49 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
50 +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
49 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
50 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
5151 +----GstFunnel
5252 </pre>
5353 </div>
5858 </p>
5959 <p>
6060 funnel always outputs a single, open ended segment from
61 0 with in <a href="../gstreamer-1.0/gstreamer-GstFormat.html#GST-FORMAT-TIME:CAPS"><code class="literal">GST_FORMAT_TIME</code></a> and outputs the buffers of the
61 0 with in <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GST-FORMAT-TIME:CAPS"><code class="literal">GST_FORMAT_TIME</code></a> and outputs the buffers of the
6262 different sinkpads with timestamps that are set to the
6363 running time for that stream. funnel does not synchronize
6464 the different input streams but simply forwards all buffers
6767 <div class="refsynopsisdiv">
6868 <h2>Synopsis</h2>
6969 <div class="refsect2">
70 <a name="idp7728896"></a><h3>Element Information</h3>
70 <a name="idp7279280"></a><h3>Element Information</h3>
7171 <div class="variablelist"><table border="0">
7272 <col align="left" valign="top">
7373 <tbody>
9090 </div>
9191 <hr>
9292 <div class="refsect2">
93 <a name="idp9964400"></a><h3>Element Pads</h3>
93 <a name="idp5555680"></a><h3>Element Pads</h3>
9494 <div class="variablelist"><table border="0">
9595 <col align="left" valign="top">
9696 <tbody>
5050 <pre class="synopsis">
5151 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
5252 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
53 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
54 +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
55 +----<a href="../gstreamer-libs-1.0/GstBaseTransform.html">GstBaseTransform</a>
53 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
54 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
55 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html">GstBaseTransform</a>
5656 +----GstIdentity
5757 </pre>
5858 </div>
8989 <div class="refsynopsisdiv">
9090 <h2>Synopsis</h2>
9191 <div class="refsect2">
92 <a name="idp10744592"></a><h3>Element Information</h3>
92 <a name="idp10160416"></a><h3>Element Information</h3>
9393 <div class="variablelist"><table border="0">
9494 <col align="left" valign="top">
9595 <tbody>
112112 </div>
113113 <hr>
114114 <div class="refsect2">
115 <a name="idp10752048"></a><h3>Element Pads</h3>
115 <a name="idp10167872"></a><h3>Element Pads</h3>
116116 <div class="variablelist"><table border="0">
117117 <col align="left" valign="top">
118118 <tbody>
273273 <div class="refsect2">
274274 <a name="GstIdentity-handoff"></a><h3>The <code class="literal">"handoff"</code> signal</h3>
275275 <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="gstreamer-plugins-identity.html#GstIdentity"><span class="type">GstIdentity</span></a> *identity,
276 <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer,
276 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer,
277277 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
278278 <p>
279279 This signal gets emitted before passing the buffer downstream.
5050 <pre class="synopsis">
5151 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
5252 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
53 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
54 +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
53 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
54 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
5555 +----GstInputSelector
5656 </pre>
5757 </div>
5858 <div class="refsect1">
5959 <a name="gstreamer-plugins-input-selector.properties"></a><h2>Properties</h2>
6060 <pre class="synopsis">
61 "<a class="link" href="gstreamer-plugins-input-selector.html#GstInputSelector--active-pad" title='The "active-pad" property'>active-pad</a>" <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a>* : Read / Write
61 "<a class="link" href="gstreamer-plugins-input-selector.html#GstInputSelector--active-pad" title='The "active-pad" property'>active-pad</a>" <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>* : Read / Write
6262 "<a class="link" href="gstreamer-plugins-input-selector.html#GstInputSelector--n-pads" title='The "n-pads" property'>n-pads</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
6363 "<a class="link" href="gstreamer-plugins-input-selector.html#GstInputSelector--select-all" title='The "select-all" property'>select-all</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write
6464 "<a class="link" href="gstreamer-plugins-input-selector.html#GstInputSelector--sync-streams" title='The "sync-streams" property'>sync-streams</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write
8989 "running-time": Running time of stream on pad (<span class="type">gint64</span>)
9090 </li>
9191 <li class="listitem">
92 "tags": The currently active tags on the pad (<a href="../gstreamer-1.0/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a>, boxed type)
92 "tags": The currently active tags on the pad (<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a>, boxed type)
9393 </li>
9494 <li class="listitem">
9595 "active": If the pad is currently active (<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>)
9696 </li>
9797 <li class="listitem">
98 "always-ok" : Make an inactive pads return <a href="../gstreamer-1.0/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> instead of
99 <a href="../gstreamer-1.0/GstPad.html#GST-FLOW-NOT-LINKED:CAPS"><span class="type">GST_FLOW_NOT_LINKED</span></a>
98 "always-ok" : Make an inactive pads return <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> instead of
99 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-NOT-LINKED:CAPS"><span class="type">GST_FLOW_NOT_LINKED</span></a>
100100 </li>
101101 </ul></div>
102102 <p>
104104 <div class="refsynopsisdiv">
105105 <h2>Synopsis</h2>
106106 <div class="refsect2">
107 <a name="idp11251280"></a><h3>Element Information</h3>
107 <a name="idp8999888"></a><h3>Element Information</h3>
108108 <div class="variablelist"><table border="0">
109109 <col align="left" valign="top">
110110 <tbody>
127127 </div>
128128 <hr>
129129 <div class="refsect2">
130 <a name="idp11258816"></a><h3>Element Pads</h3>
130 <a name="idp9007424"></a><h3>Element Pads</h3>
131131 <div class="variablelist"><table border="0">
132132 <col align="left" valign="top">
133133 <tbody>
188188 <a name="gstreamer-plugins-input-selector.property-details"></a><h2>Property Details</h2>
189189 <div class="refsect2">
190190 <a name="GstInputSelector--active-pad"></a><h3>The <code class="literal">"active-pad"</code> property</h3>
191 <pre class="programlisting"> "active-pad" <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a>* : Read / Write</pre>
191 <pre class="programlisting"> "active-pad" <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>* : Read / Write</pre>
192192 <p>The currently active sink pad.</p>
193193 </div>
194194 <hr>
283283 <div class="refsect2">
284284 <a name="GstInputSelector-switch"></a><h3>The <code class="literal">"switch"</code> signal</h3>
285285 <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="gstreamer-plugins-input-selector.html#GstInputSelector"><span class="type">GstInputSelector</span></a> *gstinputselector,
286 <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *arg1,
286 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *arg1,
287287 <span class="type">gint64</span> arg2,
288288 <span class="type">gint64</span> arg3,
289289 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
5050 <pre class="synopsis">
5151 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
5252 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
53 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
54 +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
53 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
54 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
5555 +----GstMultiQueue
5656 </pre>
5757 </div>
8282 <p>
8383 </p>
8484 <div class="refsect2">
85 <a name="idp9289440"></a><p>
85 <a name="idp9479760"></a><p>
8686 Multiqueue is similar to a normal <a class="link" href="gstreamer-plugins-queue.html#GstQueue"><span class="type">GstQueue</span></a> with the following additional
8787 features:
8888 </p>
9696 'sometimes' src pads (src%d).
9797 </p>
9898 <p>
99 When requesting a given sinkpad with <a href="../gstreamer-1.0/GstElement.html#gst-element-get-request-pad"><code class="function">gst_element_get_request_pad()</code></a>,
99 When requesting a given sinkpad with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-get-request-pad"><code class="function">gst_element_get_request_pad()</code></a>,
100100 the associated srcpad for that stream will be created.
101101 Example: requesting sink1 will generate src1.
102102 </p>
172172 <div class="refsynopsisdiv">
173173 <h2>Synopsis</h2>
174174 <div class="refsect2">
175 <a name="idp11520688"></a><h3>Element Information</h3>
175 <a name="idp10309440"></a><h3>Element Information</h3>
176176 <div class="variablelist"><table border="0">
177177 <col align="left" valign="top">
178178 <tbody>
195195 </div>
196196 <hr>
197197 <div class="refsect2">
198 <a name="idp11528144"></a><h3>Element Pads</h3>
198 <a name="idp10316896"></a><h3>Element Pads</h3>
199199 <div class="variablelist"><table border="0">
200200 <col align="left" valign="top">
201201 <tbody>
4848 <pre class="synopsis">
4949 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
5050 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
51 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
52 +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
51 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
52 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
5353 +----GstOutputSelector
5454 </pre>
5555 </div>
5656 <div class="refsect1">
5757 <a name="gstreamer-plugins-output-selector.properties"></a><h2>Properties</h2>
5858 <pre class="synopsis">
59 "<a class="link" href="gstreamer-plugins-output-selector.html#GstOutputSelector--active-pad" title='The "active-pad" property'>active-pad</a>" <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a>* : Read / Write
59 "<a class="link" href="gstreamer-plugins-output-selector.html#GstOutputSelector--active-pad" title='The "active-pad" property'>active-pad</a>" <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>* : Read / Write
6060 "<a class="link" href="gstreamer-plugins-output-selector.html#GstOutputSelector--resend-latest" title='The "resend-latest" property'>resend-latest</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write
6161 "<a class="link" href="gstreamer-plugins-output-selector.html#GstOutputSelector--pad-negotiation-mode" title='The "pad-negotiation-mode" property'>pad-negotiation-mode</a>" <span class="type">GstOutputSelectorPadNegotiationMode</span> : Read / Write
6262 </pre>
6969 <div class="refsynopsisdiv">
7070 <h2>Synopsis</h2>
7171 <div class="refsect2">
72 <a name="idp4955616"></a><h3>Element Information</h3>
72 <a name="idp5357952"></a><h3>Element Information</h3>
7373 <div class="variablelist"><table border="0">
7474 <col align="left" valign="top">
7575 <tbody>
9292 </div>
9393 <hr>
9494 <div class="refsect2">
95 <a name="idp11458256"></a><h3>Element Pads</h3>
95 <a name="idp10642464"></a><h3>Element Pads</h3>
9696 <div class="variablelist"><table border="0">
9797 <col align="left" valign="top">
9898 <tbody>
153153 <a name="gstreamer-plugins-output-selector.property-details"></a><h2>Property Details</h2>
154154 <div class="refsect2">
155155 <a name="GstOutputSelector--active-pad"></a><h3>The <code class="literal">"active-pad"</code> property</h3>
156 <pre class="programlisting"> "active-pad" <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a>* : Read / Write</pre>
156 <pre class="programlisting"> "active-pad" <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>* : Read / Write</pre>
157157 <p>Currently active src pad.</p>
158158 </div>
159159 <hr>
2727 <td valign="top" align="right"></td>
2828 </tr></table></div>
2929 <div class="refsect1">
30 <a name="idp8723328"></a><h2>Plugin Information</h2>
30 <a name="idp6936016"></a><h2>Plugin Information</h2>
3131 <div class="variablelist"><table border="0">
3232 <col align="left" valign="top">
3333 <tbody>
3737 </tr>
3838 <tr>
3939 <td><p><span class="term">version</span></p></td>
40 <td>0.11.99</td>
40 <td>1.0.1</td>
4141 </tr>
4242 <tr>
4343 <td><p><span class="term">run-time license</span></p></td>
5555 </table></div>
5656 </div>
5757 <div class="refsect1">
58 <a name="idp8851280"></a><h2>Elements</h2>
58 <a name="idp10559648"></a><h2>Elements</h2>
5959 <div class="variablelist"><table border="0">
6060 <col align="left" valign="top">
6161 <tbody>
5151 <pre class="synopsis">
5252 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
5353 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
54 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
55 +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
54 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
55 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
5656 +----GstQueue
5757 </pre>
5858 </div>
121121 <div class="refsynopsisdiv">
122122 <h2>Synopsis</h2>
123123 <div class="refsect2">
124 <a name="idp11359504"></a><h3>Element Information</h3>
124 <a name="idp10717648"></a><h3>Element Information</h3>
125125 <div class="variablelist"><table border="0">
126126 <col align="left" valign="top">
127127 <tbody>
144144 </div>
145145 <hr>
146146 <div class="refsect2">
147 <a name="idp11366960"></a><h3>Element Pads</h3>
147 <a name="idp10725104"></a><h3>Element Pads</h3>
148148 <div class="variablelist"><table border="0">
149149 <col align="left" valign="top">
150150 <tbody>
4848 <pre class="synopsis">
4949 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
5050 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
51 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
52 +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
51 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
52 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
5353 +----GstQueue2
5454 </pre>
5555 </div>
109109 <div class="refsynopsisdiv">
110110 <h2>Synopsis</h2>
111111 <div class="refsect2">
112 <a name="idp12163568"></a><h3>Element Information</h3>
112 <a name="idp10988336"></a><h3>Element Information</h3>
113113 <div class="variablelist"><table border="0">
114114 <col align="left" valign="top">
115115 <tbody>
132132 </div>
133133 <hr>
134134 <div class="refsect2">
135 <a name="idp12170976"></a><h3>Element Pads</h3>
135 <a name="idp10995744"></a><h3>Element Pads</h3>
136136 <div class="variablelist"><table border="0">
137137 <col align="left" valign="top">
138138 <tbody>
4949 <pre class="synopsis">
5050 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
5151 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
52 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
53 +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
52 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
53 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
5454 +----GstTee
5555 </pre>
5656 </div>
6363 "<a class="link" href="gstreamer-plugins-tee.html#GstTee--num-src-pads" title='The "num-src-pads" property'>num-src-pads</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read
6464 "<a class="link" href="gstreamer-plugins-tee.html#GstTee--silent" title='The "silent" property'>silent</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct
6565 "<a class="link" href="gstreamer-plugins-tee.html#GstTee--pull-mode" title='The "pull-mode" property'>pull-mode</a>" <a class="link" href="gstreamer-plugins-tee.html#GstTeePullMode" title="enum GstTeePullMode"><span class="type">GstTeePullMode</span></a> : Read / Write / Construct
66 "<a class="link" href="gstreamer-plugins-tee.html#GstTee--alloc-pad" title='The "alloc-pad" property'>alloc-pad</a>" <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a>* : Read / Write
66 "<a class="link" href="gstreamer-plugins-tee.html#GstTee--alloc-pad" title='The "alloc-pad" property'>alloc-pad</a>" <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>* : Read / Write
6767 </pre>
6868 </div>
6969 <div class="refsect1">
8282 <p>
8383 </p>
8484 <div class="refsect2">
85 <a name="idp6592416"></a><h3>Example launch line</h3>
85 <a name="idp5968864"></a><h3>Example launch line</h3>
8686 <div class="informalexample">
8787 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
8888 <tbody>
101101 <div class="refsynopsisdiv">
102102 <h2>Synopsis</h2>
103103 <div class="refsect2">
104 <a name="idp6595136"></a><h3>Element Information</h3>
104 <a name="idp5971584"></a><h3>Element Information</h3>
105105 <div class="variablelist"><table border="0">
106106 <col align="left" valign="top">
107107 <tbody>
124124 </div>
125125 <hr>
126126 <div class="refsect2">
127 <a name="idp12121312"></a><h3>Element Pads</h3>
127 <a name="idp11108624"></a><h3>Element Pads</h3>
128128 <div class="variablelist"><table border="0">
129129 <col align="left" valign="top">
130130 <tbody>
257257 <hr>
258258 <div class="refsect2">
259259 <a name="GstTee--alloc-pad"></a><h3>The <code class="literal">"alloc-pad"</code> property</h3>
260 <pre class="programlisting"> "alloc-pad" <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a>* : Read / Write</pre>
260 <pre class="programlisting"> "alloc-pad" <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>* : Read / Write</pre>
261261 <p>The pad used for gst_pad_alloc_buffer.</p>
262262 </div>
263263 </div>
5050 <pre class="synopsis">
5151 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
5252 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
53 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
54 +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
53 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
54 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
5555 +----GstTypeFindElement
5656 </pre>
5757 </div>
5858 <div class="refsect1">
5959 <a name="gstreamer-plugins-typefind.properties"></a><h2>Properties</h2>
6060 <pre class="synopsis">
61 "<a class="link" href="gstreamer-plugins-typefind.html#GstTypeFindElement--caps" title='The "caps" property'>caps</a>" <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>* : Read
61 "<a class="link" href="gstreamer-plugins-typefind.html#GstTypeFindElement--caps" title='The "caps" property'>caps</a>" <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>* : Read
6262 "<a class="link" href="gstreamer-plugins-typefind.html#GstTypeFindElement--maximum" title='The "maximum" property'>maximum</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write
6363 "<a class="link" href="gstreamer-plugins-typefind.html#GstTypeFindElement--minimum" title='The "minimum" property'>minimum</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write
64 "<a class="link" href="gstreamer-plugins-typefind.html#GstTypeFindElement--force-caps" title='The "force-caps" property'>force-caps</a>" <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>* : Read / Write
64 "<a class="link" href="gstreamer-plugins-typefind.html#GstTypeFindElement--force-caps" title='The "force-caps" property'>force-caps</a>" <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>* : Read / Write
6565 </pre>
6666 </div>
6767 <div class="refsect1">
8484 state change function).
8585 </p>
8686 <p>
87 Plugins can register custom typefinders by using <a href="../gstreamer-1.0/GstTypeFindFactory.html"><span class="type">GstTypeFindFactory</span></a>.
87 Plugins can register custom typefinders by using <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTypeFindFactory.html"><span class="type">GstTypeFindFactory</span></a>.
8888 </p>
8989 <div class="refsynopsisdiv">
9090 <h2>Synopsis</h2>
9191 <div class="refsect2">
92 <a name="idp12038496"></a><h3>Element Information</h3>
92 <a name="idp9392352"></a><h3>Element Information</h3>
9393 <div class="variablelist"><table border="0">
9494 <col align="left" valign="top">
9595 <tbody>
112112 </div>
113113 <hr>
114114 <div class="refsect2">
115 <a name="idp12045904"></a><h3>Element Pads</h3>
115 <a name="idp9399760"></a><h3>Element Pads</h3>
116116 <div class="variablelist"><table border="0">
117117 <col align="left" valign="top">
118118 <tbody>
174174 <a name="gstreamer-plugins-typefind.property-details"></a><h2>Property Details</h2>
175175 <div class="refsect2">
176176 <a name="GstTypeFindElement--caps"></a><h3>The <code class="literal">"caps"</code> property</h3>
177 <pre class="programlisting"> "caps" <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>* : Read</pre>
177 <pre class="programlisting"> "caps" <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>* : Read</pre>
178178 <p>detected capabilities in stream.</p>
179179 </div>
180180 <hr>
196196 <hr>
197197 <div class="refsect2">
198198 <a name="GstTypeFindElement--force-caps"></a><h3>The <code class="literal">"force-caps"</code> property</h3>
199 <pre class="programlisting"> "force-caps" <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>* : Read / Write</pre>
199 <pre class="programlisting"> "force-caps" <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>* : Read / Write</pre>
200200 <p>force caps without doing a typefind.</p>
201201 </div>
202202 </div>
206206 <a name="GstTypeFindElement-have-type"></a><h3>The <code class="literal">"have-type"</code> signal</h3>
207207 <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="gstreamer-plugins-typefind.html#GstTypeFindElement"><span class="type">GstTypeFindElement</span></a> *typefind,
208208 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> probability,
209 <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps,
209 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps,
210210 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a></pre>
211211 <p>
212212 This signal gets emitted when the type and its probability has
4848 <pre class="synopsis">
4949 <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
5050 +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
51 +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
52 +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
51 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
52 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
5353 +----GstValve
5454 </pre>
5555 </div>
6767 </p>
6868 <p>
6969 Any downstream error received while the <a class="link" href="gstreamer-plugins-valve.html#GstValve--drop" title='The "drop" property'><span class="type">"drop"</span></a> property is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
70 is ignored. So downstream element can be set to <a href="../gstreamer-1.0/GstElement.html#GST-STATE-NULL:CAPS"><code class="literal">GST_STATE_NULL</code></a> and removed,
70 is ignored. So downstream element can be set to <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-STATE-NULL:CAPS"><code class="literal">GST_STATE_NULL</code></a> and removed,
7171 without using pad blocking.
7272 </p>
7373 <p>
8080 <div class="refsynopsisdiv">
8181 <h2>Synopsis</h2>
8282 <div class="refsect2">
83 <a name="idp10150096"></a><h3>Element Information</h3>
83 <a name="idp5663680"></a><h3>Element Information</h3>
8484 <div class="variablelist"><table border="0">
8585 <col align="left" valign="top">
8686 <tbody>
103103 </div>
104104 <hr>
105105 <div class="refsect2">
106 <a name="idp10589120"></a><h3>Element Pads</h3>
106 <a name="idp4984144"></a><h3>Element Pads</h3>
107107 <div class="variablelist"><table border="0">
108108 <col align="left" valign="top">
109109 <tbody>
2525 </sub>
2626 </chapters>
2727 <functions>
28 <keyword type="" name="Example launch line" link="gstreamer-plugins-capsfilter.html#idp9006336"/>
29 <keyword type="" name="Element Information" link="gstreamer-plugins-capsfilter.html#idp9217088"/>
30 <keyword type="" name="Element Pads" link="gstreamer-plugins-capsfilter.html#idp32112"/>
28 <keyword type="" name="Example launch line" link="gstreamer-plugins-capsfilter.html#idp7718544"/>
29 <keyword type="" name="Element Information" link="gstreamer-plugins-capsfilter.html#idp8004944"/>
30 <keyword type="" name="Element Pads" link="gstreamer-plugins-capsfilter.html#idp134944"/>
3131 <keyword type="struct" name="struct GstCapsFilter" link="gstreamer-plugins-capsfilter.html#GstCapsFilter-struct"/>
3232 <keyword type="property" name="The &quot;caps&quot; property" link="gstreamer-plugins-capsfilter.html#GstCapsFilter--caps"/>
33 <keyword type="" name="Example launch line" link="gstreamer-plugins-fakesrc.html#idp9730432"/>
34 <keyword type="" name="Element Information" link="gstreamer-plugins-fakesrc.html#idp9733616"/>
35 <keyword type="" name="Element Pads" link="gstreamer-plugins-fakesrc.html#idp9741024"/>
33 <keyword type="" name="Example launch line" link="gstreamer-plugins-fakesrc.html#idp8516432"/>
34 <keyword type="" name="Element Information" link="gstreamer-plugins-fakesrc.html#idp8519616"/>
35 <keyword type="" name="Element Pads" link="gstreamer-plugins-fakesrc.html#idp8527024"/>
3636 <keyword type="struct" name="struct GstFakeSrc" link="gstreamer-plugins-fakesrc.html#GstFakeSrc-struct"/>
3737 <keyword type="enum" name="enum GstFakeSrcDataType" link="gstreamer-plugins-fakesrc.html#GstFakeSrcDataType"/>
3838 <keyword type="enum" name="enum GstFakeSrcFillType" link="gstreamer-plugins-fakesrc.html#GstFakeSrcFillType"/>
5656 <keyword type="property" name="The &quot;sync&quot; property" link="gstreamer-plugins-fakesrc.html#GstFakeSrc--sync"/>
5757 <keyword type="property" name="The &quot;format&quot; property" link="gstreamer-plugins-fakesrc.html#GstFakeSrc--format"/>
5858 <keyword type="signal" name="The &quot;handoff&quot; signal" link="gstreamer-plugins-fakesrc.html#GstFakeSrc-handoff"/>
59 <keyword type="" name="Example launch line" link="gstreamer-plugins-fakesink.html#idp9474080"/>
60 <keyword type="" name="Element Information" link="gstreamer-plugins-fakesink.html#idp6125200"/>
61 <keyword type="" name="Element Pads" link="gstreamer-plugins-fakesink.html#idp6132624"/>
59 <keyword type="" name="Example launch line" link="gstreamer-plugins-fakesink.html#idp9553712"/>
60 <keyword type="" name="Element Information" link="gstreamer-plugins-fakesink.html#idp9556320"/>
61 <keyword type="" name="Element Pads" link="gstreamer-plugins-fakesink.html#idp7211360"/>
6262 <keyword type="struct" name="struct GstFakeSink" link="gstreamer-plugins-fakesink.html#GstFakeSink-struct"/>
6363 <keyword type="enum" name="enum GstFakeSinkStateError" link="gstreamer-plugins-fakesink.html#GstFakeSinkStateError"/>
6464 <keyword type="property" name="The &quot;can-activate-pull&quot; property" link="gstreamer-plugins-fakesink.html#GstFakeSink--can-activate-pull"/>
7171 <keyword type="property" name="The &quot;num-buffers&quot; property" link="gstreamer-plugins-fakesink.html#GstFakeSink--num-buffers"/>
7272 <keyword type="signal" name="The &quot;handoff&quot; signal" link="gstreamer-plugins-fakesink.html#GstFakeSink-handoff"/>
7373 <keyword type="signal" name="The &quot;preroll-handoff&quot; signal" link="gstreamer-plugins-fakesink.html#GstFakeSink-preroll-handoff"/>
74 <keyword type="" name="Element Information" link="gstreamer-plugins-fdsink.html#idp9024688"/>
75 <keyword type="" name="Element Pads" link="gstreamer-plugins-fdsink.html#idp7652304"/>
74 <keyword type="" name="Element Information" link="gstreamer-plugins-fdsink.html#idp7622240"/>
75 <keyword type="" name="Element Pads" link="gstreamer-plugins-fdsink.html#idp7657744"/>
7676 <keyword type="struct" name="struct GstFdSink" link="gstreamer-plugins-fdsink.html#GstFdSink-struct"/>
7777 <keyword type="property" name="The &quot;fd&quot; property" link="gstreamer-plugins-fdsink.html#GstFdSink--fd"/>
78 <keyword type="" name="Example launch line" link="gstreamer-plugins-fdsrc.html#idp6773120"/>
79 <keyword type="" name="Element Information" link="gstreamer-plugins-fdsrc.html#idp6776272"/>
80 <keyword type="" name="Element Pads" link="gstreamer-plugins-fdsrc.html#idp6783728"/>
78 <keyword type="" name="Example launch line" link="gstreamer-plugins-fdsrc.html#idp9288096"/>
79 <keyword type="" name="Element Information" link="gstreamer-plugins-fdsrc.html#idp9291200"/>
80 <keyword type="" name="Element Pads" link="gstreamer-plugins-fdsrc.html#idp9591808"/>
8181 <keyword type="struct" name="struct GstFdSrc" link="gstreamer-plugins-fdsrc.html#GstFdSrc-struct"/>
8282 <keyword type="property" name="The &quot;fd&quot; property" link="gstreamer-plugins-fdsrc.html#GstFdSrc--fd"/>
8383 <keyword type="property" name="The &quot;timeout&quot; property" link="gstreamer-plugins-fdsrc.html#GstFdSrc--timeout"/>
84 <keyword type="" name="Example launch line" link="gstreamer-plugins-filesrc.html#idp6869664"/>
85 <keyword type="" name="Element Information" link="gstreamer-plugins-filesrc.html#idp6872272"/>
86 <keyword type="" name="Element Pads" link="gstreamer-plugins-filesrc.html#idp10528784"/>
84 <keyword type="" name="Example launch line" link="gstreamer-plugins-filesrc.html#idp7329248"/>
85 <keyword type="" name="Element Information" link="gstreamer-plugins-filesrc.html#idp7331856"/>
86 <keyword type="" name="Element Pads" link="gstreamer-plugins-filesrc.html#idp9626240"/>
8787 <keyword type="struct" name="struct GstFileSrc" link="gstreamer-plugins-filesrc.html#GstFileSrc-struct"/>
8888 <keyword type="property" name="The &quot;fd&quot; property" link="gstreamer-plugins-filesrc.html#GstFileSrc--fd"/>
8989 <keyword type="property" name="The &quot;location&quot; property" link="gstreamer-plugins-filesrc.html#GstFileSrc--location"/>
9191 <keyword type="property" name="The &quot;touch&quot; property" link="gstreamer-plugins-filesrc.html#GstFileSrc--touch"/>
9292 <keyword type="property" name="The &quot;use-mmap&quot; property" link="gstreamer-plugins-filesrc.html#GstFileSrc--use-mmap"/>
9393 <keyword type="property" name="The &quot;sequential&quot; property" link="gstreamer-plugins-filesrc.html#GstFileSrc--sequential"/>
94 <keyword type="" name="Example launch line" link="gstreamer-plugins-filesink.html#idp5037280"/>
95 <keyword type="" name="Element Information" link="gstreamer-plugins-filesink.html#idp10876976"/>
96 <keyword type="" name="Element Pads" link="gstreamer-plugins-filesink.html#idp10924704"/>
94 <keyword type="" name="Example launch line" link="gstreamer-plugins-filesink.html#idp6010672"/>
95 <keyword type="" name="Element Information" link="gstreamer-plugins-filesink.html#idp6013232"/>
96 <keyword type="" name="Element Pads" link="gstreamer-plugins-filesink.html#idp6020640"/>
9797 <keyword type="struct" name="struct GstFileSink" link="gstreamer-plugins-filesink.html#GstFileSink-struct"/>
9898 <keyword type="property" name="The &quot;location&quot; property" link="gstreamer-plugins-filesink.html#GstFileSink--location"/>
9999 <keyword type="property" name="The &quot;buffer-mode&quot; property" link="gstreamer-plugins-filesink.html#GstFileSink--buffer-mode"/>
100100 <keyword type="property" name="The &quot;buffer-size&quot; property" link="gstreamer-plugins-filesink.html#GstFileSink--buffer-size"/>
101101 <keyword type="property" name="The &quot;append&quot; property" link="gstreamer-plugins-filesink.html#GstFileSink--append"/>
102 <keyword type="" name="Element Information" link="gstreamer-plugins-funnel.html#idp7728896"/>
103 <keyword type="" name="Element Pads" link="gstreamer-plugins-funnel.html#idp9964400"/>
102 <keyword type="" name="Element Information" link="gstreamer-plugins-funnel.html#idp7279280"/>
103 <keyword type="" name="Element Pads" link="gstreamer-plugins-funnel.html#idp5555680"/>
104104 <keyword type="struct" name="struct GstFunnel" link="gstreamer-plugins-funnel.html#GstFunnel-struct"/>
105 <keyword type="" name="Element Information" link="gstreamer-plugins-identity.html#idp10744592"/>
106 <keyword type="" name="Element Pads" link="gstreamer-plugins-identity.html#idp10752048"/>
105 <keyword type="" name="Element Information" link="gstreamer-plugins-identity.html#idp10160416"/>
106 <keyword type="" name="Element Pads" link="gstreamer-plugins-identity.html#idp10167872"/>
107107 <keyword type="struct" name="struct GstIdentity" link="gstreamer-plugins-identity.html#GstIdentity-struct"/>
108108 <keyword type="property" name="The &quot;check-perfect&quot; property" link="gstreamer-plugins-identity.html#GstIdentity--check-perfect"/>
109109 <keyword type="property" name="The &quot;datarate&quot; property" link="gstreamer-plugins-identity.html#GstIdentity--datarate"/>
119119 <keyword type="property" name="The &quot;check-imperfect-timestamp&quot; property" link="gstreamer-plugins-identity.html#GstIdentity--check-imperfect-timestamp"/>
120120 <keyword type="property" name="The &quot;signal-handoffs&quot; property" link="gstreamer-plugins-identity.html#GstIdentity--signal-handoffs"/>
121121 <keyword type="signal" name="The &quot;handoff&quot; signal" link="gstreamer-plugins-identity.html#GstIdentity-handoff"/>
122 <keyword type="" name="Element Information" link="gstreamer-plugins-input-selector.html#idp11251280"/>
123 <keyword type="" name="Element Pads" link="gstreamer-plugins-input-selector.html#idp11258816"/>
122 <keyword type="" name="Element Information" link="gstreamer-plugins-input-selector.html#idp8999888"/>
123 <keyword type="" name="Element Pads" link="gstreamer-plugins-input-selector.html#idp9007424"/>
124124 <keyword type="struct" name="struct GstInputSelector" link="gstreamer-plugins-input-selector.html#GstInputSelector-struct"/>
125125 <keyword type="property" name="The &quot;active-pad&quot; property" link="gstreamer-plugins-input-selector.html#GstInputSelector--active-pad"/>
126126 <keyword type="property" name="The &quot;n-pads&quot; property" link="gstreamer-plugins-input-selector.html#GstInputSelector--n-pads"/>
130130 <keyword type="property" name="The &quot;sync-mode&quot; property" link="gstreamer-plugins-input-selector.html#GstInputSelector--sync-mode"/>
131131 <keyword type="signal" name="The &quot;block&quot; signal" link="gstreamer-plugins-input-selector.html#GstInputSelector-block"/>
132132 <keyword type="signal" name="The &quot;switch&quot; signal" link="gstreamer-plugins-input-selector.html#GstInputSelector-switch"/>
133 <keyword type="" name="" link="gstreamer-plugins-multiqueue.html#idp9289440"/>
134 <keyword type="" name="Element Information" link="gstreamer-plugins-multiqueue.html#idp11520688"/>
135 <keyword type="" name="Element Pads" link="gstreamer-plugins-multiqueue.html#idp11528144"/>
133 <keyword type="" name="" link="gstreamer-plugins-multiqueue.html#idp9479760"/>
134 <keyword type="" name="Element Information" link="gstreamer-plugins-multiqueue.html#idp10309440"/>
135 <keyword type="" name="Element Pads" link="gstreamer-plugins-multiqueue.html#idp10316896"/>
136136 <keyword type="struct" name="struct GstMultiQueue" link="gstreamer-plugins-multiqueue.html#GstMultiQueue-struct"/>
137137 <keyword type="property" name="The &quot;extra-size-buffers&quot; property" link="gstreamer-plugins-multiqueue.html#GstMultiQueue--extra-size-buffers"/>
138138 <keyword type="property" name="The &quot;extra-size-bytes&quot; property" link="gstreamer-plugins-multiqueue.html#GstMultiQueue--extra-size-bytes"/>
146146 <keyword type="property" name="The &quot;sync-by-running-time&quot; property" link="gstreamer-plugins-multiqueue.html#GstMultiQueue--sync-by-running-time"/>
147147 <keyword type="signal" name="The &quot;overrun&quot; signal" link="gstreamer-plugins-multiqueue.html#GstMultiQueue-overrun"/>
148148 <keyword type="signal" name="The &quot;underrun&quot; signal" link="gstreamer-plugins-multiqueue.html#GstMultiQueue-underrun"/>
149 <keyword type="" name="Element Information" link="gstreamer-plugins-output-selector.html#idp4955616"/>
150 <keyword type="" name="Element Pads" link="gstreamer-plugins-output-selector.html#idp11458256"/>
149 <keyword type="" name="Element Information" link="gstreamer-plugins-output-selector.html#idp5357952"/>
150 <keyword type="" name="Element Pads" link="gstreamer-plugins-output-selector.html#idp10642464"/>
151151 <keyword type="struct" name="struct GstOutputSelector" link="gstreamer-plugins-output-selector.html#GstOutputSelector-struct"/>
152152 <keyword type="property" name="The &quot;active-pad&quot; property" link="gstreamer-plugins-output-selector.html#GstOutputSelector--active-pad"/>
153153 <keyword type="property" name="The &quot;resend-latest&quot; property" link="gstreamer-plugins-output-selector.html#GstOutputSelector--resend-latest"/>
154154 <keyword type="property" name="The &quot;pad-negotiation-mode&quot; property" link="gstreamer-plugins-output-selector.html#GstOutputSelector--pad-negotiation-mode"/>
155 <keyword type="" name="Element Information" link="gstreamer-plugins-queue.html#idp11359504"/>
156 <keyword type="" name="Element Pads" link="gstreamer-plugins-queue.html#idp11366960"/>
155 <keyword type="" name="Element Information" link="gstreamer-plugins-queue.html#idp10717648"/>
156 <keyword type="" name="Element Pads" link="gstreamer-plugins-queue.html#idp10725104"/>
157157 <keyword type="struct" name="struct GstQueue" link="gstreamer-plugins-queue.html#GstQueue-struct"/>
158158 <keyword type="enum" name="enum GstQueueLeaky" link="gstreamer-plugins-queue.html#GstQueueLeaky"/>
159159 <keyword type="property" name="The &quot;current-level-buffers&quot; property" link="gstreamer-plugins-queue.html#GstQueue--current-level-buffers"/>
171171 <keyword type="signal" name="The &quot;running&quot; signal" link="gstreamer-plugins-queue.html#GstQueue-running"/>
172172 <keyword type="signal" name="The &quot;underrun&quot; signal" link="gstreamer-plugins-queue.html#GstQueue-underrun"/>
173173 <keyword type="signal" name="The &quot;pushing&quot; signal" link="gstreamer-plugins-queue.html#GstQueue-pushing"/>
174 <keyword type="" name="Element Information" link="gstreamer-plugins-queue2.html#idp12163568"/>
175 <keyword type="" name="Element Pads" link="gstreamer-plugins-queue2.html#idp12170976"/>
174 <keyword type="" name="Element Information" link="gstreamer-plugins-queue2.html#idp10988336"/>
175 <keyword type="" name="Element Pads" link="gstreamer-plugins-queue2.html#idp10995744"/>
176176 <keyword type="struct" name="struct GstQueue2" link="gstreamer-plugins-queue2.html#GstQueue2-struct"/>
177177 <keyword type="property" name="The &quot;current-level-buffers&quot; property" link="gstreamer-plugins-queue2.html#GstQueue2--current-level-buffers"/>
178178 <keyword type="property" name="The &quot;current-level-bytes&quot; property" link="gstreamer-plugins-queue2.html#GstQueue2--current-level-bytes"/>
188188 <keyword type="property" name="The &quot;use-rate-estimate&quot; property" link="gstreamer-plugins-queue2.html#GstQueue2--use-rate-estimate"/>
189189 <keyword type="property" name="The &quot;temp-remove&quot; property" link="gstreamer-plugins-queue2.html#GstQueue2--temp-remove"/>
190190 <keyword type="property" name="The &quot;ring-buffer-max-size&quot; property" link="gstreamer-plugins-queue2.html#GstQueue2--ring-buffer-max-size"/>
191 <keyword type="" name="Example launch line" link="gstreamer-plugins-tee.html#idp6592416"/>
192 <keyword type="" name="Element Information" link="gstreamer-plugins-tee.html#idp6595136"/>
193 <keyword type="" name="Element Pads" link="gstreamer-plugins-tee.html#idp12121312"/>
191 <keyword type="" name="Example launch line" link="gstreamer-plugins-tee.html#idp5968864"/>
192 <keyword type="" name="Element Information" link="gstreamer-plugins-tee.html#idp5971584"/>
193 <keyword type="" name="Element Pads" link="gstreamer-plugins-tee.html#idp11108624"/>
194194 <keyword type="struct" name="struct GstTee" link="gstreamer-plugins-tee.html#GstTee-struct"/>
195195 <keyword type="enum" name="enum GstTeePullMode" link="gstreamer-plugins-tee.html#GstTeePullMode"/>
196196 <keyword type="property" name="The &quot;has-chain&quot; property" link="gstreamer-plugins-tee.html#GstTee--has-chain"/>
200200 <keyword type="property" name="The &quot;silent&quot; property" link="gstreamer-plugins-tee.html#GstTee--silent"/>
201201 <keyword type="property" name="The &quot;pull-mode&quot; property" link="gstreamer-plugins-tee.html#GstTee--pull-mode"/>
202202 <keyword type="property" name="The &quot;alloc-pad&quot; property" link="gstreamer-plugins-tee.html#GstTee--alloc-pad"/>
203 <keyword type="" name="Element Information" link="gstreamer-plugins-typefind.html#idp12038496"/>
204 <keyword type="" name="Element Pads" link="gstreamer-plugins-typefind.html#idp12045904"/>
203 <keyword type="" name="Element Information" link="gstreamer-plugins-typefind.html#idp9392352"/>
204 <keyword type="" name="Element Pads" link="gstreamer-plugins-typefind.html#idp9399760"/>
205205 <keyword type="struct" name="struct GstTypeFindElement" link="gstreamer-plugins-typefind.html#GstTypeFindElement-struct"/>
206206 <keyword type="property" name="The &quot;caps&quot; property" link="gstreamer-plugins-typefind.html#GstTypeFindElement--caps"/>
207207 <keyword type="property" name="The &quot;maximum&quot; property" link="gstreamer-plugins-typefind.html#GstTypeFindElement--maximum"/>
208208 <keyword type="property" name="The &quot;minimum&quot; property" link="gstreamer-plugins-typefind.html#GstTypeFindElement--minimum"/>
209209 <keyword type="property" name="The &quot;force-caps&quot; property" link="gstreamer-plugins-typefind.html#GstTypeFindElement--force-caps"/>
210210 <keyword type="signal" name="The &quot;have-type&quot; signal" link="gstreamer-plugins-typefind.html#GstTypeFindElement-have-type"/>
211 <keyword type="" name="Element Information" link="gstreamer-plugins-valve.html#idp10150096"/>
212 <keyword type="" name="Element Pads" link="gstreamer-plugins-valve.html#idp10589120"/>
211 <keyword type="" name="Element Information" link="gstreamer-plugins-valve.html#idp5663680"/>
212 <keyword type="" name="Element Pads" link="gstreamer-plugins-valve.html#idp4984144"/>
213213 <keyword type="struct" name="struct GstValve" link="gstreamer-plugins-valve.html#GstValve-struct"/>
214214 <keyword type="property" name="The &quot;drop&quot; property" link="gstreamer-plugins-valve.html#GstValve--drop"/>
215215 <keyword type="constant" name="FAKE_SRC_DATA_ALLOCATE" link="gstreamer-plugins-fakesrc.html#FAKE-SRC-DATA-ALLOCATE:CAPS"/>
1414 <div>
1515 <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer Core Plugins 1.0 Plugins Reference Manual</p></th></tr></table></div>
1616 <div><p class="releaseinfo">
17 for GStreamer Core Plugins 1.0 (1.0.0)
17 for GStreamer Core Plugins 1.0 (1.0.1)
1818 The latest version of this documentation can be found on-line at
1919 <a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/</a>.
2020 </p></div>
22 <description> GStreamer core elements</description>
33 <filename>../../plugins/elements/.libs/libgstcoreelements.so</filename>
44 <basename>libgstcoreelements.so</basename>
5 <version>1.0.0</version>
5 <version>1.0.1</version>
66 <license>LGPL</license>
77 <source>gstreamer</source>
88 <package>GStreamer source release</package>
884884 if echo $(FORMATS) | grep ps > /dev/null; then export SRC="$$SRC $(DOC).ps"; fi; \
885885 if echo $(FORMATS) | grep pdf > /dev/null; then export SRC="$$SRC $(DOC).pdf"; fi; \
886886 \
887 # upload releases to both 0.10.X/ and head/ subdirectories \
888 if test "x$(PACKAGE_VERSION_NANO)" = x0; then \
889 export DIR=$(DOC_BASE)/gstreamer/$(VERSION)/$(DOC); \
890 echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
891 ssh $(DOC_SERVER) mkdir -p $$DIR; \
892 rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
893 ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
894 fi; \
887 # upload releases to both X.Y/ and head/ subdirectories \
888 export DIR=$(DOC_BASE)/gstreamer/$(PACKAGE_VERSION_MAJOR).$(PACKAGE_VERSION_MINOR)/$(DOC); \
889 echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
890 ssh $(DOC_SERVER) mkdir -p $$DIR; \
891 rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
892 ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
895893 \
896894 export DIR=$(DOC_BASE)/gstreamer/head/$(DOC); \
897895 echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
0 <chapter id="chapter-allocation" xreflabel="Memory allocation">
1 <title>Memory allocation</title>
2 <para>
3 Memory allocation and management is a very important topic in
4 multimedia. High definition video uses many magabytes to store
5 one single frame of video. It is important to reuse the memory
6 when possible instead of constantly allocating and freeing
7 the memory.
8 </para>
9 <para>
10 Multimedia systems usually use special purpose chips, such as
11 DSPs or GPUs to perform the heavy lifting (especially for video).
12 These special purpose chips have usually strict requirements
13 for the memory that they can operate on and how the memory
14 is accessed.
15 </para>
16 <para>
17 This chapter talks about the memory management features that
18 &GStreamer; plugins can use. We will first talk about the
19 lowlevel <classname>GstMemory</classname> object that manages
20 access to a piece of memory. We then continue with
21 <classname>GstBuffer</classname> that is used to exchange data
22 between plugins (and the application) and that uses
23 <classname>GstMemory</classname>. We talk about
24 <classname>GstMeta</classname> that can be placed on buffers to
25 give extra info about the buffer and its memory.
26 For efficiently managing buffers of the same size, we take a
27 look at <classname>GstBufferPool</classname>. To conclude this
28 chapter we take a look at the GST_QUERY_ALLOCATION query that
29 is used to negotiate memory management options between elements.
30 </para>
31
32 <sect1 id="section-allocation-memory" xreflabel="GstMemory">
33 <title>GstMemory</title>
34 <para>
35 <classname>GstMemory</classname> is an object that manages a region
36 of memory. The memory object points to a region of memory of
37 <quote>maxsize</quote>. The area in this memory starting at
38 <quote>offset</quote> and for <quote>size</quote> bytes is the
39 accessible region in the memory. the maxsize of the memory can
40 never be changed after the object is created, however, the offset
41 and size can be changed.
42 </para>
43 <para>
44 <classname>GstMemory</classname> objects are created by a
45 <classname>GstAllocator</classname> object. To implement support
46 for a new kind of memory type, you must implement a new allocator
47 object.
48 </para>
49 <sect2 id="section-allocation-memory-ex" xreflabel="GstMemory-ex">
50 <title>GstMemory API example</title>
51 <para>
52 Data access to the memory wrapped by the <classname>GstMemory</classname>
53 object is always protected with a <function>gst_memory_map()</function>
54 and <function>gst_memory_unmap()</function> pair. An access mode
55 (read/write) must be given when mapping memory. The map
56 function returns a pointer to the valid memory region that can
57 then be accessed according to the requested access mode.
58 </para>
59 <para>
60 Below is an example of making a <classname>GstMemory</classname>
61 object and using the <function>gst_memory_map()</function> to
62 access the memory region.
63 </para>
64 <programlisting>
65 <![CDATA[
66 [...]
67
68 GstMemory *mem;
69 GstMapInfo info;
70 gint i;
71
72 /* allocate 100 bytes */
73 mem = gst_allocator_alloc (NULL, 100, NULL);
74
75 /* get access to the memory in write mode */
76 gst_memory_map (mem, &info, GST_MAP_WRITE);
77
78 /* fill with pattern */
79 for (i = 0; i < info.size; i++)
80 info.data[i] = i;
81
82 /* release memory */
83 gst_memory_unmap (mem, &info);
84
85 [...]
86 ]]>
87 </programlisting>
88 </sect2>
89
90 <sect2 id="section-allocation-allocator" xreflabel="GstAllocator">
91 <title>Implementing a GstAllocator</title>
92 <para>
93 WRITEME
94 </para>
95 </sect2>
96
97 </sect1>
98
99 <sect1 id="section-allocation-buffer" xreflabel="GstBuffer">
100 <title>GstBuffer</title>
101 <para>
102 A <classname>GstBuffer</classname> is an lightweight object that
103 is passed from an upstream to a downstream element and contains
104 memory and metadata. It represents the multimedia content that
105 is pushed or pull downstream by elements.
106 </para>
107 <para>
108 The buffer contains one or more <classname>GstMemory</classname>
109 objects thet represent the data in the buffer.
110 </para>
111 <para>
112 Metadata in the buffer consists of:
113 </para>
114 <itemizedlist mark="opencircle">
115 <listitem>
116 <para>
117 DTS and PTS timestamps. These represent the decoding and
118 presentation timestamps of the buffer content and is used by
119 synchronizing elements to schedule buffers. Both these timestamps
120 can be GST_CLOCK_TIME_NONE when unknown/undefined.
121 </para>
122 </listitem>
123 <listitem>
124 <para>
125 The duration of the buffer contents. This duration can be
126 GST_CLOCK_TIME_NONE when unknown/undefined.
127 </para>
128 </listitem>
129 <listitem>
130 <para>
131 Media specific offsets and offset_end. For video this is the
132 frame number in the stream and for audio the sample number. Other
133 definitions for other media exist.
134 </para>
135 </listitem>
136 <listitem>
137 <para>
138 Arbitrary structures via <classname>GstMeta</classname>, see below.
139 </para>
140 </listitem>
141 </itemizedlist>
142
143 <sect2 id="section-allocation-writability" xreflabel="GstBuffer-write">
144 <title>GstBuffer writability</title>
145 <para>
146 A buffer is writable when the refcount of the object is exactly 1, meaning
147 that only one object is holding a ref to the buffer. You can only
148 modify anything in the buffer when the buffer is writable. This means
149 that you need to call <function>gst_buffer_make_writable()</function>
150 before changing the timestamps, offsets, metadata or adding and
151 removing memory blocks.
152 </para>
153 </sect2>
154 <sect2 id="section-allocation-buffer-ex" xreflabel="GstBuffer-ex">
155 <title>GstBuffer API examples</title>
156 <para>
157 You can create a buffer with <function>gst_buffer_new ()</function>
158 and then add memory objects to it or you can use a convenience function
159 <function>gst_buffer_new_allocate ()</function> which combines the
160 two. It's also possible to wrap existing memory with
161 <function>gst_buffer_new_wrapped_full () </function> where you can
162 give the function to call when the memory should be freed.
163 </para>
164 <para>
165 You can access the memory of the buffer by getting and mapping the
166 <classname>GstMemory</classname> objects individually or by using
167 <function>gst_buffer_map ()</function>. The latter merges all the
168 memory into one big block and then gives you a pointer to this block.
169 </para>
170 <para>
171 Below is an example of how to create a buffer and access its memory.
172 </para>
173 <programlisting>
174 <![CDATA[
175 [...]
176 GstBuffer *buffer;
177 GstMemory *mem;
178 GstMapInfo info;
179
180 /* make empty buffer */
181 buffer = gst_buffer_new ();
182
183 /* make memory holding 100 bytes */
184 mem = gst_allocator_alloc (NULL, 100, NULL);
185
186 /* add the the buffer */
187 gst_buffer_append_memory (buffer, mem);
188
189 [...]
190
191 /* get WRITE access to the memory and fill with 0xff */
192 gst_buffer_map (buffer, &info, GST_MAP_WRITE);
193 memset (info.data, 0xff, info.size);
194 gst_buffer_unmap (buffer, &info);
195
196 [...]
197
198 /* free the buffer */
199 gst_buffer_unref (buffer);
200
201 [...]
202 ]]>
203 </programlisting>
204 </sect2>
205 </sect1>
206
207 <sect1 id="section-allocation-meta" xreflabel="GstMeta">
208 <title>GstMeta</title>
209 <para>
210 With the <classname>GstMeta</classname> system you can add arbitrary
211 structures of on buffers. These structures describe extra properties
212 of the buffer such as cropping, stride, region of interest etc.
213 </para>
214 <para>
215 Metadata is also used to store, for example, the X image that is
216 backing up the memory of the buffer. This makes it easier for elements
217 to locate the X image from the buffer.
218 </para>
219 <para>
220 The metadata system separates API specification (what the metadata
221 and its API look like) and the implementation (how it works). This makes
222 it possible to make different implementations of the same API,
223 for example, depending on the hardware you are running on.
224 </para>
225
226 <sect2 id="section-allocation-meta-ex" xreflabel="GstMeta-ex">
227 <title>GstMeta API example</title>
228 <para>
229 After allocating a new buffer, you can add metadata to the buffer
230 with the metadata specific API. This means that you will need to
231 link to the header file where the metadata is defined to use
232 its API.
233 </para>
234 <para>
235 By convention, a metadata API with name <classname>FooBar</classname>
236 should provide two methods, a
237 <function>gst_buffer_add_foo_bar_meta ()</function> and a
238 <function>gst_buffer_get_foo_bar_meta ()</function>. Both functions
239 should return a pointer to a <classname>FooBarMeta</classname>
240 structure that contains the metadata fields. Some of the
241 <function>_add_*_meta ()</function> can have extra parameters that
242 will usually be used to configure the metadata structure for you.
243 </para>
244 <para>
245 Let's have a look at the metadata that is used to specify a cropping
246 region for video frames.
247 </para>
248 <programlisting>
249 <![CDATA[
250 #include <gst/video/gstvideometa.h>
251
252 [...]
253 GstVideoCropMeta *meta;
254
255 /* buffer points to a video frame, add some cropping metadata */
256 meta = gst_buffer_add_video_crop_meta (buffer);
257
258 /* configure the cropping metadata */
259 meta->x = 8;
260 meta->y = 8;
261 meta->width = 120;
262 meta->height = 80;
263 [...]
264 ]]>
265 </programlisting>
266 <para>
267 An element can then use the metadata on the buffer when rendering
268 the frame like this:
269 </para>
270 <programlisting>
271 <![CDATA[
272 #include <gst/video/gstvideometa.h>
273
274 [...]
275 GstVideoCropMeta *meta;
276
277 /* buffer points to a video frame, get the cropping metadata */
278 meta = gst_buffer_get_video_crop_meta (buffer);
279
280 if (meta) {
281 /* render frame with cropping */
282 _render_frame_cropped (buffer, meta->x, meta->y, meta->width, meta->height);
283 } else {
284 /* render frame */
285 _render_frame (buffer);
286 }
287 [...]
288
289 ]]>
290 </programlisting>
291 </sect2>
292
293 <sect2 id="section-allocation-meta-new" xreflabel="GstMeta-new">
294 <title>Implementing new GstMeta</title>
295 <para>
296 In the next sections we show how you can add new metadata to the
297 system and use it on buffers.
298 </para>
299
300 <sect3 id="section-allocation-meta-api" xreflabel="GstMeta-api">
301 <title>Define the metadata API</title>
302 <para>
303 First we need to define what our API will look like and we
304 will have to register this API to the system. This is important
305 because this API definition will be used when elements negotiate
306 what kind of metadata they will exchange. The API definition
307 also contains arbitrary tags that give hints about what the
308 metadata contains. This is important when we see how metadata
309 is preserved when buffers pass through the pipeline.
310 </para>
311 <para>
312 If you are making a new implementation of an existing API,
313 you can skip this step and move on to the implementation step.
314 </para>
315 <para>
316 First we start with making the
317 <filename>my-example-meta.h</filename> header file that will contain
318 the definition of the API and structure for our metadata.
319 </para>
320 <programlisting>
321 <![CDATA[
322 #include <gst/gst.h>
323
324 typedef struct _MyExampleMeta MyExampleMeta;
325
326 struct _MyExampleMeta {
327 GstMeta meta;
328
329 gint age;
330 gchar *name;
331 };
332
333 GType my_example_meta_api_get_type (void);
334 #define MY_EXAMPLE_META_API_TYPE (my_example_meta_api_get_type())
335
336 #define gst_buffer_get_my_example_meta(b) \
337 ((MyExampleMeta*)gst_buffer_get_meta((b),MY_EXAMPLE_META_API_TYPE))
338 ]]>
339 </programlisting>
340 <para>
341 The metadata API definition consists of the definition of the
342 structure that holds a gint and a string. The first field in
343 the structure must be <classname>GstMeta</classname>.
344 </para>
345 <para>
346 We also define a <function>my_example_meta_api_get_type ()</function>
347 function that will register out metadata API definition. We
348 also define a convenience macro
349 <function>gst_buffer_get_my_example_meta ()</function> that simply
350 finds and returns the metadata with our new API.
351 </para>
352 <para>
353 Next let's have a look at how the
354 <function>my_example_meta_api_get_type ()</function> function is
355 implemented in the <filename>my-example-meta.c</filename> file.
356 </para>
357 <programlisting>
358 <![CDATA[
359 #include "my-example-meta.h"
360
361 GType
362 my_example_meta_api_get_type (void)
363 {
364 static volatile GType type;
365 static const gchar *tags[] = { "foo", "bar", NULL };
366
367 if (g_once_init_enter (&type)) {
368 GType _type = gst_meta_api_type_register ("MyExampleMetaAPI", tags);
369 g_once_init_leave (&type, _type);
370 }
371 return type;
372 }
373 ]]>
374 </programlisting>
375 <para>
376 As you can see, it simply uses the
377 <function>gst_meta_api_type_register ()</function> function to
378 register a name for the api and some tags. The result is a
379 new pointer GType that defines the newly registered API.
380 </para>
381 </sect3>
382
383 <sect3 id="section-allocation-meta-impl" xreflabel="GstMeta-impl">
384 <title>Implementing a metadata API</title>
385 <para>
386 Next we can make an implementation for a registered metadata
387 API GType. The implementation detail of a metadata API
388 are kept in a <classname>GstMetaInfo</classname> structure
389 that you will make available to the users of your metadata
390 API implementation with a <function>my_example_meta_get_info ()</function>
391 function and a convenience <function>MY_EXAMPLE_META_INFO</function>
392 macro. You will also make a method to add your metadata
393 implementation to a <classname>GstBuffer</classname>.
394 Your <filename>my-example-meta.h</filename> header file will
395 need thse additions:
396 </para>
397 <programlisting>
398 <![CDATA[
399 [...]
400
401 /* implementation */
402 const GstMetaInfo *my_example_meta_get_info (void);
403 #define MY_EXAMPLE_META_INFO (my_example_meta_get_info())
404
405 MyExampleMeta * gst_buffer_add_my_example_meta (GstBuffer *buffer,
406 gint age,
407 const gchar *name);
408 ]]>
409 </programlisting>
410 <para>
411 Let's have a look at how these functions are
412 implemented in the <filename>my-example-meta.c</filename> file.
413 </para>
414 <programlisting>
415 <![CDATA[
416 [...]
417
418 static gboolean
419 my_example_meta_init (GstMeta * meta, gpointer params, GstBuffer * buffer)
420 {
421 MyExampleMeta *emeta = (MyExampleMeta *) meta;
422
423 emeta->age = 0;
424 emeta->name = NULL;
425
426 return TRUE;
427 }
428
429 static gboolean
430 my_example_meta_transform (GstBuffer * transbuf, GstMeta * meta,
431 GstBuffer * buffer, GQuark type, gpointer data)
432 {
433 MyExampleMeta *emeta = (MyExampleMeta *) meta;
434
435 /* we always copy no matter what transform */
436 gst_buffer_add_my_example_meta (transbuf, emeta->age, emeta->name);
437
438 return TRUE;
439 }
440
441 static void
442 my_example_meta_free (GstMeta * meta, GstBuffer * buffer)
443 {
444 MyExampleMeta *emeta = (MyExampleMeta *) meta;
445
446 g_free (emeta->name)
447 emeta->name = NULL;
448 }
449
450 const GstMetaInfo *
451 my_example_meta_get_info (void)
452 {
453 static const GstMetaInfo *meta_info = NULL;
454
455 if (g_once_init_enter (&meta_info)) {
456 const GstMetaInfo *mi = gst_meta_register (MY_EXAMPLE_META_API_TYPE,
457 "MyExampleMeta",
458 sizeof (MyExampleMeta),
459 my_example_meta_init,
460 my_example_meta_free,
461 my_example_meta_transform);
462 g_once_init_leave (&meta_info, mi);
463 }
464 return meta_info;
465 }
466
467 MyExampleMeta *
468 gst_buffer_add_my_example_meta (GstBuffer *buffer,
469 gint age,
470 const gchar *name)
471 {
472 MyExampleMeta *meta;
473
474 g_return_val_if_fail (GST_IS_BUFFER (buffer), NULL);
475
476 meta = (MyExampleMeta *) gst_buffer_add_meta (buffer,
477 MY_EXAMPLE_META_INFO, NULL);
478
479 meta->age = age;
480 meta->name = g_strdup (name);
481
482 return meta;
483 }
484 ]]>
485 </programlisting>
486 <para>
487 <function>gst_meta_register ()</function> registers the implementation
488 details, like the API that you implement and the size of the
489 metadata structure along with methods to initialize and free the
490 memory area. You can also implement a transform function that will
491 be called when a certain transformation (identified by the quark and
492 quark specific data) is performed on a buffer.
493 </para>
494 <para>
495 Lastly, you implement a <function>gst_buffer_add_*_meta()</function>
496 that adds the metadata implementation to a buffer and sets the
497 values of the metadata.
498 </para>
499 </sect3>
500 </sect2>
501
502 </sect1>
503
504 <sect1 id="section-allocation-bufferpool" xreflabel="GstBufferPool">
505 <title>GstBufferPool</title>
506 <para>
507 The <classname>GstBufferPool</classname> object provides a convenient
508 base class for managing lists of reusable buffers. Essential for this
509 object is that all the buffers have the same properties such as size,
510 padding, metadata and alignment.
511 </para>
512 <para>
513 A bufferpool object can be configured to manage a minimum and maximum
514 amount of buffers of a specific size. A bufferpool can also be
515 configured to use a specific <classname>GstAllocator</classname> for
516 the memory of the buffers. There is support in the bufferpool to enable
517 bufferpool specific options, such as adding <classname>GstMeta</classname>
518 to the buffers in the pool or such as enabling specific padding on
519 the memory in the buffers.
520 </para>
521 <para>
522 A Bufferpool can be inactivate and active. In the inactive state,
523 you can configure the pool. In the active state, you can't change
524 the configuration anymore but you can acquire and release buffers
525 from/to the pool.
526 </para>
527 <para>
528 In the following sections we take a look at how you can use
529 a bufferpool.
530 </para>
531
532 <sect2 id="section-allocation-pool-ex" xreflabel="GstBufferPool-ex">
533 <title>GstBufferPool API example</title>
534 <para>
535 Many different bufferpool implementations can exist; they are all
536 subclasses of the base class <classname>GstBufferPool</classname>.
537 For this example, we will assume we somehow have access to a
538 bufferpool, either because we created it ourselves or because
539 we were given one as a result of the ALLOCATION query as we will
540 see below.
541 </para>
542 <para>
543 The bufferpool is initially in the inactive state so that we can
544 configure it. Trying to configure a bufferpool that is not in the
545 inactive state will fail. Likewise, trying to activate a bufferpool
546 that is not configured will fail.
547 </para>
548 <programlisting>
549 <![CDATA[
550 GstStructure *config;
551
552 [...]
553
554 /* get config structure */
555 config = gst_buffer_pool_get_config (pool);
556
557 /* set caps, size, minimum and maximum buffers in the pool */
558 gst_buffer_pool_config_set_params (config, caps, size, min, max);
559
560 /* configure allocator and parameters */
561 gst_buffer_pool_config_set_allocator (config, allocator, &params);
562
563 /* store the updated configuration again */
564 gst_buffer_pool_set_config (pool, config);
565
566 [...]
567 ]]>
568 </programlisting>
569 <para>
570 The configuration of the bufferpool is maintained in a generic
571 <classname>GstStructure</classname> that can be obtained with
572 <function>gst_buffer_pool_get_config()</function>. Convenience
573 methods exist to get and set the configuration options in this
574 structure. After updating the structure, it is set as the current
575 configuration in the bufferpool again with
576 <function>gst_buffer_pool_set_config()</function>.
577 </para>
578 <para>
579 The following options can be configured on a bufferpool:
580 </para>
581 <itemizedlist mark="opencircle">
582 <listitem>
583 <para>
584 The caps of the buffers to allocate.
585 </para>
586 </listitem>
587 <listitem>
588 <para>
589 The size of the buffers. This is the suggested size of the
590 buffers in the pool. The pool might decide to allocate larger
591 buffers to add padding.
592 </para>
593 </listitem>
594 <listitem>
595 <para>
596 The minimum and maximum amount of buffers in the pool. When
597 minimum is set to > 0, the bufferpool will pre-allocate this
598 amount of buffers. When maximum is not 0, the bufferpool
599 will allocate up to maximum amount of buffers.
600 </para>
601 </listitem>
602 <listitem>
603 <para>
604 The allocator and parameters to use. Some bufferpools might
605 ignore the allocator and use its internal one.
606 </para>
607 </listitem>
608 <listitem>
609 <para>
610 Other arbitrary bufferpool options identified with a string.
611 a bufferpool lists the supported options with
612 <function>gst_buffer_pool_get_options()</function> and you
613 can ask if an option is supported with
614 <function>gst_buffer_pool_has_option()</function>. The option
615 can be enabled by adding it to the configuration structure
616 with <function>gst_buffer_pool_config_add_option ()</function>.
617 These options are used to enable things like letting the
618 pool set metadata on the buffers or to add extra configuration
619 options for padding, for example.
620 </para>
621 </listitem>
622 </itemizedlist>
623 <para>
624 After the configuration is set on the bufferpool, the pool can
625 be activated with
626 <function>gst_buffer_pool_set_active (pool, TRUE)</function>. From
627 that point on you can use
628 <function>gst_buffer_pool_acquire_buffer ()</function> to retrieve
629 a buffer from the pool, like this:
630 </para>
631 <programlisting>
632 <![CDATA[
633 [...]
634
635 GstFlowReturn ret;
636 GstBuffer *buffer;
637
638 ret = gst_buffer_pool_acquire_buffer (pool, &buffer, NULL);
639 if (G_UNLIKELY (ret != GST_FLOW_OK))
640 goto pool_failed;
641
642 [...]
643 ]]>
644 </programlisting>
645 <para>
646 It is important to check the return value of the acquire function
647 because it is possible that it fails: When your
648 element shuts down, it will deactivate the bufferpool and then
649 all calls to acquire will return GST_FLOW_FLUSHNG.
650 </para>
651 <para>
652 All buffers that are acquired from the pool will have their pool
653 member set to the original pool. When the last ref is decremented
654 on the buffer, &GStreamer; will automatically call
655 <function>gst_buffer_pool_release_buffer()</function> to release
656 the buffer back to the pool. You (or any other downstream element)
657 don't need to know if a buffer came from a pool, you can just
658 unref it.
659 </para>
660 </sect2>
661
662 <sect2 id="section-allocation-pool-impl" xreflabel="GstBufferPool-impl">
663 <title>Implementing a new GstBufferPool</title>
664 <para>
665 WRITEME
666 </para>
667 </sect2>
668
669 </sect1>
670
671 <sect1 id="section-allocation-query" xreflabel="GST_QUERY_ALLOCATION">
672 <title>GST_QUERY_ALLOCATION</title>
673 <para>
674 The ALLOCATION query is used to negotiate
675 <classname>GstMeta</classname>, <classname>GstBufferPool</classname>
676 and <classname>GstAllocator</classname> between elements. Negotiation
677 of the allocation strategy is always initiated and decided by a srcpad
678 after it has negotiated a format and before it decides to push buffers.
679 A sinkpad can suggest an allocation strategy but it is ultimately the
680 source pad that will decide based on the suggestions of the downstream
681 sink pad.
682 </para>
683 <para>
684 The source pad will do a GST_QUERY_ALLOCATION with the negotiated caps
685 as a parameter. This is needed so that the downstream element knows
686 what media type is being handled. A downstream sink pad can answer the
687 allocation query with the following results:
688 </para>
689 <itemizedlist mark="opencircle">
690 <listitem>
691 <para>
692 An array of possible <classname>GstBufferPool</classname> suggestions
693 with suggested size, minimum and maximum amount of buffers.
694 </para>
695 </listitem>
696 <listitem>
697 <para>
698 An array of GstAllocator objects along with suggested allocation
699 parameters such as flags, prefix, alignment and padding. These
700 allocators can also be configured in a bufferpool when this is
701 supported by the bufferpool.
702 </para>
703 </listitem>
704 <listitem>
705 <para>
706 An array of supported <classname>GstMeta</classname> implementations
707 along with metadata specific parameters.
708 It is important that the upstream element knows what kind of
709 metadata is supported downstream before it places that metadata
710 on buffers.
711 </para>
712 </listitem>
713 </itemizedlist>
714 <para>
715 When the GST_QUERY_ALLOCATION returns, the source pad will select
716 from the available bufferpools, allocators and metadata how it will
717 allocate buffers.
718 </para>
719
720 <sect2 id="section-allocation-query-ex" xreflabel="Allocation-ex">
721 <title>ALLOCATION query example</title>
722 <para>
723 Below is an example of the ALLOCATION query.
724 </para>
725 <programlisting>
726 <![CDATA[
727 #include <gst/video/video.h>
728 #include <gst/video/gstvideometa.h>
729 #include <gst/video/gstvideopool.h>
730
731 GstCaps *caps;
732 GstQuery *query;
733 GstStructure *structure;
734 GstBufferPool *pool;
735 GstStructure *config;
736 guint size, min, max;
737
738 [...]
739
740 /* find a pool for the negotiated caps now */
741 query = gst_query_new_allocation (caps, TRUE);
742
743 if (!gst_pad_peer_query (scope->srcpad, query)) {
744 /* query failed, not a problem, we use the query defaults */
745 }
746
747 if (gst_query_get_n_allocation_pools (query) > 0) {
748 /* we got configuration from our peer, parse them */
749 gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max);
750 } else {
751 pool = NULL;
752 size = 0;
753 min = max = 0;
754 }
755
756 if (pool == NULL) {
757 /* we did not get a pool, make one ourselves then */
758 pool = gst_video_buffer_pool_new ();
759 }
760
761 config = gst_buffer_pool_get_config (pool);
762 gst_buffer_pool_config_add_option (config, GST_BUFFER_POOL_OPTION_VIDEO_META);
763 gst_buffer_pool_config_set_params (config, caps, size, min, max);
764 gst_buffer_pool_set_config (pool, config);
765
766 /* and activate */
767 gst_buffer_pool_set_active (pool, TRUE);
768
769 [...]
770 ]]>
771 </programlisting>
772 <para>
773 This particular implementation will make a custom
774 <classname>GstVideoBufferPool</classname> object that is specialized
775 in allocating video buffers. You can also enable the pool to
776 put <classname>GstVideoMeta</classname> metadata on the buffers from
777 the pool doing
778 <function>gst_buffer_pool_config_add_option (config,
779 GST_BUFFER_POOL_OPTION_VIDEO_META)</function>.
780 </para>
781 </sect2>
782
783 <sect2 id="section-allocation-query-base" xreflabel="Allocation-base">
784 <title>The ALLOCATION query in base classes</title>
785 <para>
786 In many baseclasses you will see the following virtual methods for
787 influencing the allocation strategy:
788 </para>
789 <itemizedlist>
790 <listitem>
791 <para>
792 <function>propose_allocation ()</function> should suggest
793 allocation parameters for the upstream element.
794 </para>
795 </listitem>
796 <listitem>
797 <para>
798 <function>decide_allocation ()</function> should decide the
799 allocation parameters from the suggestions received from
800 downstream.
801 </para>
802 </listitem>
803 </itemizedlist>
804 <para>
805 Implementors of these methods should modify the given
806 <classname>GstQuery</classname> object by updating the pool options
807 and allocation options.
808 </para>
809 </sect2>
810 </sect1>
811 </chapter>
66 synchronization mechanism.
77 </para>
88
9 <sect1 id="section-clock-time-types" xreflabel="Types of time">
10 <title> Types of time </title>
11
12 <para>
13 There are two kinds of time in GStreamer. <emphasis
14 role="strong">Clock time</emphasis> is an absolute time. By contrast,
15 <emphasis role="strong">element time</emphasis> is the relative time,
16 usually to the start of the current media stream. The element time
17 represents the time that should have a media sample that is being
18 processed by the element at this time. The element time is calculated by
19 adding an offset to the clock time.
20 </para>
21 </sect1>
229 <sect1 id="section-clocks" xreflabel="Clocks">
2310 <title>Clocks</title>
2411 <para>
25 GStreamer can use different clocks. Though the system time can be used
26 as a clock, soundcards and other devices provides a better time source. For
27 this reason some elements provide a clock. The method
28 <function>get_clock</function> is implemented in elements that provide
29 one.
12 Time in &GStreamer; is defined as the value returned from a particular
13 <classname>GstClock</classname> object from the method
14 <function>gst_clock_get_time ()</function>.
3015 </para>
31
16 <para>
17 In a typical computer, there are many sources that can be used as a
18 time source, e.g., the system time, soundcards, CPU performance
19 counters, ... For this reason, there are many
20 <classname>GstClock</classname> implementations available in &GStreamer;.
21 The clock time doesn't always start from 0 or from some known value.
22 Some clocks start counting from some known start date, other clocks start
23 counting since last reboot, etc...
24 </para>
3225 <para>
3326 As clocks return an absolute measure of time, they are not usually used
34 directly. Instead, a reference to a clock is stored in any element that needs
35 it, and it is used internally by GStreamer to calculate the element time.
27 directly. Instead, differences between two clock times are used to
28 measure elapsed time according to a clock.
29 </para>
30 </sect1>
31
32 <sect1 id="section-clock-time-types" xreflabel="Clock running-time">
33 <title> Clock running-time </title>
34 <para>
35 A clock returns the <emphasis role="strong">absolute-time</emphasis>
36 according to that clock with <function>gst_clock_get_time ()</function>.
37 From the absolute-time is a <emphasis role="strong">running-time</emphasis>
38 calculated, which is simply the difference between a previous snapshot
39 of the absolute-time called the <emphasis role="strong">base-time</emphasis>.
40 So:
41 </para>
42 <para>
43 running-time = absolute-time - base-time
44 </para>
45 <para>
46 A &GStreamer; <classname>GstPipeline</classname> object maintains a
47 <classname>GstClock</classname> object and a base-time when it goes
48 to the PLAYING state. The pipeline gives a handle to the selected
49 <classname>GstClock</classname> to each element in the pipeline along
50 with selected base-time. The pipeline will select a base-time in such
51 a way that the running-time reflects the total time spent in the
52 PLAYING state. As a result, when the pipeline is PAUSED, the
53 running-time stands still.
54 </para>
55 <para>
56 Because all objects in the pipeline have the same clock and base-time,
57 they can thus all calculate the running-time according to the pipeline
58 clock.
59 </para>
60 </sect1>
61
62 <sect1 id="section-buffer-time-types" xreflabel="Buffer running-time">
63 <title> Buffer running-time </title>
64 <para>
65 To calculate a buffer running-time, we need a buffer timestamp and
66 the SEGMENT event that preceeded the buffer. First we can convert
67 the SEGMENT event into a <classname>GstSegment</classname> object
68 and then we can use the
69 <function>gst_segment_to_running_time ()</function> function to
70 perform the calculation of the buffer running-time.
71 </para>
72 <para>
73 Synchronization is now a matter of making sure that a buffer with a
74 certain running-time is played when the clock reaches the same
75 running-time. Usually this task is done by sink elements.
3676 </para>
3777 </sect1>
3878
39 <sect1 id="section-time-data-flow" xreflabel="Flow of data between elements
40 and time">
41 <title>
42 Flow of data between elements and time
43 </title>
44 <para>
45 Now we will see how time information travels the pipeline in different states.
46 </para>
47
48 <para>
49 The pipeline starts playing.
50 The source element typically knows the time of each sample.
51 <footnote>
52 <para>
53 Sometimes it
54 is a parser element the one that knows the time, for instance if a pipeline
55 contains a filesrc element connected to a MPEG decoder element, the former
56 is the one that knows the time of each sample, because the knowledge of
57 when to play each sample is embedded in the MPEG format. In this case this
58 element will be regarded as the source element for this discussion.
59 </para>
60 </footnote>
61 First, the source element sends a newsegment event. This event carries information
62 about the current relative time of the next sample. This relative time is
63 arbitrary, but it must be consistent with the timestamp that will be
64 placed in buffers. It is expected to be the relative time to the start
65 of the media stream, or whatever makes sense in the case of each media.
66 When receiving it, the other elements adjust their offset of the element time so that this
67 time matches the time written in the event.
68 </para>
69
70 <para>
71 Then the source element sends media samples in buffers. This element places a
72 timestamp in each buffer saying when the sample should be played. When the
73 buffer reaches the sink pad of the last element, this element compares the
74 current element time with the timestamp of the buffer. If the timestamp is
75 higher or equal it plays the buffer, otherwise it waits until the time to
76 place the buffer arrives with <function>gst_element_wait()</function>.
77 </para>
78
79
80 <para>
81 If the stream is seeked, the next samples sent will have a timestamp that
82 is not adjusted with the element time. Therefore, the source element must
83 send a newsegment event.
84 </para>
85 </sect1>
79
8680 <sect1 id="section-clock-obligations-of-each-element" xreflabel="Obligations
8781 of each element">
8882 <title>
9589 </para>
9690
9791 <sect2>
98 <title>Source elements </title>
92 <title>Non-live source elements </title>
9993 <para>
100 Source elements (or parsers of formats that provide notion of time, such
101 as MPEG, as explained above) must place a timestamp in each buffer that
102 they deliver. The origin of the time used is arbitrary, but it must
103 match the time delivered in the newsegment event (see below).
104 However, it is expected that the origin is the origin of the media
105 stream.
94 Non-live source elements must place a timestamp in each buffer that
95 they deliver when this is possible. They must choose the timestamps
96 and the values of the SEGMENT event in such a way that the
97 running-time of the buffer starts from 0.
10698 </para>
10799 <para>
108 In order to initialize the element time of the rest of the pipeline, a
109 source element must send a newsegment event before starting to play.
110 In addition, after seeking, a newsegment event must be sent, because
111 the timestamp of the next element does not match the element time of the
112 rest of the pipeline.
100 Some sources, such as filesrc, is not able to generate timestamps
101 on all buffers. It can and must however create a timestamp on the
102 first buffer (with a running-time of 0).
113103 </para>
114
104 <para>
105 The source then pushes out the SEGMENT event followed by the
106 timestamped buffers.
107 </para>
108 </sect2>
109
110 <sect2>
111 <title>Live source elements </title>
112 <para>
113 Live source elements must place a timestamp in each buffer that
114 they deliver. They must choose the timestamps and the values of the
115 SEGMENT event in such a way that the running-time of the buffer
116 matches exactly the running-time of the pipeline clock when the first
117 byte in the buffer was captured.
118 </para>
119 </sect2>
120
121 <sect2>
122 <title>Parser elements </title>
123 <para>
124 Parser elements must use the incomming timestamps and transfer those
125 to the resulting output buffers. They are allowed to interpolate or
126 reconstruct timestamps on missing input buffers when they can.
127 </para>
128 </sect2>
129
130 <sect2>
131 <title>Demuxer elements </title>
132 <para>
133 Demuxer elements can usually set the timestamps stored inside the media
134 file onto the outgoing buffers. They need to make sure that outgoing
135 buffers that are to be played at the same time have the same
136 running-time. Demuxers also need to take into account the incomming
137 timestamps on buffers and use that to calculate an offset on the outgoing
138 buffer timestamps.
139 </para>
115140 </sect2>
116141
117142 <sect2> <title> Sink elements </title>
120145 playing), the element should require a clock, and thus implement the
121146 method <function>set_clock</function>.
122147 </para>
123
124148 <para>
125 In addition, before playing each sample, if the current element time is
126 less than the timestamp in the sample, it wait until the current time
127 arrives should call <function>gst_element_wait()</function>
128 <footnote>
129 <para>
130 With some schedulers, <function>gst_element_wait()</function>
131 blocks the pipeline. For instance, if there is one audio sink element
132 and one video sink element, while the audio element is waiting for a
133 sample the video element cannot play other sample. This behaviour is
134 under discussion, and might change in a future release.
135 </para>
136 </footnote>
149 The sink should then make sure that the sample with running-time is played
150 exactly when the pipeline clock reaches that running-time. Some elements
151 might use the clock API such as <function>gst_clock_id_wait()</function>
152 to perform this action. Other sinks might need to use other means of
153 scheduling timely playback of the data.
137154 </para>
138155 </sect2>
139156 </sect1>
22
33 <chapter id="chapter-dparams">
44 <title>Supporting Dynamic Parameters</title>
5 <para>
6 Warning, this part describes 0.10 and is outdated.
7 </para>
58 <para>
69 Sometimes object properties are not powerful enough to control the
710 parameters that affect the behaviour of your element.
2020 instantly, possibly not in the same thread as the streaming thread that
2121 is processing the buffers, skipping ahead of buffers being processed
2222 or queued in the pipeline). The most common downstream events
23 (NEWSEGMENT, EOS, TAG) are all serialised with the buffer flow.
23 (SEGMENT, CAPS, TAG, EOS) are all serialised with the buffer flow.
2424 </para>
2525 <para>
2626 Here is a typical event function:
2727 </para>
2828 <programlisting>
2929 static gboolean
30 gst_my_filter_sink_event (GstPad *pad, GstEvent * event)
30 gst_my_filter_sink_event (GstPad *pad, GstObject * parent, GstEvent * event)
3131 {
3232 GstMyFilter *filter;
3333 gboolean ret;
3434
35 filter = GST_MY_FILTER (gst_pad_get_parent (pad));
35 filter = GST_MY_FILTER (parent);
3636 ...
3737
3838 switch (GST_EVENT_TYPE (event)) {
39 case GST_EVENT_NEWSEGMENT:
39 case GST_EVENT_SEGMENT:
4040 /* maybe save and/or update the current segment (e.g. for output
4141 * clipping) or convert the event into one in a different format
42 * (e.g. BYTES to TIME) or drop it and set a flag to send a newsegment
42 * (e.g. BYTES to TIME) or drop it and set a flag to send a segment
4343 * event in a different format later */
4444 ret = gst_pad_push_event (filter-&gt;src_pad, event);
4545 break;
5353 ret = gst_pad_push_event (filter-&gt;src_pad, event);
5454 break;
5555 default:
56 ret = gst_pad_event_default (pad, event);
56 ret = gst_pad_event_default (pad, parent, event);
5757 break;
5858 }
5959
6060 ...
61 gst_object_unref (filter);
6261 return ret;
6362 }
6463 </programlisting>
6564 <para>
6665 If your element is chain-based, you will almost always have to implement
6766 a sink event function, since that is how you are notified about
68 new segments and the end of the stream.
67 segments, caps and the end of the stream.
6968 </para>
7069 <para>
7170 If your element is exclusively loop-based, you may or may not want a
9190 will then in turn generate an upstream seek event.
9291 </para>
9392 <para>
94 The most common upstream events are seek events and Quality-of-Service
95 (QoS) events.
93 The most common upstream events are seek events, Quality-of-Service
94 (QoS) and reconfigure events.
9695 </para>
9796 <para>
9897 An upstream event can be sent using the
9998 <function>gst_pad_send_event</function> function. This
10099 function simply call the default event handler of that pad. The default
101100 event handler of pads is <function>gst_pad_event_default</function>, and
102 it basically sends the event to the peer pad. So upstream events always
103 arrive on the src pad of your element and are handled by the default event
104 handler except if you override that handler to handle it yourself. There
105 are some specific cases where you have to do that :
101 it basically sends the event to the peer of the internally linked pad.
102 So upstream events always arrive on the src pad of your element and are
103 handled by the default event handler except if you override that handler
104 to handle it yourself. There are some specific cases where you have to
105 do that :
106106 </para>
107107 <itemizedlist mark="opencircle">
108108 <listitem>
129129 <itemizedlist mark="opencircle">
130130 <listitem>
131131 <para>
132 Always forward events you won't handle upstream using the default
133 <function>gst_pad_event_default</function> method.
132 Always handle events you won't handle using the default
133 <function>gst_pad_event_default</function> method. This method will
134 depending on the event, forward the event or drop it.
134135 </para>
135136 </listitem>
136137 <listitem>
151152 <para>
152153 Remember that the event handler might be called from a different
153154 thread than the streaming thread, so make sure you use
154 appropriate locking everywhere and at the beginning of the function
155 obtain a reference to your element via the
156 <function>gst_pad_get_parent()</function> (and release it again at
157 the end of the function with <function>gst_object_unref ()</function>.
155 appropriate locking everywhere.
158156 </para>
159157 </listitem>
160158 </itemizedlist>
172170 In this chapter, we will discuss the following events:
173171 </para>
174172 <itemizedlist>
173 <listitem><para><xref linkend="section-events-stream-start"/></para></listitem>
174 <listitem><para><xref linkend="section-events-caps"/></para></listitem>
175 <listitem><para><xref linkend="section-events-segment"/></para></listitem>
176 <listitem><para><xref linkend="section-events-tag"/></para></listitem>
175177 <listitem><para><xref linkend="section-events-eos"/></para></listitem>
178 <listitem><para><xref linkend="section-events-toc"/></para></listitem>
179 <listitem><para><xref linkend="section-events-gap"/></para></listitem>
176180 <listitem><para><xref linkend="section-events-flush-start"/></para></listitem>
177181 <listitem><para><xref linkend="section-events-flush-stop"/></para></listitem>
178 <listitem><para><xref linkend="section-events-newsegment"/></para></listitem>
182 <listitem><para><xref linkend="section-events-qos"/></para></listitem>
179183 <listitem><para><xref linkend="section-events-seek"/></para></listitem>
180184 <listitem><para><xref linkend="section-events-nav"/></para></listitem>
181 <listitem><para><xref linkend="section-events-tag"/></para></listitem>
182185 </itemizedlist>
183186 <para>
184187 For more comprehensive information about events and how they should be
185188 used correctly in various circumstances please consult the GStreamer
186189 design documentation. This section only gives a general overview.
187190 </para>
191
192 <sect2 id="section-events-stream-start" xreflabel="Stream Start">
193 <title>Stream Start</title>
194 <para>
195 WRITEME
196 </para>
197 </sect2>
198
199 <sect2 id="section-events-caps" xreflabel="Caps">
200 <title>Caps</title>
201 <para>
202 WRITEME
203 </para>
204 </sect2>
205
206 <sect2 id="section-events-segment" xreflabel="Segment">
207 <title>Segment</title>
208 <para>
209 A segment event is sent downstream to announce the range of valid
210 timestamps in the stream and how they should be transformed into
211 running-time and stream-time. A segment event must always be sent
212 before the first buffer of data and after a flush (see above).
213 </para>
214 <para>
215 The first segment event is created by the element driving the
216 pipeline, like a source operating in push-mode or a demuxer/decoder
217 operating pull-based. This segment event then travels down the
218 pipeline and may be transformed on the way (a decoder, for example,
219 might receive a segment event in BYTES format and might transform
220 this into a segment event in TIMES format based on the average
221 bitrate).
222 </para>
223 <para>
224 Depending on the element type, the event can simply be forwarded using
225 <function>gst_pad_event_default ()</function>, or it should be parsed
226 and a modified event should be sent on. The last is true for demuxers,
227 which generally have a byte-to-time conversion concept. Their input
228 is usually byte-based, so the incoming event will have an offset in
229 byte units (<symbol>GST_FORMAT_BYTES</symbol>), too. Elements
230 downstream, however, expect segment events in time units, so that
231 it can be used to synchronize against the pipeline clock. Therefore,
232 demuxers and similar elements should not forward the event, but parse
233 it, free it and send a segment event (in time units,
234 <symbol>GST_FORMAT_TIME</symbol>) further downstream.
235 </para>
236 <para>
237 The segment event is created using the function
238 <function>gst_event_new_segment ()</function>. See the API
239 reference and design document for details about its parameters.
240 </para>
241 <para>
242 Elements parsing this event can use gst_event_parse_segment()
243 to extract the event details. Elements may find the GstSegment
244 API useful to keep track of the current segment (if they want to use
245 it for output clipping, for example).
246 </para>
247 </sect2>
248
249 <sect2 id="section-events-tag" xreflabel="Tag (metadata)">
250 <title>Tag (metadata)</title>
251 <para>
252 Tagging events are being sent downstream to indicate the tags as parsed
253 from the stream data. This is currently used to preserve tags during
254 stream transcoding from one format to the other. Tags are discussed
255 extensively in <xref linkend="chapter-advanced-tagging"/>. Most
256 elements will simply forward the event by calling
257 <function>gst_pad_event_default ()</function>.
258 </para>
259 <para>
260 The tag event is created using the function
261 <function>gst_event_new_tag ()</function>, but more often elements will
262 send a tag event downstream that will be converted into a message
263 on the bus by sink elements.
264 All of these functions require a filled-in taglist as
265 argument, which they will take ownership of.
266 </para>
267 <para>
268 Elements parsing this event can use the function
269 <function>gst_event_parse_tag ()</function> to acquire the
270 taglist that the event contains.
271 </para>
272 </sect2>
188273
189274 <sect2 id="section-events-eos" xreflabel="End of Stream (EOS)">
190275 <title>End of Stream (EOS)</title>
216301 on the bus depending on the mode of operation). If you are implementing
217302 your own source element, you also do not need to ever manually send
218303 an EOS event, you should also just return GST_FLOW_EOS in
219 your create function (assuming your element derives from GstBaseSrc
220 or GstPushSrc).
304 your create or fill function (assuming your element derives from
305 GstBaseSrc or GstPushSrc).
306 </para>
307 </sect2>
308
309 <sect2 id="section-events-toc" xreflabel="Table Of Contents">
310 <title>Table Of Contents</title>
311 <para>
312 WRITEME
313 </para>
314 </sect2>
315
316 <sect2 id="section-events-gap" xreflabel="Gap">
317 <title>Gap</title>
318 <para>
319 WRITEME
221320 </para>
222321 </sect2>
223322
224323 <sect2 id="section-events-flush-start" xreflabel="Flush Start">
225324 <title>Flush Start</title>
226325 <para>
227 The flush start event is sent downstream if all buffers and caches
228 in the pipeline should be emptied. <quote>Queue</quote> elements will
326 The flush start event is sent downstream (in push mode) or upstream
327 (in pull mode) if all buffers and caches in the pipeline should be
328 emptied. <quote>Queue</quote> elements will
229329 empty their internal list of buffers when they receive this event, for
230330 example. File sink elements (e.g. <quote>filesink</quote>) will flush
231331 the kernel-to-disk cache (<function>fdatasync ()</function> or
258358 The flush-stop event is sent by an element driving the pipeline
259359 after a flush-start and tells pads and elements downstream that
260360 they should accept events and buffers again (there will be at
261 least a NEWSEGMENT event before any buffers first though).
361 least a SEGMENT event before any buffers first though).
262362 </para>
263363 <para>
264364 If your element keeps temporary caches of stream data, it should
267367 </para>
268368 <para>
269369 The flush-stop event is created with
270 <function>gst_event_new_flush_stop ()</function>. Like the EOS event,
271 it has no properties.
272 </para>
273 </sect2>
274
275 <sect2 id="section-events-newsegment" xreflabel="New Segment">
276 <title>New Segment</title>
277 <para>
278 A new segment event is sent downstream to either announce a new
279 segment of data in the data stream or to update the current segment
280 with new values. A new segment event must always be sent before the
281 first buffer of data and after a flush (see above).
282 </para>
283 <para>
284 The first new segment event is created by the element driving the
285 pipeline, like a source operating in push-mode or a demuxer/decoder
286 operating pull-based. This new segment event then travels down the
287 pipeline and may be transformed on the way (a decoder, for example,
288 might receive a new-segment event in BYTES format and might transform
289 this into a new-segment event in TIMES format based on the average
290 bitrate).
291 </para>
292 <para>
293 New segment events may also be used to indicate 'gaps' in the stream,
294 like in a subtitle stream for example where there may not be any
295 data at all for a considerable amount of (stream) time. This is done
296 by updating the segment start of the current segment (see the design
297 documentation for more details).
298 </para>
299 <para>
300 Depending on the element type, the event can simply be forwarded using
301 <function>gst_pad_event_default ()</function>, or it should be parsed
302 and a modified event should be sent on. The last is true for demuxers,
303 which generally have a byte-to-time conversion concept. Their input
304 is usually byte-based, so the incoming event will have an offset in
305 byte units (<symbol>GST_FORMAT_BYTES</symbol>), too. Elements
306 downstream, however, expect new segment events in time units, so that
307 it can be used to update the pipeline clock. Therefore, demuxers and
308 similar elements should not forward the event, but parse it, free it
309 and send a new newsegment event (in time units,
310 <symbol>GST_FORMAT_TIME</symbol>) further downstream.
311 </para>
312 <para>
313 The newsegment event is created using the function
314 <function>gst_event_new_new_segment ()</function>. See the API
315 reference and design document for details about its parameters.
316 </para>
317 <para>
318 Elements parsing this event can use gst_event_parse_new_segment_full()
319 to extract the event details. Elements may find the GstSegment
320 API useful to keep track of the current segment (if they want to use
321 it for output clipping, for example).
370 <function>gst_event_new_flush_stop ()</function>. It has one
371 parameter that controls if the running-time of the pipeline should
372 be reset to 0 or not. Normally aftera flushing seek, the
373 running_time is set back to 0.
374 </para>
375 </sect2>
376
377 <sect2 id="section-events-qos" xreflabel="Quality Of Service (QOS)">
378 <title>Quality Of Service (QOS)</title>
379 <para>
380 WRITEME
322381 </para>
323382 </sect2>
324383
329388 This new position can be set in several formats (time, bytes or
330389 <quote>default units</quote> [a term indicating frames for video,
331390 channel-independent samples for audio, etc.]). Seeking can be done with
332 respect to the end-of-file, start-of-file or current position, and
391 respect to the end-of-file or start-of-file, and
333392 usually happens in upstream direction (downstream seeking is done by
334 sending a NEWSEGMENT event with the appropriate offsets for elements
393 sending a SEGMENT event with the appropriate offsets for elements
335394 that support that, like filesink).
336395 </para>
337396 <para>
346405 Seek events are built up using positions in specified formats (time,
347406 bytes, units). They are created using the function
348407 <function>gst_event_new_seek ()</function>. Note that many plugins do
349 not support seeking from the end of the stream or from the current
350 position. An element not driving the pipeline and forwarding a seek
408 not support seeking from the end of the stream.
409 An element not driving the pipeline and forwarding a seek
351410 request should not assume that the seek succeeded or actually happened,
352 it should operate based on the NEWSEGMENT events it receives.
411 it should operate based on the SEGMENT events it receives.
353412 </para>
354413 <para>
355414 Elements parsing this event can do this using
374433 </para>
375434 </sect2>
376435
377 <sect2 id="section-events-tag" xreflabel="Tag (metadata)">
378 <title>Tag (metadata)</title>
379 <para>
380 Tagging events are being sent downstream to indicate the tags as parsed
381 from the stream data. This is currently used to preserve tags during
382 stream transcoding from one format to the other. Tags are discussed
383 extensively in <xref linkend="chapter-advanced-tagging"/>. Most
384 elements will simply forward the event by calling
385 <function>gst_pad_event_default ()</function>.
386 </para>
387 <para>
388 The tag event is created using the function
389 <function>gst_event_new_tag ()</function>, but more often elements will
390 use either the <function>gst_element_found_tags ()</function> function
391 or the <function>gst_element_found_tags_for_pad ()</function>, which
392 will do both: post a tag message on the bus and send a tag event
393 downstream. All of these functions require a filled-in taglist as
394 argument, which they will take ownership of.
395 </para>
396 <para>
397 Elements parsing this event can use the function
398 <function>gst_event_parse_tag ()</function> to acquire the
399 taglist that the event contains.
400 </para>
401 </sect2>
402436 </sect1>
403437 </chapter>
3333 to achieve this. The basis of this all is the glib
3434 <classname>GTypeInterface</classname> type. For each case where we think
3535 it's useful, we've created interfaces which can be implemented by elements
36 at their own will. We've also created a small extension to
37 <classname>GTypeInterface</classname> (which is static itself, too) which
38 allows us to query for interface availability based on runtime properties.
39 This extension is called <ulink type="http"
40 url="../../gstreamer/html/GstImplementsInterface.html"><classname>
41 GstImplementsInterface</classname></ulink>.
36 at their own will.
4237 </para>
4338 <para>
4439 One important note: interfaces do <emphasis>not</emphasis> replace
4540 properties. Rather, interfaces should be built <emphasis>next to</emphasis>
4641 properties. There are two important reasons for this. First of all,
47 properties
48 can be saved in XML files. Second, properties can be specified on the
49 commandline (<filename>gst-launch</filename>).
42 properties can be more easily introspected. Second, properties can be
43 specified on the commandline (<filename>gst-launch</filename>).
5044 </para>
5145
5246 <sect1 id="section-iface-general" xreflabel="How to Implement Interfaces">
5751 registered the type itself. Some interfaces have dependencies on other
5852 interfaces or can only be registered by certain types of elements. You
5953 will be notified of doing that wrongly when using the element: it will
60 quit with failed assertions, which will explain what went wrong. In the
61 case of GStreamer, the only dependency that <emphasis>some</emphasis>
62 interfaces have is <ulink type="http"
63 url="../../gstreamer/html/GstImplementsInterface.html"><classname>
64 GstImplementsInterface</classname></ulink>. Per
65 interface, we will indicate clearly when it depends on this extension.
54 quit with failed assertions, which will explain what went wrong.
6655 If it does, you need to register support for <emphasis>that</emphasis>
6756 interface before registering support for the interface that you're
6857 wanting to support. The example below explains how to add support for a
69 simple interface with no further dependencies. For a small explanation
70 on <ulink type="http" url="../../gstreamer/html/GstImplementsInterface.html">
71 <classname>GstImplementsInterface</classname></ulink>, see the next section
72 about the mixer interface: <xref linkend="section-iface-mixer"/>.
58 simple interface with no further dependencies.
7359 </para>
7460 <programlisting>
7561 static void gst_my_filter_some_interface_init (GstSomeInterface *iface);
8268 if (!my_filter_type) {
8369 static const GTypeInfo my_filter_info = {
8470 sizeof (GstMyFilterClass),
85 (GBaseInitFunc) gst_my_filter_base_init,
71 NULL,
8672 NULL,
8773 (GClassInitFunc) gst_my_filter_class_init,
8874 NULL,
9884 };
9985
10086 my_filter_type =
101 g_type_register_static (GST_TYPE_MY_FILTER,
87 g_type_register_static (GST_TYPE_ELEMENT,
10288 "GstMyFilter",
10389 &amp;my_filter_info, 0);
10490 g_type_add_interface_static (my_filter_type,
115101 /* here, you would set virtual function pointers in the interface */
116102 }
117103 </programlisting>
104 <para>
105 Or more conveniently:
106 </para>
107 <programlisting>
108 static void gst_my_filter_some_interface_init (GstSomeInterface *iface);
109
110 G_DEFINE_TYPE_WITH_CODE (GstMyFilter, gst_my_filter,GST_TYPE_ELEMENT,
111 G_IMPLEMENT_INTERFACE (GST_TYPE_SOME_INTERFACE,
112 gst_my_filter_some_interface_init));
113
114 </programlisting>
118115 </sect1>
119116
120117 <sect1 id="section-iface-uri" xreflabel="URI interface">
124121 </para>
125122 </sect1>
126123
127 <sect1 id="section-iface-mixer" xreflabel="Mixer Interface">
128 <title>Mixer Interface</title>
129 <para>
130 The goal of the mixer interface is to provide a simple yet powerful API
131 to applications for audio hardware mixer/volume control. Most soundcards
132 have hardware mixers, where volume can be changed, they can be muted,
133 inputs can be modified to mix their content into what will be read from
134 the device by applications (in our case: audio source plugins). The
135 mixer interface is the way to control those. The mixer interface can
136 also be used for volume control in software (e.g. the <quote>volume</quote>
137 element). The end goal of this interface is to allow development of
138 hardware volume control applications and for the control of audio volume
139 and input/output settings.
140 </para>
141 <para>
142 The mixer interface requires the <ulink type="http"
143 url="../../gstreamer/html/GstImplementsInterface.html"><classname>
144 GstImplementsInterface</classname></ulink>
145 interface to be implemented by the element. The example below will
146 feature both, so it serves as an example for the <ulink type="http"
147 url="../../gstreamer/html/GstImplementsInterface.html"><classname>
148 GstImplementsInterface</classname></ulink>, too. In this
149 interface, it is required to set a function pointer for the <function>
150 supported ()</function> function.
151 If you don't, this function will always return FALSE (default
152 implementation) and the mixer interface implementation will not work. For
153 the mixer interface, the only required function is
154 <function>list_tracks ()</function>. All other function pointers in the
155 mixer interface are optional, although it is strongly recommended to set
156 function pointers for at least the <function>get_volume ()</function> and
157 <function>set_volume ()</function> functions. The API reference for this
158 interface documents the goal of each function, so we will limit ourselves
159 to the implementation here.
160 </para>
161 <para>
162 The following example shows a mixer implementation for a software N-to-1
163 element. It does not show the actual process of stream mixing, that is
164 far too complicated for this guide.
165 </para>
166 <programlisting>
167 #include &lt;gst/mixer/mixer.h&gt;
168
169 typedef struct _GstMyFilter {
170 [..]
171 gint volume;
172 GList *tracks;
173 } GstMyFilter;
174
175 static void gst_my_filter_implements_interface_init (GstImplementsInterfaceClass *iface);
176 static void gst_my_filter_mixer_interface_init (GstMixerClass *iface);
177
178 GType
179 gst_my_filter_get_type (void)
180 {
181 [..]
182 static const GInterfaceInfo implements_interface_info = {
183 (GInterfaceInitFunc) gst_my_filter_implements_interface_init,
184 NULL,
185 NULL
186 };
187 static const GInterfaceInfo mixer_interface_info = {
188 (GInterfaceInitFunc) gst_my_filter_mixer_interface_init,
189 NULL,
190 NULL
191 };
192 [..]
193 g_type_add_interface_static (my_filter_type,
194 GST_TYPE_IMPLEMENTS_INTERFACE,
195 &amp;implements_interface_info);
196 g_type_add_interface_static (my_filter_type,
197 GST_TYPE_MIXER,
198 &amp;mixer_interface_info);
199 [..]
200 }
201
202 static void
203 gst_my_filter_init (GstMyFilter *filter)
204 {
205 GstMixerTrack *track = NULL;
206 [..]
207 filter->volume = 100;
208 filter->tracks = NULL;
209 track = g_object_new (GST_TYPE_MIXER_TRACK, NULL);
210 track->label = g_strdup ("MyTrack");
211 track->num_channels = 1;
212 track->min_volume = 0;
213 track->max_volume = 100;
214 track->flags = GST_MIXER_TRACK_SOFTWARE;
215 filter->tracks = g_list_append (filter->tracks, track);
216 }
217
218 static gboolean
219 gst_my_filter_interface_supported (GstImplementsInterface *iface,
220 GType iface_type)
221 {
222 g_return_val_if_fail (iface_type == GST_TYPE_MIXER, FALSE);
223
224 /* for the sake of this example, we'll always support it. However, normally,
225 * you would check whether the device you've opened supports mixers. */
226 return TRUE;
227 }
228
229 static void
230 gst_my_filter_implements_interface_init (GstImplementsInterfaceClass *iface)
231 {
232 iface->supported = gst_my_filter_interface_supported;
233 }
234
235 /*
236 * This function returns the list of support tracks (inputs, outputs)
237 * on this element instance. Elements usually build this list during
238 * _init () or when going from NULL to READY.
239 */
240
241 static const GList *
242 gst_my_filter_mixer_list_tracks (GstMixer *mixer)
243 {
244 GstMyFilter *filter = GST_MY_FILTER (mixer);
245
246 return filter->tracks;
247 }
248
249 /*
250 * Set volume. volumes is an array of size track->num_channels, and
251 * each value in the array gives the wanted volume for one channel
252 * on the track.
253 */
254
255 static void
256 gst_my_filter_mixer_set_volume (GstMixer *mixer,
257 GstMixerTrack *track,
258 gint *volumes)
259 {
260 GstMyFilter *filter = GST_MY_FILTER (mixer);
261
262 filter->volume = volumes[0];
263
264 g_print ("Volume set to %d\n", filter->volume);
265 }
266
267 static void
268 gst_my_filter_mixer_get_volume (GstMixer *mixer,
269 GstMixerTrack *track,
270 gint *volumes)
271 {
272 GstMyFilter *filter = GST_MY_FILTER (mixer);
273
274 volumes[0] = filter->volume;
275 }
276
277 static void
278 gst_my_filter_mixer_interface_init (GstMixerClass *iface)
279 {
280 /* the mixer interface requires a definition of the mixer type:
281 * hardware or software? */
282 GST_MIXER_TYPE (iface) = GST_MIXER_SOFTWARE;
283
284 /* virtual function pointers */
285 iface->list_tracks = gst_my_filter_mixer_list_tracks;
286 iface->set_volume = gst_my_filter_mixer_set_volume;
287 iface->get_volume = gst_my_filter_mixer_get_volume;
288 }
289 </programlisting>
290 <para>
291 The mixer interface is very audio-centric. However, with the software
292 flag set, the mixer can be used to mix any kind of stream in a N-to-1
293 element to join (not aggregate!) streams together into one output stream.
294 Conceptually, that's called mixing too. You can always use the element
295 factory's <quote>category</quote> to indicate type of your element. In
296 a software element that mixes random streams, you would not be required
297 to implement the <function>_get_volume ()</function> or
298 <function>_set_volume ()</function> functions. Rather, you would only
299 implement the <function>_set_record ()</function> to enable or disable
300 tracks in the output stream. to make sure that a mixer-implementing
301 element is of a certain type, check the element factory's category.
302 </para>
303 </sect1>
304
305 <sect1 id="section-iface-tuner" xreflabel="Tuner Interface">
306 <title>Tuner Interface</title>
307 <para>
308 As opposed to the mixer interface, that's used to join together N streams
309 into one output stream by mixing all streams together, the tuner
310 interface is used in N-to-1 elements too, but instead of mixing the input
311 streams, it will select one stream and push the data of that stream to
312 the output stream. It will discard the data of all other streams. There
313 is a flag that indicates whether this is a software-tuner (in which case
314 it is a pure software implementation, with N sink pads and 1 source pad)
315 or a hardware-tuner, in which case it only has one source pad, and the
316 whole stream selection process is done in hardware. The software case can
317 be used in elements such as <emphasis>switch</emphasis>. The hardware
318 case can be used in elements with channel selection, such as video source
319 elements (v4lsrc, v4l2src, etc.). If you need a specific element type,
320 use the element factory's <quote>category</quote> to make sure that the
321 element is of the type that you need. Note that the interface itself is
322 highly analog-video-centric.
323 </para>
324 <para>
325 This interface requires the <ulink type="http"
326 url="../../gstreamer/html/GstImplementsInterface.html"><classname>
327 GstImplementsInterface</classname></ulink>
328 interface to work correctly.
329 </para>
330 <para>
331 The following example shows how to implement the tuner interface in an
332 element. It does not show the actual process of stream selection, that
333 is irrelevant for this section.
334 </para>
335 <programlisting>
336 #include &lt;gst/tuner/tuner.h&gt;
337
338 typedef struct _GstMyFilter {
339 [..]
340 gint active_input;
341 GList *channels;
342 } GstMyFilter;
343
344 static void gst_my_filter_implements_interface_init (GstImplementsInterfaceClass *iface);
345 static void gst_my_filter_tuner_interface_init (GstTunerClass *iface);
346
347 GType
348 gst_my_filter_get_type (void)
349 {
350 [..]
351 static const GInterfaceInfo implements_interface_info = {
352 (GInterfaceInitFunc) gst_my_filter_implements_interface_init,
353 NULL,
354 NULL
355 };
356 static const GInterfaceInfo tuner_interface_info = {
357 (GInterfaceInitFunc) gst_my_filter_tuner_interface_init,
358 NULL,
359 NULL
360 };
361 [..]
362 g_type_add_interface_static (my_filter_type,
363 GST_TYPE_IMPLEMENTS_INTERFACE,
364 &amp;implements_interface_info);
365 g_type_add_interface_static (my_filter_type,
366 GST_TYPE_TUNER,
367 &amp;tuner_interface_info);
368 [..]
369 }
370
371 static void
372 gst_my_filter_init (GstMyFilter *filter)
373 {
374 GstTunerChannel *channel = NULL;
375 [..]
376 filter->active_input = 0;
377 filter->channels = NULL;
378 channel = g_object_new (GST_TYPE_TUNER_CHANNEL, NULL);
379 channel->label = g_strdup ("MyChannel");
380 channel->flags = GST_TUNER_CHANNEL_INPUT;
381 filter->channels = g_list_append (filter->channels, channel);
382 }
383
384 static gboolean
385 gst_my_filter_interface_supported (GstImplementsInterface *iface,
386 GType iface_type)
387 {
388 g_return_val_if_fail (iface_type == GST_TYPE_TUNER, FALSE);
389
390 /* for the sake of this example, we'll always support it. However, normally,
391 * you would check whether the device you've opened supports tuning. */
392 return TRUE;
393 }
394
395 static void
396 gst_my_filter_implements_interface_init (GstImplementsInterfaceClass *iface)
397 {
398 iface->supported = gst_my_filter_interface_supported;
399 }
400
401 static const GList *
402 gst_my_filter_tuner_list_channels (GstTuner *tuner)
403 {
404 GstMyFilter *filter = GST_MY_FILTER (tuner);
405
406 return filter->channels;
407 }
408
409 static GstTunerChannel *
410 gst_my_filter_tuner_get_channel (GstTuner *tuner)
411 {
412 GstMyFilter *filter = GST_MY_FILTER (tuner);
413
414 return g_list_nth_data (filter->channels,
415 filter->active_input);
416 }
417
418 static void
419 gst_my_filter_tuner_set_channel (GstTuner *tuner,
420 GstTunerChannel *channel)
421 {
422 GstMyFilter *filter = GST_MY_FILTER (tuner);
423
424 filter->active_input = g_list_index (filter->channels, channel);
425 g_assert (filter->active_input >= 0);
426 }
427
428 static void
429 gst_my_filter_tuner_interface_init (GstTunerClass *iface)
430 {
431 iface->list_channels = gst_my_filter_tuner_list_channels;
432 iface->get_channel = gst_my_filter_tuner_get_channel;
433 iface->set_channel = gst_my_filter_tuner_set_channel;
434 }
435 </programlisting>
436 <para>
437 As said, the tuner interface is very analog video-centric. It features
438 functions for selecting an input or output, and on inputs, it features
439 selection of a tuning frequency if the channel supports frequency-tuning
440 on that input. Likewise, it allows signal-strength-acquiring if the input
441 supports that. Frequency tuning can be used for radio or cable-TV tuning.
442 Signal-strength is an indication of the signal and can be used for
443 visual feedback to the user or for autodetection. Next to that, it also
444 features norm selection, which is only useful for analog video elements.
445 </para>
446 </sect1>
447
448124 <sect1 id="section-iface-colorbalance" xreflabel="Color Balance Interface">
449125 <title>Color Balance Interface</title>
450126 <para>
452128 </para>
453129 </sect1>
454130
455 <sect1 id="section-iface-propprobe" xreflabel="Property Probe Interface">
456 <title>Property Probe Interface</title>
457 <para>
458 Property probing is a generic solution to the problem that properties'
459 value lists in an enumeration are static. We've shown enumerations in
460 <xref linkend="chapter-building-args"/>. Property probing tries to accomplish
461 a goal similar to enumeration lists: to have a limited, explicit list of
462 allowed values for a property. There are two differences between
463 enumeration lists and probing. Firstly, enumerations only allow strings
464 as values; property probing works for any value type. Secondly, the
465 contents of a probed list of allowed values may change during the life
466 of an element. The contents of an enumeration list are static. Currently,
467 property probing is being used for detection of devices (e.g. for OSS
468 elements, Video4linux elements, etc.). It could - in theory - be used
469 for any property, though.
470 </para>
471 <para>
472 Property probing stores the list of allowed (or recommended) values in a
473 <classname>GValueArray</classname> and returns that to the user.
474 <symbol>NULL</symbol> is a valid return value, too. The process of
475 property probing is separated over two virtual functions: one for probing
476 the property to create a <classname>GValueArray</classname>, and one to
477 retrieve the current <classname>GValueArray</classname>. Those two are
478 separated because probing might take a long time (several seconds). Also,
479 this simplifies interface implementation in elements. For the application,
480 there are functions that wrap those two. For more information on this,
481 have a look at the API reference for the
482 <!-- FIXME: add link, but this is in ./gst-plugins/gst-libs/gst/propertyprobe/propertyprobe.c-->
483 <classname>GstPropertyProbe</classname> interface.
484 </para>
485 <para>
486 Below is a example of property probing for the audio filter element; it
487 will probe for allowed values for the <quote>silent</quote> property.
488 Indeed, this value is a <type>gboolean</type> so it doesn't
489 make much sense. Then again, it's only an example.
490 </para>
491 <programlisting>
492 #include &lt;gst/propertyprobe/propertyprobe.h&gt;
493
494 static void gst_my_filter_probe_interface_init (GstPropertyProbeInterface *iface);
495
496 GType
497 gst_my_filter_get_type (void)
498 {
499 [..]
500 static const GInterfaceInfo probe_interface_info = {
501 (GInterfaceInitFunc) gst_my_filter_probe_interface_init,
502 NULL,
503 NULL
504 };
505 [..]
506 g_type_add_interface_static (my_filter_type,
507 GST_TYPE_PROPERTY_PROBE,
508 &amp;probe_interface_info);
509 [..]
510 }
511
512 static const GList *
513 gst_my_filter_probe_get_properties (GstPropertyProbe *probe)
514 {
515 GObjectClass *klass = G_OBJECT_GET_CLASS (probe);
516 static GList *props = NULL;
517
518 if (!props) {
519 GParamSpec *pspec;
520
521 pspec = g_object_class_find_property (klass, "silent");
522 props = g_list_append (props, pspec);
523 }
524
525 return props;
526 }
527
528 static gboolean
529 gst_my_filter_probe_needs_probe (GstPropertyProbe *probe,
530 guint prop_id,
531 const GParamSpec *pspec)
532 {
533 gboolean res = FALSE;
534
535 switch (prop_id) {
536 case ARG_SILENT:
537 res = FALSE;
538 break;
539 default:
540 G_OBJECT_WARN_INVALID_PROPERTY_ID (probe, prop_id, pspec);
541 break;
542 }
543
544 return res;
545 }
546
547 static void
548 gst_my_filter_probe_probe_property (GstPropertyProbe *probe,
549 guint prop_id,
550 const GParamSpec *pspec)
551 {
552 switch (prop_id) {
553 case ARG_SILENT:
554 /* don't need to do much here... */
555 break;
556 default:
557 G_OBJECT_WARN_INVALID_PROPERTY_ID (probe, prop_id, pspec);
558 break;
559 }
560 }
561
562 static GValueArray *
563 gst_my_filter_get_silent_values (GstMyFilter *filter)
564 {
565 GValueArray *array = g_value_array_new (2);
566 GValue value = { 0 };
567
568 g_value_init (&amp;value, G_TYPE_BOOLEAN);
569
570 /* add TRUE */
571 g_value_set_boolean (&amp;value, TRUE);
572 g_value_array_append (array, &amp;value);
573
574 /* add FALSE */
575 g_value_set_boolean (&amp;value, FALSE);
576 g_value_array_append (array, &amp;value);
577
578 g_value_unset (&amp;value);
579
580 return array;
581 }
582
583 static GValueArray *
584 gst_my_filter_probe_get_values (GstPropertyProbe *probe,
585 guint prop_id,
586 const GParamSpec *pspec)
587 {
588 GstMyFilter *filter = GST_MY_FILTER (probe);
589 GValueArray *array = NULL;
590
591 switch (prop_id) {
592 case ARG_SILENT:
593 array = gst_my_filter_get_silent_values (filter);
594 break;
595 default:
596 G_OBJECT_WARN_INVALID_PROPERTY_ID (probe, prop_id, pspec);
597 break;
598 }
599
600 return array;
601 }
602
603 static void
604 gst_my_filter_probe_interface_init (GstPropertyProbeInterface *iface)
605 {
606 iface->get_properties = gst_my_filter_probe_get_properties;
607 iface->needs_probe = gst_my_filter_probe_needs_probe;
608 iface->probe_property = gst_my_filter_probe_probe_property;
609 iface->get_values = gst_my_filter_probe_get_values;
610 }
611 </programlisting>
612 <para>
613 You don't need to support any functions for getting or setting values.
614 All that is handled via the standard <classname>GObject</classname>
615 <function>_set_property ()</function> and <function>_get_property ()</function>
616 functions.
617 </para>
618 </sect1>
619
620 <sect1 id="section-iface-xoverlay" xreflabel="X Overlay Interface">
621 <title>X Overlay Interface</title>
622 <para>
623 An X Overlay is basically a video output in a XFree86 drawable. Elements
624 implementing this interface will draw video in a X11 window. Through this
625 interface, applications will be proposed 2 different modes to work with
626 a plugin implementing it. The first mode is a passive mode where the plugin
627 owns, creates and destroys the X11 window. The second mode is an active
628 mode where the application handles the X11 window creation and then tell
629 the plugin where it should output video. Let's get a bit deeper in those
630 modes...
631 </para>
632 <para>
633 A plugin drawing video output in a X11 window will need to have that
131 <sect1 id="section-iface-xoverlay" xreflabel="Video Overlay Interface">
132 <title>Video Overlay Interface</title>
133 <para>
134 The #GstVideoOverlay interface is used for 2 main purposes :
135 <itemizedlist>
136 <listitem>
137 <para>
138 To get a grab on the Window where the video sink element is going to render.
139 This is achieved by either being informed about the Window identifier that
140 the video sink element generated, or by forcing the video sink element to use
141 a specific Window identifier for rendering.
142 </para>
143 </listitem>
144 <listitem>
145 <para>
146 To force a redrawing of the latest video frame the video sink element
147 displayed on the Window. Indeed if the #GstPipeline is in #GST_STATE_PAUSED
148 state, moving the Window around will damage its content. Application
149 developers will want to handle the Expose events themselves and force the
150 video sink element to refresh the Window's content.
151 </para>
152 </listitem>
153 </itemizedlist>
154 </para>
155 <para>
156 A plugin drawing video output in a video window will need to have that
634157 window at one stage or another. Passive mode simply means that no window
635158 has been given to the plugin before that stage, so the plugin created the
636159 window by itself. In that case the plugin is responsible of destroying
637160 that window when it's not needed any more and it has to tell the
638161 applications that a window has been created so that the application can
639 use it. This is done using the <classname>have_xwindow_id</classname>
640 signal that can be emitted from the plugin with the
641 <function>gst_x_overlay_got_xwindow_id</function> method.
642 </para>
643 <para>
644 As you probably guessed already active mode just means sending a X11
162 use it. This is done using the <classname>have-window-handle</classname>
163 message that can be posted from the plugin with the
164 <function>gst_video_overlay_got_window_handle</function> method.
165 </para>
166 <para>
167 As you probably guessed already active mode just means sending a video
645168 window to the plugin so that video output goes there. This is done using
646 the <function>gst_x_overlay_set_xwindow_id</function> method.
169 the <function>gst_video_overlay_set_window_handle</function> method.
647170 </para>
648171 <para>
649172 It is possible to switch from one mode to another at any moment, so the
653176 </para>
654177 <programlisting><![CDATA[
655178 static void
656 gst_my_filter_set_xwindow_id (GstXOverlay *overlay, XID xwindow_id)
179 gst_my_filter_set_window_handle (GstVideoOverlay *overlay, guintptr handle)
657180 {
658181 GstMyFilter *my_filter = GST_MY_FILTER (overlay);
659182
660183 if (my_filter->window)
661184 gst_my_filter_destroy_window (my_filter->window);
662185
663 my_filter->window = xwindow_id;
186 my_filter->window = handle;
664187 }
665188
666189 static void
667 gst_my_filter_get_desired_size (GstXOverlay *overlay,
668 guint *width, guint *height)
669 {
670 GstMyFilter *my_filter = GST_MY_FILTER (overlay);
671
672 *width = my_filter->width;
673 *height = my_filter->height;
674 }
675
676 static void
677 gst_my_filter_xoverlay_init (GstXOverlayClass *iface)
678 {
679 iface->set_xwindow_id = gst_my_filter_set_xwindow_id;
680 iface->get_desired_size = gst_my_filter_get_desired_size;
190 gst_my_filter_xoverlay_init (GstVideoOverlayClass *iface)
191 {
192 iface->set_window_handle = gst_my_filter_set_window_handle;
681193 }
682194 ]]></programlisting>
683195 <para>
684 You will also need to use the interface methods to fire signals when
685 needed such as in the pad link function where you will know the video
196 You will also need to use the interface methods to post messages when
197 needed such as when receiving a CAPS event where you will know the video
686198 geometry and maybe create the window.
687199 </para>
688200 <programlisting><![CDATA[
691203 {
692204 MyFilterWindow *window = g_new (MyFilterWindow, 1);
693205 ...
694 gst_x_overlay_got_xwindow_id (GST_X_OVERLAY (my_filter), window->win);
695 }
696
697 static GstPadLinkReturn
698 gst_my_filter_sink_link (GstPad *pad, const GstCaps *caps)
699 {
700 GstMyFilter *my_filter = GST_MY_FILTER (overlay);
206 gst_video_overlay_got_window_handle (GST_VIDEO_OVERLAY (my_filter), window->win);
207 }
208
209 /* called from the event handler for CAPS events */
210 static gboolean
211 gst_my_filter_sink_set_caps (GstMyFilter *my_filter, GstCaps *caps)
212 {
701213 gint width, height;
702214 gboolean ret;
703215 ...
704216 ret = gst_structure_get_int (structure, "width", &width);
705217 ret &= gst_structure_get_int (structure, "height", &height);
706 if (!ret) return GST_PAD_LINK_REFUSED;
218 if (!ret) return FALSE;
219
220 gst_video_overlay_prepare_window_handle (GST_VIDEO_OVERLAY (my_filter));
707221
708222 if (!my_filter->window)
709223 my_filter->window = gst_my_filter_create_window (my_filter, width, height);
710224
711 gst_x_overlay_got_desired_size (GST_X_OVERLAY (my_filter),
712 width, height);
713225 ...
714226 }
715227 ]]></programlisting>
5656 </para>
5757 <para>
5858 In order for caps negotiation on non-fixed links to work correctly,
59 pads can optionally implement a function that tells peer elements what
60 formats it supports and/or prefers. When upstream renegotiation is
59 pads can optionally implement a query function that tells peer elements
60 what formats it supports and/or prefers. When upstream renegotiation is
6161 triggered, this becomes important.
6262 </para>
6363 <para>
64 Downstream elements are notified of a newly set caps only when data
65 is actually passing their pad. This is because caps is attached to
66 buffers during data flow. So when the vorbis decoder sets a caps on
64 Downstream elements are notified of a newly set caps with a
65 GST_EVENT_CAPS on the sinkpad. So when the vorbis decoder sets a caps on
6766 its source pad (to configure the output format), the converter will
68 not yet be notified. Instead, the converter will only be notified
69 when the decoder pushes a buffer over its source pad to the converter.
70 Right before calling the chain-function in the converter, &GStreamer;
71 will check whether the format that was previously negotiated still
72 applies to this buffer. If not, it first calls the setcaps-function
73 of the converter to configure it for the new format. Only after that
74 will it call the chain function of the converter.
67 receive a caps event.
68 When an element receives a buffer, it should check if it has received
69 all needed format information in a CAPS event previously. If it hasn't,
70 it should return an error from the chain function.
7571 </para>
7672 </sect1>
7773
8682 </para>
8783 <programlisting>
8884 [..]
89 pad = gst_pad_new_from_template (..);
85 pad = gst_pad_new_from_static_template (..);
9086 gst_pad_use_fixed_caps (pad);
9187 [..]
9288 </programlisting>
9894 [..]
9995 caps = gst_caps_new_simple ("audio/x-raw",
10096 "format", G_TYPE_STRING, GST_AUDIO_NE(F32),
101 "buffer-frames", G_TYPE_INT, &lt;bytes-per-frame&gt;,
10297 "rate", G_TYPE_INT, &lt;samplerate&gt;,
10398 "channels", G_TYPE_INT, &lt;num-channels&gt;, NULL);
10499 if (!gst_pad_set_caps (pad, caps)) {
157152 <para>
158153 Many elements, particularly effects and converters, will be able
159154 to parse the format of the stream from their input caps, and decide
160 the output format right at that time already. When renegotiation
161 takes place, some may merely need to "forward" the renegotiation
162 backwards upstream (more on that later). For those elements, all
163 (downstream) caps negotiation can be done in something that we
164 call the <function>_setcaps ()</function> function. This function is
165 called when a buffer is pushed over a pad, but the format on this
166 buffer is not the same as the format that was previously negotiated
167 (or, similarly, no format was negotiated yet so far).
168 </para>
169 <para>
170 In the <function>_setcaps ()</function>-function, the element can
171 forward the caps to the next element and, if that pad accepts the
155 the output format right at that time already. For those elements, all
156 (downstream) caps negotiation can be done from the
157 <function>_event ()</function> function when a GST_EVENT_CAPS is
158 received on the sinkpad. This CAPS event is received whenever the
159 format changes or when no format was negotiated yet. It will always
160 be called before you receive the buffer in the format specified in
161 the CAPS event.
162 </para>
163 <para>
164 In the <function>_event ()</function>-function, the element can
165 forward the CAPS event to the next element and, if that pad accepts the
172166 format too, the element can parse the relevant parameters from the
173167 caps and configure itself internally. The caps passed to this function
174168 is <emphasis>always</emphasis> a subset of the template caps, so
186180 --><!-- example-end forwardcaps.c a -->
187181 <!-- example-begin forwardcaps.c b -->
188182 static gboolean
189 gst_my_filter_setcaps (GstPad *pad,
190 GstCaps *caps)
191 {
192 GstMyFilter *filter = GST_MY_FILTER (GST_OBJECT_PARENT (pad));
193 GstStructure *s;
194
195 /* forward-negotiate */
196 if (!gst_pad_set_caps (filter-&gt;srcpad, caps))
197 return FALSE;
198
199 /* negotiation succeeded, so now configure ourselves */
200 s = gst_caps_get_structure (caps, 0);
201 gst_structure_get_int (s, "rate", &amp;filter-&gt;samplerate);
202 gst_structure_get_int (s, "channels", &amp;filter-&gt;channels);
203
204 return TRUE;
183 gst_my_filter_sink_event (GstPad *pad,
184 GstObject *parent,
185 GstEvent *event)
186 {
187 gboolean ret;
188 GstMyFilter *filter = GST_MY_FILTER (parent);
189
190 switch (GST_EVENT_TYPE (event)) {
191 case GST_EVENT_CAPS:
192 {
193 GstCaps *caps;
194 GstStructure *s;
195
196 gst_event_parse_caps (event, &amp;caps);
197
198 /* forward-negotiate */
199 ret = gst_pad_set_caps (filter-&gt;srcpad, caps);
200 if (!ret)
201 return FALSE;
202
203 /* negotiation succeeded, so now configure ourselves */
204 s = gst_caps_get_structure (caps, 0);
205 gst_structure_get_int (s, "rate", &amp;filter-&gt;samplerate);
206 gst_structure_get_int (s, "channels", &amp;filter-&gt;channels);
207 break;
208 }
209 default:
210 ret = gst_pad_event_default (pad, parent, event);
211 break;
212 }
213 return ret;
205214 }
206215 <!-- example-end forwardcaps.c b -->
207216 <!-- example-begin forwardcaps.c c --><!--
218227 then it should call <function>gst_pad_get_allowed_caps ()</function>
219228 on its sourcepad to get a list of supported formats on the outputs,
220229 and pick the first. The return value of that function is guaranteed
221 to be a subset of the template caps.
230 to be a subset of the template caps or NULL when there is no peer.
222231 </para>
223232 <para>
224233 Let's look at the example of an element that can convert between
245254 --><!-- example-end convertcaps.c a -->
246255 <!-- example-begin convertcaps.c b -->
247256 static gboolean
248 gst_my_filter_setcaps (GstPad *pad,
257 gst_my_filter_setcaps (GstMyFilter *filter,
249258 GstCaps *caps)
250259 {
251 GstMyFilter *filter = GST_MY_FILTER (GST_OBJECT_PARENT (pad));
252
253260 if (gst_pad_set_caps (filter-&gt;sinkpad, caps)) {
254261 filter-&gt;passthrough = TRUE;
255262 } else {
281288 return TRUE;
282289 }
283290
291 static gboolean
292 gst_my_filter_sink_event (GstPad *pad,
293 GstObject *parent,
294 GstEvent *event)
295 {
296 gboolean ret;
297 GstMyFilter *filter = GST_MY_FILTER (parent);
298
299 switch (GST_EVENT_TYPE (event)) {
300 case GST_EVENT_CAPS:
301 {
302 GstCaps *caps;
303
304 gst_event_parse_caps (event, &amp;caps);
305 ret = gst_my_filter_setcaps (filter, caps);
306 break;
307 }
308 default:
309 ret = gst_pad_event_default (pad, parent, event);
310 break;
311 }
312 return ret;
313 }
314
284315 static GstFlowReturn
285316 gst_my_filter_chain (GstPad *pad,
317 GstObject *parent,
286318 GstBuffer *buf)
287319 {
288 GstMyFilter *filter = GST_MY_FILTER (GST_OBJECT_PARENT (pad));
320 GstMyFilter *filter = GST_MY_FILTER (parent);
289321 GstBuffer *out;
290322
291323 /* push on if in passthrough mode */
321353 Fortunately, the code required to do so is very similar to the last
322354 code example in <xref linkend="section-nego-downstream-embed"/>, with
323355 the difference being that the caps is selected in the <function>_chain
324 ()</function>-function rather than in the <function>_setcaps
356 ()</function>-function rather than in the <function>_event
325357 ()</function>-function. The rest, as for getting all allowed caps from
326358 the source pad, fixating and such, is all the same. Re-negotiation,
327359 which will be handled in the next section, is very different for such
340372 or because the audio channel configuration changed.
341373 </para>
342374 <para>
343 Upstream caps renegotiation is done in the <function>gst_pad_alloc_buffer
344 ()</function>-function. The idea here is that an element requesting a
345 buffer from downstream, has to specify the type of that buffer. If
346 renegotiation is to take place, this type will no longer apply, and the
347 downstream element will set a new caps on the provided buffer. The element
348 should then reconfigure itself to push buffers with the returned caps. The
349 source pad's setcaps will be called once the buffer is pushed.
375 Upstream caps renegotiation is requested by sending a GST_EVENT_RECONFIGURE
376 event upstream. The idea is that it will instruct the upstream element
377 to reconfigure its caps by doing a new query for the allowed caps and then
378 choosing a new caps. The element that sends out the RECONFIGURE event
379 would influence the selection of the new caps by returning the new
380 prefered caps from its GST_QUERY_CAPS query function. The RECONFIGURE
381 event will set the GST_PAD_FLAG_NEED_RECONFIGURE on all pads that it
382 travels over.
350383 </para>
351384 <para>
352385 It is important to note here that different elements actually have
355388 <itemizedlist>
356389 <listitem>
357390 <para>
358 Elements should implement a <quote>padalloc</quote>-function in
359 order to be able to change format on renegotiation. This is also
360 true for filters and converters.
391 Elements that can be reconfigured on the srcpad should check its
392 NEED_RECONFIGURE flag with
393 <function>gst_pad_check_reconfigure ()</function> and it should
394 start renegotiation when the function returns TRUE.
361395 </para>
362396 </listitem>
363397 <listitem>
364398 <para>
365 Elements should allocate new buffers using
366 <function>gst_pad_alloc_buffer ()</function>.
367 </para>
368 </listitem>
369 <listitem>
370 <para>
371 Elements that are renegotiable should implement a
372 <quote>setcaps</quote>-function on their sourcepad as well.
399 Elements that want to propose a new format upstream need to send
400 a RECONFIGURE event and be prepared to answer the CAPS query with
401 the new prefered format. It should be noted that when there is no
402 upstream element that can (or wants) to renegotiate, the element
403 needs to deal with the currently configured format.
373404 </para>
374405 </listitem>
375406 </itemizedlist>
376 <para>
377 Unfortunately, not all details here have been worked out yet, so this
378 documentation is incomplete. FIXME.
379 </para>
380407 </sect1>
381408
382 <sect1 id="section-nego-getcaps" xreflabel="Implementing a getcaps function">
383 <title>Implementing a getcaps function</title>
384 <para>
385 A <function>_getcaps ()</function>-function is called when a peer
386 element would like to know which formats this element supports, and
387 in what order of preference. The return value should be all formats
388 that this elements supports, taking into account limitations of peer
389 elements further downstream or upstream, sorted by order of preference,
390 highest preference first.
409 <sect1 id="section-nego-getcaps" xreflabel="Implementing a CAPS query function">
410 <title>Implementing a CAPS query function</title>
411 <para>
412 A <function>_query ()</function>-function with the GST_QUERY_CAPS query
413 type is called when a peer element would like to know which formats
414 this pad supports, and in what order of preference. The return value
415 should be all formats that this elements supports, taking into account
416 limitations of peer elements further downstream or upstream, sorted by
417 order of preference, highest preference first.
391418 </para>
392419 <para>
393420 </para>
395422 #include "init.func"
396423 --><!-- example-end getcaps.c a -->
397424 <!-- example-begin getcaps.c b -->
398 static GstCaps *
399 gst_my_filter_getcaps (GstPad *pad)
400 {
401 GstMyFilter *filter = GST_MY_FILTER (GST_OBJECT_PARENT (pad));
402 GstPad *otherpad = (pad == filter-&gt;srcpad) ? filter-&gt;sinkpad :
403 filter-&gt;srcpad;
404 GstCaps *othercaps = gst_pad_get_allowed_caps (otherpad), *caps;
405 gint i;
406
407 /* We support *any* samplerate, indifferent from the samplerate
408 * supported by the linked elements on both sides. */
409 for (i = 0; i &lt; gst_caps_get_size (othercaps); i++) {
410 GstStructure *structure = gst_caps_get_structure (othercaps, i);
411
412 gst_structure_remove_field (structure, "rate");
425 static gboolean
426 gst_my_filter_query (GstPad *pad, GstObject * parent, GstQuery * query)
427 {
428 gboolean ret;
429 GstMyFilter *filter = GST_MY_FILTER (parent);
430
431 switch (GST_QUERY_TYPE (query)) {
432 case GST_QUERY_CAPS
433 {
434 GstPad *otherpad;
435 GstCaps *temp, *caps, *filter, *tcaps;
436 gint i;
437
438 otherpad = (pad == filter-&gt;srcpad) ? filter-&gt;sinkpad :
439 filter-&gt;srcpad;
440 caps = gst_pad_get_allowed_caps (otherpad);
441
442 gst_query_parse_caps (query, &amp;filter);
443
444 /* We support *any* samplerate, indifferent from the samplerate
445 * supported by the linked elements on both sides. */
446 for (i = 0; i &lt; gst_caps_get_size (caps); i++) {
447 GstStructure *structure = gst_caps_get_structure (caps, i);
448
449 gst_structure_remove_field (structure, "rate");
450 }
451
452 /* make sure we only return results that intersect our
453 * padtemplate */
454 tcaps = gst_pad_get_pad_template_caps (pad);
455 if (tcaps) {
456 temp = gst_caps_intersect (caps, tcaps);
457 gst_caps_unref (caps);
458 gst_caps_unref (tcaps);
459 caps = temp;
460 }
461 /* filter against the query filter when needed */
462 if (filter) {
463 temp = gst_caps_intersect (caps, filter);
464 gst_caps_unref (caps);
465 caps = temp;
466 }
467 gst_query_set_caps_result (query, caps);
468 gst_caps_unref (caps);
469 ret = TRUE;
470 break;
471 }
472 default:
473 ret = gst_pad_query_default (pad, parent, query);
474 break;
413475 }
414 caps = gst_caps_intersect (othercaps, gst_pad_get_pad_template_caps (pad));
415 gst_caps_unref (othercaps);
416
417 return caps;
476 return ret;
418477 }
419478 <!-- example-end getcaps.c b -->
420479 <!-- example-begin getcaps.c c --><!--
5252 GList *srcpadlist;
5353 } GstMyFilter;
5454
55 static void
56 gst_my_filter_base_init (GstMyFilterClass *klass)
55 static GstStaticPadTemplate src_factory =
56 GST_STATIC_PAD_TEMPLATE (
57 "src_%u",
58 GST_PAD_SRC,
59 GST_PAD_SOMETIMES,
60 GST_STATIC_CAPS ("ANY")
61 );
62
63 static void
64 gst_my_filter_class_init (GstMyFilterClass *klass)
5765 {
5866 GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
59 static GstStaticPadTemplate src_factory =
60 GST_STATIC_PAD_TEMPLATE (
61 "src_%02d",
62 GST_PAD_SRC,
63 GST_PAD_SOMETIMES,
64 GST_STATIC_CAPS ("ANY")
65 );
6667 [..]
6768 gst_element_class_add_pad_template (element_class,
6869 gst_static_pad_template_get (&src_factory));
9596
9697 /* newline? */
9798 if (data[n] == '\n') {
98 GstBuffer *buf = gst_buffer_new_and_alloc (n + 1);
99 GstBuffer *buf = gst_buffer_new_allocate (NULL, n + 1, NULL);
99100
100101 gst_bytestream_peek_bytes (filter->bs, &data, n);
101 memcpy (GST_BUFFER_DATA (buf), data, n);
102 GST_BUFFER_DATA (buf)[n] = '\0';
102 gst_buffer_fill (buf, 0, data, n);
103 gst_buffer_memset (buf, n, '\0', 1);
103104 gst_bytestream_flush_fast (filter->bs, n + 1);
104105
105106 return buf;
113114 GstMyFilter *filter = GST_MY_FILTER (element);
114115 GstBuffer *buf;
115116 GstPad *pad;
117 GstMapInfo map;
116118 gint num, n;
117119
118120 /* parse header */
119121 if (filter->firstrun) {
120 GstElementClass *klass;
121 GstPadTemplate *templ;
122122 gchar *padname;
123 guint8 id;
123124
124125 if (!(buf = gst_my_filter_getline (filter))) {
125126 gst_element_error (element, STREAM, READ, (NULL),
126127 ("Stream contains no header"));
127128 return;
128129 }
129 num = atoi (GST_BUFFER_DATA (buf));
130 gst_buffer_extract (buf, 0, &id, 1);
131 num = atoi (id);
130132 gst_buffer_unref (buf);
131133
132134 /* for each of the streams, create a pad */
133 klass = GST_ELEMENT_GET_CLASS (filter);
134 templ = gst_element_class_get_pad_template (klass, "src_%02d");
135135 for (n = 0; n < num; n++) {
136 padname = g_strdup_printf ("src_%02d", n);
137 pad = gst_pad_new_from_template (templ, padname);
136 padname = g_strdup_printf ("src_%u", n);
137 pad = gst_pad_new_from_static_template (src_factory, padname);
138138 g_free (padname);
139139
140 /* here, you would set _getcaps () and _link () functions */
140 /* here, you would set _event () and _query () functions */
141
142 /* need to activate the pad before adding */
143 gst_pad_set_active (pad, TRUE);
141144
142145 gst_element_add_pad (element, pad);
143146 filter->srcpadlist = g_list_append (filter->srcpadlist, pad);
152155 for (padlist = srcpadlist;
153156 padlist != NULL; padlist = g_list_next (padlist)) {
154157 pad = GST_PAD (padlist->data);
155 gst_event_ref (event);
156 gst_pad_push (pad, GST_DATA (event));
158 gst_pad_push_event (pad, gst_event_ref (event));
157159 }
158160 gst_event_unref (event);
159 gst_element_set_eos (element);
160
161 /* pause the task here */
161162 return;
162163 }
163164
164165 /* parse stream number and go beyond the ':' in the data */
165 num = atoi (GST_BUFFER_DATA (buf));
166 gst_buffer_map (buf, &map, GST_MAP_READ);
167 num = atoi (map.data[0]);
166168 if (num >= 0 && num < g_list_length (filter->srcpadlist)) {
167169 pad = GST_PAD (g_list_nth_data (filter->srcpadlist, num);
168170
169171 /* magic buffer parsing foo */
170 for (n = 0; GST_BUFFER_DATA (buf)[n] != ':' &&
171 GST_BUFFER_DATA (buf)[n] != '\0'; n++) ;
172 if (GST_BUFFER_DATA (buf)[n] != '\0') {
172 for (n = 0; map.data[n] != ':' &&
173 map.data[n] != '\0'; n++) ;
174 if (map.data[n] != '\0') {
173175 GstBuffer *sub;
174176
175 /* create subbuffer that starts right past the space. The reason
177 /* create region copy that starts right past the space. The reason
176178 * that we don't just forward the data pointer is because the
177179 * pointer is no longer the start of an allocated block of memory,
178180 * but just a pointer to a position somewhere in the middle of it.
179181 * That cannot be freed upon disposal, so we'd either crash or have
180 * a memleak. Creating a subbuffer is a simple way to solve that. */
181 sub = gst_buffer_create_sub (buf, n + 1, GST_BUFFER_SIZE (buf) - n - 1);
182 gst_pad_push (pad, GST_DATA (sub));
183 }
184 }
182 * a memleak. Creating a region copy is a simple way to solve that. */
183 sub = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL,
184 n + 1, map.size - n - 1);
185 gst_pad_push (pad, sub);
186 }
187 }
188 gst_buffer_unmap (buf, &map);
185189 gst_buffer_unref (buf);
186190 }
187191 ]]>
206210 where - for each elementary stream that is to be placed in the output
207211 system stream - one sink pad will be requested. It can also be used in
208212 elements with a variable number of input or outputs pads, such as the
209 <classname>tee</classname> (multi-output), <classname>switch</classname>
210 or <classname>aggregator</classname> (both multi-input) elements. At the
211 time of writing this, it is unclear to me who is responsible for cleaning
212 up the created pad and how or when that should be done. Below is a simple
213 example of an aggregator based on request pads.
213 <classname>tee</classname> (multi-output) or
214 <classname>input-selector</classname> (multi-input) elements.
215 </para>
216 <para>
217 To implement request pads, you need to provide a padtemplate with a
218 GST_PAD_REQUEST presence and implement the
219 <function>request_new_pad</function> virtual method in
220 <classname>GstElement</classname>.
221 To clean up, you will need to implement the
222 <function>release_pad</function> virtual method.
214223 </para>
215224 <programlisting>
216225 <![CDATA[
217226 static GstPad * gst_my_filter_request_new_pad (GstElement *element,
218227 GstPadTemplate *templ,
219 const gchar *name);
220
221 static void
222 gst_my_filter_base_init (GstMyFilterClass *klass)
228 const gchar *name,
229 const GstCaps *caps);
230
231 static void gst_my_filter_release_pad (GstElement *element,
232 GstPad *pad);
233
234 static GstStaticPadTemplate sink_factory =
235 GST_STATIC_PAD_TEMPLATE (
236 "sink_%u",
237 GST_PAD_SINK,
238 GST_PAD_REQUEST,
239 GST_STATIC_CAPS ("ANY")
240 );
241
242 static void
243 gst_my_filter_class_init (GstMyFilterClass *klass)
223244 {
224245 GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
225 static GstStaticPadTemplate sink_factory =
226 GST_STATIC_PAD_TEMPLATE (
227 "sink_%d",
228 GST_PAD_SINK,
229 GST_PAD_REQUEST,
230 GST_STATIC_CAPS ("ANY")
231 );
232246 [..]
233247 gst_element_class_add_pad_template (klass,
234248 gst_static_pad_template_get (&sink_factory));
235 }
236
237 static void
238 gst_my_filter_class_init (GstMyFilterClass *klass)
239 {
240 GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
241249 [..]
242250 element_class->request_new_pad = gst_my_filter_request_new_pad;
251 element_class->release_pad = gst_my_filter_release_pad;
243252 }
244253
245254 static GstPad *
246255 gst_my_filter_request_new_pad (GstElement *element,
247256 GstPadTemplate *templ,
248 const gchar *name)
257 const gchar *name,
258 const GstCaps *caps)
249259 {
250260 GstPad *pad;
251261 GstMyFilterInputContext *context;
254264 pad = gst_pad_new_from_template (templ, name);
255265 gst_pad_set_element_private (pad, context);
256266
257 /* normally, you would set _link () and _getcaps () functions here */
267 /* normally, you would set _chain () and _event () functions here */
258268
259269 gst_element_add_pad (element, pad);
260270
261271 return pad;
262272 }
273
274 static void
275 gst_my_filter_release_pad (GstElement *element,
276 GstPad *pad)
277 {
278 GstMyFilterInputContext *context;
279
280 context = gst_pad_get_element_private (pad);
281 g_free (context);
282
283 gst_element_remove_pad (element, pad);
284 }
285
263286 ]]>
264287 </programlisting>
265288 </sect1>
00 <chapter id="chapter-scheduling" xreflabel="Different scheduling modes">
11 <title>Different scheduling modes</title>
22 <para>
3 Scheduling is, in short, a method for making sure that every element gets
4 called once in a while to process data and prepare data for the next
5 element. Likewise, a kernel has a scheduler for processes, and your
6 brain is a very complex scheduler too in a way.
7 Randomly calling elements' chain functions won't bring us far, however, so
8 you'll understand that the schedulers in &GStreamer; are a bit more complex
9 than this. However, as a start, it's a nice picture.
3 The scheduling mode of a pad defines how data is retrieved from (source)
4 or given to (sink) pads. &GStreamer; can operate in two scheduling
5 mode, called push- and pull-mode. &GStreamer; supports elements with pads
6 in any of the scheduling modes where not all pads need to be operating
7 in the same mode.
108 </para>
119 <para>
1210 So far, we have only discussed <function>_chain ()</function>-operating
1311 elements, i.e. elements that have a chain-function set on their sink pad
14 and push buffers on their source pad(s). Pads (or elements) can also operate
15 in two other scheduling modes, however. In this chapter, we will discuss
16 what those scheduling modes are, how they can be enabled and in what
17 cases they are useful. The other two scheduling modes are random access
18 (<function>_getrange ()</function>-based) or task-runner (which means
19 that this element is the driving force in the pipeline) mode.
12 and push buffers on their source pad(s). We call this the push-mode
13 because a peer element will use <function>gst_pad_push ()</function> on
14 a srcpad, which will cause our <function>_chain ()</function>-function
15 to be called, which in turn causes our element to push out a buffer on
16 the source pad. The initiative to start the dataflow happens somewhere
17 upstream when it pushes out a buffer and all downstream elements get
18 scheduled when their <function>_chain ()</function>-functions are
19 called in turn.
2020 </para>
21 <para>
22 Before we explain pull-mode scheduling, let's first understand how the
23 different scheduling modes are selected and activated on a pad.
24 </para>
2125
2226 <sect1 id="section-scheduling-activation"
23 xreflabel="The pad actication stage">
27 xreflabel="The pad activation stage">
2428 <title>The pad activation stage</title>
2529 <para>
26 The stage in which &GStreamer; decides in what scheduling mode the
27 various elements will operate, is called the pad-activation stage. In
28 this stage, &GStreamer; will query the scheduling capabilities (i.e.
29 it will see in what modes each particular element/pad can operate) and
30 decide on the optimal scheduling composition for the pipeline. Next,
31 each pad will be notified of the scheduling mode that was assigned to
32 it, and after that the pipeline will start running.
33 </para>
34 <para>
35 Pads can be assigned one of three modes, each mode putting several
36 prerequisites on the pads. Pads should implement a notification
37 function (<function>gst_pad_set_activatepull_function ()</function> and
38 <function>gst_pad_set_activatepush_function ()</function>) to be
39 notified of the scheduling mode assignment. Also, sinkpads assigned
40 to do pull-based scheduling mode should start and stop their task
41 in this function.
30 During the element state change of READY->PAUSED, the pads of an
31 element will be activated. This happens first on the source pads and
32 then on the sink pads of the element. &GStreamer; calls the
33 <function>_activate ()</function> of a pad. By default this function
34 will activate the pad in push-mode by calling
35 <function>gst_pad_activate_mode ()</function> with the GST_PAD_MODE_PUSH
36 scheduling mode.
37 It is possible to override the <function>_activate ()</function> of a pad
38 and decide on a different scheduling mode. You can know in what
39 scheduling mode a pad is activated by overriding the
40 <function>_activate_mode ()</function>-function.
41 </para>
42 <para>
43 &GStreamer; allows the different pads of an element to operate in
44 different scheduling modes. This allows for many different possible
45 use-cases. What follows is an overview of some typical use-cases.
4246 </para>
4347 <itemizedlist>
4448 <listitem>
4549 <para>
46 If all pads of an element are assigned to do
47 <quote>push</quote>-based scheduling, then this means that data
48 will be pushed by upstream elements to this element using the
49 sinkpads <function>_chain ()</function>-function. Prerequisites
50 for this scheduling mode are that a chain-function was set for
51 each sinkpad using<function>gst_pad_set_chain_function ()</function>
52 and that all downstream elements operate in the same mode. Pads are
53 assigned to do push-based scheduling in sink-to-source element
54 order, and within an element first sourcepads and then sinkpads.
55 Sink elements can operate in this mode if their sinkpad is activated
56 for push-based scheduling. Source elements cannot be chain-based.
50 If all pads of an element are activated in push-mode scheduling,
51 the element as a whole is operating in push-mode.
52 For source elements this means that they will have to start a
53 task that pushes out buffers on the source pad to the downstream
54 elements.
55 Downstream elements will have data pushed to them by upstream elements
56 using the sinkpads <function>_chain ()</function>-function which will
57 push out buffers on the source pads.
58 Prerequisites for this scheduling mode are that a chain-function was
59 set for each sinkpad using <function>gst_pad_set_chain_function ()</function>
60 and that all downstream elements operate in the same mode.
5761 </para>
5862 </listitem>
5963 <listitem>
6064 <para>
6165 Alternatively, sinkpads can be the driving force behind a pipeline
62 by operating in <quote>pull</quote>-based mode, while the sourcepads
63 of the element still operate in push-based mode. In order to be the
66 by operating in pull-mode, while the sourcepads
67 of the element still operate in push-mode. In order to be the
6468 driving force, those pads start a <classname>GstTask</classname>
6569 when they are activated. This task is a thread, which
6670 will call a function specified by the element. When called, this
6771 function will have random data access (through
68 <function>gst_pad_get_range ()</function>) over all sinkpads, and
72 <function>gst_pad_pull_range ()</function>) over all sinkpads, and
6973 can push data over the sourcepads, which effectively means that
7074 this element controls data flow in the pipeline. Prerequisites for
71 this mode are that all downstream elements can act in chain-based
72 mode, and that all upstream elements allow random access (see below).
73 Source elements can be told to act in this mode if their sourcepads
74 are activated in push-based fashion. Sink elements can be told to
75 act in this mode when their sinkpads are activated in pull-mode.
76 </para>
77 </listitem>
78 <listitem>
79 <para>
80 lastly, all pads in an element can be assigned to act in pull-mode.
81 too. However, contrary to the above, this does not mean that they
75 this mode are that all downstream elements can act in push
76 mode, and that all upstream elements operate in pull-mode (see below).
77 </para>
78 <para>
79 Source pads can be activated in PULL mode by a downstream element
80 when they return GST_PAD_MODE_PULL from the GST_QUERY_SCHEDULING
81 query. Prerequisites for this scheduling mode are that a
82 getrange-function was set for the source pad using
83 <function>gst_pad_set_getrange_function ()</function>.
84 </para>
85 </listitem>
86 <listitem>
87 <para>
88 Lastly, all pads in an element can be activated in PULL-mode.
89 However, contrary to the above, this does not mean that they
8290 start a task on their own. Rather, it means that they are pull
8391 slave for the downstream element, and have to provide random data
8492 access to it from their <function>_get_range ()</function>-function.
8694 ()</function>-function was set on this pad using the function
8795 <function>gst_pad_set_getrange_function ()</function>. Also, if
8896 the element has any sinkpads, all those pads (and thereby their
89 peers) need to operate in random access mode, too. Note that the
90 element is supposed to activate those elements itself! &GStreamer;
91 will not do that for you.
97 peers) need to operate in PULL access mode, too.
98 </para>
99 <para>
100 When a sink element is activated in PULL mode, it should start a
101 task that calls <function>gst_pad_pull_range ()</function> on its
102 sinkpad. It can only do this when the upstream SCHEDULING query
103 returns support for the GST_PAD_MODE_PULL scheduling mode.
92104 </para>
93105 </listitem>
94106 </itemizedlist>
95107 <para>
96 In the next two sections, we will go closer into pull-based scheduling
108 In the next two sections, we will go closer into pull-mode scheduling
97109 (elements/pads driving the pipeline, and elements/pads providing random
98110 access), and some specific use cases will be given.
99111 </para>
102114 <sect1 id="section-scheduling-loop" xreflabel="Pads driving the pipeline">
103115 <title>Pads driving the pipeline</title>
104116 <para>
105 Sinkpads assigned to operate in pull-based mode, while none of its
106 sourcepads operate in pull-based mode (or it has no sourcepads), can
107 start a task that will drive the pipeline data flow. Within this
108 function, those elements have random access over all of their sinkpads,
109 and push data over their sourcepads. This can come in useful for
110 several different kinds of elements:
117 Sinkpads operating in pull-mode, with the sourcepads operating in
118 push-mode (or it has no sourcepads when it is a sink), can start a task
119 that will drive the pipeline data flow.
120 Within this task function, you have random access over all of the sinkpads,
121 and push data over the sourcepads.
122 This can come in useful for several different kinds of elements:
111123 </para>
112124 <itemizedlist>
113125 <listitem>
115127 Demuxers, parsers and certain kinds of decoders where data comes
116128 in unparsed (such as MPEG-audio or video streams), since those will
117129 prefer byte-exact (random) access from their input. If possible,
118 however, such elements should be prepared to operate in chain-based
130 however, such elements should be prepared to operate in push-mode
119131 mode, too.
120132 </para>
121133 </listitem>
127139 </listitem>
128140 </itemizedlist>
129141 <para>
130 In order to start this task, you will need to create it in the
131 activation function.
142 First you need to perform a SCHEDULING query to check if the upstream
143 element(s) support pull-mode scheduling. If that is possible, you
144 can activate the sinkpad in pull-mode. Inside the activate_mode
145 function you can then start the task.
132146 </para>
133147 <programlisting><!-- example-begin task.c a -->
134148 #include "filter.h"
135149 #include &lt;string.h&gt;
136150
137 static gboolean gst_my_filter_activate (GstPad * pad);
138 static gboolean gst_my_filter_activate_pull (GstPad * pad,
139 gboolean active);
140 static void gst_my_filter_loop (GstMyFilter * filter);
141
142 GST_BOILERPLATE (GstMyFilter, gst_my_filter, GstElement, GST_TYPE_ELEMENT);
151 static gboolean gst_my_filter_activate (GstPad * pad,
152 GstObject * parent);
153 static gboolean gst_my_filter_activate_mode (GstPad * pad,
154 GstObject * parent,
155 GstPadMode mode
156 gboolean active);
157 static void gst_my_filter_loop (GstMyFilter * filter);
158
159 G_DEFINE_TYPE (GstMyFilter, gst_my_filter, GST_TYPE_ELEMENT);
143160 <!-- example-end task.c a -->
144 <!-- example-begin task.c b --><!--
145 static gboolean gst_my_filter_setcaps (GstPad *pad,
146 GstCaps *caps);
147 static GstCaps *gst_my_filter_getcaps (GstPad *pad);
148
149 static void
150 gst_my_filter_base_init (gpointer klass)
151 {
152 GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
153 static GstElementDetails my_filter_details = {
154 "An example plugin",
155 "Example/FirstExample",
156 "Shows the basic structure of a plugin",
157 "your name <your.name@your.isp>"
158 };
159 static GstStaticPadTemplate sink_factory =
160 GST_STATIC_PAD_TEMPLATE (
161 "sink",
162 GST_PAD_SINK,
163 GST_PAD_ALWAYS,
164 GST_STATIC_CAPS ("ANY")
165 );
166 static GstStaticPadTemplate src_factory =
167 GST_STATIC_PAD_TEMPLATE (
168 "src",
169 GST_PAD_SRC,
170 GST_PAD_ALWAYS,
171 GST_STATIC_CAPS ("ANY")
172 );
173
174 gst_element_class_set_details (element_class, &my_filter_details);
175 gst_element_class_add_pad_template (element_class,
176 gst_static_pad_template_get (&src_factory));
177 gst_element_class_add_pad_template (element_class,
178 gst_static_pad_template_get (&sink_factory));
179 }
180
181 static void
182 gst_my_filter_class_init (GstMyFilterClass * klass)
183 {
184 }
185 --><!-- example-begin task.c b -->
186161 <!-- example-begin task.c c -->
187162 static void
188163 gst_my_filter_init (GstMyFilter * filter)
189164 {
190165 <!-- example-end task.c c -->
191166 [..]<!-- example-begin task.c d --><!--
192 GstElementClass *klass = GST_ELEMENT_GET_CLASS (filter);
193
194 filter-&gt;sinkpad = gst_pad_new_from_template (
195 gst_element_class_get_pad_template (klass, "sink"), "sink");
196 gst_pad_set_setcaps_function (filter-&gt;sinkpad, gst_my_filter_setcaps);
197 gst_pad_set_getcaps_function (filter-&gt;sinkpad, gst_my_filter_getcaps);
198167 --><!-- example-end task.c d -->
199168 <!-- example-begin task.c e -->
200169 gst_pad_set_activate_function (filter-&gt;sinkpad, gst_my_filter_activate);
201 gst_pad_set_activatepull_function (filter-&gt;sinkpad,
202 gst_my_filter_activate_pull);
170 gst_pad_set_activatemode_function (filter-&gt;sinkpad,
171 gst_my_filter_activate_mode);
203172 <!-- example-end task.c e -->
204173 <!-- example-begin task.c f --><!--
205174 gst_element_add_pad (GST_ELEMENT (filter), filter-&gt;sinkpad);
206175
207 filter-&gt;srcpad = gst_pad_new_from_template (
208 gst_element_class_get_pad_template (klass, "src"), "src");
209176 gst_element_add_pad (GST_ELEMENT (filter), filter-&gt;srcpad);
210177 --><!-- example-end task.c f -->
211178 [..]<!-- example-begin task.c g -->
216183 --><!-- example-end task.c h -->
217184 <!-- example-begin task.c i -->
218185 static gboolean
219 gst_my_filter_activate (GstPad * pad)
220 {
221 if (gst_pad_check_pull_range (pad)) {
222 return gst_pad_activate_pull (pad, TRUE);
223 } else {
224 return FALSE;
186 gst_my_filter_activate (GstPad * pad, GstObject * parent)
187 {
188 GstQuery *query;
189 gboolean pull_mode;
190
191 /* first check what upstream scheduling is supported */
192 query = gst_query_new_scheduling ();
193
194 if (!gst_pad_peer_query (pad, query)) {
195 gst_query_unref (query);
196 goto activate_push;
197 }
198
199 /* see if pull-mode is supported */
200 pull_mode = gst_query_has_scheduling_mode_with_flags (query,
201 GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE);
202 gst_query_unref (query);
203
204 if (!pull_mode)
205 goto activate_push;
206
207 /* now we can activate in pull-mode. GStreamer will also
208 * activate the upstream peer in pull-mode */
209 return gst_pad_activate_mode (pad, GST_PAD_MODE_PULL, TRUE);
210
211 activate_push:
212 {
213 /* something not right, we fallback to push-mode */
214 return gst_pad_activate_mode (pad, GST_PAD_MODE_PUSH, TRUE);
225215 }
226216 }
227217
228218 static gboolean
229 gst_my_filter_activate_pull (GstPad *pad,
230 gboolean active)
231 {
232 GstMyFilter *filter = GST_MY_FILTER (GST_OBJECT_PARENT (pad));
233
234 if (active) {
235 filter->offset = 0;
236 return gst_pad_start_task (pad,
237 (GstTaskFunction) gst_my_filter_loop, filter);
238 } else {
239 return gst_pad_stop_task (pad);
240 }
219 gst_my_filter_activate_pull (GstPad * pad,
220 GstObject * parent,
221 GstPadMode mode,
222 gboolean active)
223 {
224 gboolean res;
225 GstMyFilter *filter = GST_MY_FILTER (parent);
226
227 switch (mode) {
228 case GST_PAD_MODE_PUSH:
229 res = TRUE;
230 break;
231 case GST_PAD_MODE_PULL:
232 if (active) {
233 filter->offset = 0;
234 res = gst_pad_start_task (pad,
235 (GstTaskFunction) gst_my_filter_loop, filter, NULL);
236 } else {
237 res = gst_pad_stop_task (pad);
238 }
239 break;
240 default:
241 /* unknown scheduling mode */
242 res = FALSE;
243 break;
244 }
245 return res;
241246 }
242247 <!-- example-end task.c i --></programlisting>
243248 <para>
244249 Once started, your task has full control over input and output. The
245250 most simple case of a task function is one that reads input and pushes
246251 that over its source pad. It's not all that useful, but provides some
247 more flexibility than the old chain-based case that we've been looking
252 more flexibility than the old push-mode case that we've been looking
248253 at so far.
249254 </para>
250255 <programlisting><!-- example-begin task.c j -->
258263 GstFormat fmt = GST_FORMAT_BYTES;
259264 GstBuffer *buf = NULL;
260265
261 if (!gst_pad_query_duration (filter-&gt;sinkpad, &amp;fmt, &amp;len)) {
266 if (!gst_pad_query_duration (filter-&gt;sinkpad, fmt, &amp;len)) {
262267 GST_DEBUG_OBJECT (filter, "failed to query duration, pausing");
263268 goto stop;
264269 }
306311 <title>Providing random access</title>
307312 <para>
308313 In the previous section, we have talked about how elements (or pads)
309 that are assigned to drive the pipeline using their own task, have
310 random access over their sinkpads. This means that all elements linked
311 to those pads (recursively) need to provide random access functions.
312 Requesting random access is done using the function
313 <function>gst_pad_pull_range ()</function>, which requests a buffer of
314 a specified size and offset. Source pads implementing and assigned to
315 do random access will have a <function>_get_range ()</function>-function
316 set using <function>gst_pad_set_getrange_function ()</function>, and
317 that function will be called when the peer pad requests some data. The
318 element is then responsible for seeking to the right offset and
314 that are activated to drive the pipeline using their own task, must use
315 pull-mode scheduling on their sinkpads. This means that all pads linked
316 to those pads need to be activated in pull-mode.
317 Source pads activated in pull-mode must implement a
318 <function>_get_range ()</function>-function set using
319 <function>gst_pad_set_getrange_function ()</function>, and
320 that function will be called when the peer pad requests some data with
321 <function>gst_pad_pull_range ()</function>.
322 The element is then responsible for seeking to the right offset and
319323 providing the requested data. Several elements can implement random
320324 access:
321325 </para>
328332 </listitem>
329333 <listitem>
330334 <para>
331 Filters that would like to provide a pull-based-like scheduling
332 mode over the whole pipeline. Note that elements assigned to do
333 random access-based scheduling are themselves responsible for
334 assigning this scheduling mode to their upstream peers! &GStreamer;
335 will not do that for you.
335 Filters that would like to provide a pull-mode scheduling
336 over the whole pipeline.
336337 </para>
337338 </listitem>
338339 <listitem>
339340 <para>
340341 Parsers who can easily provide this by skipping a small part of
341 their input and are thus essentially "forwarding" random access
342 their input and are thus essentially "forwarding" getrange
342343 requests literally without any own processing involved. Examples
343344 include tag readers (e.g. ID3) or single output parsers, such as
344345 a WAVE parser.
353354 #include "filter.h"
354355 static GstFlowReturn
355356 gst_my_filter_get_range (GstPad * pad,
357 GstObject * parent,
356358 guint64 offset,
357359 guint length,
358360 GstBuffer ** buf);
359361
360 GST_BOILERPLATE (GstMyFilter, gst_my_filter, GstElement, GST_TYPE_ELEMENT);
362 G_DEFINE_TYPE (GstMyFilter, gst_my_filter, GST_TYPE_ELEMENT);
361363 <!-- example-end range.c a -->
362364 <!-- example-begin range.c b --><!--
363365 static void
364 gst_my_filter_base_init (gpointer klass)
366 gst_my_filter_class_init (gpointer klass)
365367 {
366368 GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
367369 static GstElementDetails my_filter_details = {
392394 static void
393395 gst_my_filter_init (GstMyFilter * filter)
394396 {
397 <!-- example-end task.c c --><!--
395398 GstElementClass *klass = GST_ELEMENT_GET_CLASS (filter);
396399
397400 filter-&gt;srcpad = gst_pad_new_from_template (
398401 gst_element_class_get_pad_template (klass, "src"), "src");
402 -->
403 [..]<!-- example-begin task.c d --><!--
404 --><!-- example-end task.c d -->
405 <!-- example-begin task.c e -->
399406 gst_pad_set_getrange_function (filter-&gt;srcpad,
400407 gst_my_filter_get_range);
408 <!-- example-end range.c c --><!--
401409 gst_element_add_pad (GST_ELEMENT (filter), filter-&gt;srcpad);
402 <!-- example-end range.c c -->
410 -->
403411 [..]<!-- example-begin range.c d -->
404412 }
405413
406 static gboolean
414 static GstFlowReturn
407415 gst_my_filter_get_range (GstPad * pad,
416 GstObject * parent,
408417 guint64 offset,
409418 guint length,
410419 GstBuffer ** buf)
411420 {
412421 <!-- example-end range.c d -->
413 GstMyFilter *filter = GST_MY_FILTER (GST_OBJECT_PARENT (pad));
422 GstMyFilter *filter = GST_MY_FILTER (parent);
414423
415424 [.. here, you would fill *buf ..]
416425 <!-- example-begin range.c e -->
422431 --><!-- example-end range.c f --></programlisting>
423432 <para>
424433 In practice, many elements that could theoretically do random access,
425 may in practice often be assigned to do push-based scheduling anyway,
434 may in practice often be activated in push-mode scheduling anyway,
426435 since there is no downstream element able to start its own task.
427436 Therefore, in practice, those elements should implement both a
428437 <function>_get_range ()</function>-function and a <function>_chain
429438 ()</function>-function (for filters and parsers) or a <function>_get_range
430439 ()</function>-function and be prepared to start their own task by
431440 providing <function>_activate_* ()</function>-functions (for
432 source elements), so that &GStreamer; can decide for the optimal
433 scheduling mode and have it just work fine in practice.
441 source elements).
434442 </para>
435443 </sect1>
436444 </chapter>
6464 of the type the tag was registered as (the API documentation for each
6565 predefined tag should contain the type). Be sure to use functions like
6666 <function>gst_value_transform ()</function>
67 to make sure that your data is of the right type. After data reading, the
68 application can be notified of the new taglist by calling
69 <function>gst_element_found_tags ()</function> or
70 <function>gst_element_found_tags_for_pad ()</function> (if they only
71 refer to a specific sub-stream). These functions will post a tag message
72 on the pipeline's GstBus for the application to pick up, but also send
73 tag events downstream, either over all source pad or the pad specified.
67 to make sure that your data is of the right type.
68 After data reading, you can send the tags downstream with the TAG event.
69 When the TAG event reaches the sink, it will post the TAG message on
70 the pipeline's GstBus for the application to pick up.
7471 </para>
7572 <para>
7673 We currently require the core to know the GType of tags before they are
111108 TagSetter interface (which is just a layer). Pipeline tags are tags
112109 provided to the element from within the pipeline. The element receives
113110 such tags via the <symbol>GST_EVENT_TAG</symbol> event, which means
114 that tags writers should automatically be event aware. The tag writer is
111 that tags writers should implment an event handler. The tag writer is
115112 responsible for combining all these three into one list and writing them
116113 to the output stream.
117114 </para>
120117 combine them and write them to the output stream. It implements the tag
121118 setter so applications can set tags, and retrieves pipeline tags from
122119 incoming events.
120 </para>
121 <para>
122 Warning, this example is outdated and doesn't work with the 1.0 version
123 of &GStreamer; anymore.
123124 </para>
124125 <programlisting>
125126 <![CDATA[
142143 static void
143144 gst_my_filter_init (GstMyFilter *filter)
144145 {
145 GST_FLAG_SET (filter, GST_ELEMENT_EVENT_AWARE);
146146 [..]
147147 }
148148
164164 g_value_init (&to, G_TYPE_STRING);
165165
166166 for (n = 0; n < num_values; n++) {
167 guint8 * data;
168 gsize size;
169
167170 from = gst_tag_list_get_value_index (taglist, tagname, n);
168171 g_value_transform (from, &to);
169172
170 buf = gst_buffer_new ();
171 GST_BUFFER_DATA (buf) = g_strdup_printf ("%s:%s", tagname,
172 g_value_get_string (&to));
173 GST_BUFFER_SIZE (buf) = strlen (GST_BUFFER_DATA (buf));
174 gst_pad_push (filter->srcpad, GST_DATA (buf));
173 data = g_strdup_printf ("%s:%s", tagname,
174 g_value_get_string (&to));
175 size = strlen (data);
176
177 buf = gst_buffer_new_wrapped (data, size);
178 gst_pad_push (filter->srcpad, buf);
175179 }
176180
177181 g_value_unset (&to);
222226 gst_tag_list_foreach (taglist, gst_my_filter_write_tag, filter);
223227
224228 /* signal EOS */
225 gst_pad_push (filter->srcpad, GST_DATA (gst_event_new (GST_EVENT_EOS)));
226 gst_element_set_eos (element);
229 gst_pad_push (filter->srcpad, gst_event_new (GST_EVENT_EOS));
227230 }
228231 ]]>
229232 </programlisting>
5959 <para>
6060 If you need a new format that has not yet been defined in our <xref
6161 linkend="section-types-definitions"/>, you will want to have some general
62 guidelines on mimetype naming, properties and such. A mimetype would
63 ideally be one defined by IANA; else, it should be in the form
64 type/x-name, where type is the sort of data this mimetype handles (audio,
65 video, ...) and name should be something specific for this specific type.
66 Audio and video mimetypes should try to support the general audio/video
67 properties (see the list), and can use their own properties, too. To get
68 an idea of what properties we think are useful, see (again) the list.
62 guidelines on media type naming, properties and such. A media type would
63 ideally be equivalent to the Mime-type defined by IANA; else, it should
64 be in the form type/x-name, where type is the sort of data this media type
65 handles (audio, video, ...) and name should be something specific for
66 this specific type. Audio and video media types should try to support the
67 general audio/video properties (see the list), and can use their own
68 properties, too. To get an idea of what properties we think are useful,
69 see (again) the list.
6970 </para>
7071 <para>
7172 Take your time to find the right set of properties for your type. There
205206
206207 <thead>
207208 <row>
208 <entry>Mime Type</entry>
209 <entry>Media Type</entry>
209210 <entry>Description</entry>
210211 <entry>Property</entry>
211212 <entry>Property Type</entry>
633634
634635 <thead>
635636 <row>
636 <entry>Mime Type</entry>
637 <entry>Media Type</entry>
637638 <entry>Description</entry>
638639 <entry>Property</entry>
639640 <entry>Property Type</entry>
877878 <entry>1, 2 or 4</entry>
878879 <entry>
879880 Version of the MPEG codec that this stream was encoded with.
880 Note that we have different mimetypes for 3ivx, XviD, DivX and
881 Note that we have different media types for 3ivx, XviD, DivX and
881882 "standard" ISO MPEG-4. This is <emphasis>not</emphasis> a good
882883 thing and we're fully aware of this. However, we do not have a
883884 solution yet.
10201021 <entry></entry>
10211022 <entry>
10221023 There are currently no specific properties defined or needed for
1023 this type. Note that we have different mimetypes for VP-3 and
1024 this type. Note that we have different media types for VP-3 and
10241025 Theora, which is not necessarily a good idea. This could probably
10251026 be improved.
10261027 </entry>
11311132
11321133 <thead>
11331134 <row>
1134 <entry>Mime Type</entry>
1135 <entry>Media Type</entry>
11351136 <entry>Description</entry>
11361137 <entry>Property</entry>
11371138 <entry>Property Type</entry>
12801281
12811282 <thead>
12821283 <row>
1283 <entry>Mime Type</entry>
1284 <entry>Media Type</entry>
12841285 <entry>Description</entry>
12851286 <entry>Property</entry>
12861287 <entry>Property Type</entry>
13161317
13171318 <thead>
13181319 <row>
1319 <entry>Mime Type</entry>
1320 <entry>Media Type</entry>
13201321 <entry>Description</entry>
13211322 <entry>Property</entry>
13221323 <entry>Property Type</entry>
132132 <listitem>
133133 <para>
134134 Elements should make sure they forward events they do not
135 handle with gst_pad_event_default (pad, event) instead of
135 handle with gst_pad_event_default (pad, parent, event) instead of
136136 just dropping them. Events should never be dropped unless
137137 specifically intended.
138138 </para>
140140 <listitem>
141141 <para>
142142 Elements should make sure they forward queries they do not
143 handle with gst_pad_query_default (pad, query) instead of
143 handle with gst_pad_query_default (pad, parent, query) instead of
144144 just dropping them.
145 </para>
146 </listitem>
147 <listitem>
148 <para>
149 Elements should use gst_pad_get_parent() in event and query
150 functions, so that they hold a reference to the element while they
151 are operating. Note that gst_pad_get_parent() increases the
152 reference count of the element, so you must be very careful to call
153 gst_object_unref (element) before returning from your query or
154 event function, otherwise you will leak memory.
155145 </para>
156146 </listitem>
157147 </itemizedlist>
167157 tool to show that your element is finished. Applications such as
168158 Rhythmbox and Totem (for GNOME) or AmaroK (for KDE)
169159 <emphasis>are</emphasis>. <command>gst-launch</command> will not
170 test various things such as proper clean-up on reset, interrupt
171 event handling, querying and so on.
160 test various things such as proper clean-up on reset, event
161 handling, querying and so on.
172162 </para>
173163 </listitem>
174164 <listitem>
185185 </itemizedlist>
186186 </sect1>
187187 </chapter>
188
189 <chapter id="chapter-porting-1_0">
190 <title>Porting 0.10 plug-ins to 1.0</title>
191 <para>
192 You can find the list of changes in the
193 <ulink url="http://cgit.freedesktop.org/gstreamer/gstreamer/tree/docs/random/porting-to-1.0.txt">Porting to 1.0</ulink> document.
194 </para>
195 </chapter>
112112 </note>
113113 <para>
114114 The last command creates two files:
115 <filename>gstexamplefilter.c</filename> and
116 <filename>gstexamplefilter.h</filename>.
115 <filename>gstmyfilter.c</filename> and
116 <filename>gstmyfilter.h</filename>.
117117 </para>
118118 <note>
119119 <para>
134134 Be aware that by default <filename>autogen.sh</filename> and
135135 <filename>configure</filename> would choose <filename class="directory">/usr/local</filename>
136136 as a default location. One would need to add
137 <filename class="directory">/usr/local/lib/gstreamer-0.10</filename>
137 <filename class="directory">/usr/local/lib/gstreamer-1.0</filename>
138138 to <symbol>GST_PLUGIN_PATH</symbol> in order to make the new plugin
139 show up in gstreamer.
139 show up in a gstreamer that's been installed from packages.
140 </para>
141 </note>
142 <note>
143 <para>
144 FIXME: this section is slightly outdated. gst-template is still useful
145 as an example for a minimal plugin build system skeleton. However, for
146 creating elements the tool gst-element-maker from gst-plugins-bad is
147 recommended these days.
140148 </para>
141149 </note>
142150 </sect1>
205213 <programlisting><!-- example-begin boilerplate.c a -->
206214 #include "filter.h"
207215
208 GST_BOILERPLATE (GstMyFilter, gst_my_filter, GstElement, GST_TYPE_ELEMENT);
216 G_DEFINE_TYPE (GstMyFilter, gst_my_filter, GST_TYPE_ELEMENT);
209217 <!-- example-end boilerplate.c a --></programlisting>
210218 </sect1>
211219
212220 <!-- ############ sect1 ############# -->
213221
214222 <sect1 id="section-boiler-details">
215 <title>GstElementDetails</title>
216 <para>
217 The GstElementDetails structure provides a hierarchical type for element
218 information. The entries are:
223 <title>Element metadata</title>
224 <para>
225 The Element metadata provides extra element information. It is configured
226 with <function>gst_element_class_set_metadata</function> or
227 <function>gst_element_class_set_static_metadata</function> which takes the
228 following parameters:
219229 </para>
220230 <itemizedlist>
221231 <listitem><para>
233243 <para>
234244 For example:
235245 </para>
236 <programlisting><!-- example-begin boilerplate.c b -->
237 static const GstElementDetails my_filter_details = {
246 <programlisting>
247 gst_element_class_set_static_metadata (klass,
238248 "An example plugin",
239249 "Example/FirstExample",
240250 "Shows the basic structure of a plugin",
241 "your name &lt;your.name@your.isp&gt;"
242 };
243 <!-- example-end boilerplate.c b --></programlisting>
251 "your name &lt;your.name@your.isp&gt;");
252 </programlisting>
244253 <para>
245254 The element details are registered with the plugin during
246 the <function>_base_init ()</function> function, which is part of
247 the GObject system. The <function>_base_init ()</function> function
255 the <function>_class_init ()</function> function, which is part of
256 the GObject system. The <function>_class_init ()</function> function
248257 should be set for this GObject in the function where you register
249258 the type with GLib.
250259 </para>
251260 <programlisting><!-- example-begin boilerplate.c c -->
252261 static void
253 gst_my_filter_base_init (gpointer klass)
262 gst_my_filter_class_init (GstMyFilterClass * klass)
254263 {
255264 GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
256265 <!-- example-end boilerplate.c c -->
257 static const GstElementDetails my_filter_details = {
258 [..]
259 };
260
261266 [..]<!-- example-begin boilerplate.c d -->
262 gst_element_class_set_details (element_class, &amp;my_filter_details);
267 gst_element_class_set_static_metadata (element_klass,
268 "An example plugin",
269 "Example/FirstExample",
270 "Shows the basic structure of a plugin",
271 "your name &lt;your.name@your.isp&gt;");
263272 <!-- example-end boilerplate.c d -->
264273 }
265274 </programlisting>
316325 </programlisting>
317326 <para>
318327 Those pad templates are registered during the
319 <function>_base_init ()</function> function. Pads are created from these
320 templates in the element's <function>_init ()</function> function using
321 <function>gst_pad_new_from_template ()</function>. The template can be
322 retrieved from the element class using
323 <function>gst_element_class_get_pad_template ()</function>. See below
324 for more details on this. In order to create a new pad from this
325 template using <function>gst_pad_new_from_template ()</function>, you
328 <function>_class_init ()</function> function with the
329 <function>gst_element_class_add_pad_template ()</function>. For this
330 function you need a handle the the <classname>GstPadTemplate</classname>
331 which you can create from the static pad template with
332 <function>gst_static_pad_template_get ()</function>. See below for more
333 details on this.
334 </para>
335 <para>
336 Pads are created from these static templates in the element's
337 <function>_init ()</function> function using
338 <function>gst_pad_new_from_static_template ()</function>.
339 In order to create a new pad from this
340 template using <function>gst_pad_new_from_static_template ()</function>, you
326341 will need to declare the pad template as a global variable. More on
327342 this subject in <xref linkend="chapter-building-pads"/>.
328343 </para>
331346 src_factory = [..];
332347
333348 static void
334 gst_my_filter_base_init (gpointer klass)
349 gst_my_filter_class_init (GstMyFilterClass * klass)
335350 {
336351 GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
337352 [..]
344359 <!-- example-end boilerplate.c g -->
345360 <!-- example-begin boilerplate.c h --><!--
346361 static void
347 gst_my_filter_class_init (GstMyFilterClass * klass)
348 {
349 }
350
351 static void
352362 gst_my_filter_init (GstMyFilter * filter)
353363 {
354364 }
359369 The last argument in a template is its type
360370 or list of supported types. In this example, we use 'ANY', which means
361371 that this element will accept all input. In real-life situations, you
362 would set a mimetype and optionally a set of properties to make sure
372 would set a media type and optionally a set of properties to make sure
363373 that only supported input will come in. This representation should be
364 a string that starts with a mimetype, then a set of comma-separates
374 a string that starts with a media type, then a set of comma-separates
365375 properties with their supported values. In case of an audio filter that
366376 supports raw integer 16-bit audio, mono or stereo at any samplerate, the
367377 correct template would look like this:
396406 <sect1 id="section-boiler-constructors">
397407 <title>Constructor Functions</title>
398408 <para>
399 Each element has three functions which are used for construction of an
400 element. These are the <function>_base_init()</function> function which
401 is meant to initialize class and child class properties during each new
402 child class creation; the <function>_class_init()</function> function,
409 Each element has two functions which are used for construction of an
410 element. The <function>_class_init()</function> function,
403411 which is used to initialise the class only once (specifying what signals,
404412 arguments and virtual functions the class has and setting up global
405413 state); and the <function>_init()</function> function, which is used to
1313 #include "init.func"
1414 #include "caps.func"
1515 static gboolean
16 gst_my_filter_event (GstPad * pad, GstEvent * event)
16 gst_my_filter_event (GstPad * pad, GstObject * parent, GstEvent * event)
1717 {
18 return gst_pad_event_default (pad, event);
18 return gst_pad_event_default (pad, parent, event);
1919 }
2020 --><!-- example-end chain.c a -->
2121 <!-- example-begin chain.c b -->
22 static GstFlowReturn gst_my_filter_chain (GstPad *pad,
23 GstObject *parent,
24 GstBuffer *buf);
25
26 [..]
27
28 static void
29 gst_my_filter_init (GstMyFilter * filter)
30 {
31 [..]
32 /* configure chain function on the pad before adding
33 * the pad to the element */
34 gst_pad_set_chain_function (filter-&gt;sinkpad,
35 gst_my_filter_chain);
36 [..]
37 }
38
2239 static GstFlowReturn
2340 gst_my_filter_chain (GstPad *pad,
41 GstObject *parent,
2442 GstBuffer *buf)
2543 {
26 GstMyFilter *filter = GST_MY_FILTER (GST_OBJECT_PARENT (pad));
44 GstMyFilter *filter = GST_MY_FILTER (parent);
2745
2846 if (!filter->silent)
29 g_print ("Have data of size %u bytes!\n", GST_BUFFER_SIZE (buf));
47 g_print ("Have data of size %" G_GSIZE_FORMAT" bytes!\n",
48 gst_buffer_get_size (buf));
3049
3150 return gst_pad_push (filter->srcpad, buf);
3251 }
4362 <para>
4463 Obviously, the above doesn't do much useful. Instead of printing that the
4564 data is in, you would normally process the data there. Remember, however,
46 that buffers are not always writeable. In more advanced elements (the ones
47 that do event processing), you may want to additionally specify an event
48 handling function, which will be called when stream-events are sent (such
49 as end-of-stream, newsegment, tags, etc.).
65 that buffers are not always writeable.
66 </para>
67 <para>
68 In more advanced elements (the ones that do event processing), you may want
69 to additionally specify an event handling function, which will be called
70 when stream-events are sent (such as caps, end-of-stream, newsegment, tags, etc.).
5071 </para>
5172 <programlisting>
5273 static void
5475 {
5576 [..]
5677 gst_pad_set_event_function (filter-&gt;sinkpad,
57 gst_my_filter_event);
78 gst_my_filter_sink_event);
5879 [..]
5980 }
6081 <!-- example-begin chain2.c a --><!--
7697 --><!-- example-end chain.func a -->
7798 <!-- example-begin chain.func b -->
7899 static gboolean
79 gst_my_filter_event (GstPad *pad,
80 GstEvent *event)
100 gst_my_filter_sink_event (GstPad *pad,
101 GstObject *parent,
102 GstEvent *event)
81103 {
82 GstMyFilter *filter = GST_MY_FILTER (GST_OBJECT_PARENT (pad));
104 GstMyFilter *filter = GST_MY_FILTER (parent);
83105
84106 switch (GST_EVENT_TYPE (event)) {
107 case GST_EVENT_CAPS:
108 /* we should handle the format here */
109 break;
85110 case GST_EVENT_EOS:
86111 /* end-of-stream, we should close down all stream leftovers here */
87112 gst_my_filter_stop_processing (filter);
90115 break;
91116 }
92117
93 return gst_pad_event_default (pad, event);
118 return gst_pad_event_default (pad, parent, event);
94119 }
95120
96121 static GstFlowReturn
97122 gst_my_filter_chain (GstPad *pad,
123 GstObject *parent,
98124 GstBuffer *buf)
99125 {
100 GstMyFilter *filter = GST_MY_FILTER (gst_pad_get_parent (pad));
126 GstMyFilter *filter = GST_MY_FILTER (parent);
101127 GstBuffer *outbuf;
102128
103129 outbuf = gst_my_filter_process_data (filter, buf);
0
1 <!-- ############ chapter ############# -->
2
3 <chapter id="chapter-building-eventfn">
4 <title>The event function</title>
5 <para>
6 The event function notifies you of special events that happen in
7 the datastream (such as caps, end-of-stream, newsegment, tags, etc.).
8 Events can travel both upstream and downstream, so you can receive them
9 on sink pads as well as source pads.
10 </para>
11 <para>
12 Below follows a very simple event function that we install on the sink
13 pad of our element.
14 </para>
15 <programlisting><!-- example-begin event.c a --><!--
16 #include "init.func"
17 #include "caps.func"
18 static gboolean
19 gst_my_filter_event (GstPad * pad, GstObject * parent, GstEvent * event)
20 {
21 return gst_pad_event_default (pad, parent, event);
22 }
23 --><!-- example-end event.c a -->
24 static gboolean gst_my_filter_sink_event (GstPad *pad,
25 GstObject *parent,
26 GstBuffer *buf);
27
28 [..]
29
30 static void
31 gst_my_filter_init (GstMyFilter * filter)
32 {
33 [..]
34 /* configure event function on the pad before adding
35 * the pad to the element */
36 gst_pad_set_event_function (filter-&gt;sinkpad,
37 gst_my_filter_sink_event);
38 [..]
39 }
40
41 static gboolean
42 gst_my_filter_sink_event (GstPad *pad,
43 GstObject *parent,
44 GstEvent *event)
45 {
46 gboolean ret;
47 GstMyFilter *filter = GST_MY_FILTER (parent);
48
49 switch (GST_EVENT_TYPE (event)) {
50 case GST_EVENT_CAPS:
51 /* we should handle the format here */
52
53 /* push the event downstream */
54 ret = gst_pad_push_event (filter->srcpad, event);
55 break;
56 case GST_EVENT_EOS:
57 /* end-of-stream, we should close down all stream leftovers here */
58 gst_my_filter_stop_processing (filter);
59
60 ret = gst_pad_event_default (pad, parent, event);
61 break;
62 default:
63 /* just call the default handler */
64 ret = gst_pad_event_default (pad, parent, event);
65 break;
66 }
67 return ret;
68 }
69 </programlisting>
70 <para>
71 It is a good idea to call the default event handler
72 <function>gst_pad_event_default ()</function> for unknown events.
73 Depending on the event type, the default handler will forward
74 the event or simply unref it. The CAPS event is by default not
75 forwarded so we need to do this in the event handler ourselves.
76 </para>
77 </chapter>
77 of your element, and that makes them a very important item in the process
88 of element creation. In the boilerplate code, we have seen how static pad
99 templates take care of registering pad templates with the element class.
10 Here, we will see how to create actual elements, use a <function>_setcaps
11 ()</function>-functions to configure for a particular format and how to
10 Here, we will see how to create actual elements, use an <function>_event
11 ()</function>-function to configure for a particular format and how to
1212 register functions to let data flow through the element.
1313 </para>
1414 <para>
1515 In the element <function>_init ()</function> function, you create the pad
1616 from the pad template that has been registered with the element class in
17 the <function>_base_init ()</function> function. After creating the pad,
18 you have to set a <function>_setcaps ()</function> function pointer and
19 optionally a <function>_getcaps ()</function> function pointer. Also, you
20 have to set a <function>_chain ()</function> function pointer.
17 the <function>_class_init ()</function> function. After creating the pad,
18 you have to set a <function>_chain ()</function> function pointer that will
19 receive and process the input data on the sinkpad.
20 You can optionally also set an <function>_event ()</function> function
21 pointer and a <function>_query ()</function> function pointer.
2122 Alternatively, pads can also operate in looping mode, which means that they
2223 can pull data themselves. More on this topic later. After that, you have
2324 to register the pad with the element. This happens like this:
2930 static GstStateChangeReturn
3031 gst_my_filter_change_state (GstElement * element, GstStateChange transition);
3132
32 GST_BOILERPLATE (GstMyFilter, gst_my_filter, GstElement, GST_TYPE_ELEMENT);
33 G_DEFINE_TYPE (GstMyFilter, gst_my_filter, GST_TYPE_ELEMENT);
3334
3435 static void
35 gst_my_filter_base_init (gpointer klass)
36 gst_my_filter_class_init (gpointer klass)
3637 {
3738 GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
38 static GstElementDetails my_filter_details = {
39 "An example plugin",
40 "Example/FirstExample",
41 "Shows the basic structure of a plugin",
42 "your name <your.name@your.isp>"
43 };
44 static GstStaticPadTemplate sink_factory =
39 static GstStaticPadTemplate sink_template =
4540 GST_STATIC_PAD_TEMPLATE (
4641 "sink",
4742 GST_PAD_SINK,
4843 GST_PAD_ALWAYS,
4944 GST_STATIC_CAPS ("ANY")
5045 );
51 static GstStaticPadTemplate src_factory =
46 static GstStaticPadTemplate src_template =
5247 GST_STATIC_PAD_TEMPLATE (
5348 "src",
5449 GST_PAD_SRC,
5651 GST_STATIC_CAPS ("ANY")
5752 );
5853
59 gst_element_class_set_details (element_class, &my_filter_details);
54 gst_element_class_set_static_metadata (element_class,
55 "An example plugin",
56 "Example/FirstExample",
57 "Shows the basic structure of a plugin",
58 "your name <your.name@your.isp>");
59
6060 gst_element_class_add_pad_template (element_class,
61 gst_static_pad_template_get (&src_factory));
61 gst_static_pad_template_get (&src_template));
6262 gst_element_class_add_pad_template (element_class,
63 gst_static_pad_template_get (&sink_factory));
63 gst_static_pad_template_get (&sink_template));
6464 }
6565
6666 static void
6969 GST_ELEMENT_CLASS (klass)->change_state = gst_my_filter_change_state;
7070 }
7171 --><!-- example-end init.func a -->
72 <!-- example-begin init.func b -->
73 static gboolean gst_my_filter_setcaps (GstPad *pad,
74 GstCaps *caps);
75 static GstFlowReturn gst_my_filter_chain (GstPad *pad,
76 GstBuffer *buf);
77 <!-- example-end init.func b -->
7872 <!-- example-begin init.func c --><!--
79 static GstCaps * gst_my_filter_getcaps (GstPad *pad);
80 static gboolean gst_my_filter_event (GstPad *pad,
81 GstEvent *event);
73 static GstFlowReturn gst_my_filter_chain (GstPad *pad,
74 GstObject *parent,
75 GstBuffer *buf);
76 static gboolean gst_my_filter_sink_event (GstPad *pad,
77 GstObject *parent,
78 GstEvent *event);
79 static gboolean gst_my_filter_src_query (GstPad *pad,
80 GstObject *parent,
81 GstQuery *query);
82 static gboolean gst_my_filter_sink_query (GstPad *pad,
83 GstObject *parent,
84 GstQuery *query);
8285 --><!-- example-end init.func c -->
8386 <!-- example-begin init.func d -->
8487
8588 static void
86 gst_my_filter_init (GstMyFilter *filter, GstMyFilterClass *filter_klass)
89 gst_my_filter_init (GstMyFilter *filter)
8790 {
88 GstElementClass *klass = GST_ELEMENT_CLASS (filter_klass);
89
9091 /* pad through which data comes in to the element */
91 filter-&gt;sinkpad = gst_pad_new_from_template (
92 gst_element_class_get_pad_template (klass, "sink"), "sink");
93 gst_pad_set_setcaps_function (filter-&gt;sinkpad, gst_my_filter_setcaps);
94 gst_pad_set_chain_function (filter-&gt;sinkpad, gst_my_filter_chain);
92 filter-&gt;sinkpad = gst_pad_new_from_static_template (
93 &amp;sink_template, "sink");
94 /* pads are configured here with gst_pad_set_*_function () */
9595 <!-- example-end init.func d -->
9696 <!-- example-begin init.func e --><!--
97 gst_pad_set_getcaps_function (filter-&gt;sinkpad, gst_my_filter_getcaps);
98 gst_pad_set_event_function (filter-&gt;sinkpad, gst_my_filter_event);
97 gst_pad_set_chain_function (filter-&gt;sinkpad, gst_my_filter_chain);
98 gst_pad_set_event_function (filter-&gt;sinkpad, gst_my_filter_sink_event);
99 gst_pad_set_query_function (filter-&gt;sinkpad, gst_my_filter_sink_query);
99100 --><!-- example-end init.func e -->
100101 <!-- example-begin init.func f -->
101102 gst_element_add_pad (GST_ELEMENT (filter), filter-&gt;sinkpad);
102103
103104 /* pad through which data goes out of the element */
104 filter-&gt;srcpad = gst_pad_new_from_template (
105 gst_element_class_get_pad_template (klass, "src"), "src");
105 filter-&gt;srcpad = gst_pad_new_from_static_template (
106 &amp;src_template, "src");
107 /* pads are configured here with gst_pad_set_*_function () */
106108 <!-- example-end init.func f -->
107109 <!-- example-begin init.func g --><!--
108 gst_pad_set_getcaps_function (filter-&gt;srcpad, gst_my_filter_getcaps);
110 gst_pad_set_query_function (filter-&gt;srcpad, gst_my_filter_src_query);
109111 --><!-- example-end init.func g -->
110112 <!-- example-begin init.func h -->
111113 gst_element_add_pad (GST_ELEMENT (filter), filter-&gt;srcpad);
115117 }
116118 <!-- example-end init.func h --></programlisting>
117119
118 <sect1 id="section-pads-linkfn" xreflabel="The link function">
119 <title>The setcaps-function</title>
120 <para>
121 The <function>_setcaps ()</function>-function is called during caps
122 negotiation, which is discussed in great detail in <xref
123 linkend="chapter-negotiation"/>. This is the process where the linked
124 pads decide on the streamtype that will transfer between them. A full
125 list of type-definitions can be found in <xref
126 linkend="chapter-building-types"/>. A <function>_link ()</function>
127 receives a pointer to a <ulink type="http"
128 url="../../gstreamer/html/gstreamer-GstCaps.html"><classname>GstCaps</classname></ulink>
129 struct that defines the proposed streamtype, and can respond with
130 either <quote>yes</quote> (<symbol>TRUE</symbol>) or <quote>no</quote>
131 (<symbol>FALSE</symbol>). If the element responds positively towards
132 the streamtype, that type will be used on the pad. An example:
133 </para>
134 <programlisting><!-- example-begin caps.func a -->
135 static gboolean
136 gst_my_filter_setcaps (GstPad *pad,
137 GstCaps *caps)
138 {
139 GstStructure *structure = gst_caps_get_structure (caps, 0);
140 GstMyFilter *filter = GST_MY_FILTER (GST_OBJECT_PARENT (pad));
141 const gchar *mime;
142
143 /* Since we're an audio filter, we want to handle raw audio
144 * and from that audio type, we need to get the samplerate and
145 * number of channels. */
146 mime = gst_structure_get_name (structure);
147 if (strcmp (mime, "audio/x-raw") != 0) {
148 GST_WARNING ("Wrong mimetype %s provided, we only support %s",
149 mime, "audio/x-raw");
150 return FALSE;
151 }
152
153 /* we're a filter and don't touch the properties of the data.
154 * That means we can set the given caps unmodified on the next
155 * element, and use that negotiation return value as ours. */
156 if (!gst_pad_set_caps (filter-&gt;srcpad, caps))
157 return FALSE;
158
159 /* Capsnego succeeded, get the stream properties for internal
160 * usage and return success. */
161 gst_structure_get_int (structure, "rate", &amp;filter-&gt;samplerate);
162 gst_structure_get_int (structure, "channels", &amp;filter-&gt;channels);
163
164 g_print ("Caps negotiation succeeded with %d Hz @ %d channels\n",
165 filter-&gt;samplerate, filter-&gt;channels);
166
167 return TRUE;
168 }
169 <!-- example-end caps.func a -->
170 <!-- example-begin caps.func b --><!--
171 static GstCaps *
172 gst_my_filter_getcaps (GstPad * pad)
173 {
174 GstMyFilter *filter = GST_MY_FILTER (GST_OBJECT_PARENT (pad));
175 GstPad *otherpad = (pad == filter-&gt;srcpad) ? filter-&gt;sinkpad :
176 filter-&gt;srcpad;
177 GstCaps *othercaps = gst_pad_get_allowed_caps (otherpad);
178
179 return othercaps;
180 }
181 --><!-- example-end caps.func b --></programlisting>
182 <para>
183 In here, we check the mimetype of the provided caps. Normally, you don't
184 need to do that in your own plugin/element, because the core does that
185 for you. We simply use it to show how to retrieve the mimetype from a
186 provided set of caps. Types are stored in <ulink type="http"
187 url="../../gstreamer/html/gstreamer-GstStructure.html"><classname>GstStructure
188 </classname></ulink> internally. A <ulink
189 type="http" url="../../gstreamer/html/gstreamer-GstCaps.html"><classname>GstCaps
190 </classname></ulink> is nothing more than a small
191 wrapper for 0 or more structures/types. From the structure, you can also
192 retrieve properties, as is shown above with the function
193 <function>gst_structure_get_int ()</function>.
194 </para>
195 <para>
196 If your <function>_link ()</function> function does not need to perform
197 any specific operation (i.e. it will only forward caps), you can set it
198 to <function>gst_pad_proxy_link ()</function>. This is a link forwarding
199 function implementation provided by the core. It is useful for elements
200 such as <classname>identity</classname>.
201 </para>
202 </sect1>
203120 <!-- example-begin pads.c --><!--
204121 #include "init.func"
205 #include "caps.func"
206122
207123 static gboolean
208 gst_my_filter_event (GstPad * pad, GstEvent * event)
124 gst_my_filter_event (GstPad * pad, GstObject * parent, GstEvent * event)
209125 {
210 return gst_pad_event_default (pad, event);
126 return gst_pad_event_default (pad, parent, event);
211127 }
212128
213129 static GstFlowReturn
214 gst_my_filter_chain (GstPad * pad, GstBuffer * buf)
130 gst_my_filter_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
215131 {
216 return gst_pad_push (GST_MY_FILTER (GST_OBJECT_PARENT (pad))->srcpad, buf);
132 return gst_pad_push (GST_MY_FILTER (parent)->srcpad, buf);
217133 }
218134
219135 static GstStateChangeReturn
00 <!-- ############ chapter ############# -->
11
2 <chapter id="chapter-building-args" xreflabel="Adding Arguments">
3 <title>Adding Arguments</title>
2 <chapter id="chapter-building-args" xreflabel="Adding Properties">
3 <title>Adding Properties</title>
44 <para>
55 The primary and most important way of controlling how an element behaves,
66 is through GObject properties. GObject properties are defined in the
1111 and can then fill in the value or take action required for that property
1212 to change value internally.
1313 </para>
14 <para>
15 You probably also want to keep an instance variable around
16 with the currently configured value of the property that you use in the
17 get and set functions.
18 Note that <classname>GObject</classname> will not automatically set your
19 instance variable to the default value, you will have to do that in the
20 <function>_init ()</function> function of your element.
21 </para>
1422 <programlisting><!-- example-begin properties.c a --><!--
1523 #include "filter.h"
16 GST_BOILERPLATE (GstMyFilter, gst_my_filter, GstElement, GST_TYPE_ELEMENT);
24 G_DEFINE_TYPE (GstMyFilter, gst_my_filter, GST_TYPE_ELEMENT);
1725 static void
18 gst_my_filter_base_init (gpointer klass)
26 gst_my_filter_class_init (gpointer klass)
1927 {
2028 }
2129 static void
2634 <!-- example-begin properties.c b -->
2735 /* properties */
2836 enum {
29 ARG_0,
30 ARG_SILENT
37 PROP_0,
38 PROP_SILENT
3139 /* FILL ME */
3240 };
3341
4553 {
4654 GObjectClass *object_class = G_OBJECT_CLASS (klass);
4755
56 /* define virtual function pointers */
57 object_class->set_property = gst_my_filter_set_property;
58 object_class->get_property = gst_my_filter_get_property;
59
4860 /* define properties */
49 g_object_class_install_property (object_class, ARG_SILENT,
61 g_object_class_install_property (object_class, PROP_SILENT,
5062 g_param_spec_boolean ("silent", "Silent",
5163 "Whether to be very verbose or not",
5264 FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
53
54 /* define virtual function pointers */
55 object_class->set_property = gst_my_filter_set_property;
56 object_class->get_property = gst_my_filter_get_property;
5765 }
5866
5967 static void
6573 GstMyFilter *filter = GST_MY_FILTER (object);
6674
6775 switch (prop_id) {
68 case ARG_SILENT:
76 case PROP_SILENT:
6977 filter->silent = g_value_get_boolean (value);
7078 g_print ("Silent argument was changed to %s\n",
7179 filter->silent ? "true" : "false");
8593 GstMyFilter *filter = GST_MY_FILTER (object);
8694
8795 switch (prop_id) {
88 case ARG_SILENT:
96 case PROP_SILENT:
8997 g_value_set_boolean (value, filter->silent);
9098 break;
9199 default:
98106 #include "register.func"
99107 --><!-- example-end properties.c c --></programlisting>
100108 <para>
101 The above is a very simple example of how arguments are used. Graphical
102 applications - for example GStreamer Editor - will use these properties
103 and will display a user-controllable widget with which these properties
104 can be changed. This means that - for the property to be as user-friendly
109 The above is a very simple example of how properties are used. Graphical
110 applications will use these properties and will display a
111 user-controllable widget with which these properties can be changed.
112 This means that - for the property to be as user-friendly
105113 as possible - you should be as exact as possible in the definition of the
106114 property. Not only in defining ranges in between which valid properties
107115 can be located (for integers, floats, etc.), but also in using very
149157 gst_videotestsrc_class_init (GstvideotestsrcClass *klass)
150158 {
151159 [..]
152 g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_TYPE,
160 g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PATTERN,
153161 g_param_spec_enum ("pattern", "Pattern",
154162 "Type of test pattern to generate",
155 GST_TYPE_VIDEOTESTSRC_PATTERN, 1, G_PARAM_READWRITE |
156 G_PARAM_STATIC_STRINGS));
163 GST_TYPE_VIDEOTESTSRC_PATTERN, GST_VIDEOTESTSRC_SMPTE,
164 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
157165 [..]
158166 }
159167 </programlisting>
8585 GstElement or some other class not built on top of a base class, you
8686 will most likely have to implement your own state change function to
8787 be notified of state changes. This is definitively necessary if your
88 plugin is a decoder or an encoder, as there are no base classes for
89 decoders or encoders yet.
88 plugin is a demuxer or a muxer, as there are no base classes for
89 muxers or demuxers yet.
9090 </para>
9191 <para>
9292 An element can be notified of state changes through a virtual function
33 <title>Building a Test Application</title>
44 <para>
55 Often, you will want to test your newly written plugin in an as small
6 setting as possible. Usually, <filename>gst-launch</filename> is a
6 setting as possible. Usually, <filename>gst-launch-1.0</filename> is a
77 good first step at testing a plugin. If you have not installed your
88 plugin in a directory that GStreamer searches, then you will need to
99 set the plugin path. Either set GST_PLUGIN_PATH to the directory
1111 If you based your plugin off of the gst-plugin template, then this
1212 will look something like
1313 <command>
14 gst-launch --gst-plugin-path=$HOME/gst-template/gst-plugin/src/.libs TESTPIPELINE
14 gst-launch-1.0 --gst-plugin-path=$HOME/gst-template/gst-plugin/src/.libs TESTPIPELINE
1515 </command>
1616 However, you will often need more
17 testing features than gst-launch can provide, such as seeking, events,
17 testing features than gst-launch-1.0 can provide, such as seeking, events,
1818 interactivity and more. Writing your own small testing program is the
1919 easiest way to accomplish this. This section explains - in a few words
2020 - how to do that. For a complete application development guide, see the
2525 <para>
2626 At the start, you need to initialize the &GStreamer; core library by
2727 calling <function>gst_init ()</function>. You can alternatively call
28 <function>gst_init_with_popt_tables ()</function>, which will return
29 a pointer to popt tables. You can then use libpopt to handle the
30 given argument table, and this will finish the &GStreamer; initialization.
28 <function>gst_init_get_option_group ()</function>, which will return
29 a pointer to GOptionGroup. You can then use GOption to handle the
30 initialization, and this will finish the &GStreamer; initialization.
3131 </para>
3232
3333 <para>
4242 application. Also, you can use a <classname>fakesink</classname>
4343 element at the end of the pipeline to dump your data to the stdout
4444 (in order to do this, set the <function>dump</function> property to
45 TRUE). Lastly, you can use the <classname>efence</classname> element
46 (indeed, an eletric fence memory debugger wrapper element) to check
47 for memory errors.
48 </para>
49
50 <para>
51 During linking, your test application can use fixation or filtered caps
45 TRUE). Lastly, you can use valgrind to check for memory errors.
46 </para>
47
48 <para>
49 During linking, your test application can use filtered caps
5250 as a way to drive a specific type of data to or from your element. This
5351 is a very simple and effective way of checking multiple types of input
5452 and output in your element.
5553 </para>
5654
5755 <para>
58 Running the pipeline happens through the <function>gst_bin_iterate ()</function>
59 function. Note that during running, you should connect to at least the
60 <quote>error</quote> and <quote>eos</quote> signals on the pipeline
56 Note that during running, you should listen for at least the
57 <quote>error</quote> and <quote>eos</quote> messages on the bus
6158 and/or your plugin/element to check for correct handling of this. Also,
6259 you should add events into the pipeline and make sure your plugin handles
6360 these correctly (with respect to clocking, internal caching, etc.).
119116 GstElement *convert1, *convert2, *resample;
120117 GMainLoop *loop;
121118 GstBus *bus;
119 guint watch_id;
122120
123121 /* initialization */
124122 gst_init (&amp;argc, &amp;argv);
134132 /* watch for messages on the pipeline's bus (note that this will only
135133 * work like this when a GLib main loop is running) */
136134 bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
137 gst_bus_add_watch (bus, bus_call, loop);
135 watch_id = gst_bus_add_watch (bus, bus_call, loop);
138136 gst_object_unref (bus);
139137
140138 filesrc = gst_element_factory_make ("filesrc", "my_filesource");
153151 * depending on the environment (output used, sound card, driver etc.) */
154152 convert2 = gst_element_factory_make ("audioconvert", "audioconvert2");
155153 resample = gst_element_factory_make ("audioresample", "audioresample");
156 sink = gst_element_factory_make ("osssink", "audiosink");
154 sink = gst_element_factory_make ("pulsesink", "audiosink");
157155
158156 if (!sink || !decoder) {
159157 g_print ("Decoder or output could not be found - check your install\n");
164162 return -1;
165163 } else if (!filter) {
166164 g_print ("Your self-written filter could not be found. Make sure it "
167 "is installed correctly in $(libdir)/gstreamer-0.10/ or "
168 "~/.gstreamer-0.10/plugins/ and that gst-inspect-0.10 lists it. "
169 "If it doesn't, check with 'GST_DEBUG=*:2 gst-inspect-0.10' for "
165 "is installed correctly in $(libdir)/gstreamer-1.0/ or "
166 "~/.gstreamer-1.0/plugins/ and that gst-inspect-1.0 lists it. "
167 "If it doesn't, check with 'GST_DEBUG=*:2 gst-inspect-1.0' for "
170168 "the reason why it is not being loaded.");
171169 return -1;
172170 }
208206 /* clean up */
209207 gst_element_set_state (pipeline, GST_STATE_NULL);
210208 gst_object_unref (pipeline);
209 g_source_remove (watch_id);
210 g_main_loop_unref (loop);
211211
212212 return 0;
213213 }
3838 processes a stream of data. Producers and consumers of data are called
3939 <emphasis>source</emphasis> and <emphasis>sink</emphasis> elements,
4040 respectively. <emphasis>Bin</emphasis> elements contain other elements.
41 One type of bin is responsible for scheduling the elements that they
41 One type of bin is responsible for synchronization of the elements that they
4242 contain so that data flows smoothly. Another type of bin, called
4343 <emphasis>autoplugger</emphasis> elements, automatically add other
4444 elements to the bin and links them together so that they act as a
4848 The plugin mechanism is used everywhere in &GStreamer;, even if only the
4949 standard packages are being used. A few very basic functions reside in the
5050 core library, and all others are implemented in plugins. A plugin registry
51 is used to store the details of the plugins in an XML file. This way, a
52 program using &GStreamer; does not have to load all plugins to determine
53 which are needed. Plugins are only loaded when their provided elements are
54 requested.
51 is used to store the details of the plugins in an binary registry file.
52 This way, a program using &GStreamer; does not have to load all plugins to
53 determine which are needed. Plugins are only loaded when their provided
54 elements are requested.
5555 </para>
5656 <para>
5757 See the &GstLibRef; for the current implementation details of <ulink
104104 <!-- ############ sect1 ############# -->
105105
106106 <sect1 id="section-basics-data" xreflabel="Data, Buffers and Events">
107 <title>Data, Buffers and Events</title>
107 <title>GstMiniObject, Buffers and Events</title>
108108 <para>
109109 All streams of data in &GStreamer; are chopped up into chunks that are
110110 passed from a source pad on one element to a sink pad on another element.
111 <emphasis>Data</emphasis> are structures used to hold these chunks of
112 data.
113 </para>
114 <para>
115 Data contains the following important types:
111 <emphasis>GstMiniObject</emphasis> is the structure used to hold these
112 chunks of data.
113 </para>
114 <para>
115 GstMiniObject contains the following important types:
116116 <itemizedlist>
117117 <listitem>
118118 <para>
119 An exact type indicating what type of data (control, content, ...)
120 this Data is.
119 An exact type indicating what type of data (event, buffer, ...)
120 this GstMiniObject is.
121121 </para>
122122 </listitem>
123123 <listitem>
124124 <para>
125125 A reference count indicating the number of elements currently
126 holding a reference to the buffer. When the buffer reference count
127 falls to zero, the buffer will be unlinked, and its memory will be
126 holding a reference to the miniobject. When the reference count
127 falls to zero, the miniobject will be disposed, and its memory will be
128128 freed in some sense (see below for more details).
129129 </para>
130130 </listitem>
131131 </itemizedlist>
132132 </para>
133133 <para>
134 There are two types of data defined: events (control) and buffers
135 (content).
134 For data transport, there are two types of GstMiniObject defined:
135 events (control) and buffers (content).
136136 </para>
137137 <para>
138138 Buffers may contain any sort of data that the two linked pads
145145 <itemizedlist>
146146 <listitem>
147147 <para>
148 A pointer to the buffer's data.
149 </para>
150 </listitem>
151 <listitem>
152 <para>
153 An integer indicating the size of the buffer's data.
148 Pointers to one or more GstMemory objects. GstMemory objects are
149 refcounted objects that encapsulate a region of memory.
154150 </para>
155151 </listitem>
156152 <listitem>
166162 contain information on the state of the stream flowing between the two
167163 linked pads. Events will only be sent if the element explicitly supports
168164 them, else the core will (try to) handle the events automatically. Events
169 are used to indicate, for example, a clock discontinuity, the end of a
165 are used to indicate, for example, a media type, the end of a
170166 media stream or that the cache should be flushed.
171167 </para>
172168 <para>
219215 </para>
220216 <para>
221217 Another way an element might get specialized buffers is to
222 request them from a downstream peer. These are called
223 downstream-allocated buffers. Elements can ask a
224 peer connected to a source pad to create an empty buffer of
225 a given size. If a downstream element is able to create a
226 special buffer of the correct size, it will do so. Otherwise
227 &GStreamer; will automatically create a generic buffer instead.
228 The element that requested the buffer can then copy data into
229 the buffer, and push the buffer to the source pad it was
230 allocated from.
218 request them from a downstream peer through a GstBufferPool or
219 GstAllocator. Elements can ask a GstBufferPool or GstAllocator
220 from the downstream peer element. If downstream is able to provide
221 these objects, upstream can use them to allocate buffers.
231222 </para>
232223 <para>
233224 Many sink elements have accelerated methods for copying data
234225 to hardware, or have direct access to hardware. It is common
235 for these elements to be able to create downstream-allocated
236 buffers for their upstream peers. One such example is
226 for these elements to be able to create a GstBufferPool or
227 GstAllocator for their upstream peers. One such example is
237228 ximagesink. It creates buffers that contain XImages. Thus,
238229 when an upstream peer copies data into the buffer, it is copying
239230 directly into the XImage, enabling ximagesink to draw the
255246 <!-- ############ sect1 ############# -->
256247
257248 <sect1 id="section-basics-types" xreflabel="Types and Properties">
258 <title>Mimetypes and Properties</title>
249 <title>Media types and Properties</title>
259250 <para>
260251 &GStreamer; uses a type system to ensure that the data passed between
261252 elements is in a recognized format. The type system is also important
272263 <para>
273264 &GStreamer; already supports many basic media types. Following is a
274265 table of a few of the basic types used for buffers in
275 &GStreamer;. The table contains the name ("mime type") and a
266 &GStreamer;. The table contains the name ("media type") and a
276267 description of the type, the properties associated with the type, and
277268 the meaning of each property. A full list of supported types is
278269 included in <xref linkend="section-types-definitions"/>.
284275
285276 <thead>
286277 <row>
287 <entry>Mime Type</entry>
278 <entry>Media Type</entry>
288279 <entry>Description</entry>
289280 <entry>Property</entry>
290281 <entry>Property Type</entry>
2222 The pipeline design is made to have little overhead above what the
2323 applied filters induce. This makes &GStreamer; a good framework for
2424 designing even high-end audio applications which put high demands on
25 latency.
25 latency or performance.
2626 </para>
2727
2828 <para>
3939 <para>
4040 The framework is based on plugins that will provide the various codec
4141 and other functionality. The plugins can be linked and arranged in
42 a pipeline. This pipeline defines the flow of the data. Pipelines can
43 also be edited with a GUI editor and saved as XML so that pipeline
44 libraries can be made with a minimum of effort.
42 a pipeline. This pipeline defines the flow of the data.
4543 </para>
4644
4745 <para>
4846 The &GStreamer; core function is to provide a framework for plugins,
49 data flow and media type handling/negotiation. It also provides an
50 API to write applications using the various plugins.
47 data flow, synchronization and media type handling/negotiation. It
48 also provides an API to write applications using the various plugins.
5149 </para>
5250 </sect1>
5351
288286 </listitem>
289287 <listitem>
290288 <para>
291 Adding new mime-types to the registry along with typedetect functions.
289 Adding new media types to the registry along with typedetect functions.
292290 This will allow your plugin to operate on a completely new media type.
293291 </para>
294292 </listitem>
3434 automatically.
3535 </para>
3636 <para>
37 The base class implement much of the synchronization logic that a
38 sink has to perform.
39 </para>
40 <para>
3741 The <classname>GstBaseSink</classname> base-class specifies some
3842 limitations on elements, though:
3943 </para>
4145 <listitem>
4246 <para>
4347 It requires that the sink only has one sinkpad. Sink elements that
44 need more than one sinkpad, cannot use this base-class.
45 </para>
46 </listitem>
47 <listitem>
48 <para>
49 The base-class owns the pad, and specifies caps negotiation, data
50 handling, pad allocation and such functions. If you need more than
51 the ones provided as virtual functions, then you cannot use this
52 base-class.
53 </para>
54 </listitem>
55 <listitem>
56 <para>
57 By implementing the <function>pad_allocate ()</function> function,
58 it is possible for upstream elements to use special memory, such
59 as memory on the X server side that only the sink can allocate, or
60 even hardware memory <function>mmap ()</function>'ed from the kernel.
61 Note that in almost all cases, you will want to subclass the
62 <classname>GstBuffer</classname> object, so that your own set of
63 functions will be called when the buffer loses its last reference.
48 need more than one sinkpad, must make a manager element with
49 multiple GstBaseSink elements inside.
6450 </para>
6551 </listitem>
6652 </itemizedlist>
6753 <para>
6854 Sink elements can derive from <classname>GstBaseSink</classname> using
69 the usual <classname>GObject</classname> type creation voodoo, or by
70 using the convenience macro <function>GST_BOILERPLATE ()</function>:
55 the usual <classname>GObject</classname> convenience macro
56 <function>G_DEFINE_TYPE ()</function>:
7157 </para>
7258 <programlisting>
73 GST_BOILERPLATE_FULL (GstMySink, gst_my_sink, GstBaseSink, GST_TYPE_BASE_SINK);
59 G_DEFINE_TYPE (GstMySink, gst_my_sink, GST_TYPE_BASE_SINK);
7460
7561 [..]
7662
10894 <title>Writing an audio sink</title>
10995 <para>
11096 Essentially, audio sink implementations are just a special case of a
111 general sink. There are two audio base classes that you can choose to
97 general sink. An audio sink has the added complexity that it needs to
98 schedule playback of samples. It must match the clock selected in the
99 pipeline against the clock of the audio device and calculate and
100 compensate for drift and jitter.
101 </para>
102 <para>
103 There are two audio base classes that you can choose to
112104 derive from, depending on your needs:
113 <classname>GstBaseAudiosink</classname> and
114 <classname>GstAudioSink</classname>. The baseaudiosink provides full
105 <classname>GstAudioBasesink</classname> and
106 <classname>GstAudioSink</classname>. The audiobasesink provides full
115107 control over how synchronization and scheduling is handled, by using
116108 a ringbuffer that the derived class controls and provides. The
117 audiosink base-class is a derived class of the baseaudiosink,
109 audiosink base-class is a derived class of the audiobasesink,
118110 implementing a standard ringbuffer implementing default
119111 synchronization and providing a standard audio-sample clock. Derived
120112 classes of this base class merely need to provide a <function>_open
122114 ()</function> function implementation, and some optional functions.
123115 This should suffice for many sound-server output elements and even
124116 most interfaces. More demanding audio systems, such as Jack, would
125 want to implement the <classname>GstBaseAudioSink</classname>
117 want to implement the <classname>GstAudioBaseSink</classname>
126118 base-class.
127119 </para>
128120 <para>
242234 <listitem>
243235 <para>
244236 There is one and only one sourcepad. Source elements requiring
245 multiple sourcepads cannot use this base-class.
246 </para>
247 </listitem>
248 <listitem>
249 <para>
250 Since the base-class owns the pad and derived classes can only
251 control it as far as the virtual functions allow, you are limited
252 to the functionality provided by the virtual functions. If you need
253 more, you cannot use this base-class.
237 multiple sourcepads must implement a manager bin and use multiple
238 source elements internally or make a manager element that uses
239 a source element and a demuxer inside.
254240 </para>
255241 </listitem>
256242 </itemizedlist>
258244 It is possible to use special memory, such as X server memory pointers
259245 or <function>mmap ()</function>'ed memory areas, as data pointers in
260246 buffers returned from the <function>create()</function> virtual function.
261 In almost all cases, you will want to subclass
262 <classname>GstBuffer</classname> so that your own set of functions can
263 be called when the buffer is destroyed.
264247 </para>
265248
266249 <sect2 id="section-base-audiosrc" xreflabel="Writing an audio source">
274257 linkend="section-base-audiosink"/>; one is ringbuffer-based, and
275258 requires the derived class to take care of its own scheduling,
276259 synchronization and such. The other is based on this
277 <classname>GstBaseAudioSrc</classname> and is called
260 <classname>GstAudioBaseSrc</classname> and is called
278261 <classname>GstAudioSrc</classname>, and provides a simple
279262 <function>open ()</function>, <function>close ()</function> and
280263 <function>read ()</function> interface, which is rather simple to
2929 <listitem>
3030 <para>
3131 To embed an element, or a series of elements, into something that
32 looks and works like a simple element to the outside world.
32 looks and works like a simple element to the outside world. This
33 is particular handy for implementing sources and sink elements with
34 multiple pads.
3335 </para>
3436 </listitem>
3537 </itemizedlist>
88 and the N-to-1 element synchronizes those streams by
99 expected-timestamp-based logic. This means it lets all streams wait
1010 except for the one that provides the earliest next-expected timestamp.
11 When that stream has passwed one buffer, the next
11 When that stream has passed one buffer, the next
1212 earliest-expected-timestamp is calculated, and we start back where we
1313 were, until all streams have reached EOS. There is a helper base class,
1414 called <classname>GstCollectPads</classname>, that will help you to do
7171 {
7272 GstAviMux *mux = GST_AVI_MUX (gst_pad_get_parent (pad));
7373 GstStructure *str = gst_caps_get_structure (caps, 0);
74 const gchar *mime = gst_structure_get_name (str);
74 const gchar *media = gst_structure_get_name (str);
7575
7676 if (!strcmp (str, "audio/mpeg")) {
7777 /* get version, make sure it's 1, get layer, make sure it's 1-3,
1616 <!ENTITY BUILDING_DEBUG SYSTEM "building-debug.xml">
1717 <!ENTITY BUILDING_PADS SYSTEM "building-pads.xml">
1818 <!ENTITY BUILDING_CHAINFN SYSTEM "building-chainfn.xml">
19 <!ENTITY BUILDING_EVENTFN SYSTEM "building-eventfn.xml">
1920 <!ENTITY BUILDING_STATE SYSTEM "building-state.xml">
2021 <!ENTITY BUILDING_PROPS SYSTEM "building-props.xml">
2122 <!ENTITY BUILDING_SIGNALS SYSTEM "building-signals.xml">
2324
2425 <!-- Part 3: Advanced Filter Concepts -->
2526 <!ENTITY ADVANCED_NEGOTIATION SYSTEM "advanced-negotiation.xml">
27 <!ENTITY ADVANCED_ALLOCATION SYSTEM "advanced-allocation.xml">
2628 <!ENTITY ADVANCED_SCHEDULING SYSTEM "advanced-scheduling.xml">
2729 <!ENTITY ADVANCED_TYPES SYSTEM "advanced-types.xml">
2830 <!ENTITY ADVANCED_REQUEST SYSTEM "advanced-request.xml">
115117 &BUILDING_BOILER;
116118 &BUILDING_PADS;
117119 &BUILDING_CHAINFN;
120 &BUILDING_EVENTFN;
118121 &BUILDING_STATE;
119122 &BUILDING_PROPS;
120123 &BUILDING_SIGNALS;
137140 </partintro>
138141
139142 &ADVANCED_NEGOTIATION;
143 &ADVANCED_ALLOCATION;
140144 &ADVANCED_SCHEDULING;
141145 &ADVANCED_TYPES;
142146 &ADVANCED_REQUEST;
7171 </para>
7272 </authorblurb>
7373 </author>
74 <author>
75 <firstname>Wim</firstname>
76 <surname>Taymans</surname>
77 <authorblurb>
78 <para>
79 <email>wim.taymans@gmail.com</email>
80 </para>
81 </authorblurb>
82 </author>
7483 </authorgroup>
7584
7685 <legalnotice id="misc-legalnotice">
12821282 const gchar * description, const gchar * author)
12831283 {
12841284 g_return_if_fail (GST_IS_ELEMENT_CLASS (klass));
1285 g_return_if_fail (longname != NULL && *longname != '\0');
1286 g_return_if_fail (classification != NULL && *classification != '\0');
1287 g_return_if_fail (description != NULL && *description != '\0');
1288 g_return_if_fail (author != NULL && *author != '\0');
12851289
12861290 gst_structure_id_set ((GstStructure *) klass->metadata,
12871291 GST_QUARK (ELEMENT_METADATA_LONGNAME), G_TYPE_STRING, longname,
13191323 GValue val = G_VALUE_INIT;
13201324
13211325 g_return_if_fail (GST_IS_ELEMENT_CLASS (klass));
1326 g_return_if_fail (longname != NULL && *longname != '\0');
1327 g_return_if_fail (classification != NULL && *classification != '\0');
1328 g_return_if_fail (description != NULL && *description != '\0');
1329 g_return_if_fail (author != NULL && *author != '\0');
13221330
13231331 g_value_init (&val, G_TYPE_STRING);
13241332
175175 g_list_free (factory->interfaces);
176176 factory->interfaces = NULL;
177177 }
178
179 #define CHECK_METADATA_FIELD(klass, name, key) \
180 G_STMT_START { \
181 const gchar *metafield = gst_element_class_get_metadata (klass, key); \
182 if (G_UNLIKELY (metafield == NULL || *metafield == '\0')) { \
183 g_warning ("Element factory metadata for '%s' has no valid %s field", name, key); \
184 goto detailserror; \
185 } \
186 } G_STMT_END;
178187
179188 /**
180189 * gst_element_register:
232241 /* provide info needed during class structure setup */
233242 g_type_set_qdata (type, __gst_elementclass_factory, factory);
234243 klass = GST_ELEMENT_CLASS (g_type_class_ref (type));
235 #if 0
236 /* FIXME */
237 if ((klass->details.longname == NULL) ||
238 (klass->details.klass == NULL) || (klass->details.author == NULL))
239 goto detailserror;
240 #endif
244
245 CHECK_METADATA_FIELD (klass, name, GST_ELEMENT_METADATA_LONGNAME);
246 CHECK_METADATA_FIELD (klass, name, GST_ELEMENT_METADATA_KLASS);
247 CHECK_METADATA_FIELD (klass, name, GST_ELEMENT_METADATA_DESCRIPTION);
248 CHECK_METADATA_FIELD (klass, name, GST_ELEMENT_METADATA_AUTHOR);
241249
242250 factory->type = type;
243251 factory->metadata = gst_structure_copy ((GstStructure *) klass->metadata);
311319 return FALSE;
312320 }
313321
314 #if 0
315322 detailserror:
316323 {
317 GST_WARNING_OBJECT (factory,
318 "The GstElementDetails don't seem to have been set properly");
319324 gst_element_factory_cleanup (factory);
320325 return FALSE;
321326 }
322 #endif
323327 }
324328
325329 /**
5656 #define GST_PROXY_PAD_TARGET(pad) (GST_PAD_PEER (GST_PROXY_PAD_INTERNAL (pad)))
5757 #define GST_PROXY_PAD_INTERNAL(pad) (GST_PROXY_PAD_PRIVATE (pad)->internal)
5858
59 #define GST_PROXY_PAD_ACQUIRE_INTERNAL(pad, internal, retval) \
60 internal = \
61 GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD_CAST (pad))); \
62 if (internal == NULL) \
63 return retval;
64
65 #define GST_PROXY_PAD_RELEASE_INTERNAL(internal) gst_object_unref (internal);
66
5967 struct _GstProxyPadPrivate
6068 {
6169 GstPad *internal;
8492
8593 g_return_val_if_fail (GST_IS_PROXY_PAD (pad), NULL);
8694
87 internal = GST_PROXY_PAD_INTERNAL (pad);
95 GST_PROXY_PAD_ACQUIRE_INTERNAL (pad, internal, NULL);
96
8897 g_value_init (&v, GST_TYPE_PAD);
89 g_value_set_object (&v, internal);
98 g_value_take_object (&v, internal);
9099 res = gst_iterator_new_single (GST_TYPE_PAD, &v);
91100 g_value_unset (&v);
92101
114123 g_return_val_if_fail (GST_IS_PROXY_PAD (pad), GST_FLOW_ERROR);
115124 g_return_val_if_fail (GST_IS_BUFFER (buffer), GST_FLOW_ERROR);
116125
117 internal = GST_PROXY_PAD_INTERNAL (pad);
126 GST_PROXY_PAD_ACQUIRE_INTERNAL (pad, internal, GST_FLOW_NOT_LINKED);
118127 res = gst_pad_push (internal, buffer);
128 GST_PROXY_PAD_RELEASE_INTERNAL (internal);
119129
120130 return res;
121131 }
141151 g_return_val_if_fail (GST_IS_PROXY_PAD (pad), GST_FLOW_ERROR);
142152 g_return_val_if_fail (GST_IS_BUFFER_LIST (list), GST_FLOW_ERROR);
143153
144 internal = GST_PROXY_PAD_INTERNAL (pad);
154 GST_PROXY_PAD_ACQUIRE_INTERNAL (pad, internal, GST_FLOW_NOT_LINKED);
145155 res = gst_pad_push_list (internal, list);
156 GST_PROXY_PAD_RELEASE_INTERNAL (internal);
146157
147158 return res;
148159 }
170181 g_return_val_if_fail (GST_IS_PROXY_PAD (pad), GST_FLOW_ERROR);
171182 g_return_val_if_fail (buffer != NULL, GST_FLOW_ERROR);
172183
173 internal = GST_PROXY_PAD_INTERNAL (pad);
184 GST_PROXY_PAD_ACQUIRE_INTERNAL (pad, internal, GST_FLOW_NOT_LINKED);
174185 res = gst_pad_pull_range (internal, offset, size, buffer);
186 GST_PROXY_PAD_RELEASE_INTERNAL (internal);
175187
176188 return res;
177189 }
276288
277289 /* in both cases (SRC and SINK) we activate just the internal pad. The targets
278290 * will be activated later (or already in case of a ghost sinkpad). */
279 other = GST_PROXY_PAD_INTERNAL (pad);
291 GST_PROXY_PAD_ACQUIRE_INTERNAL (pad, other, FALSE);
280292 ret = gst_pad_activate_mode (other, GST_PAD_MODE_PUSH, active);
293 GST_PROXY_PAD_RELEASE_INTERNAL (other);
281294
282295 return ret;
283296 }
299312 * which will trigger gst_ghost_pad_activate_pull_default, which propagates even
300313 * further upstream */
301314 GST_LOG_OBJECT (pad, "pad is src, activate internal");
302 other = GST_PROXY_PAD_INTERNAL (pad);
315 GST_PROXY_PAD_ACQUIRE_INTERNAL (pad, other, FALSE);
303316 ret = gst_pad_activate_mode (other, GST_PAD_MODE_PULL, active);
317 GST_PROXY_PAD_RELEASE_INTERNAL (other);
304318 } else if (G_LIKELY ((other = gst_pad_get_peer (pad)))) {
305319 /* We are SINK, the ghostpad is SRC, we propagate the activation upstream
306320 * since we hold a pointer to the upstream peer. */
364378 (active ? "" : "de"), GST_DEBUG_PAD_NAME (pad));
365379
366380 /* just activate the internal pad */
367 other = GST_PROXY_PAD_INTERNAL (pad);
381 GST_PROXY_PAD_ACQUIRE_INTERNAL (pad, other, FALSE);
368382 ret = gst_pad_activate_mode (other, GST_PAD_MODE_PUSH, active);
383 GST_PROXY_PAD_RELEASE_INTERNAL (other);
369384
370385 return ret;
371386 }
385400 * activation function of the internal pad to propagate the activation
386401 * upstream */
387402 GST_LOG_OBJECT (pad, "pad is src, activate internal");
388 other = GST_PROXY_PAD_INTERNAL (pad);
403 GST_PROXY_PAD_ACQUIRE_INTERNAL (pad, other, FALSE);
389404 ret = gst_pad_activate_mode (other, GST_PAD_MODE_PULL, active);
405 GST_PROXY_PAD_RELEASE_INTERNAL (other);
390406 } else if (G_LIKELY ((other = gst_pad_get_peer (pad)))) {
391407 /* We are SINK and activated by the internal pad, propagate activation
392408 * upstream because we hold a ref to the upstream peer */
810826 g_return_val_if_fail (GST_PAD_CAST (gpad) != newtarget, FALSE);
811827 g_return_val_if_fail (newtarget != GST_PROXY_PAD_INTERNAL (gpad), FALSE);
812828
813 /* no need for locking, the internal pad's lifecycle is directly linked to the
814 * ghostpad's */
829 GST_OBJECT_LOCK (gpad);
815830 internal = GST_PROXY_PAD_INTERNAL (gpad);
816831
817832 if (newtarget)
820835 GST_DEBUG_OBJECT (gpad, "clearing target");
821836
822837 /* clear old target */
823 GST_OBJECT_LOCK (gpad);
824838 if ((oldtarget = GST_PROXY_PAD_TARGET (gpad))) {
825839 GST_OBJECT_UNLOCK (gpad);
826840
218218 static void gst_debug_reset_threshold (gpointer category, gpointer unused);
219219 static void gst_debug_reset_all_thresholds (void);
220220
221 #ifdef HAVE_PRINTF_EXTENSION
221 #ifdef GST_USING_PRINTF_EXTENSION
222222 static int _gst_info_printf_extension_ptr (FILE * stream,
223223 const struct printf_info *info, const void *const *args);
224224 static int _gst_info_printf_extension_segment (FILE * stream,
330330 /* get time we started for debugging messages */
331331 _priv_gst_info_start_time = gst_util_get_timestamp ();
332332
333 #ifdef HAVE_PRINTF_EXTENSION
333 #ifdef GST_USING_PRINTF_EXTENSION
334334 #ifdef HAVE_REGISTER_PRINTF_SPECIFIER
335335 register_printf_specifier (GST_PTR_FORMAT[0], _gst_info_printf_extension_ptr,
336336 _gst_info_printf_extension_arginfo);
719719 return g_strdup_printf ("%p", ptr);
720720 }
721721
722 #ifdef HAVE_PRINTF_EXTENSION
722 #ifdef GST_USING_PRINTF_EXTENSION
723723
724724 static gchar *
725725 gst_debug_print_segment (gpointer ptr)
762762 }
763763 }
764764
765 #endif /* HAVE_PRINTF_EXTENSION */
765 #endif /* GST_USING_PRINTF_EXTENSION */
766766
767767 /**
768768 * gst_debug_construct_term_color:
16541654
16551655 /*** PRINTF EXTENSIONS ********************************************************/
16561656
1657 #ifdef HAVE_PRINTF_EXTENSION
1657 #ifdef GST_USING_PRINTF_EXTENSION
16581658 static int
16591659 _gst_info_printf_extension_ptr (FILE * stream, const struct printf_info *info,
16601660 const void *const *args)
17111711 }
17121712 return 1;
17131713 }
1714 #endif /* HAVE_PRINTF_EXTENSION */
1714 #endif /* GST_USING_PRINTF_EXTENSION */
17151715
17161716 static void
17171717 gst_info_dump_mem_line (gchar * linebuf, gsize linebuf_size,
141141 GstMetaTransformFunction transform_func)
142142 {
143143 GstMetaInfo *info;
144 GType type;
144145
145146 g_return_val_if_fail (api != 0, NULL);
146147 g_return_val_if_fail (impl != NULL, NULL);
147148 g_return_val_if_fail (size != 0, NULL);
148149
150 /* first try to register the implementation name. It's possible
151 * that this fails because it was already registered. Don't warn,
152 * glib did this for us already. */
153 type = g_pointer_type_register_static (impl);
154 if (type == 0)
155 return NULL;
156
149157 info = g_slice_new (GstMetaInfo);
150158 info->api = api;
151 info->type = g_pointer_type_register_static (impl);
159 info->type = type;
152160 info->size = size;
153161 info->init_func = init_func;
154162 info->free_func = free_func;
120120 {
121121 mini_object->type = type;
122122 mini_object->refcount = 1;
123 mini_object->lockstate =
124 (flags & GST_MINI_OBJECT_FLAG_LOCK_READONLY ? GST_LOCK_FLAG_READ : 0);
123 mini_object->lockstate = 0;
125124 mini_object->flags = flags;
126125
127126 mini_object->copy = copy_func;
177176
178177 g_return_val_if_fail (object != NULL, FALSE);
179178 g_return_val_if_fail (GST_MINI_OBJECT_IS_LOCKABLE (object), FALSE);
179
180 if (G_UNLIKELY (object->flags & GST_MINI_OBJECT_FLAG_LOCK_READONLY &&
181 flags & GST_LOCK_FLAG_WRITE))
182 return FALSE;
180183
181184 do {
182185 access_mode = flags & FLAG_MASK;
908908 * push or pull mode, just return. Otherwise dispatches to the pad's activate
909909 * function to perform the actual activation.
910910 *
911 * If not @active, checks the pad's current mode and calls
912 * gst_pad_activate_push() or gst_pad_activate_pull(), as appropriate, with a
913 * FALSE argument.
911 * If not @active, calls gst_pad_activate_mode() with the pad's current mode
912 * and a FALSE argument.
914913 *
915914 * Returns: #TRUE if the operation was successful.
916915 *
14481447 * @notify: notify called when @activate will not be used anymore.
14491448 *
14501449 * Sets the given activate function for @pad. The activate function will
1451 * dispatch to gst_pad_activate_push() or gst_pad_activate_pull() to perform
1452 * the actual activation. Only makes sense to set on sink pads.
1450 * dispatch to gst_pad_activate_mode() to perform the actual activation.
1451 * Only makes sense to set on sink pads.
14531452 *
14541453 * Call this function if your sink pad can start a pull-based task.
14551454 */
32913290 GST_DEBUG_OBJECT (pad, "event %s marked received",
32923291 GST_EVENT_TYPE_NAME (event));
32933292 break;
3293 case GST_FLOW_CUSTOM_SUCCESS:
3294 /* we can't assume the event is received when it was dropped */
3295 GST_DEBUG_OBJECT (pad, "event %s was dropped, mark pending",
3296 GST_EVENT_TYPE_NAME (event));
3297 GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_PENDING_EVENTS);
3298 data->ret = GST_FLOW_OK;
3299 break;
32943300 case GST_FLOW_NOT_LINKED:
32953301 /* not linked is not a problem, we are sticky so the event will be
32963302 * sent later but only for non-EOS events */
3297 GST_DEBUG_OBJECT (pad, "pad was not linked");
3303 GST_DEBUG_OBJECT (pad, "pad was not linked, mark pending");
32983304 if (GST_EVENT_TYPE (event) != GST_EVENT_EOS)
32993305 data->ret = GST_FLOW_OK;
3300 /* fallthrough */
3306 GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_PENDING_EVENTS);
3307 break;
33013308 default:
3302 GST_DEBUG_OBJECT (pad, "mark pending events");
3309 GST_DEBUG_OBJECT (pad, "result %s, mark pending events",
3310 gst_flow_get_name (data->ret));
33033311 GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_PENDING_EVENTS);
33043312 break;
33053313 }
33363344 if (ev && !ev->received) {
33373345 data.ret = gst_pad_push_event_unchecked (pad, gst_event_ref (ev->event),
33383346 GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM);
3347 /* the event could have been dropped. Because this can only
3348 * happen if the user asked for it, it's not an error */
3349 if (data.ret == GST_FLOW_CUSTOM_SUCCESS)
3350 data.ret = GST_FLOW_OK;
33393351 }
33403352 }
33413353 }
43604372 }
43614373 }
43624374
4375 /* must be called with pad object lock */
43634376 static gboolean
4364 gst_pad_store_sticky_event (GstPad * pad, GstEvent * event, gboolean locked)
4377 gst_pad_store_sticky_event (GstPad * pad, GstEvent * event)
43654378 {
43664379 guint i, len;
43674380 GstEventType type;
44094422
44104423 switch (GST_EVENT_TYPE (event)) {
44114424 case GST_EVENT_CAPS:
4412 if (locked)
4413 GST_OBJECT_UNLOCK (pad);
4425 GST_OBJECT_UNLOCK (pad);
44144426
44154427 GST_DEBUG_OBJECT (pad, "notify caps");
44164428 g_object_notify_by_pspec ((GObject *) pad, pspec_caps);
44174429
4418 if (locked)
4419 GST_OBJECT_LOCK (pad);
4430 GST_OBJECT_LOCK (pad);
44204431 break;
44214432 default:
44224433 break;
45324543 switch (ret) {
45334544 case GST_FLOW_CUSTOM_SUCCESS:
45344545 GST_DEBUG_OBJECT (pad, "dropped event");
4535 ret = GST_FLOW_OK;
45364546 break;
45374547 default:
45384548 GST_DEBUG_OBJECT (pad, "an error occured %s", gst_flow_get_name (ret));
46094619 if (G_UNLIKELY (GST_PAD_IS_EOS (pad)))
46104620 goto eos;
46114621
4612 /* srcpad sticky events are store immediately, the received flag is set
4622 /* srcpad sticky events are stored immediately, the received flag is set
46134623 * to FALSE and will be set to TRUE when we can successfully push the
46144624 * event to the peer pad */
4615 if (gst_pad_store_sticky_event (pad, event, TRUE)) {
4625 if (gst_pad_store_sticky_event (pad, event)) {
46164626 GST_DEBUG_OBJECT (pad, "event %s updated", GST_EVENT_TYPE_NAME (event));
46174627 }
46184628 if (GST_EVENT_TYPE (event) == GST_EVENT_EOS)
46244634 res = (check_sticky (pad) == GST_FLOW_OK);
46254635 }
46264636 if (!sticky) {
4637 GstFlowReturn ret;
4638
46274639 /* other events are pushed right away */
4628 res = (gst_pad_push_event_unchecked (pad, event, type) == GST_FLOW_OK);
4640 ret = gst_pad_push_event_unchecked (pad, event, type);
4641 /* dropped events by a probe are not an error */
4642 res = (ret == GST_FLOW_OK || ret == GST_FLOW_CUSTOM_SUCCESS);
46294643 } else {
46304644 /* Errors in sticky event pushing are no problem and ignored here
46314645 * as they will cause more meaningful errors during data flow.
48224836
48234837 if (sticky) {
48244838 if (ret == GST_FLOW_OK) {
4839 GST_OBJECT_LOCK (pad);
4840 /* can't store on flushing pads */
4841 if (G_UNLIKELY (GST_PAD_IS_FLUSHING (pad)))
4842 goto flushing;
4843
4844 if (G_UNLIKELY (GST_PAD_IS_EOS (pad)))
4845 goto eos;
4846
48254847 /* after the event function accepted the event, we can store the sticky
48264848 * event on the pad */
4827 gst_pad_store_sticky_event (pad, event, FALSE);
4849 if (gst_pad_store_sticky_event (pad, event)) {
4850 GST_DEBUG_OBJECT (pad, "event %s updated", GST_EVENT_TYPE_NAME (event));
4851 }
48284852 if (event_type == GST_EVENT_EOS)
48294853 GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_EOS);
4854
4855 GST_OBJECT_UNLOCK (pad);
48304856 }
48314857 gst_event_unref (event);
48324858 }
308308 *
309309 * This function is installed on a source pad with
310310 * gst_pad_set_getrange_function() and can only be called on source pads after
311 * they are successfully activated with gst_pad_activate_pull().
311 * they are successfully activated with gst_pad_activate_mode() with the
312 * #GST_PAD_MODE_PULL.
312313 *
313314 * @offset and @length are always given in byte units. @offset must normally be a value
314315 * between 0 and the length in bytes of the data available on @pad. The
652652 static GMutex gst_plugin_loading_mutex;
653653
654654 #define CHECK_PLUGIN_DESC_FIELD(desc,field,fn) \
655 if (G_UNLIKELY ((desc)->field == NULL)) { \
656 GST_ERROR ("GstPluginDesc for '%s' has no %s", fn, G_STRINGIFY (field)); \
655 if (G_UNLIKELY ((desc)->field == NULL || *(desc)->field == '\0')) { \
656 g_warning ("Plugin description for '%s' has no valid %s field", fn, G_STRINGIFY (field)); \
657 goto return_error; \
657658 }
658659
659660 /**
775776 plugin->orig_desc = desc;
776777
777778 if (new_plugin) {
778 /* check plugin description: complain about bad values but accept them, to
779 * maintain backwards compatibility (FIXME: 0.11) */
779 /* check plugin description: complain about bad values and fail */
780780 CHECK_PLUGIN_DESC_FIELD (plugin->orig_desc, name, filename);
781781 CHECK_PLUGIN_DESC_FIELD (plugin->orig_desc, description, filename);
782782 CHECK_PLUGIN_DESC_FIELD (plugin->orig_desc, version, filename);
316316 GST_DEBUG ("version string '%s' parsed to %d values", ver_str, nscan);
317317
318318 if (nscan >= 3) {
319 if (!g_str_has_prefix (PACKAGE_VERSION, "1.")) {
320 /* FIXME 1.0: Remove this before doing the actual 1.0.0 release */
321 if ((major == 0 && minor == 11 && micro >= 90)) {
322 major = 1;
323 minor = 0;
324 micro = 0;
325 nano = 0;
326 }
327 } else {
328 GST_FIXME ("Remove pre-1.0 versions mangling");
329 }
330
331319 if (major > min_major)
332320 ret = TRUE;
333321 else if (major < min_major)
173173 if (!(preset_path = g_type_get_qdata (type, preset_system_path_quark))) {
174174 gchar *preset_dir;
175175
176 /* system presets in '$GST_DATADIR/gstreamer-0.10/presets/GstAudioPanorama.prs' */
176 /* system presets in '$GST_DATADIR/gstreamer-1.0/presets/GstAudioPanorama.prs' */
177177 preset_dir = g_build_filename (GST_DATADIR, "gstreamer-" GST_API_VERSION,
178178 "presets", NULL);
179179 GST_INFO_OBJECT (preset, "system_preset_dir: '%s'", preset_dir);
130130 * values of the seek flags.
131131 */
132132 /* Note: update gst_segment_do_seek() when adding new flags here */
133 typedef enum {
133 typedef enum { /*< flags >*/
134134 GST_SEGMENT_FLAG_NONE = GST_SEEK_FLAG_NONE,
135135 GST_SEGMENT_FLAG_RESET = GST_SEEK_FLAG_FLUSH,
136136 GST_SEGMENT_FLAG_SKIP = GST_SEEK_FLAG_SKIP,
315315 "or produced"), NULL);
316316 gst_tag_register_static (GST_TAG_GEO_LOCATION_SUBLOCATION, GST_TAG_FLAG_META,
317317 G_TYPE_STRING, _("geo location sublocation"),
318 _("a location whithin a city where the media has been produced "
318 _("a location within a city where the media has been produced "
319319 "or created (e.g. the neighborhood)"), NULL);
320320 gst_tag_register_static (GST_TAG_GEO_LOCATION_HORIZONTAL_ERROR,
321321 GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("geo location horizontal error"),
561561 *
562562 * Creates an element for handling the given URI.
563563 *
564 * Returns: (transfer full): a new element or NULL if none could be created
564 * Returns: (transfer floating): a new element or NULL if none could be created
565565 */
566566 GstElement *
567567 gst_element_make_from_uri (const GstURIType type, const gchar * uri,
34973497
34983498 gst_value_init_and_copy (&temp, dest);
34993499 g_value_unset (dest);
3500 gst_value_list_concat (dest, &temp, &intersection);
3500 gst_value_list_merge (dest, &temp, &intersection);
35013501 g_value_unset (&temp);
35023502 }
35033503 g_value_unset (&intersection);
3939
4040 <release>
4141 <Version>
42 <revision>1.0.1</revision>
43 <branch>1.0</branch>
44 <name></name>
45 <created>2012-10-07</created>
46 <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.0.1.tar.xz" />
47 </Version>
48 </release>
49
50 <release>
51 <Version>
4252 <revision>1.0.0</revision>
4353 <branch>1.0</branch>
4454 <name></name>
33 %define _glib2 2.32.0
44
55 Name: %{gstreamer}
6 Version: 1.0.0
6 Version: 1.0.1
77 Release: 1
88 Summary: GStreamer streaming media framework runtime
99
920920 {
921921 const GstSegment *in_segment;
922922 GstSegment out_segment;
923 gint64 offset = 0, next_pts;
923 gint64 offset = 0, next_dts;
924924
925925 gst_event_parse_segment (event, &in_segment);
926926 gst_segment_init (&out_segment, GST_FORMAT_TIME);
956956 out_segment.stop = seek->segment.stop;
957957 out_segment.time = seek->segment.start;
958958
959 next_pts = seek->start_ts;
959 next_dts = seek->start_ts;
960960 parse->priv->exact_position = seek->accurate;
961961 g_free (seek);
962962 } else {
964964 /* as these are only estimates, stop is kept open-ended to avoid
965965 * premature cutting */
966966 gst_base_parse_convert (parse, GST_FORMAT_BYTES, in_segment->start,
967 GST_FORMAT_TIME, (gint64 *) & next_pts);
968
969 out_segment.start = next_pts;
967 GST_FORMAT_TIME, (gint64 *) & next_dts);
968
969 out_segment.start = next_dts;
970970 out_segment.stop = GST_CLOCK_TIME_NONE;
971 out_segment.time = next_pts;
971 out_segment.time = next_dts;
972972
973973 parse->priv->exact_position = (in_segment->start == 0);
974974 }
991991
992992 event = gst_event_new_segment (&out_segment);
993993
994 next_pts = 0;
994 next_dts = 0;
995995 } else {
996996 /* not considered BYTE seekable if it is talking to us in TIME,
997997 * whatever else it might claim */
998998 parse->priv->upstream_seekable = FALSE;
999 next_pts = in_segment->start;
999 next_dts = in_segment->start;
10001000 }
10011001
10021002 memcpy (&parse->segment, &out_segment, sizeof (GstSegment));
10221022
10231023 parse->priv->offset = offset;
10241024 parse->priv->sync_offset = offset;
1025 parse->priv->next_pts = next_pts;
1025 parse->priv->next_dts = next_dts;
1026 if (parse->priv->pts_interpolate)
1027 parse->priv->next_pts = next_dts;
10261028 parse->priv->last_pts = GST_CLOCK_TIME_NONE;
10271029 parse->priv->last_dts = GST_CLOCK_TIME_NONE;
10281030 parse->priv->discont = TRUE;
15711573 if (GST_CLOCK_TIME_IS_VALID (parse->priv->index_last_ts) &&
15721574 GST_CLOCK_DIFF (parse->priv->index_last_ts, ts) <
15731575 parse->priv->idx_interval) {
1574 GST_DEBUG_OBJECT (parse, "entry too close to last time %" GST_TIME_FORMAT,
1576 GST_LOG_OBJECT (parse, "entry too close to last time %" GST_TIME_FORMAT,
15751577 GST_TIME_ARGS (parse->priv->index_last_ts));
15761578 goto exit;
15771579 }
15821584
15831585 gst_base_parse_find_offset (parse, ts, TRUE, &prev_ts);
15841586 if (GST_CLOCK_DIFF (prev_ts, ts) < parse->priv->idx_interval) {
1585 GST_DEBUG_OBJECT (parse,
1587 GST_LOG_OBJECT (parse,
15861588 "entry too close to existing entry %" GST_TIME_FORMAT,
15871589 GST_TIME_ARGS (prev_ts));
15881590 parse->priv->index_last_offset = offset;
29072909 parse = GST_BASE_PARSE (gst_pad_get_parent (pad));
29082910 klass = GST_BASE_PARSE_GET_CLASS (parse);
29092911
2910 GST_DEBUG_OBJECT (parse, "hello");
2912 GST_LOG_OBJECT (parse, "Entering parse loop");
29112913
29122914 if (G_UNLIKELY (parse->priv->push_stream_start)) {
29132915 gchar *stream_id;
40064008 parse->priv->last_offset = seekpos;
40074009 parse->priv->seen_keyframe = FALSE;
40084010 parse->priv->discont = TRUE;
4009 parse->priv->next_pts = start_ts;
4010 parse->priv->next_dts = GST_CLOCK_TIME_NONE;
4011 parse->priv->next_dts = start_ts;
4012 if (parse->priv->pts_interpolate)
4013 parse->priv->next_pts = start_ts;
40114014 parse->priv->last_dts = GST_CLOCK_TIME_NONE;
40124015 parse->priv->last_pts = GST_CLOCK_TIME_NONE;
40134016 parse->priv->sync_offset = seekpos;
1919 */
2020
2121 /**
22 * SECTION:gstbasesink:
22 * SECTION:gstbasesink
2323 * @short_description: Base class for sink elements
2424 * @see_also: #GstBaseTransform, #GstBaseSrc
2525 *
4646 * // #GST_PAD_SINK and name "sink"
4747 * gst_element_class_add_pad_template (gstelement_class,
4848 * gst_static_pad_template_get (&amp;sinktemplate));
49 * // see #GstElementDetails
50 * gst_element_class_set_details (gstelement_class, &amp;details);
49 *
50 * gst_element_class_set_static_metadata (gstelement_class,
51 * "Sink name",
52 * "Sink",
53 * "My Sink element",
54 * "The author &lt;my.sink@my.email&gt;");
5155 * }
5256 * ]|
5357 *
120120 * // #GST_PAD_SRC and name "src"
121121 * gst_element_class_add_pad_template (gstelement_class,
122122 * gst_static_pad_template_get (&amp;srctemplate));
123 * // see #GstElementDetails
124 * gst_element_class_set_details (gstelement_class, &amp;details);
123 *
124 * gst_element_class_set_static_metadata (gstelement_class,
125 * "Source name",
126 * "Source",
127 * "My Source element",
128 * "The author &lt;my.sink@my.email&gt;");
125129 * }
126130 * ]|
127131 *
776780 * @src: The source
777781 * @start: The new start value for the segment
778782 * @stop: Stop value for the new segment
779 * @position: The position value for the new segent
783 * @time: The new time value for the start of the new segent
780784 *
781785 * Prepare a new seamless segment for emission downstream. This function must
782786 * only be called by derived sub-classes, and only from the create() function,
789793 */
790794 gboolean
791795 gst_base_src_new_seamless_segment (GstBaseSrc * src, gint64 start, gint64 stop,
792 gint64 position)
796 gint64 time)
793797 {
794798 gboolean res = TRUE;
799
800 GST_OBJECT_LOCK (src);
801
802 src->segment.base = gst_segment_to_running_time (&src->segment,
803 src->segment.format, src->segment.position);
804 src->segment.position = src->segment.start = start;
805 src->segment.stop = stop;
806 src->segment.time = time;
807
808 /* Mark pending segment. Will be sent before next data */
809 src->priv->segment_pending = TRUE;
795810
796811 GST_DEBUG_OBJECT (src,
797812 "Starting new seamless segment. Start %" GST_TIME_FORMAT " stop %"
798 GST_TIME_FORMAT " position %" GST_TIME_FORMAT, GST_TIME_ARGS (start),
799 GST_TIME_ARGS (stop), GST_TIME_ARGS (position));
800
801 GST_OBJECT_LOCK (src);
802
803 src->segment.base = gst_segment_to_running_time (&src->segment,
804 src->segment.format, src->segment.position);
805 src->segment.start = start;
806 src->segment.stop = stop;
807 src->segment.position = position;
808
809 /* forward, we send data from position to stop */
810 src->priv->segment_pending = TRUE;
813 GST_TIME_FORMAT " time %" GST_TIME_FORMAT " base %" GST_TIME_FORMAT,
814 GST_TIME_ARGS (start), GST_TIME_ARGS (stop), GST_TIME_ARGS (time),
815 GST_TIME_ARGS (src->segment.base));
816
811817 GST_OBJECT_UNLOCK (src);
812818
813819 src->priv->discont = TRUE;
254254 GstPadMode pad_mode;
255255
256256 gboolean gap_aware;
257 gboolean prefer_passthrough;
257258
258259 /* QoS stats */
259260 guint64 processed;
458459 priv->cache_caps2 = NULL;
459460 priv->pad_mode = GST_PAD_MODE_NONE;
460461 priv->gap_aware = FALSE;
462 priv->prefer_passthrough = TRUE;
461463
462464 priv->passthrough = FALSE;
463465 if (bclass->transform == NULL) {
663665 templ = gst_pad_get_pad_template_caps (pad);
664666 otempl = gst_pad_get_pad_template_caps (otherpad);
665667
666 /* we can do what the peer can */
668 /* first prepare the filter to be send onwards. We need to filter and
669 * transform it to valid caps for the otherpad. */
667670 if (filter) {
668671 GST_DEBUG_OBJECT (pad, "filter caps %" GST_PTR_FORMAT, filter);
669672
670 /* filtered against our padtemplate on the other side */
673 /* filtered against our padtemplate of this pad */
671674 GST_DEBUG_OBJECT (pad, "our template %" GST_PTR_FORMAT, templ);
672675 temp = gst_caps_intersect_full (filter, templ, GST_CAPS_INTERSECT_FIRST);
673676 GST_DEBUG_OBJECT (pad, "intersected %" GST_PTR_FORMAT, temp);
678681 GST_DEBUG_OBJECT (pad, "transformed %" GST_PTR_FORMAT, peerfilter);
679682 gst_caps_unref (temp);
680683
681 /* and filter against the template of this pad */
684 /* and filter against the template of the other pad */
682685 GST_DEBUG_OBJECT (pad, "our template %" GST_PTR_FORMAT, otempl);
683686 /* We keep the caps sorted like the returned caps */
684687 temp =
688691 peerfilter = temp;
689692 }
690693
694 /* query the peer with the transformed filter */
691695 peercaps = gst_pad_peer_query_caps (otherpad, peerfilter);
692696
693697 if (peerfilter)
721725 gst_caps_unref (caps);
722726 caps = temp;
723727
724 /* Now try if we can put the untransformed downstream caps first */
725 temp = gst_caps_intersect_full (peercaps, caps, GST_CAPS_INTERSECT_FIRST);
726 if (!gst_caps_is_empty (temp)) {
727 caps = gst_caps_merge (temp, caps);
728 } else {
729 gst_caps_unref (temp);
728 if (trans->priv->prefer_passthrough) {
729 /* Now try if we can put the untransformed downstream caps first */
730 temp = gst_caps_intersect_full (peercaps, caps, GST_CAPS_INTERSECT_FIRST);
731 if (!gst_caps_is_empty (temp)) {
732 caps = gst_caps_merge (temp, caps);
733 } else {
734 gst_caps_unref (temp);
735 }
730736 }
731737 } else {
732738 gst_caps_unref (caps);
25922598 }
25932599
25942600 /**
2601 * gst_base_transform_set_prefer_passthrough:
2602 * @trans: a #GstBaseTransform
2603 * @prefer_passthrough: New state
2604 *
2605 * If @prefer_passthrough is %TRUE (the default), @trans will check and
2606 * prefer passthrough caps from the list of caps returned by the
2607 * transform_caps vmethod.
2608 *
2609 * If set to %FALSE, the element must order the caps returned from the
2610 * transform_caps function in such a way that the prefered format is
2611 * first in the list. This can be interesting for transforms that can do
2612 * passthrough transforms but prefer to do something else, like a
2613 * capsfilter.
2614 *
2615 * MT safe.
2616 *
2617 * Since: 1.0.1
2618 */
2619 void
2620 gst_base_transform_set_prefer_passthrough (GstBaseTransform * trans,
2621 gboolean prefer_passthrough)
2622 {
2623 g_return_if_fail (GST_IS_BASE_TRANSFORM (trans));
2624
2625 GST_OBJECT_LOCK (trans);
2626 trans->priv->prefer_passthrough = prefer_passthrough;
2627 GST_DEBUG_OBJECT (trans, "prefer passthrough %d", prefer_passthrough);
2628 GST_OBJECT_UNLOCK (trans);
2629 }
2630
2631 /**
25952632 * gst_base_transform_reconfigure_sink:
25962633 * @trans: a #GstBaseTransform
25972634 *
282282 void gst_base_transform_set_gap_aware (GstBaseTransform *trans,
283283 gboolean gap_aware);
284284
285 void gst_base_transform_set_prefer_passthrough (GstBaseTransform *trans,
286 gboolean prefer_passthrough);
287
285288 GstBufferPool * gst_base_transform_get_buffer_pool (GstBaseTransform *trans);
286289 void gst_base_transform_get_allocator (GstBaseTransform *trans,
287290 GstAllocator **allocator,
113113 for (walk = helper->buffers; walk; walk = walk->next) {
114114 GstMappedBuffer *bmp = (GstMappedBuffer *) walk->data;
115115 GstBuffer *buf = GST_BUFFER_CAST (bmp->buffer);
116 guint64 buf_offset = GST_BUFFER_OFFSET (buf);
117 guint buf_size = gst_buffer_get_size (buf);
116
117 buf_offset = GST_BUFFER_OFFSET (buf);
118 buf_size = gst_buffer_get_size (buf);
118119
119120 /* buffers are kept sorted by end offset (highest first) in the list, so
120121 * at this point we save the current position and stop searching if
8181 {
8282 static const GstMetaInfo *meta_info = NULL;
8383
84 if (meta_info == NULL) {
85 meta_info = gst_meta_register (GST_NET_ADDRESS_META_API_TYPE,
84 if (g_once_init_enter (&meta_info)) {
85 const GstMetaInfo *mi = gst_meta_register (GST_NET_ADDRESS_META_API_TYPE,
8686 "GstNetAddressMeta",
8787 sizeof (GstNetAddressMeta),
8888 net_address_meta_init,
8989 net_address_meta_free, net_address_meta_transform);
90 g_once_init_leave (&meta_info, mi);
9091 }
9192 return meta_info;
9293 }
127127 {
128128 GstBaseTransform *trans = GST_BASE_TRANSFORM (filter);
129129 gst_base_transform_set_gap_aware (trans, TRUE);
130 gst_base_transform_set_prefer_passthrough (trans, FALSE);
130131 filter->filter_caps = gst_caps_new_any ();
131132 }
132133
261261
262262 switch (prop_id) {
263263 case PROP_STATE_ERROR:
264 sink->state_error = g_value_get_enum (value);
264 sink->state_error = (GstFakeSinkStateError) g_value_get_enum (value);
265265 break;
266266 case PROP_SILENT:
267267 sink->silent = g_value_get_boolean (value);
448448 g_warning ("not yet implemented");
449449 break;
450450 case PROP_DATA:
451 src->data = g_value_get_enum (value);
451 src->data = (GstFakeSrcDataType) g_value_get_enum (value);
452452
453453 if (src->data == FAKE_SRC_DATA_SUBBUFFER) {
454454 if (!src->parent)
461461 }
462462 break;
463463 case PROP_SIZETYPE:
464 src->sizetype = g_value_get_enum (value);
464 src->sizetype = (GstFakeSrcSizeType) g_value_get_enum (value);
465465 break;
466466 case PROP_SIZEMIN:
467467 src->sizemin = g_value_get_int (value);
473473 src->parentsize = g_value_get_int (value);
474474 break;
475475 case PROP_FILLTYPE:
476 src->filltype = g_value_get_enum (value);
476 src->filltype = (GstFakeSrcFillType) g_value_get_enum (value);
477477 break;
478478 case PROP_DATARATE:
479479 src->datarate = g_value_get_int (value);
506506 gst_base_src_set_live (basesrc, g_value_get_boolean (value));
507507 break;
508508 case PROP_FORMAT:
509 src->format = g_value_get_enum (value);
509 src->format = (GstFormat) g_value_get_enum (value);
510510 break;
511511 default:
512512 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
306306 news = gst_event_new_segment (&segment);
307307
308308 gst_pad_event_default (trans->sinkpad, GST_OBJECT_CAST (trans), news);
309 } else {
310 /* need to track segment for proper running time */
311 gst_event_copy_segment (event, &trans->segment);
309312 }
310313 }
311314
550553 GstClockTime time = gst_util_uint64_scale_int (identity->offset,
551554 GST_SECOND, identity->datarate);
552555
553 GST_BUFFER_TIMESTAMP (buf) = time;
556 GST_BUFFER_PTS (buf) = GST_BUFFER_DTS (buf) = time;
554557 GST_BUFFER_DURATION (buf) = size * GST_SECOND / identity->datarate;
555558 }
556559
595598
596599 if (identity->single_segment && (trans->segment.format == GST_FORMAT_TIME)
597600 && (ret == GST_FLOW_OK)) {
598 GST_BUFFER_TIMESTAMP (buf) = runtimestamp;
601 GST_BUFFER_PTS (buf) = GST_BUFFER_DTS (buf) = runtimestamp;
599602 GST_BUFFER_OFFSET (buf) = GST_CLOCK_TIME_NONE;
600603 GST_BUFFER_OFFSET_END (buf) = GST_CLOCK_TIME_NONE;
601604 }
10901090 g_cond_signal (&sq->query_handled);
10911091 GST_MULTI_QUEUE_MUTEX_UNLOCK (mq);
10921092 } else {
1093 g_warning ("Unexpected object in singlequeue %d (refcounting problem?)",
1093 g_warning ("Unexpected object in singlequeue %u (refcounting problem?)",
10941094 sq->id);
10951095 }
10961096 return result;
442442 tee->silent = g_value_get_boolean (value);
443443 break;
444444 case PROP_PULL_MODE:
445 tee->pull_mode = g_value_get_enum (value);
445 tee->pull_mode = (GstTeePullMode) g_value_get_enum (value);
446446 break;
447447 case PROP_ALLOC_PAD:
448448 {
10541054 } else if (typefind->mode == MODE_NORMAL) {
10551055 GstBuffer *outbuf = NULL;
10561056
1057 if (typefind->need_stream_start) {
1058 gchar *stream_id;
1059
1060 stream_id =
1061 gst_pad_create_stream_id (typefind->src, GST_ELEMENT_CAST (typefind),
1062 NULL);
1063
1064 GST_DEBUG_OBJECT (typefind, "Pushing STREAM_START");
1065 gst_pad_push_event (typefind->src,
1066 gst_event_new_stream_start (stream_id));
1067
1068 typefind->need_stream_start = FALSE;
1069 g_free (stream_id);
1070 }
1071
10571072 if (typefind->need_segment) {
10581073 typefind->need_segment = FALSE;
10591074 gst_pad_push_event (typefind->src,
11351150 if (active) {
11361151 gst_segment_init (&typefind->segment, GST_FORMAT_BYTES);
11371152 typefind->need_segment = TRUE;
1153 typefind->need_stream_start = TRUE;
11381154 typefind->offset = 0;
11391155 res = TRUE;
11401156 } else {
6060
6161 /* Only used when driving the pipeline */
6262 gboolean need_segment;
63 gboolean need_stream_start;
6364 GstSegment segment;
6465 guint64 offset;
6566 };
Binary diff not shown
66 msgstr ""
77 "Project-Id-Version: gstreamer 0.9.7\n"
88 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
9 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
9 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1010 "PO-Revision-Date: 2005-12-05 11:45+0200\n"
1111 "Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n"
1212 "Language-Team: Afrikaans <i18n@af.org.za>\n"
661661 msgstr "ligging"
662662
663663 msgid ""
664 "a location whithin a city where the media has been produced or created (e.g. "
664 "a location within a city where the media has been produced or created (e.g. "
665665 "the neighborhood)"
666666 msgstr ""
667667
Binary diff not shown
66 msgstr ""
77 "Project-Id-Version: gstreamer-0.8.0\n"
88 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
9 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
9 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1010 "PO-Revision-Date: 2004-03-19 18:40+0200\n"
1111 "Last-Translator: Metin Amiroff <metin@karegen.com>\n"
1212 "Language-Team: Azerbaijani <translation-team-az@lists.sourceforge.net>\n"
626626 msgstr ""
627627
628628 msgid ""
629 "a location whithin a city where the media has been produced or created (e.g. "
629 "a location within a city where the media has been produced or created (e.g. "
630630 "the neighborhood)"
631631 msgstr ""
632632
Binary diff not shown
55 msgstr ""
66 "Project-Id-Version: gstreamer 0.9.7\n"
77 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
8 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
8 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
99 "PO-Revision-Date: 2006-01-18 22:26+0200\n"
1010 "Last-Translator: Ales Nyakhaychyk <nab@mail.by>\n"
1111 "Language-Team: Belarusian <i18n@mova.org>\n"
630630 msgstr ""
631631
632632 msgid ""
633 "a location whithin a city where the media has been produced or created (e.g. "
633 "a location within a city where the media has been produced or created (e.g. "
634634 "the neighborhood)"
635635 msgstr ""
636636
Binary diff not shown
77 msgstr ""
88 "Project-Id-Version: gstreamer 0.10.32.2\n"
99 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
10 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
10 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1111 "PO-Revision-Date: 2011-04-26 22:40+0300\n"
1212 "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
1313 "Language-Team: Bulgarian <dict@fsa-bg.org>\n"
652652 msgid "geo location sublocation"
653653 msgstr "квартал по координати"
654654
655 msgid ""
656 "a location whithin a city where the media has been produced or created (e.g. "
655 #, fuzzy
656 msgid ""
657 "a location within a city where the media has been produced or created (e.g. "
657658 "the neighborhood)"
658659 msgstr "квартал в града на запис или създаване на медията"
659660
Binary diff not shown
66 msgstr ""
77 "Project-Id-Version: gstreamer 0.10.30.3\n"
88 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
9 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
9 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1010 "PO-Revision-Date: 2010-11-04 19:41+0100\n"
1111 "Last-Translator: Jordi Mallach <jordi@sindominio.net>\n"
1212 "Language-Team: Catalan <ca@dodds.net>\n"
658658 msgid "geo location sublocation"
659659 msgstr "sububicació de la geolocalització"
660660
661 msgid ""
662 "a location whithin a city where the media has been produced or created (e.g. "
661 #, fuzzy
662 msgid ""
663 "a location within a city where the media has been produced or created (e.g. "
663664 "the neighborhood)"
664665 msgstr ""
665666 "una ubicació dins de la ciutat on s'ha enregistrat o produït el medi (p. ex. "
Binary diff not shown
88 msgstr ""
99 "Project-Id-Version: gstreamer 0.10.32.2\n"
1010 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
11 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
11 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1212 "PO-Revision-Date: 2011-12-01 08:17+0100\n"
1313 "Last-Translator: Marek Černocký <marek@manet.cz>\n"
1414 "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
650650 msgid "geo location sublocation"
651651 msgstr "upřesnění místa"
652652
653 msgid ""
654 "a location whithin a city where the media has been produced or created (e.g. "
653 #, fuzzy
654 msgid ""
655 "a location within a city where the media has been produced or created (e.g. "
655656 "the neighborhood)"
656657 msgstr "Místo v rámci města, kde bylo médium nahráno nebo vytvořeno"
657658
Binary diff not shown
77 msgstr ""
88 "Project-Id-Version: gstreamer 0.10.30.3\n"
99 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
10 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
10 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1111 "PO-Revision-Date: 2010-11-06 22:52+0100\n"
1212 "Last-Translator: Mogens Jaeger <mogensjaeger@gmail.com>\n"
1313 "Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
655655 msgid "geo location sublocation"
656656 msgstr "geografisk underinddeling"
657657
658 msgid ""
659 "a location whithin a city where the media has been produced or created (e.g. "
658 #, fuzzy
659 msgid ""
660 "a location within a city where the media has been produced or created (e.g. "
660661 "the neighborhood)"
661662 msgstr ""
662663 "en stedangivelse inden for en by hvor mediet er blevet optaget eller "
Binary diff not shown
88 msgstr ""
99 "Project-Id-Version: gstreamer 0.10.32.2\n"
1010 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
11 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
11 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1212 "PO-Revision-Date: 2011-04-27 23:44+0200\n"
1313 "Last-Translator: Christian Kirbach <christian.kirbach@googlemail.com>\n"
1414 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
674674 msgid "geo location sublocation"
675675 msgstr "geografischer Ortsteil"
676676
677 msgid ""
678 "a location whithin a city where the media has been produced or created (e.g. "
677 #, fuzzy
678 msgid ""
679 "a location within a city where the media has been produced or created (e.g. "
679680 "the neighborhood)"
680681 msgstr ""
681682 "ein Ort innerhalb einer Stadt, in dem das Medium aufgezeichnet oder "
Binary diff not shown
55 msgstr ""
66 "Project-Id-Version: gstreamer-0.10.30.3\n"
77 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
8 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
8 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
99 "PO-Revision-Date: 2010-11-29 11:14+0200\n"
1010 "Last-Translator: Michael Kotsarinis <mk73628@gmail.com>\n"
1111 "Language-Team: Greek <team@lists.gnome.gr>\n"
664664 msgid "geo location sublocation"
665665 msgstr "γεωγραφικός εντοπισμός υποτοποθεσίας"
666666
667 msgid ""
668 "a location whithin a city where the media has been produced or created (e.g. "
667 #, fuzzy
668 msgid ""
669 "a location within a city where the media has been produced or created (e.g. "
669670 "the neighborhood)"
670671 msgstr ""
671672 "τοποθεσία μέσα σε μια πόλη όπου το μέσο παρήχθη ή δημιουργήθηκε (π.χ. η "
Binary diff not shown
55 msgstr ""
66 "Project-Id-Version: gstreamer 0.8.1\n"
77 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
8 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
8 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
99 "PO-Revision-Date: 2004-04-26 10:36-0400\n"
1010 "Last-Translator: Gareth Owen <gowen72@yahoo.com>\n"
1111 "Language-Team: English (British) <en_gb@li.org>\n"
665665 msgstr "location"
666666
667667 msgid ""
668 "a location whithin a city where the media has been produced or created (e.g. "
668 "a location within a city where the media has been produced or created (e.g. "
669669 "the neighborhood)"
670670 msgstr ""
671671
Binary diff not shown
66 msgstr ""
77 "Project-Id-Version: gstreamer 0.10.32.2\n"
88 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
9 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
9 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1010 "PO-Revision-Date: 2011-06-04 21:11+0100\n"
1111 "Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n"
1212 "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
618618 msgstr ""
619619
620620 msgid ""
621 "a location whithin a city where the media has been produced or created (e.g. "
621 "a location within a city where the media has been produced or created (e.g. "
622622 "the neighborhood)"
623623 msgstr ""
624624
Binary diff not shown
66 msgstr ""
77 "Project-Id-Version: gstreamer 0.10.32.2\n"
88 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
9 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
9 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1010 "PO-Revision-Date: 2011-10-02 15:45+0200\n"
1111 "Last-Translator: Jorge González González <aloriel@gmail.com>\n"
1212 "Language-Team: Spanish <es@li.org>\n"
659659 msgid "geo location sublocation"
660660 msgstr "sububicación de la geolocalización"
661661
662 msgid ""
663 "a location whithin a city where the media has been produced or created (e.g. "
662 #, fuzzy
663 msgid ""
664 "a location within a city where the media has been produced or created (e.g. "
664665 "the neighborhood)"
665666 msgstr ""
666667 "una ubicación en una ciudad donde se ha producido o creado el medio (ej. el "
Binary diff not shown
77 msgstr ""
88 "Project-Id-Version: gstreamer-0.10.26.2\n"
99 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
10 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
10 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1111 "PO-Revision-Date: 2010-03-25 13:10+0100\n"
1212 "Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n"
1313 "Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
662662 msgid "geo location sublocation"
663663 msgstr "geolokalizazioaren azpikokalekua"
664664
665 msgid ""
666 "a location whithin a city where the media has been produced or created (e.g. "
665 #, fuzzy
666 msgid ""
667 "a location within a city where the media has been produced or created (e.g. "
667668 "the neighborhood)"
668669 msgstr "muldimedia grabatu edo ekoiztu den herriko kokaleku bat (adib, auzoa)"
669670
Binary diff not shown
1111 msgstr ""
1212 "Project-Id-Version: gstreamer 0.10.30.3\n"
1313 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
14 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
14 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1515 "PO-Revision-Date: 2010-11-17 23:10+0200\n"
1616 "Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n"
1717 "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
658658 msgid "geo location sublocation"
659659 msgstr "maantieteellisen sijainnin alisijainti"
660660
661 msgid ""
662 "a location whithin a city where the media has been produced or created (e.g. "
661 #, fuzzy
662 msgid ""
663 "a location within a city where the media has been produced or created (e.g. "
663664 "the neighborhood)"
664665 msgstr "sijainti kaupungin sisällä, jossa media on nauhoitettu tai tuotettu"
665666
Binary diff not shown
88 msgstr ""
99 "Project-Id-Version: gstreamer 0.10.32.2\n"
1010 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
11 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
11 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1212 "PO-Revision-Date: 2011-04-28 09:34+0200\n"
1313 "Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
1414 "Language-Team: French <traduc@traduc.org>\n"
655655 msgid "geo location sublocation"
656656 msgstr "zone locale de l'emplacement"
657657
658 msgid ""
659 "a location whithin a city where the media has been produced or created (e.g. "
658 #, fuzzy
659 msgid ""
660 "a location within a city where the media has been produced or created (e.g. "
660661 "the neighborhood)"
661662 msgstr ""
662663 "un endroit de la localité où le média a été enregistré ou produit (par ex. "
Binary diff not shown
55 msgstr ""
66 "Project-Id-Version: gstreamer 0.10.32.2\n"
77 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
8 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
8 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
99 "PO-Revision-Date: 2011-09-05 12:49+0200\n"
1010 "Last-Translator: Fran Dieguez <frandieguez@ubuntu.com>\n"
1111 "Language-Team: Galician <proxecto@trasno.net>\n"
652652 msgid "geo location sublocation"
653653 msgstr "sublocalización da xeolocalización"
654654
655 msgid ""
656 "a location whithin a city where the media has been produced or created (e.g. "
655 #, fuzzy
656 msgid ""
657 "a location within a city where the media has been produced or created (e.g. "
657658 "the neighborhood)"
658659 msgstr ""
659660 "unha localización nunha cidade onde foi gravado ou producido o medio (p.ex. "
44 #, fuzzy
55 msgid ""
66 msgstr ""
7 "Project-Id-Version: gstreamer 1.0.0\n"
7 "Project-Id-Version: gstreamer 1.0.1\n"
88 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
9 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
9 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1010 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1111 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1212 "Language-Team: LANGUAGE <LL@li.org>\n"
809809
810810 #: gst/gsttaglist.c:319
811811 msgid ""
812 "a location whithin a city where the media has been produced or created (e.g. "
812 "a location within a city where the media has been produced or created (e.g. "
813813 "the neighborhood)"
814814 msgstr ""
815815
10471047 msgid "empty pipeline not allowed"
10481048 msgstr ""
10491049
1050 #: libs/gst/base/gstbasesrc.c:2422
1050 #: libs/gst/base/gstbasesrc.c:2428
10511051 msgid "Internal clock error."
10521052 msgstr ""
10531053
1054 #: libs/gst/base/gstbasesrc.c:2774 libs/gst/base/gstbasesrc.c:2783
1055 #: libs/gst/base/gstbasesink.c:3763 plugins/elements/gstqueue.c:1188
1054 #: libs/gst/base/gstbasesrc.c:2780 libs/gst/base/gstbasesrc.c:2789
1055 #: libs/gst/base/gstbasesink.c:3767 plugins/elements/gstqueue.c:1188
10561056 #: plugins/elements/gstqueue2.c:2565
10571057 msgid "Internal data flow error."
10581058 msgstr ""
10591059
1060 #: libs/gst/base/gstbasesink.c:2670
1060 #: libs/gst/base/gstbasesink.c:2674
10611061 msgid "A lot of buffers are being dropped."
10621062 msgstr ""
10631063
1064 #: libs/gst/base/gstbasesink.c:3127
1064 #: libs/gst/base/gstbasesink.c:3131
10651065 msgid "Internal data flow problem."
10661066 msgstr ""
10671067
1068 #: libs/gst/base/gstbasesink.c:3753
1068 #: libs/gst/base/gstbasesink.c:3757
10691069 msgid "Internal data stream error."
10701070 msgstr ""
10711071
11271127 msgid "File \"%s\" is a socket."
11281128 msgstr ""
11291129
1130 #: plugins/elements/gstidentity.c:610
1130 #: plugins/elements/gstidentity.c:613
11311131 msgid "Failed after iterations as requested."
11321132 msgstr ""
11331133
Binary diff not shown
66 msgstr ""
77 "Project-Id-Version: gstreamer 0.10.30.3\n"
88 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
9 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
9 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1010 "PO-Revision-Date: 2010-11-01 13:39+0100\n"
1111 "Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
1212 "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
652652 msgid "geo location sublocation"
653653 msgstr "földrajzi hely részhelye"
654654
655 msgid ""
656 "a location whithin a city where the media has been produced or created (e.g. "
655 #, fuzzy
656 msgid ""
657 "a location within a city where the media has been produced or created (e.g. "
657658 "the neighborhood)"
658659 msgstr ""
659660 "a városon belüli hely, ahol a média előállításra vagy létrehozásra került "
Binary diff not shown
55 msgstr ""
66 "Project-Id-Version: gstreamer 0.10.32.2\n"
77 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
8 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
8 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
99 "PO-Revision-Date: 2012-01-28 11:44+0700\n"
1010 "Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n"
1111 "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
652652 msgid "geo location sublocation"
653653 msgstr "sublokasi lokasi geografis"
654654
655 msgid ""
656 "a location whithin a city where the media has been produced or created (e.g. "
655 #, fuzzy
656 msgid ""
657 "a location within a city where the media has been produced or created (e.g. "
657658 "the neighborhood)"
658659 msgstr ""
659660 "lokasi di dalam kota tempat media dihasilkan atau dibuat (misalnya "
Binary diff not shown
105105 msgstr ""
106106 "Project-Id-Version: gstreamer 0.10.30.3\n"
107107 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
108 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
108 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
109109 "PO-Revision-Date: 2010-10-25 10:03+0200\n"
110110 "Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n"
111111 "Language-Team: Italian <tp@lists.linux.it>\n"
791791 msgid "geo location sublocation"
792792 msgstr "sub-località località geog."
793793
794 msgid ""
795 "a location whithin a city where the media has been produced or created (e.g. "
794 #, fuzzy
795 msgid ""
796 "a location within a city where the media has been produced or created (e.g. "
796797 "the neighborhood)"
797798 msgstr ""
798799 "una località all'interno di una città in cui il contenuto multimediale è "
Binary diff not shown
55 msgstr ""
66 "Project-Id-Version: gstreamer 0.10.20.3\n"
77 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
8 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
8 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
99 "PO-Revision-Date: 2008-10-16 19:57+0900\n"
1010 "Last-Translator: Makoto Kato <makoto.kt@gmail.com>\n"
1111 "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
636636 msgstr ""
637637
638638 msgid ""
639 "a location whithin a city where the media has been produced or created (e.g. "
639 "a location within a city where the media has been produced or created (e.g. "
640640 "the neighborhood)"
641641 msgstr ""
642642
Binary diff not shown
66 msgstr ""
77 "Project-Id-Version: gstreamer 0.10.29.2\n"
88 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
9 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
9 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1010 "PO-Revision-Date: 2010-07-16 00:50+0300\n"
1111 "Last-Translator: Žygimantas Beručka <uid0@akl.lt>\n"
1212 "Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
651651 msgid "geo location sublocation"
652652 msgstr "geografinės vietos sublokacija"
653653
654 msgid ""
655 "a location whithin a city where the media has been produced or created (e.g. "
654 #, fuzzy
655 msgid ""
656 "a location within a city where the media has been produced or created (e.g. "
656657 "the neighborhood)"
657658 msgstr ""
658659 "vietove mieste, kuriame medija buvo pagaminta arba sukurta, (pvz., "
Binary diff not shown
55 msgstr ""
66 "Project-Id-Version: gstreamer 0.10.30.3\n"
77 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
8 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
8 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
99 "PO-Revision-Date: 2010-10-24 21:36+0200\n"
1010 "Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
1111 "Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
630630 msgstr "plassering"
631631
632632 msgid ""
633 "a location whithin a city where the media has been produced or created (e.g. "
633 "a location within a city where the media has been produced or created (e.g. "
634634 "the neighborhood)"
635635 msgstr ""
636636
Binary diff not shown
99 msgstr ""
1010 "Project-Id-Version: gstreamer 0.10.32.2\n"
1111 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
12 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
12 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1313 "PO-Revision-Date: 2011-04-26 23:10+0200\n"
1414 "Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n"
1515 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
659659 msgid "geo location sublocation"
660660 msgstr "geografische locatie van de sublocatie"
661661
662 msgid ""
663 "a location whithin a city where the media has been produced or created (e.g. "
662 #, fuzzy
663 msgid ""
664 "a location within a city where the media has been produced or created (e.g. "
664665 "the neighborhood)"
665666 msgstr ""
666667 "een sublocatie in een stad waar het medium is opgenomen of geproduceerd "
Binary diff not shown
55 msgstr ""
66 "Project-Id-Version: gstreamer 0.10.32.2\n"
77 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
8 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
8 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
99 "PO-Revision-Date: 2011-04-26 17:54+0200\n"
1010 "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
1111 "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
655655 msgid "geo location sublocation"
656656 msgstr "część miejscowości lokalizacji"
657657
658 msgid ""
659 "a location whithin a city where the media has been produced or created (e.g. "
658 #, fuzzy
659 msgid ""
660 "a location within a city where the media has been produced or created (e.g. "
660661 "the neighborhood)"
661662 msgstr ""
662663 "miejsce wewnątrz miejscowości, w którym utwór został nagrany lub "
Binary diff not shown
1616 msgstr ""
1717 "Project-Id-Version: gstreamer-0.10.31.2\n"
1818 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
19 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
19 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
2020 "PO-Revision-Date: 2011-01-08 01:36-0300\n"
2121 "Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
2222 "Language-Team: Brazilian Portuguese <ldp-br@bazar.conectiva.com.br>\n"
667667 msgid "geo location sublocation"
668668 msgstr "sublocalização geográfica"
669669
670 msgid ""
671 "a location whithin a city where the media has been produced or created (e.g. "
670 #, fuzzy
671 msgid ""
672 "a location within a city where the media has been produced or created (e.g. "
672673 "the neighborhood)"
673674 msgstr ""
674675 "localização numa cidade onde a mídia foi produzida ou criada (ex: bairro)"
Binary diff not shown
44 msgstr ""
55 "Project-Id-Version: gstreamer 0.10.29.2\n"
66 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
7 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
7 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
88 "PO-Revision-Date: 2010-08-16 01:10+0300\n"
99 "Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
1010 "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
665665 msgid "geo location sublocation"
666666 msgstr "sublocație geo-locație"
667667
668 msgid ""
669 "a location whithin a city where the media has been produced or created (e.g. "
668 #, fuzzy
669 msgid ""
670 "a location within a city where the media has been produced or created (e.g. "
670671 "the neighborhood)"
671672 msgstr ""
672673 "locație în orașul unde a fost înregistrat sau produs acest fișier media (de "
Binary diff not shown
88 msgstr ""
99 "Project-Id-Version: gstreamer-0.10.32.2\n"
1010 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
11 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
11 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1212 "PO-Revision-Date: 2011-04-26 20:25+0400\n"
1313 "Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
1414 "Language-Team: Russian <gnu@mx.ru>\n"
659659 msgid "geo location sublocation"
660660 msgstr "доп. к местоположению"
661661
662 msgid ""
663 "a location whithin a city where the media has been produced or created (e.g. "
662 #, fuzzy
663 msgid ""
664 "a location within a city where the media has been produced or created (e.g. "
664665 "the neighborhood)"
665666 msgstr ""
666667 "место в городе, в котором производилась запись или производство данных "
Binary diff not shown
1414 msgstr ""
1515 "Project-Id-Version: gstreamer 0.8.8\n"
1616 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
17 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
17 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1818 "PO-Revision-Date: 2005-04-04 10:55-0700\n"
1919 "Last-Translator: Steven Michael Murphy <murf@e-tools.com>\n"
2020 "Language-Team: Kinyarwanda <translation-team-rw@lists.sourceforge.net>\n"
819819 msgstr "Inturo"
820820
821821 msgid ""
822 "a location whithin a city where the media has been produced or created (e.g. "
822 "a location within a city where the media has been produced or created (e.g. "
823823 "the neighborhood)"
824824 msgstr ""
825825
Binary diff not shown
77 msgstr ""
88 "Project-Id-Version: gstreamer 0.10.30.3\n"
99 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
10 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
10 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1111 "PO-Revision-Date: 2010-11-08 16:13+0100\n"
1212 "Last-Translator: Peter Tuhársky <tuharsky@misbb.sk>\n"
1313 "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
668668 msgid "geo location sublocation"
669669 msgstr "zemepisná poloha upresnenie"
670670
671 msgid ""
672 "a location whithin a city where the media has been produced or created (e.g. "
671 #, fuzzy
672 msgid ""
673 "a location within a city where the media has been produced or created (e.g. "
673674 "the neighborhood)"
674675 msgstr ""
675676 "umiestnenie v rámci mesta, kde bolo toto médium vyprodukované alebo "
Binary diff not shown
99 msgstr ""
1010 "Project-Id-Version: gstreamer 0.10.32.2\n"
1111 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
12 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
12 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1313 "PO-Revision-Date: 2012-03-01 14:05+0100\n"
1414 "Last-Translator: Klemen Košir <klemen.kosir@gmx.com>\n"
1515 "Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
653653 msgid "geo location sublocation"
654654 msgstr "področje zemljepisne lege"
655655
656 msgid ""
657 "a location whithin a city where the media has been produced or created (e.g. "
656 #, fuzzy
657 msgid ""
658 "a location within a city where the media has been produced or created (e.g. "
658659 "the neighborhood)"
659660 msgstr ""
660661 "okraj znotraj mesta, kjer je bil posnetek posnet ali izdelan (na primer: "
Binary diff not shown
55 msgstr ""
66 "Project-Id-Version: gstreamer 0.8.4\n"
77 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
8 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
8 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
99 "PO-Revision-Date: 2004-08-07 23:46+0200\n"
1010 "Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
1111 "Language-Team: Albanian <begraj@hotmail.com>\n"
671671 msgstr "pozicioni"
672672
673673 msgid ""
674 "a location whithin a city where the media has been produced or created (e.g. "
674 "a location within a city where the media has been produced or created (e.g. "
675675 "the neighborhood)"
676676 msgstr ""
677677
Binary diff not shown
66 msgstr ""
77 "Project-Id-Version: gstreamer-0.10.32.2\n"
88 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
9 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
9 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1010 "PO-Revision-Date: 2011-12-05 10:40+0200\n"
1111 "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
1212 "Language-Team: Serbian <gnu@prevod.org>\n"
656656 msgid "geo location sublocation"
657657 msgstr "потположај гео положаја"
658658
659 msgid ""
660 "a location whithin a city where the media has been produced or created (e.g. "
659 #, fuzzy
660 msgid ""
661 "a location within a city where the media has been produced or created (e.g. "
661662 "the neighborhood)"
662663 msgstr ""
663664 "место унутар града у коме је медиј произведен или створен (нпр. суседство)"
Binary diff not shown
77 msgstr ""
88 "Project-Id-Version: gstreamer 0.10.31.2\n"
99 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
10 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
10 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1111 "PO-Revision-Date: 2011-01-09 19:46+0100\n"
1212 "Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
1313 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
661661 msgid "geo location sublocation"
662662 msgstr "specifik plats för geografisk plats"
663663
664 msgid ""
665 "a location whithin a city where the media has been produced or created (e.g. "
664 #, fuzzy
665 msgid ""
666 "a location within a city where the media has been produced or created (e.g. "
666667 "the neighborhood)"
667668 msgstr ""
668669 "en plats inom en stad där mediet har producerats eller skapats (t.ex. "
Binary diff not shown
55 msgstr ""
66 "Project-Id-Version: gstreamer 0.8.0\n"
77 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
8 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
8 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
99 "PO-Revision-Date: 2004-04-03 03:14+0300\n"
1010 "Last-Translator: Baris Cicek <baris@teamforce.name.tr>\n"
1111 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
671671 msgstr "konum"
672672
673673 msgid ""
674 "a location whithin a city where the media has been produced or created (e.g. "
674 "a location within a city where the media has been produced or created (e.g. "
675675 "the neighborhood)"
676676 msgstr ""
677677
Binary diff not shown
77 msgstr ""
88 "Project-Id-Version: gstreamer 0.10.32.2\n"
99 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
10 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
10 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1111 "PO-Revision-Date: 2011-04-30 20:26+0300\n"
1212 "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
1313 "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
652652 msgid "geo location sublocation"
653653 msgstr "додаткові дані розташування"
654654
655 msgid ""
656 "a location whithin a city where the media has been produced or created (e.g. "
655 #, fuzzy
656 msgid ""
657 "a location within a city where the media has been produced or created (e.g. "
657658 "the neighborhood)"
658659 msgstr ""
659660 "місце у місті, де виконувалася зйомка або було створено дані (наприклад, "
Binary diff not shown
66 msgstr ""
77 "Project-Id-Version: gstreamer 0.10.29.2\n"
88 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
9 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
9 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
1010 "PO-Revision-Date: 2010-10-03 19:09+1030\n"
1111 "Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
1212 "Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
651651 msgid "geo location sublocation"
652652 msgstr "vị trí phụ địa lý"
653653
654 msgid ""
655 "a location whithin a city where the media has been produced or created (e.g. "
654 #, fuzzy
655 msgid ""
656 "a location within a city where the media has been produced or created (e.g. "
656657 "the neighborhood)"
657658 msgstr ""
658659 "một vùng bên trong thành phố ở đó phương tiện đã được tạo hay sản xuất (v.d. "
Binary diff not shown
55 msgstr ""
66 "Project-Id-Version: gstreamer 0.10.25.2\n"
77 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
8 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
8 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
99 "PO-Revision-Date: 2010-02-02 18:58+0800\n"
1010 "Last-Translator: Ji ZhengYu <zhengyuji@gmail.com>\n"
1111 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
639639 msgstr "地理海拔"
640640
641641 msgid ""
642 "a location whithin a city where the media has been produced or created (e.g. "
642 "a location within a city where the media has been produced or created (e.g. "
643643 "the neighborhood)"
644644 msgstr ""
645645
Binary diff not shown
55 msgstr ""
66 "Project-Id-Version: gstreamer 0.8.8\n"
77 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
8 "POT-Creation-Date: 2012-09-23 16:19+0100\n"
8 "POT-Creation-Date: 2012-10-07 12:26+0100\n"
99 "PO-Revision-Date: 2005-04-27 14:55+0800\n"
1010 "Last-Translator: Abel Cheung <abelcheung@gmail.com>\n"
1111 "Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
658658 msgstr "位置"
659659
660660 msgid ""
661 "a location whithin a city where the media has been produced or created (e.g. "
661 "a location within a city where the media has been produced or created (e.g. "
662662 "the neighborhood)"
663663 msgstr ""
664664
8989 g_slist_free (new_src_list);
9090
9191 end = gst_util_get_timestamp ();
92 g_print ("%" GST_TIME_FORMAT " - creating and linking %d elements\n",
92 g_print ("%" GST_TIME_FORMAT " - creating and linking %u elements\n",
9393 GST_TIME_ARGS (end - start), i);
9494
9595 start = gst_util_get_timestamp ();
108108 GST_MESSAGE_EOS | GST_MESSAGE_ERROR, -1);
109109 end = gst_util_get_timestamp ();
110110 gst_message_unref (msg);
111 g_print ("%" GST_TIME_FORMAT " - putting %u buffers through\n",
111 g_print ("%" GST_TIME_FORMAT " - putting %d buffers through\n",
112112 GST_TIME_ARGS (end - start), BUFFER_COUNT);
113113
114114 start = gst_util_get_timestamp ();
124124 mess_some_more ();
125125 if (g_timer_elapsed (timer, NULL) > 0.5) {
126126 g_mutex_lock (&fdlock);
127 g_print ("active fds :%d\n", g_list_length (fds));
127 g_print ("active fds :%u\n", g_list_length (fds));
128128 g_timer_start (timer);
129129 g_mutex_unlock (&fdlock);
130130 }
3737
3838 # Do not run the abi test in case any option which causes the API to change has
3939 # been used
40 if FALSE
4140 if !GST_DISABLE_REGISTRY
4241 if !GST_DISABLE_TRACE
4342 ABI_CHECKS = gst/gstabi
4443 endif
4544 endif
46 endif
47
48 if FALSE
45
4946 LIBSABI_CHECKS = libs/libsabi
50 endif
5147
5248 if HAVE_CXX
5349 CXX_CHECKS = gst/gstcpp libs/gstlibscpp
5454 target_triplet = @target@
5555 DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
5656 $(srcdir)/Makefile.in $(top_srcdir)/common/check.mak
57 check_PROGRAMS = gst/gstatomicqueue$(EXEEXT) gst/gstbuffer$(EXEEXT) \
58 gst/gstbufferlist$(EXEEXT) gst/gstmeta$(EXEEXT) \
59 gst/gstmemory$(EXEEXT) gst/gstbus$(EXEEXT) \
60 gst/gstcaps$(EXEEXT) $(am__EXEEXT_1) gst/gstdatetime$(EXEEXT) \
61 gst/gstinfo$(EXEEXT) gst/gstiterator$(EXEEXT) \
62 gst/gstmessage$(EXEEXT) gst/gstminiobject$(EXEEXT) \
63 gst/gstobject$(EXEEXT) gst/gstpad$(EXEEXT) \
64 gst/gstparamspecs$(EXEEXT) gst/gstpipeline$(EXEEXT) \
65 gst/gstpoll$(EXEEXT) gst/gstsegment$(EXEEXT) \
66 gst/gstsystemclock$(EXEEXT) gst/gstclock$(EXEEXT) \
67 gst/gststructure$(EXEEXT) gst/gsttag$(EXEEXT) \
68 gst/gsttagsetter$(EXEEXT) gst/gsttask$(EXEEXT) \
69 gst/gsttoc$(EXEEXT) gst/gsttocsetter$(EXEEXT) \
70 gst/gstvalue$(EXEEXT) generic/states$(EXEEXT) $(am__EXEEXT_2) \
71 $(am__EXEEXT_3) libs/adapter$(EXEEXT) libs/bitreader$(EXEEXT) \
57 check_PROGRAMS = $(am__EXEEXT_1) gst/gstatomicqueue$(EXEEXT) \
58 gst/gstbuffer$(EXEEXT) gst/gstbufferlist$(EXEEXT) \
59 gst/gstmeta$(EXEEXT) gst/gstmemory$(EXEEXT) \
60 gst/gstbus$(EXEEXT) gst/gstcaps$(EXEEXT) $(am__EXEEXT_2) \
61 gst/gstdatetime$(EXEEXT) gst/gstinfo$(EXEEXT) \
62 gst/gstiterator$(EXEEXT) gst/gstmessage$(EXEEXT) \
63 gst/gstminiobject$(EXEEXT) gst/gstobject$(EXEEXT) \
64 gst/gstpad$(EXEEXT) gst/gstparamspecs$(EXEEXT) \
65 gst/gstpipeline$(EXEEXT) gst/gstpoll$(EXEEXT) \
66 gst/gstsegment$(EXEEXT) gst/gstsystemclock$(EXEEXT) \
67 gst/gstclock$(EXEEXT) gst/gststructure$(EXEEXT) \
68 gst/gsttag$(EXEEXT) gst/gsttagsetter$(EXEEXT) \
69 gst/gsttask$(EXEEXT) gst/gsttoc$(EXEEXT) \
70 gst/gsttocsetter$(EXEEXT) gst/gstvalue$(EXEEXT) \
71 generic/states$(EXEEXT) $(am__EXEEXT_3) $(am__EXEEXT_4) \
72 $(am__EXEEXT_5) libs/adapter$(EXEEXT) libs/bitreader$(EXEEXT) \
7273 libs/bytereader$(EXEEXT) libs/bytewriter$(EXEEXT) \
7374 libs/collectpads$(EXEEXT) libs/gstnetclientclock$(EXEEXT) \
7475 libs/gstnettimeprovider$(EXEEXT) libs/transform1$(EXEEXT) \
117118 CONFIG_HEADER = $(top_builddir)/config.h
118119 CONFIG_CLEAN_FILES =
119120 CONFIG_CLEAN_VPATH_FILES =
120 @HAVE_CXX_TRUE@am__EXEEXT_1 = gst/gstcpp$(EXEEXT) \
121 @GST_DISABLE_REGISTRY_FALSE@@GST_DISABLE_TRACE_FALSE@am__EXEEXT_1 = gst/gstabi$(EXEEXT)
122 @HAVE_CXX_TRUE@am__EXEEXT_2 = gst/gstcpp$(EXEEXT) \
121123 @HAVE_CXX_TRUE@ libs/gstlibscpp$(EXEEXT)
122 @GST_DISABLE_PARSE_FALSE@am__EXEEXT_2 = pipelines/simple-launch-lines$(EXEEXT) \
124 @GST_DISABLE_PARSE_FALSE@am__EXEEXT_3 = pipelines/simple-launch-lines$(EXEEXT) \
123125 @GST_DISABLE_PARSE_FALSE@ pipelines/cleanup$(EXEEXT) \
124126 @GST_DISABLE_PARSE_FALSE@ pipelines/parse-launch$(EXEEXT)
125 @GST_DISABLE_PARSE_TRUE@am__EXEEXT_2 = \
127 @GST_DISABLE_PARSE_TRUE@am__EXEEXT_3 = \
126128 @GST_DISABLE_PARSE_TRUE@ pipelines/parse-disabled$(EXEEXT)
127 @GST_DISABLE_REGISTRY_FALSE@am__EXEEXT_3 = gst/gst$(EXEEXT) \
129 @GST_DISABLE_REGISTRY_FALSE@am__EXEEXT_4 = gst/gst$(EXEEXT) \
128130 @GST_DISABLE_REGISTRY_FALSE@ gst/gstbin$(EXEEXT) \
129131 @GST_DISABLE_REGISTRY_FALSE@ gst/gstchildproxy$(EXEEXT) \
130132 @GST_DISABLE_REGISTRY_FALSE@ gst/gstcontroller$(EXEEXT) \
161163 @GST_DISABLE_REGISTRY_FALSE@ pipelines/seek$(EXEEXT) \
162164 @GST_DISABLE_REGISTRY_FALSE@ pipelines/stress$(EXEEXT) \
163165 @GST_DISABLE_REGISTRY_FALSE@ pipelines/queue-error$(EXEEXT)
166 am__EXEEXT_5 = libs/libsabi$(EXEEXT)
164167 PROGRAMS = $(noinst_PROGRAMS)
165168 elements_capsfilter_SOURCES = elements/capsfilter.c
166169 elements_capsfilter_OBJECTS = capsfilter.$(OBJEXT)
275278 gst_gst_OBJECTS = gst.$(OBJEXT)
276279 gst_gst_LDADD = $(LDADD)
277280 gst_gst_DEPENDENCIES = $(top_builddir)/libs/gst/check/libgstcheck-@GST_API_VERSION@.la \
281 $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
282 $(am__DEPENDENCIES_1)
283 gst_gstabi_SOURCES = gst/gstabi.c
284 gst_gstabi_OBJECTS = gstabi.$(OBJEXT)
285 gst_gstabi_LDADD = $(LDADD)
286 gst_gstabi_DEPENDENCIES = $(top_builddir)/libs/gst/check/libgstcheck-@GST_API_VERSION@.la \
278287 $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
279288 $(am__DEPENDENCIES_1)
280289 gst_gstatomicqueue_SOURCES = gst/gstatomicqueue.c
586595 libs_gstnettimeprovider_DEPENDENCIES = \
587596 $(top_builddir)/libs/gst/net/libgstnet-@GST_API_VERSION@.la \
588597 $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
598 libs_libsabi_SOURCES = libs/libsabi.c
599 libs_libsabi_OBJECTS = libsabi.$(OBJEXT)
600 libs_libsabi_LDADD = $(LDADD)
601 libs_libsabi_DEPENDENCIES = $(top_builddir)/libs/gst/check/libgstcheck-@GST_API_VERSION@.la \
602 $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
603 $(am__DEPENDENCIES_1)
589604 libs_queuearray_SOURCES = libs/queuearray.c
590605 libs_queuearray_OBJECTS = queuearray.$(OBJEXT)
591606 libs_queuearray_LDADD = $(LDADD)
700715 elements/funnel.c elements/identity.c elements/multiqueue.c \
701716 elements/queue.c elements/queue2.c elements/selector.c \
702717 elements/tee.c elements/valve.c generic/sinks.c \
703 generic/states.c gst/gst.c gst/gstatomicqueue.c gst/gstbin.c \
704 gst/gstbuffer.c gst/gstbufferlist.c gst/gstbus.c gst/gstcaps.c \
705 gst/gstchildproxy.c gst/gstclock.c gst/gstcontroller.c \
706 $(gst_gstcpp_SOURCES) gst/gstdatetime.c gst/gstelement.c \
707 gst/gstelementfactory.c gst/gstevent.c gst/gstghostpad.c \
708 gst/gstinfo.c gst/gstiterator.c gst/gstmemory.c \
709 gst/gstmessage.c gst/gstmeta.c gst/gstminiobject.c \
710 gst/gstobject.c gst/gstpad.c gst/gstparamspecs.c \
711 gst/gstpipeline.c gst/gstplugin.c gst/gstpoll.c \
712 gst/gstpreset.c gst/gstquery.c gst/gstregistry.c \
718 generic/states.c gst/gst.c gst/gstabi.c gst/gstatomicqueue.c \
719 gst/gstbin.c gst/gstbuffer.c gst/gstbufferlist.c gst/gstbus.c \
720 gst/gstcaps.c gst/gstchildproxy.c gst/gstclock.c \
721 gst/gstcontroller.c $(gst_gstcpp_SOURCES) gst/gstdatetime.c \
722 gst/gstelement.c gst/gstelementfactory.c gst/gstevent.c \
723 gst/gstghostpad.c gst/gstinfo.c gst/gstiterator.c \
724 gst/gstmemory.c gst/gstmessage.c gst/gstmeta.c \
725 gst/gstminiobject.c gst/gstobject.c gst/gstpad.c \
726 gst/gstparamspecs.c gst/gstpipeline.c gst/gstplugin.c \
727 gst/gstpoll.c gst/gstpreset.c gst/gstquery.c gst/gstregistry.c \
713728 gst/gstsegment.c gst/gststructure.c gst/gstsystemclock.c \
714729 gst/gsttag.c gst/gsttagsetter.c gst/gsttask.c gst/gsttoc.c \
715730 gst/gsttocsetter.c gst/gsturi.c gst/gstutils.c gst/gstvalue.c \
717732 libs/bytereader.c libs/bytewriter.c libs/collectpads.c \
718733 libs/controller.c $(libs_gstlibscpp_SOURCES) \
719734 libs/gstnetclientclock.c libs/gstnettimeprovider.c \
720 libs/queuearray.c libs/transform1.c libs/typefindhelper.c \
721 pipelines/cleanup.c pipelines/parse-disabled.c \
722 pipelines/parse-launch.c pipelines/queue-error.c \
723 pipelines/seek.c pipelines/simple-launch-lines.c \
724 pipelines/stress.c tools/gstinspect.c
735 libs/libsabi.c libs/queuearray.c libs/transform1.c \
736 libs/typefindhelper.c pipelines/cleanup.c \
737 pipelines/parse-disabled.c pipelines/parse-launch.c \
738 pipelines/queue-error.c pipelines/seek.c \
739 pipelines/simple-launch-lines.c pipelines/stress.c \
740 tools/gstinspect.c
725741 DIST_SOURCES = elements/capsfilter.c elements/fakesink.c \
726742 elements/fakesrc.c elements/fdsrc.c elements/filesink.c \
727743 elements/filesrc.c elements/funnel.c elements/identity.c \
728744 elements/multiqueue.c elements/queue.c elements/queue2.c \
729745 elements/selector.c elements/tee.c elements/valve.c \
730 generic/sinks.c generic/states.c gst/gst.c \
746 generic/sinks.c generic/states.c gst/gst.c gst/gstabi.c \
731747 gst/gstatomicqueue.c gst/gstbin.c gst/gstbuffer.c \
732748 gst/gstbufferlist.c gst/gstbus.c gst/gstcaps.c \
733749 gst/gstchildproxy.c gst/gstclock.c gst/gstcontroller.c \
745761 libs/bytereader.c libs/bytewriter.c libs/collectpads.c \
746762 libs/controller.c $(libs_gstlibscpp_SOURCES) \
747763 libs/gstnetclientclock.c libs/gstnettimeprovider.c \
748 libs/queuearray.c libs/transform1.c libs/typefindhelper.c \
749 pipelines/cleanup.c pipelines/parse-disabled.c \
750 pipelines/parse-launch.c pipelines/queue-error.c \
751 pipelines/seek.c pipelines/simple-launch-lines.c \
752 pipelines/stress.c tools/gstinspect.c
764 libs/libsabi.c libs/queuearray.c libs/transform1.c \
765 libs/typefindhelper.c pipelines/cleanup.c \
766 pipelines/parse-disabled.c pipelines/parse-launch.c \
767 pipelines/queue-error.c pipelines/seek.c \
768 pipelines/simple-launch-lines.c pipelines/stress.c \
769 tools/gstinspect.c
753770 am__can_run_installinfo = \
754771 case $$AM_UPDATE_INFO_DIR in \
755772 n|no|NO) false;; \
10621079 # These tests don't even build any longer:
10631080 # gst/gstindex.c
10641081 @GST_DISABLE_PARSE_TRUE@PARSE_CHECKS = pipelines/parse-disabled
1082
1083 # Do not run the abi test in case any option which causes the API to change has
1084 # been used
1085 @GST_DISABLE_REGISTRY_FALSE@@GST_DISABLE_TRACE_FALSE@ABI_CHECKS = gst/gstabi
1086 LIBSABI_CHECKS = libs/libsabi
10651087 @HAVE_CXX_FALSE@CXX_CHECKS =
10661088 @HAVE_CXX_TRUE@CXX_CHECKS = gst/gstcpp libs/gstlibscpp
10671089 @GST_DISABLE_REGISTRY_FALSE@REGISTRY_CHECKS = \
13071329 gst/gst$(EXEEXT): $(gst_gst_OBJECTS) $(gst_gst_DEPENDENCIES) $(EXTRA_gst_gst_DEPENDENCIES) gst/$(am__dirstamp)
13081330 @rm -f gst/gst$(EXEEXT)
13091331 $(AM_V_CCLD)$(LINK) $(gst_gst_OBJECTS) $(gst_gst_LDADD) $(LIBS)
1332 gst/gstabi$(EXEEXT): $(gst_gstabi_OBJECTS) $(gst_gstabi_DEPENDENCIES) $(EXTRA_gst_gstabi_DEPENDENCIES) gst/$(am__dirstamp)
1333 @rm -f gst/gstabi$(EXEEXT)
1334 $(AM_V_CCLD)$(LINK) $(gst_gstabi_OBJECTS) $(gst_gstabi_LDADD) $(LIBS)
13101335 gst/gstatomicqueue$(EXEEXT): $(gst_gstatomicqueue_OBJECTS) $(gst_gstatomicqueue_DEPENDENCIES) $(EXTRA_gst_gstatomicqueue_DEPENDENCIES) gst/$(am__dirstamp)
13111336 @rm -f gst/gstatomicqueue$(EXEEXT)
13121337 $(AM_V_CCLD)$(LINK) $(gst_gstatomicqueue_OBJECTS) $(gst_gstatomicqueue_LDADD) $(LIBS)
14661491 libs/gstnettimeprovider$(EXEEXT): $(libs_gstnettimeprovider_OBJECTS) $(libs_gstnettimeprovider_DEPENDENCIES) $(EXTRA_libs_gstnettimeprovider_DEPENDENCIES) libs/$(am__dirstamp)
14671492 @rm -f libs/gstnettimeprovider$(EXEEXT)
14681493 $(AM_V_CCLD)$(LINK) $(libs_gstnettimeprovider_OBJECTS) $(libs_gstnettimeprovider_LDADD) $(LIBS)
1494 libs/libsabi$(EXEEXT): $(libs_libsabi_OBJECTS) $(libs_libsabi_DEPENDENCIES) $(EXTRA_libs_libsabi_DEPENDENCIES) libs/$(am__dirstamp)
1495 @rm -f libs/libsabi$(EXEEXT)
1496 $(AM_V_CCLD)$(LINK) $(libs_libsabi_OBJECTS) $(libs_libsabi_LDADD) $(LIBS)
14691497 libs/queuearray$(EXEEXT): $(libs_queuearray_OBJECTS) $(libs_queuearray_DEPENDENCIES) $(EXTRA_libs_queuearray_DEPENDENCIES) libs/$(am__dirstamp)
14701498 @rm -f libs/queuearray$(EXEEXT)
14711499 $(AM_V_CCLD)$(LINK) $(libs_queuearray_OBJECTS) $(libs_queuearray_LDADD) $(LIBS)
15291557 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filesink.Po@am__quote@
15301558 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/funnel.Po@am__quote@
15311559 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gst.Po@am__quote@
1560 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstabi.Po@am__quote@
15321561 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstatomicqueue.Po@am__quote@
15331562 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstbin.Po@am__quote@
15341563 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstbuffer.Po@am__quote@
15751604 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstutils.Po@am__quote@
15761605 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstvalue.Po@am__quote@
15771606 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/identity.Po@am__quote@
1607 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsabi.Po@am__quote@
15781608 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multiqueue.Po@am__quote@
15791609 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse-disabled.Po@am__quote@
15801610 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse-launch.Po@am__quote@
18521882 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
18531883 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gst.obj `if test -f 'gst/gst.c'; then $(CYGPATH_W) 'gst/gst.c'; else $(CYGPATH_W) '$(srcdir)/gst/gst.c'; fi`
18541884
1885 gstabi.o: gst/gstabi.c
1886 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gstabi.o -MD -MP -MF $(DEPDIR)/gstabi.Tpo -c -o gstabi.o `test -f 'gst/gstabi.c' || echo '$(srcdir)/'`gst/gstabi.c
1887 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gstabi.Tpo $(DEPDIR)/gstabi.Po
1888 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gst/gstabi.c' object='gstabi.o' libtool=no @AMDEPBACKSLASH@
1889 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1890 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gstabi.o `test -f 'gst/gstabi.c' || echo '$(srcdir)/'`gst/gstabi.c
1891
1892 gstabi.obj: gst/gstabi.c
1893 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gstabi.obj -MD -MP -MF $(DEPDIR)/gstabi.Tpo -c -o gstabi.obj `if test -f 'gst/gstabi.c'; then $(CYGPATH_W) 'gst/gstabi.c'; else $(CYGPATH_W) '$(srcdir)/gst/gstabi.c'; fi`
1894 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gstabi.Tpo $(DEPDIR)/gstabi.Po
1895 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gst/gstabi.c' object='gstabi.obj' libtool=no @AMDEPBACKSLASH@
1896 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1897 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gstabi.obj `if test -f 'gst/gstabi.c'; then $(CYGPATH_W) 'gst/gstabi.c'; else $(CYGPATH_W) '$(srcdir)/gst/gstabi.c'; fi`
1898
18551899 gstatomicqueue.o: gst/gstatomicqueue.c
18561900 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gstatomicqueue.o -MD -MP -MF $(DEPDIR)/gstatomicqueue.Tpo -c -o gstatomicqueue.o `test -f 'gst/gstatomicqueue.c' || echo '$(srcdir)/'`gst/gstatomicqueue.c
18571901 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gstatomicqueue.Tpo $(DEPDIR)/gstatomicqueue.Po
25512595 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libs/gstnettimeprovider.c' object='gstnettimeprovider.obj' libtool=no @AMDEPBACKSLASH@
25522596 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
25532597 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gstnettimeprovider.obj `if test -f 'libs/gstnettimeprovider.c'; then $(CYGPATH_W) 'libs/gstnettimeprovider.c'; else $(CYGPATH_W) '$(srcdir)/libs/gstnettimeprovider.c'; fi`
2598
2599 libsabi.o: libs/libsabi.c
2600 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsabi.o -MD -MP -MF $(DEPDIR)/libsabi.Tpo -c -o libsabi.o `test -f 'libs/libsabi.c' || echo '$(srcdir)/'`libs/libsabi.c
2601 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsabi.Tpo $(DEPDIR)/libsabi.Po
2602 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libs/libsabi.c' object='libsabi.o' libtool=no @AMDEPBACKSLASH@
2603 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2604 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsabi.o `test -f 'libs/libsabi.c' || echo '$(srcdir)/'`libs/libsabi.c
2605
2606 libsabi.obj: libs/libsabi.c
2607 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsabi.obj -MD -MP -MF $(DEPDIR)/libsabi.Tpo -c -o libsabi.obj `if test -f 'libs/libsabi.c'; then $(CYGPATH_W) 'libs/libsabi.c'; else $(CYGPATH_W) '$(srcdir)/libs/libsabi.c'; fi`
2608 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsabi.Tpo $(DEPDIR)/libsabi.Po
2609 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libs/libsabi.c' object='libsabi.obj' libtool=no @AMDEPBACKSLASH@
2610 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2611 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsabi.obj `if test -f 'libs/libsabi.c'; then $(CYGPATH_W) 'libs/libsabi.c'; else $(CYGPATH_W) '$(srcdir)/libs/libsabi.c'; fi`
25542612
25552613 queuearray.o: libs/queuearray.c
25562614 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT queuearray.o -MD -MP -MF $(DEPDIR)/queuearray.Tpo -c -o queuearray.o `test -f 'libs/queuearray.c' || echo '$(srcdir)/'`libs/queuearray.c
0 /* GStreamer
1 * Copyright (C) 2005 Wim Taymans <wim@fluendo.com>
2 *
3 * gstabi.c: Unit test for ABI compatibility
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details.
14 *
15 * You should have received a copy of the GNU Library General Public
16 * License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 * Boston, MA 02111-1307, USA.
19 */
20
21 #include <config.h>
22 #include <gst/check/gstcheck.h>
23
24 #ifdef HAVE_CPU_I386
25 #include "struct_i386.h"
26 #define HAVE_ABI_SIZES TRUE
27 #else
28 #ifdef __powerpc64__
29 #include "struct_ppc64.h"
30 #define HAVE_ABI_SIZES TRUE
31 #else
32 #ifdef __powerpc__
33 #include "struct_ppc32.h"
34 #define HAVE_ABI_SIZES TRUE
35 #else
36 #ifdef HAVE_CPU_X86_64
37 #include "struct_x86_64.h"
38 #define HAVE_ABI_SIZES TRUE
39 #else
40 #ifdef HAVE_CPU_HPPA
41 #include "struct_hppa.h"
42 #define HAVE_ABI_SIZES TRUE
43 #else
44 #ifdef HAVE_CPU_SPARC
45 #include "struct_sparc.h"
46 #define HAVE_ABI_SIZES TRUE
47 #else
48 #ifdef HAVE_CPU_ARM
49 #include "struct_arm.h"
50 #define HAVE_ABI_SIZES TRUE
51 #else
52 /* in case someone wants to generate a new arch */
53 #include "struct_i386.h"
54 #define HAVE_ABI_SIZES FALSE
55 #endif
56 #endif
57 #endif
58 #endif
59 #endif
60 #endif
61 #endif
62
63 GST_START_TEST (test_ABI)
64 {
65 gst_check_abi_list (list, HAVE_ABI_SIZES);
66 }
67
68 GST_END_TEST;
69
70 static Suite *
71 gstabi_suite (void)
72 {
73 Suite *s = suite_create ("GstABI");
74 TCase *tc_chain = tcase_create ("size check");
75
76 tcase_set_timeout (tc_chain, 0);
77
78 suite_add_tcase (s, tc_chain);
79 tcase_add_test (tc_chain, test_ABI);
80 return s;
81 }
82
83 GST_CHECK_MAIN (gstabi);
713713
714714 GST_END_TEST;
715715
716 GST_START_TEST (test_intersect_list_duplicate)
717 {
718 GstCaps *caps1, *caps2, *icaps;
719
720 /* make sure we don't take too long to intersect these.. */
721 caps1 = gst_caps_from_string ("video/x-raw, format=(string)YV12; "
722 "video/x-raw, format=(string)I420; video/x-raw, format=(string)YUY2; "
723 "video/x-raw, format=(string)UYVY; "
724 "video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx,"
725 " xRGB, xBGR, { RGBA, RGBA, { RGBA, RGBA }, "
726 "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
727 "{ RGBA, RGBA, { RGBA, RGBA } } }, { RGBA, RGBA, { RGBA, RGBA }, "
728 "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
729 "{ RGBA, RGBA, { RGBA, RGBA } } } }, { RGBA, RGBA, { RGBA, RGBA }, "
730 "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
731 "{ RGBA, RGBA, { RGBA, RGBA } } }, { RGBA, RGBA, { RGBA, RGBA }, "
732 "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
733 "{ RGBA, RGBA, { RGBA, RGBA } } } } } }, BGRA, ARGB, { ABGR, ABGR, "
734 "{ ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
735 "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } }, "
736 "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
737 "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } } }, "
738 "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
739 "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } }, "
740 "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
741 "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } } } } }, "
742 "RGB, BGR, Y41B, Y42B, YVYU, Y444 }; "
743 "video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, "
744 "xRGB, xBGR, { RGBA, RGBA, { RGBA, RGBA }, "
745 "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
746 "{ RGBA, RGBA, { RGBA, RGBA } } }, { RGBA, RGBA, { RGBA, RGBA }, "
747 "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
748 "{ RGBA, RGBA, { RGBA, RGBA } } } }, { RGBA, RGBA, { RGBA, RGBA }, "
749 "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
750 "{ RGBA, RGBA, { RGBA, RGBA } } }, { RGBA, RGBA, { RGBA, RGBA }, "
751 "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
752 "{ RGBA, RGBA, { RGBA, RGBA } } } } } }, BGRA, ARGB, "
753 "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
754 "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } }, "
755 "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
756 "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } } }, "
757 "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
758 "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } }, "
759 "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
760 "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } } } } }, "
761 "RGB, BGR, Y41B, Y42B, YVYU, Y444, NV12, NV21 }; "
762 "video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, "
763 "BGRx, xRGB, xBGR, { RGBA, RGBA, { RGBA, RGBA }, "
764 "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
765 "{ RGBA, RGBA, { RGBA, RGBA } } } }, BGRA, ARGB, "
766 "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
767 "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } } }, "
768 "RGB, BGR, Y41B, Y42B, YVYU, Y444, NV12, NV21 }");
769
770 caps2 = gst_caps_copy (caps1);
771
772 icaps = gst_caps_intersect (caps1, caps2);
773
774 gst_caps_unref (caps1);
775 gst_caps_unref (caps2);
776 gst_caps_unref (icaps);
777 }
778
779 GST_END_TEST;
716780
717781 GST_START_TEST (test_intersect_zigzag)
718782 {
918982 tcase_add_test (tc_chain, test_merge_subset);
919983 tcase_add_test (tc_chain, test_intersect);
920984 tcase_add_test (tc_chain, test_intersect2);
985 tcase_add_test (tc_chain, test_intersect_list_duplicate);
921986 tcase_add_test (tc_chain, test_intersect_zigzag);
922987 tcase_add_test (tc_chain, test_intersect_first);
923988 tcase_add_test (tc_chain, test_intersect_first2);
11061106
11071107 GST_END_TEST;
11081108
1109 /* Test that remove a ghostpad that has something flowing through it does not
1110 * crash the program
1111 */
1112
1113 GstElement *bin;
1114 GstPad *ghostsink;
1115 GstPad *ghostsrc;
1116
1117 static GstPadProbeReturn
1118 remove_ghostpad_probe_cb (GstPad * pad, GstPadProbeInfo * info, gpointer data)
1119 {
1120 gst_pad_set_active (ghostsrc, FALSE);
1121 gst_pad_set_active (ghostsink, FALSE);
1122 gst_element_remove_pad (bin, ghostsrc);
1123 gst_element_remove_pad (bin, ghostsink);
1124
1125 return GST_PAD_PROBE_DROP;
1126 }
1127
1128 GST_START_TEST (test_ghost_pads_remove_while_playing)
1129 {
1130 GstPad *sinkpad;
1131 GstPad *srcpad;
1132
1133 bin = gst_bin_new (NULL);
1134 gst_element_set_state (bin, GST_STATE_PLAYING);
1135 sinkpad = gst_pad_new ("sink", GST_PAD_SINK);
1136
1137 ghostsrc = gst_ghost_pad_new_no_target ("ghostsrc", GST_PAD_SRC);
1138 sinkpad = GST_PAD (gst_proxy_pad_get_internal (GST_PROXY_PAD (ghostsrc)));
1139 ghostsink = gst_ghost_pad_new ("ghostsink", sinkpad);
1140 gst_object_unref (sinkpad);
1141 gst_pad_set_active (ghostsrc, TRUE);
1142 gst_pad_set_active (ghostsink, TRUE);
1143 gst_element_add_pad (bin, ghostsrc);
1144 gst_element_add_pad (bin, ghostsink);
1145
1146 srcpad = gst_pad_new ("srcpad", GST_PAD_SRC);
1147 gst_pad_set_active (srcpad, TRUE);
1148 gst_pad_link (srcpad, ghostsink);
1149
1150 gst_pad_add_probe (ghostsrc, GST_PAD_PROBE_TYPE_BUFFER,
1151 remove_ghostpad_probe_cb, NULL, NULL);
1152
1153 g_assert (gst_pad_push (srcpad, gst_buffer_new ()) == GST_FLOW_OK);
1154
1155 gst_pad_set_active (srcpad, FALSE);
1156 gst_element_set_state (bin, GST_STATE_NULL);
1157 gst_object_unref (bin);
1158 gst_object_unref (srcpad);
1159 }
1160
1161 GST_END_TEST;
1162
11091163 static Suite *
11101164 gst_ghost_pad_suite (void)
11111165 {
11301184 tcase_add_test (tc_chain, test_ghost_pads_src_link_unlink);
11311185 tcase_add_test (tc_chain, test_ghost_pads_change_when_linked);
11321186 tcase_add_test (tc_chain, test_ghost_pads_internal_link);
1187 tcase_add_test (tc_chain, test_ghost_pads_remove_while_playing);
11331188
11341189 return s;
11351190 }
148148
149149 fail_if (gst_memory_map (mem, &info, GST_MAP_WRITE));
150150
151 /* Make sure mapping anxd unmapping it doesn't change it's locking state */
152 fail_unless (gst_memory_map (mem, &info, GST_MAP_READ));
153 gst_memory_unmap (mem, &info);
154
155 fail_if (gst_memory_map (mem, &info, GST_MAP_WRITE));
156
151157 mem2 = gst_memory_copy (mem, 0, -1);
152158 fail_unless (GST_MEMORY_IS_READONLY (mem));
153159 fail_if (GST_MEMORY_IS_READONLY (mem2));
138138 {
139139 static const GstMetaInfo *meta_test_info = NULL;
140140
141 if (meta_test_info == NULL) {
142 meta_test_info = gst_meta_register (GST_META_TEST_API_TYPE,
141 if (g_once_init_enter (&meta_test_info)) {
142 const GstMetaInfo *mi = gst_meta_register (GST_META_TEST_API_TYPE,
143143 "GstMetaTest",
144144 sizeof (GstMetaTest),
145145 test_init_func, test_free_func, test_transform_func);
146 g_once_init_leave (&meta_test_info, mi);
146147 }
147148 return meta_test_info;
148149 }
0
1 GstCheckABIStruct list[] = {
2 {"GstBin", sizeof (GstBin), 192},
3 {"GstBinClass", sizeof (GstBinClass), 288},
4 {"GstBuffer", sizeof (GstBuffer), 88},
5 {"GstBufferClass", sizeof (GstBufferClass), 16},
6 {"GstBus", sizeof (GstBus), 80},
7 {"GstBusClass", sizeof (GstBusClass), 144},
8 {"GstCaps", sizeof (GstCaps), 32},
9 {"GstStaticCaps", sizeof (GstStaticCaps), 52},
10 {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 40},
11 {"GstClock", sizeof (GstClock), 176},
12 {"GstClockClass", sizeof (GstClockClass), 160},
13 {"GstElement", sizeof (GstElement), 136},
14 {"GstElementClass", sizeof (GstElementClass), 248},
15 {"GstElementFactory", sizeof (GstElementFactory), 144},
16 {"GstElementFactoryClass", sizeof (GstElementFactoryClass), 152},
17 {"GstElementDetails", sizeof (GstElementDetails), 32},
18 {"GstEvent", sizeof (GstEvent), 48},
19 {"GstEventClass", sizeof (GstEventClass), 32},
20 {"GstFormatDefinition", sizeof (GstFormatDefinition), 16},
21 {"GstIndexEntry", sizeof (GstIndexEntry), 20},
22 {"GstIndexGroup", sizeof (GstIndexGroup), 16},
23 {"GstIndex", sizeof (GstIndex), 100},
24 {"GstIndexClass", sizeof (GstIndexClass), 156},
25 {"GstIndexAssociation", sizeof (GstIndexAssociation), 16},
26 {"GstIndexFactory", sizeof (GstIndexFactory), 96},
27 {"GstIndexFactoryClass", sizeof (GstIndexFactoryClass), 152},
28 {"GstDebugCategory", sizeof (GstDebugCategory), 16},
29 {"GstIterator", sizeof (GstIterator), 52},
30 {"GstMessage", sizeof (GstMessage), 64},
31 {"GstMessageClass", sizeof (GstMessageClass), 32},
32 {"GstMiniObject", sizeof (GstMiniObject), 16},
33 {"GstMiniObjectClass", sizeof (GstMiniObjectClass), 16},
34 {"GstObject", sizeof (GstObject), 40},
35 {"GstObjectClass", sizeof (GstObjectClass), 120},
36 {"GstPad", sizeof (GstPad), 188},
37 {"GstPadClass", sizeof (GstPadClass), 152},
38 {"GstPadTemplate", sizeof (GstPadTemplate), 72},
39 {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 140},
0 static GstCheckABIStruct list[] = {
1 {"GstAllocationParams", sizeof (GstAllocationParams), 64},
2 {"GstAllocator", sizeof (GstAllocator), 176},
3 {"GstAllocatorClass", sizeof (GstAllocatorClass), 232},
4 {"GstBinClass", sizeof (GstBinClass), 576},
5 {"GstBin", sizeof (GstBin), 376},
6 {"GstBuffer", sizeof (GstBuffer), 112},
7 {"GstBufferPoolAcquireParams", sizeof (GstBufferPoolAcquireParams), 64},
8 {"GstBufferPool", sizeof (GstBufferPool), 136},
9 {"GstBufferPoolClass", sizeof (GstBufferPoolClass), 288},
10 {"GstBusClass", sizeof (GstBusClass), 232},
11 {"GstBus", sizeof (GstBus), 128},
12 {"GstCaps", sizeof (GstCaps), 64},
13 {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 88},
14 {"GstClockClass", sizeof (GstClockClass), 264},
15 {"GstClockEntry", sizeof (GstClockEntry), 112},
16 {"GstClock", sizeof (GstClock), 128},
17 {"GstControlBinding", sizeof (GstControlBinding), 152},
18 {"GstControlBindingClass", sizeof (GstControlBindingClass), 248},
19 {"GstControlSource", sizeof (GstControlSource), 136},
20 {"GstControlSourceClass", sizeof (GstControlSourceClass), 216},
21 {"GstDebugCategory", sizeof (GstDebugCategory), 24},
22 {"GstElementClass", sizeof (GstElementClass), 488},
23 {"GstElement", sizeof (GstElement), 264},
24 {"GstEvent", sizeof (GstEvent), 88},
25 {"GstFormatDefinition", sizeof (GstFormatDefinition), 32},
26 {"GstGhostPadClass", sizeof (GstGhostPadClass), 272},
27 {"GstGhostPad", sizeof (GstGhostPad), 536},
28 {"GstIterator", sizeof (GstIterator), 120},
29 {"GstMemory", sizeof (GstMemory), 112},
30 {"GstMapInfo", sizeof (GstMapInfo), 104},
31 {"GstMessage", sizeof (GstMessage), 120},
32 {"GstMeta", sizeof (GstMeta), 16},
33 {"GstMetaTransformCopy", sizeof (GstMetaTransformCopy), 24},
34 {"GstMetaInfo", sizeof (GstMetaInfo), 80},
35 {"GstMiniObject", sizeof (GstMiniObject), 64},
36 {"GstObjectClass", sizeof (GstObjectClass), 184},
37 {"GstObject", sizeof (GstObject), 88},
38 {"GstPadClass", sizeof (GstPadClass), 232},
39 {"GstPad", sizeof (GstPad), 520},
40 {"GstPadProbeInfo", sizeof (GstPadProbeInfo), 72},
41 {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 224},
42 {"GstPadTemplate", sizeof (GstPadTemplate), 144},
43 {"GstParamSpecFraction", sizeof (GstParamSpecFraction), 96},
44 {"GstPipelineClass", sizeof (GstPipelineClass), 608},
45 {"GstPipeline", sizeof (GstPipeline), 440},
46 {"GstPluginDesc", sizeof (GstPluginDesc), 112},
47 {"GstPresetInterface", sizeof (GstPresetInterface), 112},
48 {"GstProxyPadClass", sizeof (GstProxyPadClass), 240},
49 {"GstProxyPad", sizeof (GstProxyPad), 528},
50 {"GstQuery", sizeof (GstQuery), 72},
51 {"GstRegistryClass", sizeof (GstRegistryClass), 184},
52 {"GstRegistry", sizeof (GstRegistry), 96},
53 {"GstSegment", sizeof (GstSegment), 120},
54 {"GstStaticCaps", sizeof (GstStaticCaps), 48},
4055 {"GstStaticPadTemplate", sizeof (GstStaticPadTemplate), 64},
41 {"GstPipeline", sizeof (GstPipeline), 232},
42 {"GstPipelineClass", sizeof (GstPipelineClass), 304},
43 {"GstPlugin", sizeof (GstPlugin), 152},
44 {"GstPluginClass", sizeof (GstPluginClass), 136},
45 {"GstPluginDesc", sizeof (GstPluginDesc), 56},
46 {"GstPluginFeature", sizeof (GstPluginFeature), 72},
47 {"GstPluginFeatureClass", sizeof (GstPluginFeatureClass), 136},
48 {"GstQueryTypeDefinition", sizeof (GstQueryTypeDefinition), 16},
49 {"GstQuery", sizeof (GstQuery), 28},
50 {"GstQueryClass", sizeof (GstQueryClass), 32},
51 {"GstRegistry", sizeof (GstRegistry), 72},
52 {"GstRegistryClass", sizeof (GstRegistryClass), 144},
53 {"GstSegment", sizeof (GstSegment), 88},
54 {"GstStructure", sizeof (GstStructure), 20},
55 {"GstSystemClock", sizeof (GstSystemClock), 200},
56 {"GstSystemClockClass", sizeof (GstSystemClockClass), 176},
57 {"GstTagSetterInterface", sizeof (GstTagSetterInterface), 8},
58 {"GstTask", sizeof (GstTask), 80},
59 {"GstTaskClass", sizeof (GstTaskClass), 140},
60 {"GstTrace", sizeof (GstTrace), 20},
61 {"GstTraceEntry", sizeof (GstTraceEntry), 128},
62 {"GstAllocTrace", sizeof (GstAllocTrace), 16},
63 {"GstTypeFind", sizeof (GstTypeFind), 32},
64 {"GstTypeFindFactory", sizeof (GstTypeFindFactory), 108},
65 {"GstTypeFindFactoryClass", sizeof (GstTypeFindFactoryClass), 152},
66 {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 44},
67 {"GstValueTable", sizeof (GstValueTable), 32},
56 {"GstStructure", sizeof (GstStructure), 16},
57 {"GstSystemClockClass", sizeof (GstSystemClockClass), 296},
58 {"GstSystemClock", sizeof (GstSystemClock), 168},
59 {"GstTagList", sizeof (GstTagList), 64,},
60 {"GstTagSetterInterface", sizeof (GstTagSetterInterface), 16},
61 {"GstTaskClass", sizeof (GstTaskClass), 224},
62 {"GstTask", sizeof (GstTask), 200},
63 {"GstTaskPoolClass", sizeof (GstTaskPoolClass), 248},
64 {"GstTaskPool", sizeof (GstTaskPool), 128},
65 {"GstTimedValue", sizeof (GstTimedValue), 16},
66 {"GstTocSetterInterface", sizeof (GstTocSetterInterface), 16},
67 {"GstTypeFind", sizeof (GstTypeFind), 64},
68 {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 48},
69 {"GstValueTable", sizeof (GstValueTable), 64},
6870 {NULL, 0, 0}
6971 };
00 static GstCheckABIStruct list[] = {
1 {"GstBin", sizeof (GstBin), 192},
2 {"GstBinClass", sizeof (GstBinClass), 288},
3 {"GstBuffer", sizeof (GstBuffer), 88},
4 {"GstBufferClass", sizeof (GstBufferClass), 16},
5 {"GstBus", sizeof (GstBus), 80},
6 {"GstBusClass", sizeof (GstBusClass), 144},
7 {"GstCaps", sizeof (GstCaps), 32},
8 {"GstStaticCaps", sizeof (GstStaticCaps), 52},
9 {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 40},
10 {"GstClock", sizeof (GstClock), 176},
11 {"GstClockClass", sizeof (GstClockClass), 160},
12 {"GstElement", sizeof (GstElement), 136},
13 {"GstElementClass", sizeof (GstElementClass), 248},
14 {"GstElementFactory", sizeof (GstElementFactory), 144},
15 {"GstElementFactoryClass", sizeof (GstElementFactoryClass), 152},
16 {"GstElementDetails", sizeof (GstElementDetails), 32},
17 {"GstEvent", sizeof (GstEvent), 48},
18 {"GstEventClass", sizeof (GstEventClass), 32},
19 {"GstFormatDefinition", sizeof (GstFormatDefinition), 16},
20 {"GstIndexEntry", sizeof (GstIndexEntry), 20},
21 {"GstIndexGroup", sizeof (GstIndexGroup), 16},
22 {"GstIndex", sizeof (GstIndex), 100},
23 {"GstIndexClass", sizeof (GstIndexClass), 156},
24 {"GstIndexAssociation", sizeof (GstIndexAssociation), 16},
25 {"GstIndexFactory", sizeof (GstIndexFactory), 96},
26 {"GstIndexFactoryClass", sizeof (GstIndexFactoryClass), 152},
27 {"GstDebugCategory", sizeof (GstDebugCategory), 16},
28 {"GstIterator", sizeof (GstIterator), 52},
29 {"GstMessage", sizeof (GstMessage), 64},
30 {"GstMessageClass", sizeof (GstMessageClass), 32},
31 {"GstMiniObject", sizeof (GstMiniObject), 16},
32 {"GstMiniObjectClass", sizeof (GstMiniObjectClass), 16},
33 {"GstObject", sizeof (GstObject), 40},
34 {"GstObjectClass", sizeof (GstObjectClass), 120},
35 {"GstPad", sizeof (GstPad), 188},
36 {"GstPadClass", sizeof (GstPadClass), 152},
37 {"GstPadTemplate", sizeof (GstPadTemplate), 72},
38 {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 140},
1 {"GstAllocationParams", sizeof (GstAllocationParams), 64},
2 {"GstAllocator", sizeof (GstAllocator), 176},
3 {"GstAllocatorClass", sizeof (GstAllocatorClass), 232},
4 {"GstBinClass", sizeof (GstBinClass), 576},
5 {"GstBin", sizeof (GstBin), 376},
6 {"GstBuffer", sizeof (GstBuffer), 112},
7 {"GstBufferPoolAcquireParams", sizeof (GstBufferPoolAcquireParams), 64},
8 {"GstBufferPool", sizeof (GstBufferPool), 136},
9 {"GstBufferPoolClass", sizeof (GstBufferPoolClass), 288},
10 {"GstBusClass", sizeof (GstBusClass), 232},
11 {"GstBus", sizeof (GstBus), 128},
12 {"GstCaps", sizeof (GstCaps), 64},
13 {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 88},
14 {"GstClockClass", sizeof (GstClockClass), 264},
15 {"GstClockEntry", sizeof (GstClockEntry), 112},
16 {"GstClock", sizeof (GstClock), 128},
17 {"GstControlBinding", sizeof (GstControlBinding), 152},
18 {"GstControlBindingClass", sizeof (GstControlBindingClass), 248},
19 {"GstControlSource", sizeof (GstControlSource), 136},
20 {"GstControlSourceClass", sizeof (GstControlSourceClass), 216},
21 {"GstDebugCategory", sizeof (GstDebugCategory), 24},
22 {"GstElementClass", sizeof (GstElementClass), 488},
23 {"GstElement", sizeof (GstElement), 264},
24 {"GstEvent", sizeof (GstEvent), 88},
25 {"GstFormatDefinition", sizeof (GstFormatDefinition), 32},
26 {"GstGhostPadClass", sizeof (GstGhostPadClass), 272},
27 {"GstGhostPad", sizeof (GstGhostPad), 536},
28 {"GstIterator", sizeof (GstIterator), 120},
29 {"GstMemory", sizeof (GstMemory), 112},
30 {"GstMapInfo", sizeof (GstMapInfo), 104},
31 {"GstMessage", sizeof (GstMessage), 120},
32 {"GstMeta", sizeof (GstMeta), 16},
33 {"GstMetaTransformCopy", sizeof (GstMetaTransformCopy), 24},
34 {"GstMetaInfo", sizeof (GstMetaInfo), 80},
35 {"GstMiniObject", sizeof (GstMiniObject), 64},
36 {"GstObjectClass", sizeof (GstObjectClass), 184},
37 {"GstObject", sizeof (GstObject), 88},
38 {"GstPadClass", sizeof (GstPadClass), 232},
39 {"GstPad", sizeof (GstPad), 520},
40 {"GstPadProbeInfo", sizeof (GstPadProbeInfo), 72},
41 {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 224},
42 {"GstPadTemplate", sizeof (GstPadTemplate), 144},
43 {"GstParamSpecFraction", sizeof (GstParamSpecFraction), 96},
44 {"GstPipelineClass", sizeof (GstPipelineClass), 608},
45 {"GstPipeline", sizeof (GstPipeline), 440},
46 {"GstPluginDesc", sizeof (GstPluginDesc), 112},
47 {"GstPresetInterface", sizeof (GstPresetInterface), 112},
48 {"GstProxyPadClass", sizeof (GstProxyPadClass), 240},
49 {"GstProxyPad", sizeof (GstProxyPad), 528},
50 {"GstQuery", sizeof (GstQuery), 72},
51 {"GstRegistryClass", sizeof (GstRegistryClass), 184},
52 {"GstRegistry", sizeof (GstRegistry), 96},
53 {"GstSegment", sizeof (GstSegment), 120},
54 {"GstStaticCaps", sizeof (GstStaticCaps), 48},
3955 {"GstStaticPadTemplate", sizeof (GstStaticPadTemplate), 64},
40 {"GstPipeline", sizeof (GstPipeline), 232},
41 {"GstPipelineClass", sizeof (GstPipelineClass), 304},
42 {"GstPlugin", sizeof (GstPlugin), 152},
43 {"GstPluginClass", sizeof (GstPluginClass), 136},
44 {"GstPluginDesc", sizeof (GstPluginDesc), 56},
45 {"GstPluginFeature", sizeof (GstPluginFeature), 72},
46 {"GstPluginFeatureClass", sizeof (GstPluginFeatureClass), 136},
47 {"GstQueryTypeDefinition", sizeof (GstQueryTypeDefinition), 16},
48 {"GstQuery", sizeof (GstQuery), 28},
49 {"GstQueryClass", sizeof (GstQueryClass), 32},
50 {"GstRegistry", sizeof (GstRegistry), 72},
51 {"GstRegistryClass", sizeof (GstRegistryClass), 144},
52 {"GstSegment", sizeof (GstSegment), 88},
53 {"GstStructure", sizeof (GstStructure), 20},
54 {"GstSystemClock", sizeof (GstSystemClock), 200},
55 {"GstSystemClockClass", sizeof (GstSystemClockClass), 176},
56 {"GstTagSetterInterface", sizeof (GstTagSetterInterface), 8},
57 {"GstTask", sizeof (GstTask), 80},
58 {"GstTaskClass", sizeof (GstTaskClass), 140},
59 {"GstTrace", sizeof (GstTrace), 20},
60 {"GstTraceEntry", sizeof (GstTraceEntry), 128},
61 {"GstAllocTrace", sizeof (GstAllocTrace), 16},
62 {"GstTypeFind", sizeof (GstTypeFind), 32},
63 {"GstTypeFindFactory", sizeof (GstTypeFindFactory), 108},
64 {"GstTypeFindFactoryClass", sizeof (GstTypeFindFactoryClass), 152},
65 {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 44},
66 {"GstValueTable", sizeof (GstValueTable), 32},
56 {"GstStructure", sizeof (GstStructure), 16},
57 {"GstSystemClockClass", sizeof (GstSystemClockClass), 296},
58 {"GstSystemClock", sizeof (GstSystemClock), 168},
59 {"GstTagList", sizeof (GstTagList), 64,},
60 {"GstTagSetterInterface", sizeof (GstTagSetterInterface), 16},
61 {"GstTaskClass", sizeof (GstTaskClass), 224},
62 {"GstTask", sizeof (GstTask), 200},
63 {"GstTaskPoolClass", sizeof (GstTaskPoolClass), 248},
64 {"GstTaskPool", sizeof (GstTaskPool), 128},
65 {"GstTimedValue", sizeof (GstTimedValue), 16},
66 {"GstTocSetterInterface", sizeof (GstTocSetterInterface), 16},
67 {"GstTypeFind", sizeof (GstTypeFind), 64},
68 {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 48},
69 {"GstValueTable", sizeof (GstValueTable), 64},
6770 {NULL, 0, 0}
6871 };
00 static GstCheckABIStruct list[] = {
1 {"GstBin", sizeof (GstBin), 184},
2 {"GstBinClass", sizeof(GstBinClass), 288},
3 {"GstBuffer", sizeof(GstBuffer), 80},
4 {"GstBufferClass", sizeof(GstBufferClass), 16},
5 {"GstBus", sizeof(GstBus), 80},
6 {"GstBusClass", sizeof(GstBusClass), 144},
7 {"GstCaps", sizeof(GstCaps), 32},
8 {"GstStaticCaps", sizeof(GstStaticCaps), 52},
9 {"GstChildProxyInterface", sizeof(GstChildProxyInterface), 40},
10 {"GstClock", sizeof(GstClock), 172},
11 {"GstClockClass", sizeof(GstClockClass), 160},
12 {"GstElement", sizeof(GstElement), 128},
13 {"GstElementClass", sizeof(GstElementClass), 248},
14 {"GstElementFactory", sizeof(GstElementFactory), 144},
15 {"GstElementFactoryClass", sizeof(GstElementFactoryClass), 152},
16 {"GstElementDetails", sizeof(GstElementDetails), 32},
17 {"GstEvent", sizeof(GstEvent), 40},
18 {"GstEventClass", sizeof(GstEventClass), 32},
19 {"GstFormatDefinition", sizeof(GstFormatDefinition), 16},
20 {"GstIndexEntry", sizeof(GstIndexEntry), 20},
21 {"GstIndexGroup", sizeof(GstIndexGroup), 16},
22 {"GstIndex", sizeof(GstIndex), 100},
23 {"GstIndexClass", sizeof(GstIndexClass), 156},
24 {"GstIndexAssociation", sizeof(GstIndexAssociation), 12},
25 {"GstIndexFactory", sizeof(GstIndexFactory), 96},
26 {"GstIndexFactoryClass", sizeof(GstIndexFactoryClass), 152},
27 {"GstDebugCategory", sizeof(GstDebugCategory), 16},
28 {"GstIterator", sizeof(GstIterator), 52},
29 {"GstMessage", sizeof(GstMessage), 60},
30 {"GstMessageClass", sizeof(GstMessageClass), 32},
31 {"GstMiniObject", sizeof(GstMiniObject), 16},
32 {"GstMiniObjectClass", sizeof(GstMiniObjectClass), 16},
33 {"GstObject", sizeof(GstObject), 40},
34 {"GstObjectClass", sizeof(GstObjectClass), 120},
35 {"GstPad", sizeof(GstPad), 188},
36 {"GstPadClass", sizeof(GstPadClass), 152},
37 {"GstPadTemplate", sizeof(GstPadTemplate), 72},
38 {"GstPadTemplateClass", sizeof(GstPadTemplateClass), 140},
39 {"GstStaticPadTemplate", sizeof(GstStaticPadTemplate), 64},
40 {"GstPipeline", sizeof(GstPipeline), 220},
41 {"GstPipelineClass", sizeof(GstPipelineClass), 304},
42 {"GstPlugin", sizeof(GstPlugin), 148},
43 {"GstPluginClass", sizeof(GstPluginClass), 136},
44 {"GstPluginDesc", sizeof(GstPluginDesc), 56},
45 {"GstPluginFeature", sizeof(GstPluginFeature), 72},
46 {"GstPluginFeatureClass", sizeof(GstPluginFeatureClass), 136},
47 {"GstQueryTypeDefinition", sizeof(GstQueryTypeDefinition), 16},
48 {"GstQuery", sizeof(GstQuery), 28},
49 {"GstQueryClass", sizeof(GstQueryClass), 32},
50 {"GstRegistry", sizeof(GstRegistry), 72},
51 {"GstRegistryClass", sizeof(GstRegistryClass), 144},
52 {"GstSegment", sizeof(GstSegment), 88},
53 {"GstStructure", sizeof(GstStructure), 20},
54 {"GstSystemClock", sizeof(GstSystemClock), 196},
55 {"GstSystemClockClass", sizeof(GstSystemClockClass), 176},
56 {"GstTagSetterInterface", sizeof(GstTagSetterInterface), 8},
57 {"GstTask", sizeof(GstTask), 80},
58 {"GstTaskClass", sizeof(GstTaskClass), 140},
59 {"GstTrace", sizeof(GstTrace), 20},
60 {"GstTraceEntry", sizeof(GstTraceEntry), 128},
61 {"GstAllocTrace", sizeof(GstAllocTrace), 16},
62 {"GstTypeFind", sizeof(GstTypeFind), 32},
63 {"GstTypeFindFactory", sizeof(GstTypeFindFactory), 108},
64 {"GstTypeFindFactoryClass", sizeof(GstTypeFindFactoryClass), 152},
65 {"GstURIHandlerInterface", sizeof(GstURIHandlerInterface), 44},
66 {"GstValueTable", sizeof(GstValueTable), 32},
67 {NULL, 0, 0}
1 {"GstAllocationParams", sizeof (GstAllocationParams), 32},
2 {"GstAllocator", sizeof (GstAllocator), 100},
3 {"GstAllocatorClass", sizeof (GstAllocatorClass), 116},
4 {"GstBinClass", sizeof (GstBinClass), 292},
5 {"GstBin", sizeof (GstBin), 232},
6 {"GstBuffer", sizeof (GstBuffer), 80},
7 {"GstBufferPoolAcquireParams", sizeof (GstBufferPoolAcquireParams), 40},
8 {"GstBufferPool", sizeof (GstBufferPool), 80},
9 {"GstBufferPoolClass", sizeof (GstBufferPoolClass), 144},
10 {"GstBusClass", sizeof (GstBusClass), 116},
11 {"GstBus", sizeof (GstBus), 76},
12 {"GstCaps", sizeof (GstCaps), 36},
13 {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 44},
14 {"GstClockClass", sizeof (GstClockClass), 132},
15 {"GstClockEntry", sizeof (GstClockEntry), 68},
16 {"GstClock", sizeof (GstClock), 76},
17 {"GstControlBinding", sizeof (GstControlBinding), 88},
18 {"GstControlBindingClass", sizeof (GstControlBindingClass), 124},
19 {"GstControlSource", sizeof (GstControlSource), 80},
20 {"GstControlSourceClass", sizeof (GstControlSourceClass), 108},
21 {"GstDebugCategory", sizeof (GstDebugCategory), 16},
22 {"GstElementClass", sizeof (GstElementClass), 248},
23 {"GstElement", sizeof (GstElement), 172},
24 {"GstEvent", sizeof (GstEvent), 52},
25 {"GstFormatDefinition", sizeof (GstFormatDefinition), 16},
26 {"GstGhostPadClass", sizeof (GstGhostPadClass), 136},
27 {"GstGhostPad", sizeof (GstGhostPad), 296},
28 {"GstIterator", sizeof (GstIterator), 60},
29 {"GstMemory", sizeof (GstMemory), 60},
30 {"GstMapInfo", sizeof (GstMapInfo), 52},
31 {"GstMessage", sizeof (GstMessage), 76},
32 {"GstMeta", sizeof (GstMeta), 8},
33 {"GstMetaTransformCopy", sizeof (GstMetaTransformCopy), 12},
34 {"GstMetaInfo", sizeof (GstMetaInfo), 40},
35 {"GstMiniObject", sizeof (GstMiniObject), 36},
36 {"GstObjectClass", sizeof (GstObjectClass), 92},
37 {"GstObject", sizeof (GstObject), 56},
38 {"GstPadClass", sizeof (GstPadClass), 116},
39 {"GstPad", sizeof (GstPad), 288},
40 {"GstPadProbeInfo", sizeof (GstPadProbeInfo), 40},
41 {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 112},
42 {"GstPadTemplate", sizeof (GstPadTemplate), 88},
43 {"GstParamSpecFraction", sizeof (GstParamSpecFraction), 64},
44 {"GstPipelineClass", sizeof (GstPipelineClass), 308},
45 {"GstPipeline", sizeof (GstPipeline), 272},
46 {"GstPluginDesc", sizeof (GstPluginDesc), 60},
47 {"GstPresetInterface", sizeof (GstPresetInterface), 56},
48 {"GstProxyPadClass", sizeof (GstProxyPadClass), 120},
49 {"GstProxyPad", sizeof (GstProxyPad), 292},
50 {"GstQuery", sizeof (GstQuery), 40},
51 {"GstRegistryClass", sizeof (GstRegistryClass), 92},
52 {"GstRegistry", sizeof (GstRegistry), 60},
53 {"GstSegment", sizeof (GstSegment), 96},
54 {"GstStaticCaps", sizeof (GstStaticCaps), 24},
55 {"GstStaticPadTemplate", sizeof (GstStaticPadTemplate), 36},
56 {"GstStructure", sizeof (GstStructure), 8},
57 {"GstSystemClockClass", sizeof (GstSystemClockClass), 148},
58 {"GstSystemClock", sizeof (GstSystemClock), 96},
59 {"GstTagList", sizeof (GstTagList), 36},
60 {"GstTagSetterInterface", sizeof (GstTagSetterInterface), 8},
61 {"GstTaskClass", sizeof (GstTaskClass), 112},
62 {"GstTask", sizeof (GstTask), 116},
63 {"GstTaskPoolClass", sizeof (GstTaskPoolClass), 124},
64 {"GstTaskPool", sizeof (GstTaskPool), 76},
65 {"GstTimedValue", sizeof (GstTimedValue), 16},
66 {"GstTocSetterInterface", sizeof (GstTocSetterInterface), 8},
67 {"GstTypeFind", sizeof (GstTypeFind), 32},
68 {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 24},
69 {"GstValueTable", sizeof (GstValueTable), 32},
70 {NULL, 0, 0}
6871 };
00 static GstCheckABIStruct list[] = {
1 {"GstBin", sizeof (GstBin), 192},
2 {"GstBinClass", sizeof (GstBinClass), 288},
3 {"GstBuffer", sizeof (GstBuffer), 88},
4 {"GstBufferClass", sizeof (GstBufferClass), 16},
5 {"GstBus", sizeof (GstBus), 80},
6 {"GstBusClass", sizeof (GstBusClass), 144},
7 {"GstCaps", sizeof (GstCaps), 32},
8 {"GstStaticCaps", sizeof (GstStaticCaps), 52},
9 {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 40},
10 {"GstClock", sizeof (GstClock), 176},
11 {"GstClockClass", sizeof (GstClockClass), 160},
12 {"GstElement", sizeof (GstElement), 136},
1 {"GstAllocationParams", sizeof (GstAllocationParams), 32},
2 {"GstAllocator", sizeof (GstAllocator), 112},
3 {"GstAllocatorClass", sizeof (GstAllocatorClass), 116},
4 {"GstBinClass", sizeof (GstBinClass), 292},
5 {"GstBin", sizeof (GstBin), 248},
6 {"GstBuffer", sizeof (GstBuffer), 80},
7 {"GstBufferPoolAcquireParams", sizeof (GstBufferPoolAcquireParams), 48},
8 {"GstBufferPool", sizeof (GstBufferPool), 88},
9 {"GstBufferPoolClass", sizeof (GstBufferPoolClass), 144},
10 {"GstBusClass", sizeof (GstBusClass), 116},
11 {"GstBus", sizeof (GstBus), 88},
12 {"GstCaps", sizeof (GstCaps), 36},
13 {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 44},
14 {"GstClockClass", sizeof (GstClockClass), 132},
15 {"GstClockEntry", sizeof (GstClockEntry), 72},
16 {"GstClock", sizeof (GstClock), 88},
17 {"GstControlBinding", sizeof (GstControlBinding), 96},
18 {"GstControlBindingClass", sizeof (GstControlBindingClass), 124},
19 {"GstControlSource", sizeof (GstControlSource), 88},
20 {"GstControlSourceClass", sizeof (GstControlSourceClass), 108},
21 {"GstDebugCategory", sizeof (GstDebugCategory), 16},
1322 {"GstElementClass", sizeof (GstElementClass), 248},
14 {"GstElementFactory", sizeof (GstElementFactory), 144},
15 {"GstElementFactoryClass", sizeof (GstElementFactoryClass), 152},
16 {"GstElementDetails", sizeof (GstElementDetails), 32},
17 {"GstEvent", sizeof (GstEvent), 48},
18 {"GstEventClass", sizeof (GstEventClass), 32},
23 {"GstElement", sizeof (GstElement), 184},
24 {"GstEvent", sizeof (GstEvent), 56},
1925 {"GstFormatDefinition", sizeof (GstFormatDefinition), 16},
20 {"GstIndexEntry", sizeof (GstIndexEntry), 20},
21 {"GstIndexGroup", sizeof (GstIndexGroup), 16},
22 {"GstIndex", sizeof (GstIndex), 100},
23 {"GstIndexClass", sizeof (GstIndexClass), 156},
24 {"GstIndexAssociation", sizeof (GstIndexAssociation), 16},
25 {"GstIndexFactory", sizeof (GstIndexFactory), 96},
26 {"GstIndexFactoryClass", sizeof (GstIndexFactoryClass), 152},
27 {"GstDebugCategory", sizeof (GstDebugCategory), 16},
28 {"GstIterator", sizeof (GstIterator), 52},
29 {"GstMessage", sizeof (GstMessage), 64},
30 {"GstMessageClass", sizeof (GstMessageClass), 32},
31 {"GstMiniObject", sizeof (GstMiniObject), 16},
32 {"GstMiniObjectClass", sizeof (GstMiniObjectClass), 16},
33 {"GstObject", sizeof (GstObject), 40},
34 {"GstObjectClass", sizeof (GstObjectClass), 120},
35 {"GstPad", sizeof (GstPad), 188},
36 {"GstPadClass", sizeof (GstPadClass), 152},
37 {"GstPadTemplate", sizeof (GstPadTemplate), 72},
38 {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 140},
39 {"GstStaticPadTemplate", sizeof (GstStaticPadTemplate), 64},
40 {"GstPipeline", sizeof (GstPipeline), 232},
41 {"GstPipelineClass", sizeof (GstPipelineClass), 304},
42 {"GstPlugin", sizeof (GstPlugin), 152},
43 {"GstPluginClass", sizeof (GstPluginClass), 136},
44 {"GstPluginDesc", sizeof (GstPluginDesc), 56},
45 {"GstPluginFeature", sizeof (GstPluginFeature), 72},
46 {"GstPluginFeatureClass", sizeof (GstPluginFeatureClass), 136},
47 {"GstQueryTypeDefinition", sizeof (GstQueryTypeDefinition), 16},
48 {"GstQuery", sizeof (GstQuery), 28},
49 {"GstQueryClass", sizeof (GstQueryClass), 32},
26 {"GstGhostPadClass", sizeof (GstGhostPadClass), 136},
27 {"GstGhostPad", sizeof (GstGhostPad), 320},
28 {"GstIterator", sizeof (GstIterator), 60},
29 {"GstMemory", sizeof (GstMemory), 60},
30 {"GstMapInfo", sizeof (GstMapInfo), 52},
31 {"GstMessage", sizeof (GstMessage), 80},
32 {"GstMeta", sizeof (GstMeta), 8},
33 {"GstMetaTransformCopy", sizeof (GstMetaTransformCopy), 12},
34 {"GstMetaInfo", sizeof (GstMetaInfo), 40},
35 {"GstMiniObject", sizeof (GstMiniObject), 36},
36 {"GstObjectClass", sizeof (GstObjectClass), 92},
37 {"GstObject", sizeof (GstObject), 64},
38 {"GstPadClass", sizeof (GstPadClass), 116},
39 {"GstPad", sizeof (GstPad), 304},
40 {"GstPadProbeInfo", sizeof (GstPadProbeInfo), 48},
41 {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 112},
42 {"GstPadTemplate", sizeof (GstPadTemplate), 96},
43 {"GstParamSpecFraction", sizeof (GstParamSpecFraction), 64},
44 {"GstPipelineClass", sizeof (GstPipelineClass), 308},
45 {"GstPipeline", sizeof (GstPipeline), 296},
46 {"GstPluginDesc", sizeof (GstPluginDesc), 60},
47 {"GstPresetInterface", sizeof (GstPresetInterface), 56},
48 {"GstProxyPadClass", sizeof (GstProxyPadClass), 120},
49 {"GstProxyPad", sizeof (GstProxyPad), 312},
50 {"GstQuery", sizeof (GstQuery), 40},
51 {"GstRegistryClass", sizeof (GstRegistryClass), 92},
5052 {"GstRegistry", sizeof (GstRegistry), 72},
51 {"GstRegistryClass", sizeof (GstRegistryClass), 144},
52 {"GstSegment", sizeof (GstSegment), 88},
53 {"GstStructure", sizeof (GstStructure), 20},
54 {"GstSystemClock", sizeof (GstSystemClock), 200},
55 {"GstSystemClockClass", sizeof (GstSystemClockClass), 176},
53 {"GstSegment", sizeof (GstSegment), 104},
54 {"GstStaticCaps", sizeof (GstStaticCaps), 24},
55 {"GstStaticPadTemplate", sizeof (GstStaticPadTemplate), 36},
56 {"GstStructure", sizeof (GstStructure), 8},
57 {"GstSystemClockClass", sizeof (GstSystemClockClass), 148},
58 {"GstSystemClock", sizeof (GstSystemClock), 112},
59 {"GstTagList", sizeof (GstTagList), 36},
5660 {"GstTagSetterInterface", sizeof (GstTagSetterInterface), 8},
57 {"GstTask", sizeof (GstTask), 80},
58 {"GstTaskClass", sizeof (GstTaskClass), 140},
59 {"GstTrace", sizeof (GstTrace), 20},
60 {"GstTraceEntry", sizeof (GstTraceEntry), 128},
61 {"GstAllocTrace", sizeof (GstAllocTrace), 16},
61 {"GstTaskClass", sizeof (GstTaskClass), 112},
62 {"GstTask", sizeof (GstTask), 128},
63 {"GstTaskPoolClass", sizeof (GstTaskPoolClass), 124},
64 {"GstTaskPool", sizeof (GstTaskPool), 88},
65 {"GstTimedValue", sizeof (GstTimedValue), 16},
66 {"GstTocSetterInterface", sizeof (GstTocSetterInterface), 8},
6267 {"GstTypeFind", sizeof (GstTypeFind), 32},
63 {"GstTypeFindFactory", sizeof (GstTypeFindFactory), 108},
64 {"GstTypeFindFactoryClass", sizeof (GstTypeFindFactoryClass), 152},
65 {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 44},
68 {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 24},
6669 {"GstValueTable", sizeof (GstValueTable), 32},
6770 {NULL, 0, 0}
6871 };
00 static GstCheckABIStruct list[] = {
1 {"GstBin", sizeof (GstBin), 336},
2 {"GstBinClass", sizeof (GstBinClass), 568},
3 {"GstBuffer", sizeof (GstBuffer), 120} ,
4 {"GstBufferClass", sizeof (GstBufferClass), 32} ,
5 {"GstBus", sizeof (GstBus), 152} ,
6 {"GstBusClass", sizeof (GstBusClass), 288} ,
7 {"GstCaps", sizeof (GstCaps), 56} ,
8 {"GstStaticCaps", sizeof (GstStaticCaps), 96} ,
9 {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 80} ,
10 {"GstClock", sizeof (GstClock), 240} ,
11 {"GstClockClass", sizeof (GstClockClass), 320} ,
12 {"GstElement", sizeof (GstElement), 232} ,
13 {"GstElementClass", sizeof (GstElementClass), 488} ,
14 {"GstElementFactory", sizeof (GstElementFactory), 280} ,
15 {"GstElementFactoryClass", sizeof (GstElementFactoryClass), 304} ,
16 {"GstElementDetails", sizeof (GstElementDetails), 64} ,
17 {"GstEvent", sizeof (GstEvent), 64} ,
18 {"GstEventClass", sizeof (GstEventClass), 64} ,
19 {"GstFormatDefinition", sizeof (GstFormatDefinition), 32} ,
20 {"GstIndexEntry", sizeof (GstIndexEntry), 32} ,
21 {"GstIndexGroup", sizeof (GstIndexGroup), 24} ,
22 {"GstIndex", sizeof (GstIndex), 192} ,
23 {"GstIndexClass", sizeof (GstIndexClass), 312} ,
24 {"GstIndexAssociation", sizeof (GstIndexAssociation), 16} ,
25 {"GstIndexFactory", sizeof (GstIndexFactory), 192} ,
26 {"GstIndexFactoryClass", sizeof (GstIndexFactoryClass), 304} ,
27 {"GstDebugCategory", sizeof (GstDebugCategory), 24} ,
28 {"GstIterator", sizeof (GstIterator), 104} ,
29 {"GstMessage", sizeof (GstMessage), 104} ,
30 {"GstMessageClass", sizeof (GstMessageClass), 64} ,
31 {"GstMiniObject", sizeof (GstMiniObject), 24} ,
32 {"GstMiniObjectClass", sizeof (GstMiniObjectClass), 32} ,
33 {"GstObject", sizeof (GstObject), 80} ,
34 {"GstObjectClass", sizeof (GstObjectClass), 240} ,
35 {"GstPad", sizeof (GstPad), 368} ,
36 {"GstPadClass", sizeof (GstPadClass), 304} ,
37 {"GstPadTemplate", sizeof (GstPadTemplate), 136} ,
38 {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 280} ,
39 {"GstStaticPadTemplate", sizeof (GstStaticPadTemplate), 112} ,
40 {"GstPipeline", sizeof (GstPipeline), 392} ,
41 {"GstPipelineClass", sizeof (GstPipelineClass), 600} ,
42 {"GstPlugin", sizeof (GstPlugin), 280} ,
43 {"GstPluginClass", sizeof (GstPluginClass), 272} ,
44 {"GstPluginDesc", sizeof (GstPluginDesc), 104} ,
45 {"GstPluginFeature", sizeof (GstPluginFeature), 144} ,
46 {"GstPluginFeatureClass", sizeof (GstPluginFeatureClass), 272} ,
47 {"GstQueryTypeDefinition", sizeof (GstQueryTypeDefinition), 32} ,
48 {"GstQuery", sizeof (GstQuery), 48} ,
49 {"GstQueryClass", sizeof (GstQueryClass), 64} ,
50 {"GstRegistry", sizeof (GstRegistry), 144} ,
51 {"GstRegistryClass", sizeof (GstRegistryClass), 288} ,
52 {"GstSegment", sizeof (GstSegment), 104} ,
53 {"GstStructure", sizeof (GstStructure), 40} ,
54 {"GstSystemClock", sizeof (GstSystemClock), 288} ,
55 {"GstSystemClockClass", sizeof (GstSystemClockClass), 352} ,
56 {"GstTagSetterInterface", sizeof (GstTagSetterInterface), 16} ,
57 {"GstTask", sizeof (GstTask), 160} ,
58 {"GstTaskClass", sizeof (GstTaskClass), 280} ,
59 {"GstTrace", sizeof (GstTrace), 32} ,
60 {"GstTraceEntry", sizeof (GstTraceEntry), 128} ,
61 {"GstAllocTrace", sizeof (GstAllocTrace), 24} ,
62 {"GstTypeFind", sizeof (GstTypeFind), 64} ,
63 {"GstTypeFindFactory", sizeof (GstTypeFindFactory), 216} ,
64 {"GstTypeFindFactoryClass", sizeof (GstTypeFindFactoryClass), 304} ,
65 {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 88} ,
66 {"GstValueTable", sizeof (GstValueTable), 64} ,
1 {"GstAllocationParams", sizeof (GstAllocationParams), 64},
2 {"GstAllocator", sizeof (GstAllocator), 176},
3 {"GstAllocatorClass", sizeof (GstAllocatorClass), 232},
4 {"GstBinClass", sizeof (GstBinClass), 576},
5 {"GstBin", sizeof (GstBin), 376},
6 {"GstBuffer", sizeof (GstBuffer), 112},
7 {"GstBufferPoolAcquireParams", sizeof (GstBufferPoolAcquireParams), 64},
8 {"GstBufferPool", sizeof (GstBufferPool), 136},
9 {"GstBufferPoolClass", sizeof (GstBufferPoolClass), 288},
10 {"GstBusClass", sizeof (GstBusClass), 232},
11 {"GstBus", sizeof (GstBus), 128},
12 {"GstCaps", sizeof (GstCaps), 64},
13 {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 88},
14 {"GstClockClass", sizeof (GstClockClass), 264},
15 {"GstClockEntry", sizeof (GstClockEntry), 112},
16 {"GstClock", sizeof (GstClock), 128},
17 {"GstControlBinding", sizeof (GstControlBinding), 152},
18 {"GstControlBindingClass", sizeof (GstControlBindingClass), 248},
19 {"GstControlSource", sizeof (GstControlSource), 136},
20 {"GstControlSourceClass", sizeof (GstControlSourceClass), 216},
21 {"GstDebugCategory", sizeof (GstDebugCategory), 24},
22 {"GstElementClass", sizeof (GstElementClass), 488},
23 {"GstElement", sizeof (GstElement), 264},
24 {"GstEvent", sizeof (GstEvent), 88},
25 {"GstFormatDefinition", sizeof (GstFormatDefinition), 32},
26 {"GstGhostPadClass", sizeof (GstGhostPadClass), 272},
27 {"GstGhostPad", sizeof (GstGhostPad), 536},
28 {"GstIterator", sizeof (GstIterator), 120},
29 {"GstMemory", sizeof (GstMemory), 112},
30 {"GstMapInfo", sizeof (GstMapInfo), 104},
31 {"GstMessage", sizeof (GstMessage), 120},
32 {"GstMeta", sizeof (GstMeta), 16},
33 {"GstMetaTransformCopy", sizeof (GstMetaTransformCopy), 24},
34 {"GstMetaInfo", sizeof (GstMetaInfo), 80},
35 {"GstMiniObject", sizeof (GstMiniObject), 64},
36 {"GstObjectClass", sizeof (GstObjectClass), 184},
37 {"GstObject", sizeof (GstObject), 88},
38 {"GstPadClass", sizeof (GstPadClass), 232},
39 {"GstPad", sizeof (GstPad), 520},
40 {"GstPadProbeInfo", sizeof (GstPadProbeInfo), 72},
41 {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 224},
42 {"GstPadTemplate", sizeof (GstPadTemplate), 144},
43 {"GstParamSpecFraction", sizeof (GstParamSpecFraction), 96},
44 {"GstPipelineClass", sizeof (GstPipelineClass), 608},
45 {"GstPipeline", sizeof (GstPipeline), 440},
46 {"GstPluginDesc", sizeof (GstPluginDesc), 112},
47 {"GstPresetInterface", sizeof (GstPresetInterface), 112},
48 {"GstProxyPadClass", sizeof (GstProxyPadClass), 240},
49 {"GstProxyPad", sizeof (GstProxyPad), 528},
50 {"GstQuery", sizeof (GstQuery), 72},
51 {"GstRegistryClass", sizeof (GstRegistryClass), 184},
52 {"GstRegistry", sizeof (GstRegistry), 96},
53 {"GstSegment", sizeof (GstSegment), 120},
54 {"GstStaticCaps", sizeof (GstStaticCaps), 48},
55 {"GstStaticPadTemplate", sizeof (GstStaticPadTemplate), 64},
56 {"GstStructure", sizeof (GstStructure), 16},
57 {"GstSystemClockClass", sizeof (GstSystemClockClass), 296},
58 {"GstSystemClock", sizeof (GstSystemClock), 168},
59 {"GstTagList", sizeof (GstTagList), 64,},
60 {"GstTagSetterInterface", sizeof (GstTagSetterInterface), 16},
61 {"GstTaskClass", sizeof (GstTaskClass), 224},
62 {"GstTask", sizeof (GstTask), 200},
63 {"GstTaskPoolClass", sizeof (GstTaskPoolClass), 248},
64 {"GstTaskPool", sizeof (GstTaskPool), 128},
65 {"GstTimedValue", sizeof (GstTimedValue), 16},
66 {"GstTocSetterInterface", sizeof (GstTocSetterInterface), 16},
67 {"GstTypeFind", sizeof (GstTypeFind), 64},
68 {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 48},
69 {"GstValueTable", sizeof (GstValueTable), 64},
6770 {NULL, 0, 0}
6871 };
0
1 GstCheckABIStruct list[] = {
2 {"GstBin", sizeof (GstBin), 192},
3 {"GstBinClass", sizeof (GstBinClass), 288},
4 {"GstBuffer", sizeof (GstBuffer), 88},
5 {"GstBufferClass", sizeof (GstBufferClass), 16},
6 {"GstBus", sizeof (GstBus), 80},
7 {"GstBusClass", sizeof (GstBusClass), 144},
8 {"GstCaps", sizeof (GstCaps), 32},
9 {"GstStaticCaps", sizeof (GstStaticCaps), 52},
10 {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 40},
11 {"GstClock", sizeof (GstClock), 176},
12 {"GstClockClass", sizeof (GstClockClass), 160},
13 {"GstElement", sizeof (GstElement), 136},
14 {"GstElementClass", sizeof (GstElementClass), 248},
15 {"GstElementFactory", sizeof (GstElementFactory), 144},
16 {"GstElementFactoryClass", sizeof (GstElementFactoryClass), 152},
17 {"GstElementDetails", sizeof (GstElementDetails), 32},
18 {"GstEvent", sizeof (GstEvent), 48},
19 {"GstEventClass", sizeof (GstEventClass), 32},
20 {"GstFormatDefinition", sizeof (GstFormatDefinition), 16},
21 {"GstIndexEntry", sizeof (GstIndexEntry), 20},
22 {"GstIndexGroup", sizeof (GstIndexGroup), 16},
23 {"GstIndex", sizeof (GstIndex), 100},
24 {"GstIndexClass", sizeof (GstIndexClass), 156},
25 {"GstIndexAssociation", sizeof (GstIndexAssociation), 16},
26 {"GstIndexFactory", sizeof (GstIndexFactory), 96},
27 {"GstIndexFactoryClass", sizeof (GstIndexFactoryClass), 152},
28 {"GstDebugCategory", sizeof (GstDebugCategory), 16},
29 {"GstIterator", sizeof (GstIterator), 52},
30 {"GstMessage", sizeof (GstMessage), 64},
31 {"GstMessageClass", sizeof (GstMessageClass), 32},
32 {"GstMiniObject", sizeof (GstMiniObject), 16},
33 {"GstMiniObjectClass", sizeof (GstMiniObjectClass), 16},
34 {"GstObject", sizeof (GstObject), 40},
35 {"GstObjectClass", sizeof (GstObjectClass), 120},
36 {"GstPad", sizeof (GstPad), 188},
37 {"GstPadClass", sizeof (GstPadClass), 152},
38 {"GstPadTemplate", sizeof (GstPadTemplate), 72},
39 {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 140},
0 static GstCheckABIStruct list[] = {
1 {"GstAllocationParams", sizeof (GstAllocationParams), 64},
2 {"GstAllocator", sizeof (GstAllocator), 176},
3 {"GstAllocatorClass", sizeof (GstAllocatorClass), 232},
4 {"GstBinClass", sizeof (GstBinClass), 576},
5 {"GstBin", sizeof (GstBin), 376},
6 {"GstBuffer", sizeof (GstBuffer), 112},
7 {"GstBufferPoolAcquireParams", sizeof (GstBufferPoolAcquireParams), 64},
8 {"GstBufferPool", sizeof (GstBufferPool), 136},
9 {"GstBufferPoolClass", sizeof (GstBufferPoolClass), 288},
10 {"GstBusClass", sizeof (GstBusClass), 232},
11 {"GstBus", sizeof (GstBus), 128},
12 {"GstCaps", sizeof (GstCaps), 64},
13 {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 88},
14 {"GstClockClass", sizeof (GstClockClass), 264},
15 {"GstClockEntry", sizeof (GstClockEntry), 112},
16 {"GstClock", sizeof (GstClock), 128},
17 {"GstControlBinding", sizeof (GstControlBinding), 152},
18 {"GstControlBindingClass", sizeof (GstControlBindingClass), 248},
19 {"GstControlSource", sizeof (GstControlSource), 136},
20 {"GstControlSourceClass", sizeof (GstControlSourceClass), 216},
21 {"GstDebugCategory", sizeof (GstDebugCategory), 24},
22 {"GstElementClass", sizeof (GstElementClass), 488},
23 {"GstElement", sizeof (GstElement), 264},
24 {"GstEvent", sizeof (GstEvent), 88},
25 {"GstFormatDefinition", sizeof (GstFormatDefinition), 32},
26 {"GstGhostPadClass", sizeof (GstGhostPadClass), 272},
27 {"GstGhostPad", sizeof (GstGhostPad), 536},
28 {"GstIterator", sizeof (GstIterator), 120},
29 {"GstMemory", sizeof (GstMemory), 112},
30 {"GstMapInfo", sizeof (GstMapInfo), 104},
31 {"GstMessage", sizeof (GstMessage), 120},
32 {"GstMeta", sizeof (GstMeta), 16},
33 {"GstMetaTransformCopy", sizeof (GstMetaTransformCopy), 24},
34 {"GstMetaInfo", sizeof (GstMetaInfo), 80},
35 {"GstMiniObject", sizeof (GstMiniObject), 64},
36 {"GstObjectClass", sizeof (GstObjectClass), 184},
37 {"GstObject", sizeof (GstObject), 88},
38 {"GstPadClass", sizeof (GstPadClass), 232},
39 {"GstPad", sizeof (GstPad), 520},
40 {"GstPadProbeInfo", sizeof (GstPadProbeInfo), 72},
41 {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 224},
42 {"GstPadTemplate", sizeof (GstPadTemplate), 144},
43 {"GstParamSpecFraction", sizeof (GstParamSpecFraction), 96},
44 {"GstPipelineClass", sizeof (GstPipelineClass), 608},
45 {"GstPipeline", sizeof (GstPipeline), 440},
46 {"GstPluginDesc", sizeof (GstPluginDesc), 112},
47 {"GstPresetInterface", sizeof (GstPresetInterface), 112},
48 {"GstProxyPadClass", sizeof (GstProxyPadClass), 240},
49 {"GstProxyPad", sizeof (GstProxyPad), 528},
50 {"GstQuery", sizeof (GstQuery), 72},
51 {"GstRegistryClass", sizeof (GstRegistryClass), 184},
52 {"GstRegistry", sizeof (GstRegistry), 96},
53 {"GstSegment", sizeof (GstSegment), 120},
54 {"GstStaticCaps", sizeof (GstStaticCaps), 48},
4055 {"GstStaticPadTemplate", sizeof (GstStaticPadTemplate), 64},
41 {"GstPipeline", sizeof (GstPipeline), 232},
42 {"GstPipelineClass", sizeof (GstPipelineClass), 304},
43 {"GstPlugin", sizeof (GstPlugin), 152},
44 {"GstPluginClass", sizeof (GstPluginClass), 136},
45 {"GstPluginDesc", sizeof (GstPluginDesc), 56},
46 {"GstPluginFeature", sizeof (GstPluginFeature), 72},
47 {"GstPluginFeatureClass", sizeof (GstPluginFeatureClass), 136},
48 {"GstQueryTypeDefinition", sizeof (GstQueryTypeDefinition), 16},
49 {"GstQuery", sizeof (GstQuery), 28},
50 {"GstQueryClass", sizeof (GstQueryClass), 32},
51 {"GstRegistry", sizeof (GstRegistry), 72},
52 {"GstRegistryClass", sizeof (GstRegistryClass), 144},
53 {"GstSegment", sizeof (GstSegment), 88},
54 {"GstStructure", sizeof (GstStructure), 20},
55 {"GstSystemClock", sizeof (GstSystemClock), 200},
56 {"GstSystemClockClass", sizeof (GstSystemClockClass), 176},
57 {"GstTagSetterInterface", sizeof (GstTagSetterInterface), 8},
58 {"GstTask", sizeof (GstTask), 80},
59 {"GstTaskClass", sizeof (GstTaskClass), 140},
60 {"GstTrace", sizeof (GstTrace), 20},
61 {"GstTraceEntry", sizeof (GstTraceEntry), 128},
62 {"GstAllocTrace", sizeof (GstAllocTrace), 16},
63 {"GstTypeFind", sizeof (GstTypeFind), 32},
64 {"GstTypeFindFactory", sizeof (GstTypeFindFactory), 108},
65 {"GstTypeFindFactoryClass", sizeof (GstTypeFindFactoryClass), 152},
66 {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 44},
67 {"GstValueTable", sizeof (GstValueTable), 32},
56 {"GstStructure", sizeof (GstStructure), 16},
57 {"GstSystemClockClass", sizeof (GstSystemClockClass), 296},
58 {"GstSystemClock", sizeof (GstSystemClock), 168},
59 {"GstTagList", sizeof (GstTagList), 64,},
60 {"GstTagSetterInterface", sizeof (GstTagSetterInterface), 16},
61 {"GstTaskClass", sizeof (GstTaskClass), 224},
62 {"GstTask", sizeof (GstTask), 200},
63 {"GstTaskPoolClass", sizeof (GstTaskPoolClass), 248},
64 {"GstTaskPool", sizeof (GstTaskPool), 128},
65 {"GstTimedValue", sizeof (GstTimedValue), 16},
66 {"GstTocSetterInterface", sizeof (GstTocSetterInterface), 16},
67 {"GstTypeFind", sizeof (GstTypeFind), 64},
68 {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 48},
69 {"GstValueTable", sizeof (GstValueTable), 64},
6870 {NULL, 0, 0}
6971 };
00 static GstCheckABIStruct list[] = {
1 {"GstAllocTrace", sizeof (GstAllocTrace), 24},
2 {"GstBinClass", sizeof (GstBinClass), 568},
3 {"GstBin", sizeof (GstBin), 336},
4 {"GstBufferClass", sizeof (GstBufferClass), 32},
5 {"GstBuffer", sizeof (GstBuffer), 120},
6 {"GstBusClass", sizeof (GstBusClass), 288},
7 {"GstBus", sizeof (GstBus), 152},
8 {"GstCaps", sizeof (GstCaps), 56},
9 {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 80},
10 {"GstClockClass", sizeof (GstClockClass), 320},
11 {"GstClockEntry", sizeof (GstClockEntry), 80},
12 {"GstClock", sizeof (GstClock), 240},
1 {"GstAllocationParams", sizeof (GstAllocationParams), 64},
2 {"GstAllocator", sizeof (GstAllocator), 176},
3 {"GstAllocatorClass", sizeof (GstAllocatorClass), 232},
4 {"GstBinClass", sizeof (GstBinClass), 576},
5 {"GstBin", sizeof (GstBin), 376},
6 {"GstBuffer", sizeof (GstBuffer), 112},
7 {"GstBufferPoolAcquireParams", sizeof (GstBufferPoolAcquireParams), 64},
8 {"GstBufferPool", sizeof (GstBufferPool), 136},
9 {"GstBufferPoolClass", sizeof (GstBufferPoolClass), 288},
10 {"GstBusClass", sizeof (GstBusClass), 232},
11 {"GstBus", sizeof (GstBus), 128},
12 {"GstCaps", sizeof (GstCaps), 64},
13 {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 88},
14 {"GstClockClass", sizeof (GstClockClass), 264},
15 {"GstClockEntry", sizeof (GstClockEntry), 112},
16 {"GstClock", sizeof (GstClock), 128},
17 {"GstControlBinding", sizeof (GstControlBinding), 152},
18 {"GstControlBindingClass", sizeof (GstControlBindingClass), 248},
19 {"GstControlSource", sizeof (GstControlSource), 136},
20 {"GstControlSourceClass", sizeof (GstControlSourceClass), 216},
1321 {"GstDebugCategory", sizeof (GstDebugCategory), 24},
1422 {"GstElementClass", sizeof (GstElementClass), 488},
15 {"GstElementDetails", sizeof (GstElementDetails), 64},
16 {"GstElementFactoryClass", sizeof (GstElementFactoryClass), 304},
17 {"GstElementFactory", sizeof (GstElementFactory), 280},
18 {"GstElement", sizeof (GstElement), 232},
19 {"GstEventClass", sizeof (GstEventClass), 64},
20 {"GstEvent", sizeof (GstEvent), 64},
23 {"GstElement", sizeof (GstElement), 264},
24 {"GstEvent", sizeof (GstEvent), 88},
2125 {"GstFormatDefinition", sizeof (GstFormatDefinition), 32},
22 {"GstGhostPadClass", sizeof (GstGhostPadClass), 344},
23 {"GstGhostPad", sizeof (GstGhostPad), 384},
24 {"GstIndexAssociation", sizeof (GstIndexAssociation), 16},
25 {"GstIndexClass", sizeof (GstIndexClass), 312},
26 {"GstIndexEntry", sizeof (GstIndexEntry), 32},
27 {"GstIndexFactoryClass", sizeof (GstIndexFactoryClass), 304},
28 {"GstIndexFactory", sizeof (GstIndexFactory), 192},
29 {"GstIndexGroup", sizeof (GstIndexGroup), 24},
30 {"GstIndex", sizeof (GstIndex), 192},
31 {"GstIterator", sizeof (GstIterator), 104},
32 {"GstMessageClass", sizeof (GstMessageClass), 64},
33 {"GstMessage", sizeof (GstMessage), 104},
34 {"GstMiniObjectClass", sizeof (GstMiniObjectClass), 32},
35 {"GstMiniObject", sizeof (GstMiniObject), 24},
36 {"GstObjectClass", sizeof (GstObjectClass), 240},
37 {"GstObject", sizeof (GstObject), 80},
38 {"GstPadClass", sizeof (GstPadClass), 304},
39 {"GstPad", sizeof (GstPad), 368},
40 {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 280},
41 {"GstPadTemplate", sizeof (GstPadTemplate), 136},
42 {"GstPadTemplate", sizeof (GstPadTemplate), 136},
26 {"GstGhostPadClass", sizeof (GstGhostPadClass), 272},
27 {"GstGhostPad", sizeof (GstGhostPad), 536},
28 {"GstIterator", sizeof (GstIterator), 120},
29 {"GstMemory", sizeof (GstMemory), 112},
30 {"GstMapInfo", sizeof (GstMapInfo), 104},
31 {"GstMessage", sizeof (GstMessage), 120},
32 {"GstMeta", sizeof (GstMeta), 16},
33 {"GstMetaTransformCopy", sizeof (GstMetaTransformCopy), 24},
34 {"GstMetaInfo", sizeof (GstMetaInfo), 80},
35 {"GstMiniObject", sizeof (GstMiniObject), 64},
36 {"GstObjectClass", sizeof (GstObjectClass), 184},
37 {"GstObject", sizeof (GstObject), 88},
38 {"GstPadClass", sizeof (GstPadClass), 232},
39 {"GstPad", sizeof (GstPad), 520},
40 {"GstPadProbeInfo", sizeof (GstPadProbeInfo), 72},
41 {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 224},
42 {"GstPadTemplate", sizeof (GstPadTemplate), 144},
4343 {"GstParamSpecFraction", sizeof (GstParamSpecFraction), 96},
44 {"GstParamSpecMiniObject", sizeof (GstParamSpecMiniObject), 72},
45 {"GstPipelineClass", sizeof (GstPipelineClass), 600},
46 {"GstPipeline", sizeof (GstPipeline), 392},
47 {"GstPluginClass", sizeof (GstPluginClass), 272},
48 {"GstPluginDesc", sizeof (GstPluginDesc), 104},
49 {"GstPluginFeatureClass", sizeof (GstPluginFeatureClass), 272},
50 {"GstPluginFeature", sizeof (GstPluginFeature), 144},
51 {"GstPlugin", sizeof (GstPlugin), 280},
44 {"GstPipelineClass", sizeof (GstPipelineClass), 608},
45 {"GstPipeline", sizeof (GstPipeline), 440},
46 {"GstPluginDesc", sizeof (GstPluginDesc), 112},
5247 {"GstPresetInterface", sizeof (GstPresetInterface), 112},
53 {"GstProxyPadClass", sizeof (GstProxyPadClass), 312},
54 {"GstProxyPad", sizeof (GstProxyPad), 376},
55 {"GstQueryClass", sizeof (GstQueryClass), 64},
56 {"GstQuery", sizeof (GstQuery), 48},
57 {"GstQueryTypeDefinition", sizeof (GstQueryTypeDefinition), 32},
58 {"GstRegistryClass", sizeof (GstRegistryClass), 288},
59 {"GstRegistry", sizeof (GstRegistry), 144},
60 {"GstSegment", sizeof (GstSegment), 104},
61 {"GstStaticCaps", sizeof (GstStaticCaps), 96},
62 {"GstStaticPadTemplate", sizeof (GstStaticPadTemplate), 112},
63 {"GstStructure", sizeof (GstStructure), 40},
64 {"GstSystemClockClass", sizeof (GstSystemClockClass), 352},
65 {"GstSystemClock", sizeof (GstSystemClock), 288},
66 {"GstTagList", sizeof (GstTagList), 40},
48 {"GstProxyPadClass", sizeof (GstProxyPadClass), 240},
49 {"GstProxyPad", sizeof (GstProxyPad), 528},
50 {"GstQuery", sizeof (GstQuery), 72},
51 {"GstRegistryClass", sizeof (GstRegistryClass), 184},
52 {"GstRegistry", sizeof (GstRegistry), 96},
53 {"GstSegment", sizeof (GstSegment), 120},
54 {"GstStaticCaps", sizeof (GstStaticCaps), 48},
55 {"GstStaticPadTemplate", sizeof (GstStaticPadTemplate), 64},
56 {"GstStructure", sizeof (GstStructure), 16},
57 {"GstSystemClockClass", sizeof (GstSystemClockClass), 296},
58 {"GstSystemClock", sizeof (GstSystemClock), 168},
59 {"GstTagList", sizeof (GstTagList), 64,},
6760 {"GstTagSetterInterface", sizeof (GstTagSetterInterface), 16},
68 {"GstTaskClass", sizeof (GstTaskClass), 280},
69 {"GstTask", sizeof (GstTask), 160},
70 {"GstTaskPoolClass", sizeof (GstTaskPoolClass), 304},
71 {"GstTaskPool", sizeof (GstTaskPool), 120},
72 {"GstTaskThreadCallbacks", sizeof (GstTaskThreadCallbacks), 48},
73 {"GstTraceEntry", sizeof (GstTraceEntry), 128},
74 {"GstTrace", sizeof (GstTrace), 32},
75 {"GstTypeFindFactoryClass", sizeof (GstTypeFindFactoryClass), 304},
76 {"GstTypeFindFactory", sizeof (GstTypeFindFactory), 216},
61 {"GstTaskClass", sizeof (GstTaskClass), 224},
62 {"GstTask", sizeof (GstTask), 200},
63 {"GstTaskPoolClass", sizeof (GstTaskPoolClass), 248},
64 {"GstTaskPool", sizeof (GstTaskPool), 128},
65 {"GstTimedValue", sizeof (GstTimedValue), 16},
66 {"GstTocSetterInterface", sizeof (GstTocSetterInterface), 16},
7767 {"GstTypeFind", sizeof (GstTypeFind), 64},
78 #if !defined(GST_DISABLE_DEPRECATED) && !defined(GST_REMOVE_DEPRECATED)
79 {"GstTypeNameData", sizeof (GstTypeNameData), 16},
80 #endif
81 {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 88},
68 {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 48},
8269 {"GstValueTable", sizeof (GstValueTable), 64},
8370 {NULL, 0, 0}
8471 };
0 /* GStreamer
1 * Copyright (C) 2012 Wim Taymans <wim.taymans@gmail.com>
2 *
3 * libsabi.c: Unit test for ABI compatibility
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details.
14 *
15 * You should have received a copy of the GNU Library General Public
16 * License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 * Boston, MA 02111-1307, USA.
19 */
20
21 #include <config.h>
22 #include <gst/check/gstcheck.h>
23
24 #include <gst/base/gstadapter.h>
25 #include <gst/base/gstbaseparse.h>
26 #include <gst/base/gstbasesink.h>
27 #include <gst/base/gstbasesrc.h>
28 #include <gst/base/gstbasetransform.h>
29 #include <gst/base/gstbitreader.h>
30 #include <gst/base/gstbytereader.h>
31 #include <gst/base/gstbytewriter.h>
32 #include <gst/base/gstcollectpads.h>
33 #include <gst/base/gstpushsrc.h>
34 #include <gst/base/gsttypefindhelper.h>
35 #include <gst/controller/gstinterpolationcontrolsource.h>
36 #include <gst/controller/gstlfocontrolsource.h>
37 #include <gst/controller/gsttriggercontrolsource.h>
38 #include <gst/controller/gstargbcontrolbinding.h>
39 #include <gst/controller/gstdirectcontrolbinding.h>
40 #include <gst/controller/gsttimedvaluecontrolsource.h>
41 #include <gst/net/gstnet.h>
42 #include <gst/net/gstnetclientclock.h>
43 #include <gst/net/gstnettimepacket.h>
44 #include <gst/net/gstnettimeprovider.h>
45
46 #ifdef HAVE_CPU_I386
47 #include "struct_i386.h"
48 #define HAVE_ABI_SIZES TRUE
49 #else
50 #ifdef __powerpc64__
51 #include "struct_ppc64.h"
52 #define HAVE_ABI_SIZES TRUE
53 #else
54 #ifdef __powerpc__
55 #include "struct_ppc32.h"
56 #define HAVE_ABI_SIZES TRUE
57 #else
58 #ifdef HAVE_CPU_X86_64
59 #include "struct_x86_64.h"
60 #define HAVE_ABI_SIZES TRUE
61 #else
62 #ifdef HAVE_CPU_HPPA
63 #include "struct_hppa.h"
64 #define HAVE_ABI_SIZES TRUE
65 #else
66 #ifdef HAVE_CPU_SPARC
67 #include "struct_sparc.h"
68 #define HAVE_ABI_SIZES TRUE
69 #else
70 #ifdef HAVE_CPU_ARM
71 #include "struct_arm.h"
72 #define HAVE_ABI_SIZES TRUE
73 #else
74 /* in case someone wants to generate a new arch */
75 #include "struct_i386.h"
76 #define HAVE_ABI_SIZES FALSE
77 #endif
78 #endif
79 #endif
80 #endif
81 #endif
82 #endif
83 #endif
84
85 GST_START_TEST (test_ABI)
86 {
87 gst_check_abi_list (list, HAVE_ABI_SIZES);
88 }
89
90 GST_END_TEST;
91
92 static Suite *
93 libsabi_suite (void)
94 {
95 Suite *s = suite_create ("LibsABI");
96 TCase *tc_chain = tcase_create ("size check");
97
98 tcase_set_timeout (tc_chain, 0);
99
100 suite_add_tcase (s, tc_chain);
101 tcase_add_test (tc_chain, test_ABI);
102 return s;
103 }
104
105 GST_CHECK_MAIN (libsabi);
00
11 GstCheckABIStruct list[] = {
2 {"GstAdapter", sizeof (GstAdapter), 52},
3 {"GstAdapterClass", sizeof (GstAdapterClass), 84},
4 {"GstBaseSink", sizeof (GstBaseSink), 408},
5 {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 368},
6 {"GstBaseSrc", sizeof (GstBaseSrc), 392},
7 {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 376},
8 {"GstBaseTransform", sizeof (GstBaseTransform), 368},
9 {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 376},
10 {"GstCollectData", sizeof (GstCollectData), 120},
11 {"GstCollectPads", sizeof (GstCollectPads), 92},
12 {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 136},
13 {"GstPushSrc", sizeof (GstPushSrc), 408},
14 {"GstPushSrcClass", sizeof (GstPushSrcClass), 396},
15 {"GstTimedValue", sizeof (GstTimedValue), 32},
16 {"GstValueArray", sizeof (GstValueArray), 24},
17 {"GstController", sizeof (GstController), 40},
18 {"GstControllerClass", sizeof (GstControllerClass), 84},
19 {"GstNetClientClock", sizeof (GstNetClientClock), 256},
20 {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 192},
2 {"GstBaseParseClass", sizeof (GstBaseParseClass), 728},
3 {"GstBaseParse", sizeof (GstBaseParse), 576},
4 {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 792},
5 {"GstBaseSink", sizeof (GstBaseSink), 664},
6 {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 800},
7 {"GstBaseSrc", sizeof (GstBaseSrc), 648},
8 {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 816},
9 {"GstBaseTransform", sizeof (GstBaseTransform), 576},
10 {"GstBitReader", sizeof (GstBitReader), 56},
11 {"GstByteReader", sizeof (GstByteReader), 48},
12 {"GstByteWriter", sizeof (GstByteWriter), 96},
13 {"GstCollectData", sizeof (GstCollectData), 200},
14 {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 216},
15 {"GstCollectPads", sizeof (GstCollectPads), 152},
16 {"GstARGBControlBindingClass", sizeof (GstARGBControlBindingClass), 280},
17 {"GstARGBControlBinding", sizeof (GstARGBControlBinding), 248},
18 {"GstDirectControlBindingClass", sizeof (GstDirectControlBindingClass), 280},
19 {"GstDirectControlBinding", sizeof (GstDirectControlBinding), 248},
20 {"GstInterpolationControlSourceClass", sizeof (GstInterpolationControlSourceClass), 280},
21 {"GstInterpolationControlSource", sizeof (GstInterpolationControlSource), 240},
22 {"GstLFOControlSourceClass", sizeof (GstLFOControlSourceClass), 248},
23 {"GstLFOControlSource", sizeof (GstLFOControlSource), 184},
24 {"GstControlPoint", sizeof (GstControlPoint), 32},
25 {"GstTimedValueControlSourceClass", sizeof (GstTimedValueControlSourceClass), 248},
26 {"GstTimedValueControlSource", sizeof (GstTimedValueControlSource), 200},
27 {"GstTriggerControlSourceClass", sizeof (GstTriggerControlSourceClass), 280},
28 {"GstTriggerControlSource", sizeof (GstTriggerControlSource), 240},
29 {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 328},
30 {"GstNetClientClock", sizeof (GstNetClientClock), 208},
2131 {"GstNetTimePacket", sizeof (GstNetTimePacket), 16},
22 {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 84},
23 {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 120},
32 {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 216},
33 {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 128},
34 {"GstPushSrcClass", sizeof (GstPushSrcClass), 856},
35 {"GstPushSrc", sizeof (GstPushSrc), 680},
36 {"GstTimedValue", sizeof (GstTimedValue), 16},
2437 {NULL, 0, 0}
2538 };
0 static GstCheckABIStruct list[] = {
1 {"GstAdapter", sizeof (GstAdapter), 52},
2 {"GstAdapterClass", sizeof (GstAdapterClass), 84},
3 {"GstBaseSink", sizeof (GstBaseSink), 408},
4 {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 368},
5 {"GstBaseSrc", sizeof (GstBaseSrc), 392},
6 {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 376},
7 {"GstBaseTransform", sizeof (GstBaseTransform), 368},
8 {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 376},
9 {"GstCollectData", sizeof (GstCollectData), 120},
10 {"GstCollectPads", sizeof (GstCollectPads), 92},
11 {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 136},
12 {"GstPushSrc", sizeof (GstPushSrc), 408},
13 {"GstPushSrcClass", sizeof (GstPushSrcClass), 396},
140
15 {"GstTimedValue", sizeof (GstTimedValue), 32},
16 {"GstValueArray", sizeof (GstValueArray), 24},
17 {"GstController", sizeof (GstController), 40},
18 {"GstControllerClass", sizeof (GstControllerClass), 84},
19
20 {"GstNetClientClock", sizeof (GstNetClientClock), 256},
21 {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 192},
1 GstCheckABIStruct list[] = {
2 {"GstBaseParseClass", sizeof (GstBaseParseClass), 728},
3 {"GstBaseParse", sizeof (GstBaseParse), 576},
4 {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 792},
5 {"GstBaseSink", sizeof (GstBaseSink), 664},
6 {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 800},
7 {"GstBaseSrc", sizeof (GstBaseSrc), 648},
8 {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 816},
9 {"GstBaseTransform", sizeof (GstBaseTransform), 576},
10 {"GstBitReader", sizeof (GstBitReader), 56},
11 {"GstByteReader", sizeof (GstByteReader), 48},
12 {"GstByteWriter", sizeof (GstByteWriter), 96},
13 {"GstCollectData", sizeof (GstCollectData), 200},
14 {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 216},
15 {"GstCollectPads", sizeof (GstCollectPads), 152},
16 {"GstARGBControlBindingClass", sizeof (GstARGBControlBindingClass), 280},
17 {"GstARGBControlBinding", sizeof (GstARGBControlBinding), 248},
18 {"GstDirectControlBindingClass", sizeof (GstDirectControlBindingClass), 280},
19 {"GstDirectControlBinding", sizeof (GstDirectControlBinding), 248},
20 {"GstInterpolationControlSourceClass", sizeof (GstInterpolationControlSourceClass), 280},
21 {"GstInterpolationControlSource", sizeof (GstInterpolationControlSource), 240},
22 {"GstLFOControlSourceClass", sizeof (GstLFOControlSourceClass), 248},
23 {"GstLFOControlSource", sizeof (GstLFOControlSource), 184},
24 {"GstControlPoint", sizeof (GstControlPoint), 32},
25 {"GstTimedValueControlSourceClass", sizeof (GstTimedValueControlSourceClass), 248},
26 {"GstTimedValueControlSource", sizeof (GstTimedValueControlSource), 200},
27 {"GstTriggerControlSourceClass", sizeof (GstTriggerControlSourceClass), 280},
28 {"GstTriggerControlSource", sizeof (GstTriggerControlSource), 240},
29 {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 328},
30 {"GstNetClientClock", sizeof (GstNetClientClock), 208},
2231 {"GstNetTimePacket", sizeof (GstNetTimePacket), 16},
23 {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 84},
24 {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 120},
32 {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 216},
33 {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 128},
34 {"GstPushSrcClass", sizeof (GstPushSrcClass), 856},
35 {"GstPushSrc", sizeof (GstPushSrc), 680},
36 {"GstTimedValue", sizeof (GstTimedValue), 16},
2537 {NULL, 0, 0}
2638 };
0 static GstCheckABIStruct list[] = {
1 {"GstAdapter", sizeof(GstAdapter), 52},
2 {"GstAdapterClass", sizeof(GstAdapterClass), 84},
3 {"GstBaseSink", sizeof(GstBaseSink), 384},
4 {"GstBaseSinkClass", sizeof(GstBaseSinkClass), 368},
5 {"GstBaseSrc", sizeof(GstBaseSrc), 376},
6 {"GstBaseSrcClass", sizeof(GstBaseSrcClass), 376},
7 {"GstBaseTransform", sizeof(GstBaseTransform), 352},
8 {"GstBaseTransformClass", sizeof(GstBaseTransformClass), 376},
9 {"GstCollectData", sizeof(GstCollectData), 120},
10 {"GstCollectPads", sizeof(GstCollectPads), 92},
11 {"GstCollectPadsClass", sizeof(GstCollectPadsClass), 136},
12 {"GstPushSrc", sizeof(GstPushSrc), 392},
13 {"GstPushSrcClass", sizeof(GstPushSrcClass), 396},
140
15 {"GstTimedValue", sizeof(GstTimedValue), 28},
16 {"GstValueArray", sizeof(GstValueArray), 20},
17 {"GstController", sizeof(GstController), 40},
18 {"GstControllerClass", sizeof(GstControllerClass), 84},
19
20 {"GstNetClientClock", sizeof(GstNetClientClock), 248},
21 {"GstNetClientClockClass", sizeof(GstNetClientClockClass), 192},
22 {"GstNetTimePacket", sizeof(GstNetTimePacket), 16},
23 {"GstNetTimeProvider", sizeof(GstNetTimeProvider), 84},
24 {"GstNetTimeProviderClass", sizeof(GstNetTimeProviderClass), 120},
25
26 {NULL, 0, 0}
1 GstCheckABIStruct list[] = {
2 {"GstBaseParseClass", sizeof (GstBaseParseClass), 368},
3 {"GstBaseParse", sizeof (GstBaseParse), 364},
4 {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 400},
5 {"GstBaseSink", sizeof (GstBaseSink), 440},
6 {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 404},
7 {"GstBaseSrc", sizeof (GstBaseSrc), 424},
8 {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 416},
9 {"GstBaseTransform", sizeof (GstBaseTransform), 364},
10 {"GstBitReader", sizeof (GstBitReader), 32},
11 {"GstByteReader", sizeof (GstByteReader), 28},
12 {"GstByteWriter", sizeof (GstByteWriter), 56},
13 {"GstCollectData", sizeof (GstCollectData), 136},
14 {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 108},
15 {"GstCollectPads", sizeof (GstCollectPads), 92},
16 {"GstARGBControlBindingClass", sizeof (GstARGBControlBindingClass), 140},
17 {"GstARGBControlBinding", sizeof (GstARGBControlBinding), 144},
18 {"GstDirectControlBindingClass", sizeof (GstDirectControlBindingClass), 140},
19 {"GstDirectControlBinding", sizeof (GstDirectControlBinding), 148},
20 {"GstInterpolationControlSourceClass", sizeof (GstInterpolationControlSourceClass), 140},
21 {"GstInterpolationControlSource", sizeof (GstInterpolationControlSource), 140},
22 {"GstLFOControlSourceClass", sizeof (GstLFOControlSourceClass), 124},
23 {"GstLFOControlSource", sizeof (GstLFOControlSource), 108},
24 {"GstControlPoint", sizeof (GstControlPoint), 32},
25 {"GstTimedValueControlSourceClass", sizeof (GstTimedValueControlSourceClass), 124},
26 {"GstTimedValueControlSource", sizeof (GstTimedValueControlSource), 120},
27 {"GstTriggerControlSourceClass", sizeof (GstTriggerControlSourceClass), 140},
28 {"GstTriggerControlSource", sizeof (GstTriggerControlSource), 140},
29 {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 164},
30 {"GstNetClientClock", sizeof (GstNetClientClock), 116},
31 {"GstNetTimePacket", sizeof (GstNetTimePacket), 16},
32 {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 108},
33 {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 76},
34 {"GstPushSrcClass", sizeof (GstPushSrcClass), 432},
35 {"GstPushSrc", sizeof (GstPushSrc), 440},
36 {"GstTimedValue", sizeof (GstTimedValue), 16},
37 {NULL, 0, 0}
2738 };
0 static GstCheckABIStruct list[] = {
1 {"GstAdapter", sizeof (GstAdapter), 52},
2 {"GstAdapterClass", sizeof (GstAdapterClass), 84},
3 {"GstBaseSink", sizeof (GstBaseSink), 408},
4 {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 368},
5 {"GstBaseSrc", sizeof (GstBaseSrc), 392},
6 {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 376},
7 {"GstBaseTransform", sizeof (GstBaseTransform), 368},
8 {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 376},
9 {"GstCollectData", sizeof (GstCollectData), 120},
10 {"GstCollectPads", sizeof (GstCollectPads), 92},
11 {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 136},
12 {"GstPushSrc", sizeof (GstPushSrc), 408},
13 {"GstPushSrcClass", sizeof (GstPushSrcClass), 396},
14 {"GstTimedValue", sizeof (GstTimedValue), 32},
15 {"GstValueArray", sizeof (GstValueArray), 24},
16 {"GstController", sizeof (GstController), 40},
17 {"GstControllerClass", sizeof (GstControllerClass), 84},
18 {"GstNetClientClock", sizeof (GstNetClientClock), 256},
19 {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 192},
0
1 GstCheckABIStruct list[] = {
2 {"GstBaseParseClass", sizeof (GstBaseParseClass), 368},
3 {"GstBaseParse", sizeof (GstBaseParse), 392},
4 {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 400},
5 {"GstBaseSink", sizeof (GstBaseSink), 464},
6 {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 404},
7 {"GstBaseSrc", sizeof (GstBaseSrc), 448},
8 {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 416},
9 {"GstBaseTransform", sizeof (GstBaseTransform), 392},
10 {"GstBitReader", sizeof (GstBitReader), 32},
11 {"GstByteReader", sizeof (GstByteReader), 28},
12 {"GstByteWriter", sizeof (GstByteWriter), 56},
13 {"GstCollectData", sizeof (GstCollectData), 144},
14 {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 108},
15 {"GstCollectPads", sizeof (GstCollectPads), 104},
16 {"GstARGBControlBindingClass", sizeof (GstARGBControlBindingClass), 140},
17 {"GstARGBControlBinding", sizeof (GstARGBControlBinding), 160},
18 {"GstDirectControlBindingClass", sizeof (GstDirectControlBindingClass), 140},
19 {"GstDirectControlBinding", sizeof (GstDirectControlBinding), 168},
20 {"GstInterpolationControlSourceClass", sizeof (GstInterpolationControlSourceClass), 140},
21 {"GstInterpolationControlSource", sizeof (GstInterpolationControlSource), 152},
22 {"GstLFOControlSourceClass", sizeof (GstLFOControlSourceClass), 124},
23 {"GstLFOControlSource", sizeof (GstLFOControlSource), 120},
24 {"GstControlPoint", sizeof (GstControlPoint), 32},
25 {"GstTimedValueControlSourceClass", sizeof (GstTimedValueControlSourceClass), 124},
26 {"GstTimedValueControlSource", sizeof (GstTimedValueControlSource), 128},
27 {"GstTriggerControlSourceClass", sizeof (GstTriggerControlSourceClass), 140},
28 {"GstTriggerControlSource", sizeof (GstTriggerControlSource), 152},
29 {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 164},
30 {"GstNetClientClock", sizeof (GstNetClientClock), 136},
2031 {"GstNetTimePacket", sizeof (GstNetTimePacket), 16},
21 {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 84},
22 {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 120},
32 {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 108},
33 {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 88},
34 {"GstPushSrcClass", sizeof (GstPushSrcClass), 432},
35 {"GstPushSrc", sizeof (GstPushSrc), 464},
36 {"GstTimedValue", sizeof (GstTimedValue), 16},
2337 {NULL, 0, 0}
2438 };
0 static GstCheckABIStruct list[] = {
1 {"GstAdapter", sizeof (GstAdapter), 88}
2 ,
3 {"GstAdapterClass", sizeof (GstAdapterClass), 168}
4 ,
5 {"GstBaseSink", sizeof (GstBaseSink), 600}
6 ,
7 {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 728}
8 ,
9 {"GstBaseSrc", sizeof (GstBaseSrc), 600}
10 ,
11 {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 744}
12 ,
13 {"GstBaseTransform", sizeof (GstBaseTransform), 576}
14 ,
15 {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 744}
16 ,
17 {"GstCollectData", sizeof (GstCollectData), 168}
18 ,
19 {"GstCollectPads", sizeof (GstCollectPads), 168}
20 ,
21 {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 272}
22 ,
23 {"GstPushSrc", sizeof (GstPushSrc), 632}
24 ,
25 {"GstPushSrcClass", sizeof (GstPushSrcClass), 784}
26 ,
27 {"GstTimedValue", sizeof (GstTimedValue), 32}
28 ,
29 {"GstValueArray", sizeof (GstValueArray), 32}
30 ,
31 {"GstController", sizeof (GstController), 80}
32 ,
33 {"GstControllerClass", sizeof (GstControllerClass), 168}
34 ,
35 {"GstNetClientClock", sizeof (GstNetClientClock), 368}
36 ,
37 {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 384}
38 ,
39 {"GstNetTimePacket", sizeof (GstNetTimePacket), 16}
40 ,
41 {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 152}
42 ,
43 {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 240}
44 ,
0
1 GstCheckABIStruct list[] = {
2 {"GstBaseParseClass", sizeof (GstBaseParseClass), 728},
3 {"GstBaseParse", sizeof (GstBaseParse), 576},
4 {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 792},
5 {"GstBaseSink", sizeof (GstBaseSink), 664},
6 {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 800},
7 {"GstBaseSrc", sizeof (GstBaseSrc), 648},
8 {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 816},
9 {"GstBaseTransform", sizeof (GstBaseTransform), 576},
10 {"GstBitReader", sizeof (GstBitReader), 56},
11 {"GstByteReader", sizeof (GstByteReader), 48},
12 {"GstByteWriter", sizeof (GstByteWriter), 96},
13 {"GstCollectData", sizeof (GstCollectData), 200},
14 {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 216},
15 {"GstCollectPads", sizeof (GstCollectPads), 152},
16 {"GstARGBControlBindingClass", sizeof (GstARGBControlBindingClass), 280},
17 {"GstARGBControlBinding", sizeof (GstARGBControlBinding), 248},
18 {"GstDirectControlBindingClass", sizeof (GstDirectControlBindingClass), 280},
19 {"GstDirectControlBinding", sizeof (GstDirectControlBinding), 248},
20 {"GstInterpolationControlSourceClass", sizeof (GstInterpolationControlSourceClass), 280},
21 {"GstInterpolationControlSource", sizeof (GstInterpolationControlSource), 240},
22 {"GstLFOControlSourceClass", sizeof (GstLFOControlSourceClass), 248},
23 {"GstLFOControlSource", sizeof (GstLFOControlSource), 184},
24 {"GstControlPoint", sizeof (GstControlPoint), 32},
25 {"GstTimedValueControlSourceClass", sizeof (GstTimedValueControlSourceClass), 248},
26 {"GstTimedValueControlSource", sizeof (GstTimedValueControlSource), 200},
27 {"GstTriggerControlSourceClass", sizeof (GstTriggerControlSourceClass), 280},
28 {"GstTriggerControlSource", sizeof (GstTriggerControlSource), 240},
29 {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 328},
30 {"GstNetClientClock", sizeof (GstNetClientClock), 208},
31 {"GstNetTimePacket", sizeof (GstNetTimePacket), 16},
32 {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 216},
33 {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 128},
34 {"GstPushSrcClass", sizeof (GstPushSrcClass), 856},
35 {"GstPushSrc", sizeof (GstPushSrc), 680},
36 {"GstTimedValue", sizeof (GstTimedValue), 16},
4537 {NULL, 0, 0}
4638 };
00
11 GstCheckABIStruct list[] = {
2 {"GstAdapter", sizeof (GstAdapter), 52},
3 {"GstAdapterClass", sizeof (GstAdapterClass), 84},
4 {"GstBaseSink", sizeof (GstBaseSink), 408},
5 {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 368},
6 {"GstBaseSrc", sizeof (GstBaseSrc), 392},
7 {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 376},
8 {"GstBaseTransform", sizeof (GstBaseTransform), 368},
9 {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 376},
10 {"GstCollectData", sizeof (GstCollectData), 120},
11 {"GstCollectPads", sizeof (GstCollectPads), 92},
12 {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 136},
13 {"GstPushSrc", sizeof (GstPushSrc), 408},
14 {"GstPushSrcClass", sizeof (GstPushSrcClass), 396},
15 {"GstTimedValue", sizeof (GstTimedValue), 32},
16 {"GstValueArray", sizeof (GstValueArray), 24},
17 {"GstController", sizeof (GstController), 40},
18 {"GstControllerClass", sizeof (GstControllerClass), 84},
19 {"GstNetClientClock", sizeof (GstNetClientClock), 256},
20 {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 192},
2 {"GstBaseParseClass", sizeof (GstBaseParseClass), 728},
3 {"GstBaseParse", sizeof (GstBaseParse), 576},
4 {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 792},
5 {"GstBaseSink", sizeof (GstBaseSink), 664},
6 {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 800},
7 {"GstBaseSrc", sizeof (GstBaseSrc), 648},
8 {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 816},
9 {"GstBaseTransform", sizeof (GstBaseTransform), 576},
10 {"GstBitReader", sizeof (GstBitReader), 56},
11 {"GstByteReader", sizeof (GstByteReader), 48},
12 {"GstByteWriter", sizeof (GstByteWriter), 96},
13 {"GstCollectData", sizeof (GstCollectData), 200},
14 {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 216},
15 {"GstCollectPads", sizeof (GstCollectPads), 152},
16 {"GstARGBControlBindingClass", sizeof (GstARGBControlBindingClass), 280},
17 {"GstARGBControlBinding", sizeof (GstARGBControlBinding), 248},
18 {"GstDirectControlBindingClass", sizeof (GstDirectControlBindingClass), 280},
19 {"GstDirectControlBinding", sizeof (GstDirectControlBinding), 248},
20 {"GstInterpolationControlSourceClass", sizeof (GstInterpolationControlSourceClass), 280},
21 {"GstInterpolationControlSource", sizeof (GstInterpolationControlSource), 240},
22 {"GstLFOControlSourceClass", sizeof (GstLFOControlSourceClass), 248},
23 {"GstLFOControlSource", sizeof (GstLFOControlSource), 184},
24 {"GstControlPoint", sizeof (GstControlPoint), 32},
25 {"GstTimedValueControlSourceClass", sizeof (GstTimedValueControlSourceClass), 248},
26 {"GstTimedValueControlSource", sizeof (GstTimedValueControlSource), 200},
27 {"GstTriggerControlSourceClass", sizeof (GstTriggerControlSourceClass), 280},
28 {"GstTriggerControlSource", sizeof (GstTriggerControlSource), 240},
29 {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 328},
30 {"GstNetClientClock", sizeof (GstNetClientClock), 208},
2131 {"GstNetTimePacket", sizeof (GstNetTimePacket), 16},
22 {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 84},
23 {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 120},
32 {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 216},
33 {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 128},
34 {"GstPushSrcClass", sizeof (GstPushSrcClass), 856},
35 {"GstPushSrc", sizeof (GstPushSrc), 680},
36 {"GstTimedValue", sizeof (GstTimedValue), 16},
2437 {NULL, 0, 0}
2538 };
00
11 GstCheckABIStruct list[] = {
2 {"GstAdapterClass", sizeof (GstAdapterClass), 168},
3 {"GstAdapter", sizeof (GstAdapter), 88},
4 {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 728},
5 {"GstBaseSink", sizeof (GstBaseSink), 600},
6 {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 744},
7 {"GstBaseSrc", sizeof (GstBaseSrc), 600},
8 {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 744},
2 {"GstBaseParseClass", sizeof (GstBaseParseClass), 728},
3 {"GstBaseParse", sizeof (GstBaseParse), 576},
4 {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 792},
5 {"GstBaseSink", sizeof (GstBaseSink), 664},
6 {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 800},
7 {"GstBaseSrc", sizeof (GstBaseSrc), 648},
8 {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 816},
99 {"GstBaseTransform", sizeof (GstBaseTransform), 576},
10 {"GstBitReader", sizeof (GstBitReader), 24},
11 {"GstByteReader", sizeof (GstByteReader), 16},
12 {"GstByteWriter", sizeof (GstByteWriter), 32},
13 {"GstCollectData", sizeof (GstCollectData), 168},
14 {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 272},
15 {"GstCollectPads", sizeof (GstCollectPads), 168},
16 {"GstControllerClass", sizeof (GstControllerClass), 168},
17 {"GstController", sizeof (GstController), 80},
18 {"GstControlSourceClass", sizeof (GstControlSourceClass), 176},
19 {"GstControlSource", sizeof (GstControlSource), 80},
20 {"GstDataQueueClass", sizeof (GstDataQueueClass), 184},
21 {"GstDataQueueItem", sizeof (GstDataQueueItem), 40},
22 {"GstDataQueue", sizeof (GstDataQueue), 128},
23 {"GstDataQueueSize", sizeof (GstDataQueueSize), 16},
24 {"GstDPPacketizer", sizeof (GstDPPacketizer), 64},
25 {"GstInterpolationControlSourceClass", sizeof (GstInterpolationControlSourceClass), 208},
26 {"GstInterpolationControlSource", sizeof (GstInterpolationControlSource), 128},
27 {"GstLFOControlSourceClass", sizeof (GstLFOControlSourceClass), 208},
28 {"GstLFOControlSource", sizeof (GstLFOControlSource), 128},
29 {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 384},
30 {"GstNetClientClock", sizeof (GstNetClientClock), 368},
10 {"GstBitReader", sizeof (GstBitReader), 56},
11 {"GstByteReader", sizeof (GstByteReader), 48},
12 {"GstByteWriter", sizeof (GstByteWriter), 96},
13 {"GstCollectData", sizeof (GstCollectData), 200},
14 {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 216},
15 {"GstCollectPads", sizeof (GstCollectPads), 152},
16 {"GstARGBControlBindingClass", sizeof (GstARGBControlBindingClass), 280},
17 {"GstARGBControlBinding", sizeof (GstARGBControlBinding), 248},
18 {"GstDirectControlBindingClass", sizeof (GstDirectControlBindingClass), 280},
19 {"GstDirectControlBinding", sizeof (GstDirectControlBinding), 248},
20 {"GstInterpolationControlSourceClass", sizeof (GstInterpolationControlSourceClass), 280},
21 {"GstInterpolationControlSource", sizeof (GstInterpolationControlSource), 240},
22 {"GstLFOControlSourceClass", sizeof (GstLFOControlSourceClass), 248},
23 {"GstLFOControlSource", sizeof (GstLFOControlSource), 184},
24 {"GstControlPoint", sizeof (GstControlPoint), 32},
25 {"GstTimedValueControlSourceClass", sizeof (GstTimedValueControlSourceClass), 248},
26 {"GstTimedValueControlSource", sizeof (GstTimedValueControlSource), 200},
27 {"GstTriggerControlSourceClass", sizeof (GstTriggerControlSourceClass), 280},
28 {"GstTriggerControlSource", sizeof (GstTriggerControlSource), 240},
29 {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 328},
30 {"GstNetClientClock", sizeof (GstNetClientClock), 208},
3131 {"GstNetTimePacket", sizeof (GstNetTimePacket), 16},
32 {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 240},
33 {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 152},
34 {"GstPushSrcClass", sizeof (GstPushSrcClass), 784},
35 {"GstPushSrc", sizeof (GstPushSrc), 632},
36 {"GstTimedValue", sizeof (GstTimedValue), 32},
37 {"GstValueArray", sizeof (GstValueArray), 32},
32 {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 216},
33 {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 128},
34 {"GstPushSrcClass", sizeof (GstPushSrcClass), 856},
35 {"GstPushSrc", sizeof (GstPushSrc), 680},
36 {"GstTimedValue", sizeof (GstTimedValue), 16},
3837 {NULL, 0, 0}
3938 };
3434 init \
3535 query \
3636 typefind \
37 fakesrc \
37 blockprobe \
38 probe \
39 appsrc \
40 appsink \
41 dynformat \
3842 playbin \
3943 decodebin
4044
4751 init.c \
4852 query.c \
4953 typefind.c dynamic.c \
50 fakesrc.c \
54 blockprobe.c \
55 probe.c \
56 appsrc.c \
57 appsink.c \
58 dynformat.c \
5159 playbin.c decodebin.c
5260
5361 CLEANFILES = core core.* test-registry.* *.gcno *.gcda $(BUILT_SOURCES)
8088 typefind.c dynamic.c: $(top_srcdir)/docs/manual/advanced-autoplugging.xml
8189 $(PERL_PATH) $(srcdir)/extract.pl $@ $<
8290
83 fakesrc.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
91 blockprobe.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
92 $(PERL_PATH) $(srcdir)/extract.pl $@ $<
93
94 probe.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
95 $(PERL_PATH) $(srcdir)/extract.pl $@ $<
96
97 appsrc.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
98 $(PERL_PATH) $(srcdir)/extract.pl $@ $<
99
100 appsink.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
101 $(PERL_PATH) $(srcdir)/extract.pl $@ $<
102
103 dynformat.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
84104 $(PERL_PATH) $(srcdir)/extract.pl $@ $<
85105
86106 playbin.c decodebin.c: $(top_srcdir)/docs/manual/highlevel-components.xml
105105 elementget$(EXEEXT) elementlink$(EXEEXT) bin$(EXEEXT) \
106106 pad$(EXEEXT) ghostpad$(EXEEXT) helloworld$(EXEEXT) \
107107 init$(EXEEXT) query$(EXEEXT) typefind$(EXEEXT) \
108 fakesrc$(EXEEXT) playbin$(EXEEXT) decodebin$(EXEEXT)
108 blockprobe$(EXEEXT) probe$(EXEEXT) appsrc$(EXEEXT) \
109 appsink$(EXEEXT) dynformat$(EXEEXT) playbin$(EXEEXT) \
110 decodebin$(EXEEXT)
109111 PROGRAMS = $(noinst_PROGRAMS)
112 appsink_SOURCES = appsink.c
113 appsink_OBJECTS = appsink.$(OBJEXT)
114 appsink_LDADD = $(LDADD)
115 am__DEPENDENCIES_1 =
116 appsink_DEPENDENCIES = \
117 $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
118 $(am__DEPENDENCIES_1)
119 AM_V_lt = $(am__v_lt_@AM_V@)
120 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
121 am__v_lt_0 = --silent
122 appsrc_SOURCES = appsrc.c
123 appsrc_OBJECTS = appsrc.$(OBJEXT)
124 appsrc_LDADD = $(LDADD)
125 appsrc_DEPENDENCIES = \
126 $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
127 $(am__DEPENDENCIES_1)
110128 bin_SOURCES = bin.c
111129 bin_OBJECTS = bin.$(OBJEXT)
112130 bin_LDADD = $(LDADD)
113 am__DEPENDENCIES_1 =
114131 bin_DEPENDENCIES = \
115132 $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
116133 $(am__DEPENDENCIES_1)
117 AM_V_lt = $(am__v_lt_@AM_V@)
118 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
119 am__v_lt_0 = --silent
134 blockprobe_SOURCES = blockprobe.c
135 blockprobe_OBJECTS = blockprobe.$(OBJEXT)
136 blockprobe_LDADD = $(LDADD)
137 blockprobe_DEPENDENCIES = \
138 $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
139 $(am__DEPENDENCIES_1)
120140 decodebin_SOURCES = decodebin.c
121141 decodebin_OBJECTS = decodebin.$(OBJEXT)
122142 decodebin_LDADD = $(LDADD)
129149 dynamic_DEPENDENCIES = \
130150 $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
131151 $(am__DEPENDENCIES_1)
152 dynformat_SOURCES = dynformat.c
153 dynformat_OBJECTS = dynformat.$(OBJEXT)
154 dynformat_LDADD = $(LDADD)
155 dynformat_DEPENDENCIES = \
156 $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
157 $(am__DEPENDENCIES_1)
132158 elementcreate_SOURCES = elementcreate.c
133159 elementcreate_OBJECTS = elementcreate.$(OBJEXT)
134160 elementcreate_LDADD = $(LDADD)
159185 elementmake_DEPENDENCIES = \
160186 $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
161187 $(am__DEPENDENCIES_1)
162 fakesrc_SOURCES = fakesrc.c
163 fakesrc_OBJECTS = fakesrc.$(OBJEXT)
164 fakesrc_LDADD = $(LDADD)
165 fakesrc_DEPENDENCIES = \
166 $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
167 $(am__DEPENDENCIES_1)
168188 ghostpad_SOURCES = ghostpad.c
169189 ghostpad_OBJECTS = ghostpad.$(OBJEXT)
170190 ghostpad_LDADD = $(LDADD)
193213 playbin_OBJECTS = playbin.$(OBJEXT)
194214 playbin_LDADD = $(LDADD)
195215 playbin_DEPENDENCIES = \
216 $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
217 $(am__DEPENDENCIES_1)
218 probe_SOURCES = probe.c
219 probe_OBJECTS = probe.$(OBJEXT)
220 probe_LDADD = $(LDADD)
221 probe_DEPENDENCIES = \
196222 $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
197223 $(am__DEPENDENCIES_1)
198224 query_SOURCES = query.c
233259 AM_V_GEN = $(am__v_GEN_@AM_V@)
234260 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
235261 am__v_GEN_0 = @echo " GEN " $@;
236 SOURCES = bin.c decodebin.c dynamic.c elementcreate.c elementfactory.c \
237 elementget.c elementlink.c elementmake.c fakesrc.c ghostpad.c \
238 helloworld.c init.c pad.c playbin.c query.c typefind.c
239 DIST_SOURCES = bin.c decodebin.c dynamic.c elementcreate.c \
240 elementfactory.c elementget.c elementlink.c elementmake.c \
241 fakesrc.c ghostpad.c helloworld.c init.c pad.c playbin.c \
242 query.c typefind.c
262 SOURCES = appsink.c appsrc.c bin.c blockprobe.c decodebin.c dynamic.c \
263 dynformat.c elementcreate.c elementfactory.c elementget.c \
264 elementlink.c elementmake.c ghostpad.c helloworld.c init.c \
265 pad.c playbin.c probe.c query.c typefind.c
266 DIST_SOURCES = appsink.c appsrc.c bin.c blockprobe.c decodebin.c \
267 dynamic.c dynformat.c elementcreate.c elementfactory.c \
268 elementget.c elementlink.c elementmake.c ghostpad.c \
269 helloworld.c init.c pad.c playbin.c probe.c query.c typefind.c
243270 am__can_run_installinfo = \
244271 case $$AM_UPDATE_INFO_DIR in \
245272 n|no|NO) false;; \
560587 init \
561588 query \
562589 typefind \
563 fakesrc \
590 blockprobe \
591 probe \
592 appsrc \
593 appsink \
594 dynformat \
564595 playbin \
565596 decodebin
566597
573604 init.c \
574605 query.c \
575606 typefind.c dynamic.c \
576 fakesrc.c \
607 blockprobe.c \
608 probe.c \
609 appsrc.c \
610 appsink.c \
611 dynformat.c \
577612 playbin.c decodebin.c
578613
579614 CLEANFILES = core core.* test-registry.* *.gcno *.gcda $(BUILT_SOURCES)
625660 list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
626661 echo " rm -f" $$list; \
627662 rm -f $$list
663 appsink$(EXEEXT): $(appsink_OBJECTS) $(appsink_DEPENDENCIES) $(EXTRA_appsink_DEPENDENCIES)
664 @rm -f appsink$(EXEEXT)
665 $(AM_V_CCLD)$(LINK) $(appsink_OBJECTS) $(appsink_LDADD) $(LIBS)
666 appsrc$(EXEEXT): $(appsrc_OBJECTS) $(appsrc_DEPENDENCIES) $(EXTRA_appsrc_DEPENDENCIES)
667 @rm -f appsrc$(EXEEXT)
668 $(AM_V_CCLD)$(LINK) $(appsrc_OBJECTS) $(appsrc_LDADD) $(LIBS)
628669 bin$(EXEEXT): $(bin_OBJECTS) $(bin_DEPENDENCIES) $(EXTRA_bin_DEPENDENCIES)
629670 @rm -f bin$(EXEEXT)
630671 $(AM_V_CCLD)$(LINK) $(bin_OBJECTS) $(bin_LDADD) $(LIBS)
672 blockprobe$(EXEEXT): $(blockprobe_OBJECTS) $(blockprobe_DEPENDENCIES) $(EXTRA_blockprobe_DEPENDENCIES)
673 @rm -f blockprobe$(EXEEXT)
674 $(AM_V_CCLD)$(LINK) $(blockprobe_OBJECTS) $(blockprobe_LDADD) $(LIBS)
631675 decodebin$(EXEEXT): $(decodebin_OBJECTS) $(decodebin_DEPENDENCIES) $(EXTRA_decodebin_DEPENDENCIES)
632676 @rm -f decodebin$(EXEEXT)
633677 $(AM_V_CCLD)$(LINK) $(decodebin_OBJECTS) $(decodebin_LDADD) $(LIBS)
634678 dynamic$(EXEEXT): $(dynamic_OBJECTS) $(dynamic_DEPENDENCIES) $(EXTRA_dynamic_DEPENDENCIES)
635679 @rm -f dynamic$(EXEEXT)
636680 $(AM_V_CCLD)$(LINK) $(dynamic_OBJECTS) $(dynamic_LDADD) $(LIBS)
681 dynformat$(EXEEXT): $(dynformat_OBJECTS) $(dynformat_DEPENDENCIES) $(EXTRA_dynformat_DEPENDENCIES)
682 @rm -f dynformat$(EXEEXT)
683 $(AM_V_CCLD)$(LINK) $(dynformat_OBJECTS) $(dynformat_LDADD) $(LIBS)
637684 elementcreate$(EXEEXT): $(elementcreate_OBJECTS) $(elementcreate_DEPENDENCIES) $(EXTRA_elementcreate_DEPENDENCIES)
638685 @rm -f elementcreate$(EXEEXT)
639686 $(AM_V_CCLD)$(LINK) $(elementcreate_OBJECTS) $(elementcreate_LDADD) $(LIBS)
649696 elementmake$(EXEEXT): $(elementmake_OBJECTS) $(elementmake_DEPENDENCIES) $(EXTRA_elementmake_DEPENDENCIES)
650697 @rm -f elementmake$(EXEEXT)
651698 $(AM_V_CCLD)$(LINK) $(elementmake_OBJECTS) $(elementmake_LDADD) $(LIBS)
652 fakesrc$(EXEEXT): $(fakesrc_OBJECTS) $(fakesrc_DEPENDENCIES) $(EXTRA_fakesrc_DEPENDENCIES)
653 @rm -f fakesrc$(EXEEXT)
654 $(AM_V_CCLD)$(LINK) $(fakesrc_OBJECTS) $(fakesrc_LDADD) $(LIBS)
655699 ghostpad$(EXEEXT): $(ghostpad_OBJECTS) $(ghostpad_DEPENDENCIES) $(EXTRA_ghostpad_DEPENDENCIES)
656700 @rm -f ghostpad$(EXEEXT)
657701 $(AM_V_CCLD)$(LINK) $(ghostpad_OBJECTS) $(ghostpad_LDADD) $(LIBS)
667711 playbin$(EXEEXT): $(playbin_OBJECTS) $(playbin_DEPENDENCIES) $(EXTRA_playbin_DEPENDENCIES)
668712 @rm -f playbin$(EXEEXT)
669713 $(AM_V_CCLD)$(LINK) $(playbin_OBJECTS) $(playbin_LDADD) $(LIBS)
714 probe$(EXEEXT): $(probe_OBJECTS) $(probe_DEPENDENCIES) $(EXTRA_probe_DEPENDENCIES)
715 @rm -f probe$(EXEEXT)
716 $(AM_V_CCLD)$(LINK) $(probe_OBJECTS) $(probe_LDADD) $(LIBS)
670717 query$(EXEEXT): $(query_OBJECTS) $(query_DEPENDENCIES) $(EXTRA_query_DEPENDENCIES)
671718 @rm -f query$(EXEEXT)
672719 $(AM_V_CCLD)$(LINK) $(query_OBJECTS) $(query_LDADD) $(LIBS)
680727 distclean-compile:
681728 -rm -f *.tab.c
682729
730 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/appsink.Po@am__quote@
731 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/appsrc.Po@am__quote@
683732 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bin.Po@am__quote@
733 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blockprobe.Po@am__quote@
684734 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decodebin.Po@am__quote@
685735 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dynamic.Po@am__quote@
736 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dynformat.Po@am__quote@
686737 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elementcreate.Po@am__quote@
687738 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elementfactory.Po@am__quote@
688739 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elementget.Po@am__quote@
689740 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elementlink.Po@am__quote@
690741 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elementmake.Po@am__quote@
691 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fakesrc.Po@am__quote@
692742 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ghostpad.Po@am__quote@
693743 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/helloworld.Po@am__quote@
694744 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init.Po@am__quote@
695745 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pad.Po@am__quote@
696746 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/playbin.Po@am__quote@
747 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/probe.Po@am__quote@
697748 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/query.Po@am__quote@
698749 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/typefind.Po@am__quote@
699750
10501101 typefind.c dynamic.c: $(top_srcdir)/docs/manual/advanced-autoplugging.xml
10511102 $(PERL_PATH) $(srcdir)/extract.pl $@ $<
10521103
1053 fakesrc.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
1104 blockprobe.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
1105 $(PERL_PATH) $(srcdir)/extract.pl $@ $<
1106
1107 probe.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
1108 $(PERL_PATH) $(srcdir)/extract.pl $@ $<
1109
1110 appsrc.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
1111 $(PERL_PATH) $(srcdir)/extract.pl $@ $<
1112
1113 appsink.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
1114 $(PERL_PATH) $(srcdir)/extract.pl $@ $<
1115
1116 dynformat.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
10541117 $(PERL_PATH) $(srcdir)/extract.pl $@ $<
10551118
10561119 playbin.c decodebin.c: $(top_srcdir)/docs/manual/highlevel-components.xml
0
1 /*** block from ../../../docs/manual/advanced-dataaccess.xml ***/
2 #include <gst/gst.h>
3 #ifdef HAVE_GTK
4 #include <gtk/gtk.h>
5 #endif
6
7 #include <stdlib.h>
8
9 #define CAPS "video/x-raw,format=RGB,width=160,pixel-aspect-ratio=1/1"
10
11 int
12 main (int argc, char *argv[])
13 {
14 GstElement *pipeline, *sink;
15 gint width, height;
16 GstSample *sample;
17 gchar *descr;
18 GError *error = NULL;
19 gint64 duration, position;
20 GstStateChangeReturn ret;
21 gboolean res;
22 GstMapInfo map;
23
24 gst_init (&argc, &argv);
25
26 if (argc != 2) {
27 g_print ("usage: %s <uri>\n Writes snapshot.png in the current directory\n",
28 argv[0]);
29 exit (-1);
30 }
31
32 /* create a new pipeline */
33 descr =
34 g_strdup_printf ("uridecodebin uri=%s ! videoconvert ! videoscale ! "
35 " appsink name=sink caps=\"" CAPS "\"", argv[1]);
36 pipeline = gst_parse_launch (descr, &error);
37
38 if (error != NULL) {
39 g_print ("could not construct pipeline: %s\n", error->message);
40 g_error_free (error);
41 exit (-1);
42 }
43
44 /* get sink */
45 sink = gst_bin_get_by_name (GST_BIN (pipeline), "sink");
46
47 /* set to PAUSED to make the first frame arrive in the sink */
48 ret = gst_element_set_state (pipeline, GST_STATE_PAUSED);
49 switch (ret) {
50 case GST_STATE_CHANGE_FAILURE:
51 g_print ("failed to play the file\n");
52 exit (-1);
53 case GST_STATE_CHANGE_NO_PREROLL:
54 /* for live sources, we need to set the pipeline to PLAYING before we can
55 * receive a buffer. We don't do that yet */
56 g_print ("live sources not supported yet\n");
57 exit (-1);
58 default:
59 break;
60 }
61 /* This can block for up to 5 seconds. If your machine is really overloaded,
62 * it might time out before the pipeline prerolled and we generate an error. A
63 * better way is to run a mainloop and catch errors there. */
64 ret = gst_element_get_state (pipeline, NULL, NULL, 5 * GST_SECOND);
65 if (ret == GST_STATE_CHANGE_FAILURE) {
66 g_print ("failed to play the file\n");
67 exit (-1);
68 }
69
70 /* get the duration */
71 gst_element_query_duration (pipeline, GST_FORMAT_TIME, &duration);
72
73 if (duration != -1)
74 /* we have a duration, seek to 5% */
75 position = duration * 5 / 100;
76 else
77 /* no duration, seek to 1 second, this could EOS */
78 position = 1 * GST_SECOND;
79
80 /* seek to the a position in the file. Most files have a black first frame so
81 * by seeking to somewhere else we have a bigger chance of getting something
82 * more interesting. An optimisation would be to detect black images and then
83 * seek a little more */
84 gst_element_seek_simple (pipeline, GST_FORMAT_TIME,
85 GST_SEEK_FLAG_KEY_UNIT | GST_SEEK_FLAG_FLUSH, position);
86
87 /* get the preroll buffer from appsink, this block untils appsink really
88 * prerolls */
89 g_signal_emit_by_name (sink, "pull-preroll", &sample, NULL);
90
91 /* if we have a buffer now, convert it to a pixbuf. It's possible that we
92 * don't have a buffer because we went EOS right away or had an error. */
93 if (sample) {
94 GstBuffer *buffer;
95 GstCaps *caps;
96 GstStructure *s;
97
98 /* get the snapshot buffer format now. We set the caps on the appsink so
99 * that it can only be an rgb buffer. The only thing we have not specified
100 * on the caps is the height, which is dependant on the pixel-aspect-ratio
101 * of the source material */
102 caps = gst_sample_get_caps (sample);
103 if (!caps) {
104 g_print ("could not get snapshot format\n");
105 exit (-1);
106 }
107 s = gst_caps_get_structure (caps, 0);
108
109 /* we need to get the final caps on the buffer to get the size */
110 res = gst_structure_get_int (s, "width", &width);
111 res |= gst_structure_get_int (s, "height", &height);
112 if (!res) {
113 g_print ("could not get snapshot dimension\n");
114 exit (-1);
115 }
116
117 /* create pixmap from buffer and save, gstreamer video buffers have a stride
118 * that is rounded up to the nearest multiple of 4 */
119 buffer = gst_sample_get_buffer (sample);
120 gst_buffer_map (buffer, &map, GST_MAP_READ);
121 #ifdef HAVE_GTK
122 pixbuf = gdk_pixbuf_new_from_data (map.data,
123 GDK_COLORSPACE_RGB, FALSE, 8, width, height,
124 GST_ROUND_UP_4 (width * 3), NULL, NULL);
125
126 /* save the pixbuf */
127 gdk_pixbuf_save (pixbuf, "snapshot.png", "png", &error, NULL);
128 #endif
129 gst_buffer_unmap (buffer, &map);
130 } else {
131 g_print ("could not make snapshot\n");
132 }
133
134 /* cleanup and exit */
135 gst_element_set_state (pipeline, GST_STATE_NULL);
136 gst_object_unref (pipeline);
137
138 exit (0);
139 }
0
1 /*** block from ../../../docs/manual/advanced-dataaccess.xml ***/
2 #include <gst/gst.h>
3
4 static GMainLoop *loop;
5
6 static void
7 cb_need_data (GstElement *appsrc,
8 guint unused_size,
9 gpointer user_data)
10 {
11 static gboolean white = FALSE;
12 static GstClockTime timestamp = 0;
13 GstBuffer *buffer;
14 guint size;
15 GstFlowReturn ret;
16
17 size = 385 * 288 * 2;
18
19 buffer = gst_buffer_new_allocate (NULL, size, NULL);
20
21 /* this makes the image black/white */
22 gst_buffer_memset (buffer, 0, white ? 0xff : 0x0, size);
23
24 white = !white;
25
26 GST_BUFFER_PTS (buffer) = timestamp;
27 GST_BUFFER_DURATION (buffer) = gst_util_uint64_scale_int (1, GST_SECOND, 2);
28
29 timestamp += GST_BUFFER_DURATION (buffer);
30
31 g_signal_emit_by_name (appsrc, "push-buffer", buffer, &ret);
32
33 if (ret != GST_FLOW_OK) {
34 /* something wrong, stop pushing */
35 g_main_loop_quit (loop);
36 }
37 }
38
39 gint
40 main (gint argc,
41 gchar *argv[])
42 {
43 GstElement *pipeline, *appsrc, *conv, *videosink;
44
45 /* init GStreamer */
46 gst_init (&argc, &argv);
47 loop = g_main_loop_new (NULL, FALSE);
48
49 /* setup pipeline */
50 pipeline = gst_pipeline_new ("pipeline");
51 appsrc = gst_element_factory_make ("appsrc", "source");
52 conv = gst_element_factory_make ("videoconvert", "conv");
53 videosink = gst_element_factory_make ("xvimagesink", "videosink");
54
55 /* setup */
56 g_object_set (G_OBJECT (appsrc), "caps",
57 gst_caps_new_simple ("video/x-raw",
58 "format", G_TYPE_STRING, "RGB16",
59 "width", G_TYPE_INT, 384,
60 "height", G_TYPE_INT, 288,
61 "framerate", GST_TYPE_FRACTION, 0, 1,
62 NULL), NULL);
63 gst_bin_add_many (GST_BIN (pipeline), appsrc, conv, videosink, NULL);
64 gst_element_link_many (appsrc, conv, videosink, NULL);
65
66 /* setup appsrc */
67 g_object_set (G_OBJECT (appsrc),
68 "stream-type", 0,
69 "format", GST_FORMAT_TIME, NULL);
70 g_signal_connect (appsrc, "need-data", G_CALLBACK (cb_need_data), NULL);
71
72 /* play */
73 gst_element_set_state (pipeline, GST_STATE_PLAYING);
74 g_main_loop_run (loop);
75
76 /* clean up */
77 gst_element_set_state (pipeline, GST_STATE_NULL);
78 gst_object_unref (GST_OBJECT (pipeline));
79 g_main_loop_unref (loop);
80
81 return 0;
82 }
0
1 /*** block from ../../../docs/manual/advanced-dataaccess.xml ***/
2 #include <gst/gst.h>
3
4 static GMainLoop *loop;
5 static volatile gint counter;
6 static GstBus *bus;
7 static gboolean prerolled = FALSE;
8 static GstPad *sinkpad;
9
10 static void
11 dec_counter (GstElement * pipeline)
12 {
13 if (prerolled)
14 return;
15
16 if (g_atomic_int_dec_and_test (&counter)) {
17 /* all probes blocked and no-more-pads signaled, post
18 * message on the bus. */
19 prerolled = TRUE;
20
21 gst_bus_post (bus, gst_message_new_application (
22 GST_OBJECT_CAST (pipeline),
23 gst_structure_new_empty ("ExPrerolled")));
24 }
25 }
26
27 /* called when a source pad of uridecodebin is blocked */
28 static GstPadProbeReturn
29 cb_blocked (GstPad *pad,
30 GstPadProbeInfo *info,
31 gpointer user_data)
32 {
33 GstElement *pipeline = GST_ELEMENT (user_data);
34
35 if (prerolled)
36 return GST_PAD_PROBE_REMOVE;
37
38 dec_counter (pipeline);
39
40 return GST_PAD_PROBE_OK;
41 }
42
43 /* called when uridecodebin has a new pad */
44 static void
45 cb_pad_added (GstElement *element,
46 GstPad *pad,
47 gpointer user_data)
48 {
49 GstElement *pipeline = GST_ELEMENT (user_data);
50
51 if (prerolled)
52 return;
53
54 g_atomic_int_inc (&counter);
55
56 gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM,
57 (GstPadProbeCallback) cb_blocked, pipeline, NULL);
58
59 /* try to link to the video pad */
60 gst_pad_link (pad, sinkpad);
61 }
62
63 /* called when uridecodebin has created all pads */
64 static void
65 cb_no_more_pads (GstElement *element,
66 gpointer user_data)
67 {
68 GstElement *pipeline = GST_ELEMENT (user_data);
69
70 if (prerolled)
71 return;
72
73 dec_counter (pipeline);
74 }
75
76 /* called when a new message is posted on the bus */
77 static void
78 cb_message (GstBus *bus,
79 GstMessage *message,
80 gpointer user_data)
81 {
82 GstElement *pipeline = GST_ELEMENT (user_data);
83
84 switch (GST_MESSAGE_TYPE (message)) {
85 case GST_MESSAGE_ERROR:
86 g_print ("we received an error!\n");
87 g_main_loop_quit (loop);
88 break;
89 case GST_MESSAGE_EOS:
90 g_print ("we reached EOS\n");
91 g_main_loop_quit (loop);
92 break;
93 case GST_MESSAGE_APPLICATION:
94 {
95 if (gst_message_has_name (message, "ExPrerolled")) {
96 /* it's our message */
97 g_print ("we are all prerolled, do seek\n");
98 gst_element_seek (pipeline,
99 1.0, GST_FORMAT_TIME,
100 GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE,
101 GST_SEEK_TYPE_SET, 2 * GST_SECOND,
102 GST_SEEK_TYPE_SET, 5 * GST_SECOND);
103
104 gst_element_set_state (pipeline, GST_STATE_PLAYING);
105 }
106 break;
107 }
108 default:
109 break;
110 }
111 }
112
113 gint
114 main (gint argc,
115 gchar *argv[])
116 {
117 GstElement *pipeline, *src, *csp, *vs, *sink;
118
119 /* init GStreamer */
120 gst_init (&argc, &argv);
121 loop = g_main_loop_new (NULL, FALSE);
122
123 if (argc < 2) {
124 g_print ("usage: %s <uri>", argv[0]);
125 return -1;
126 }
127
128 /* build */
129 pipeline = gst_pipeline_new ("my-pipeline");
130
131 bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
132 gst_bus_add_signal_watch (bus);
133 g_signal_connect (bus, "message", (GCallback) cb_message,
134 pipeline);
135
136 src = gst_element_factory_make ("uridecodebin", "src");
137 if (src == NULL)
138 g_error ("Could not create 'uridecodebin' element");
139
140 g_object_set (src, "uri", argv[1], NULL);
141
142 csp = gst_element_factory_make ("videoconvert", "csp");
143 if (csp == NULL)
144 g_error ("Could not create 'videoconvert' element");
145
146 vs = gst_element_factory_make ("videoscale", "vs");
147 if (csp == NULL)
148 g_error ("Could not create 'videoscale' element");
149
150 sink = gst_element_factory_make ("autovideosink", "sink");
151 if (sink == NULL)
152 g_error ("Could not create 'autovideosink' element");
153
154 gst_bin_add_many (GST_BIN (pipeline), src, csp, vs, sink, NULL);
155
156 /* can't link src yet, it has no pads */
157 gst_element_link_many (csp, vs, sink, NULL);
158
159 sinkpad = gst_element_get_static_pad (csp, "sink");
160
161 /* for each pad block that is installed, we will increment
162 * the counter. for each pad block that is signaled, we
163 * decrement the counter. When the counter is 0 we post
164 * an app message to tell the app that all pads are
165 * blocked. Start with 1 that is decremented when no-more-pads
166 * is signaled to make sure that we only post the message
167 * after no-more-pads */
168 g_atomic_int_set (&counter, 1);
169
170 g_signal_connect (src, "pad-added",
171 (GCallback) cb_pad_added, pipeline);
172 g_signal_connect (src, "no-more-pads",
173 (GCallback) cb_no_more_pads, pipeline);
174
175 gst_element_set_state (pipeline, GST_STATE_PAUSED);
176
177 g_main_loop_run (loop);
178
179 gst_element_set_state (pipeline, GST_STATE_NULL);
180
181 gst_object_unref (sinkpad);
182 gst_object_unref (bus);
183 gst_object_unref (pipeline);
184 g_main_loop_unref (loop);
185
186 return 0;
187 }
4141 static void
4242 cb_newpad (GstElement *decodebin,
4343 GstPad *pad,
44 gboolean last,
4544 gpointer data)
4645 {
4746 GstCaps *caps;
10099 src = gst_element_factory_make ("filesrc", "source");
101100 g_object_set (G_OBJECT (src), "location", argv[1], NULL);
102101 dec = gst_element_factory_make ("decodebin", "decoder");
103 g_signal_connect (dec, "new-decoded-pad", G_CALLBACK (cb_newpad), NULL);
102 g_signal_connect (dec, "pad-added", G_CALLBACK (cb_newpad), NULL);
104103 gst_bin_add_many (GST_BIN (pipeline), src, dec, NULL);
105104 gst_element_link (src, dec);
106105
145145 GstCaps *caps)
146146 {
147147 GstObject *parent = GST_OBJECT (GST_OBJECT_PARENT (pad));
148 const gchar *mime;
148 const gchar *media;
149149 const GList *item;
150150 GstCaps *res, *audiocaps;
151151
157157 }
158158
159159 /* as said above, we only try to plug audio... Omit video */
160 mime = gst_structure_get_name (gst_caps_get_structure (caps, 0));
161 if (g_strrstr (mime, "video")) {
162 g_print ("Omitting link for pad %s:%s because mimetype %s is non-audio\n",
163 GST_OBJECT_NAME (parent), GST_OBJECT_NAME (pad), mime);
160 media = gst_structure_get_name (gst_caps_get_structure (caps, 0));
161 if (g_strrstr (media, "video")) {
162 g_print ("Omitting link for pad %s:%s because media type %s is non-audio\n",
163 GST_OBJECT_NAME (parent), GST_OBJECT_NAME (pad), media);
164164 return;
165165 }
166166
218218
219219 /* if we get here, no item was found */
220220 g_print ("No compatible pad found to decode %s on %s:%s\n",
221 mime, GST_OBJECT_NAME (parent), GST_OBJECT_NAME (pad));
221 media, GST_OBJECT_NAME (parent), GST_OBJECT_NAME (pad));
222222 }
223223
224224 static void
0
1 /*** block from ../../../docs/manual/advanced-dataaccess.xml ***/
2 #include <stdlib.h>
3
4 #include <gst/gst.h>
5
6 #define MAX_ROUND 100
7
8 int
9 main (int argc, char **argv)
10 {
11 GstElement *pipe, *filter;
12 GstCaps *caps;
13 gint width, height;
14 gint xdir, ydir;
15 gint round;
16 GstMessage *message;
17
18 gst_init (&argc, &argv);
19
20 pipe = gst_parse_launch_full ("videotestsrc ! capsfilter name=filter ! "
21 "ximagesink", NULL, GST_PARSE_FLAG_NONE, NULL);
22 g_assert (pipe != NULL);
23
24 filter = gst_bin_get_by_name (GST_BIN (pipe), "filter");
25 g_assert (filter);
26
27 width = 320;
28 height = 240;
29 xdir = ydir = -10;
30
31 for (round = 0; round < MAX_ROUND; round++) {
32 gchar *capsstr;
33 g_print ("resize to %dx%d (%d/%d) \r", width, height, round, MAX_ROUND);
34
35 /* we prefer our fixed width and height but allow other dimensions to pass
36 * as well */
37 capsstr = g_strdup_printf ("video/x-raw, width=(int)%d, height=(int)%d",
38 width, height);
39
40 caps = gst_caps_from_string (capsstr);
41 g_free (capsstr);
42 g_object_set (filter, "caps", caps, NULL);
43 gst_caps_unref (caps);
44
45 if (round == 0)
46 gst_element_set_state (pipe, GST_STATE_PLAYING);
47
48 width += xdir;
49 if (width >= 320)
50 xdir = -10;
51 else if (width < 200)
52 xdir = 10;
53
54 height += ydir;
55 if (height >= 240)
56 ydir = -10;
57 else if (height < 150)
58 ydir = 10;
59
60 message =
61 gst_bus_poll (GST_ELEMENT_BUS (pipe), GST_MESSAGE_ERROR,
62 50 * GST_MSECOND);
63 if (message) {
64 g_print ("got error \n");
65
66 gst_message_unref (message);
67 }
68 }
69 g_print ("done \n");
70
71 gst_object_unref (filter);
72 gst_element_set_state (pipe, GST_STATE_NULL);
73 gst_object_unref (pipe);
74
75 return 0;
76 }
+0
-69
tests/examples/manual/fakesrc.c less more
0
1 /*** block from ../../../docs/manual/advanced-dataaccess.xml ***/
2 #include <string.h> /* for memset () */
3 #include <gst/gst.h>
4
5 static void
6 cb_handoff (GstElement *fakesrc,
7 GstBuffer *buffer,
8 GstPad *pad,
9 gpointer user_data)
10 {
11 static gboolean white = FALSE;
12 GstMapInfo info;
13
14 gst_buffer_map (buffer, &info, GST_MAP_WRITE);
15
16 /* this makes the image black/white */
17 memset (info.data, white ? 0xff : 0x0, info.size);
18 white = !white;
19
20 gst_buffer_unmap (buffer, &info);
21 }
22
23 gint
24 main (gint argc,
25 gchar *argv[])
26 {
27 GstElement *pipeline, *fakesrc, *flt, *conv, *videosink;
28 GMainLoop *loop;
29
30 /* init GStreamer */
31 gst_init (&argc, &argv);
32 loop = g_main_loop_new (NULL, FALSE);
33
34 /* setup pipeline */
35 pipeline = gst_pipeline_new ("pipeline");
36 fakesrc = gst_element_factory_make ("fakesrc", "source");
37 flt = gst_element_factory_make ("capsfilter", "flt");
38 conv = gst_element_factory_make ("videoconvert", "conv");
39 videosink = gst_element_factory_make ("xvimagesink", "videosink");
40
41 /* setup */
42 g_object_set (G_OBJECT (flt), "caps",
43 gst_caps_new_simple ("video/x-raw",
44 "format", G_TYPE_STRING, "RGB16",
45 "width", G_TYPE_INT, 384,
46 "height", G_TYPE_INT, 288,
47 "framerate", GST_TYPE_FRACTION, 1, 1,
48 NULL), NULL);
49 gst_bin_add_many (GST_BIN (pipeline), fakesrc, flt, conv, videosink, NULL);
50 gst_element_link_many (fakesrc, flt, conv, videosink, NULL);
51
52 /* setup fake source */
53 g_object_set (G_OBJECT (fakesrc),
54 "signal-handoffs", TRUE,
55 "sizemax", 384 * 288 * 2,
56 "sizetype", 2, NULL);
57 g_signal_connect (fakesrc, "handoff", G_CALLBACK (cb_handoff), NULL);
58
59 /* play */
60 gst_element_set_state (pipeline, GST_STATE_PLAYING);
61 g_main_loop_run (loop);
62
63 /* clean up */
64 gst_element_set_state (pipeline, GST_STATE_NULL);
65 gst_object_unref (GST_OBJECT (pipeline));
66
67 return 0;
68 }
6666
6767 GstElement *pipeline, *source, *demuxer, *decoder, *conv, *sink;
6868 GstBus *bus;
69 guint bus_watch_id;
6970
7071 /* Initialisation */
7172 gst_init (&argc, &argv);
100101
101102 /* we add a message handler */
102103 bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
103 gst_bus_add_watch (bus, bus_call, loop);
104 bus_watch_id = gst_bus_add_watch (bus, bus_call, loop);
104105 gst_object_unref (bus);
105106
106107 /* we add all elements into the pipeline */
138139
139140 g_print ("Deleting pipeline\n");
140141 gst_object_unref (GST_OBJECT (pipeline));
142 g_source_remove (bus_watch_id);
143 g_main_loop_unref (loop);
141144
142145 return 0;
143146 }
0
1 /*** block from ../../../docs/manual/advanced-dataaccess.xml ***/
2 #include <gst/gst.h>
3
4 static GstPadProbeReturn
5 cb_have_data (GstPad *pad,
6 GstPadProbeInfo *info,
7 gpointer user_data)
8 {
9 gint x, y;
10 GstMapInfo map;
11 guint16 *ptr, t;
12 GstBuffer *buffer;
13
14 buffer = GST_PAD_PROBE_INFO_BUFFER (info);
15
16 buffer = gst_buffer_make_writable (buffer);
17
18 gst_buffer_map (buffer, &map, GST_MAP_WRITE);
19
20 ptr = (guint16 *) map.data;
21 /* invert data */
22 for (y = 0; y < 288; y++) {
23 for (x = 0; x < 384 / 2; x++) {
24 t = ptr[384 - 1 - x];
25 ptr[384 - 1 - x] = ptr[x];
26 ptr[x] = t;
27 }
28 ptr += 384;
29 }
30 gst_buffer_unmap (buffer, &map);
31
32 GST_PAD_PROBE_INFO_DATA (info) = buffer;
33
34 return GST_PAD_PROBE_OK;
35 }
36
37 gint
38 main (gint argc,
39 gchar *argv[])
40 {
41 GMainLoop *loop;
42 GstElement *pipeline, *src, *sink, *filter, *csp;
43 GstCaps *filtercaps;
44 GstPad *pad;
45
46 /* init GStreamer */
47 gst_init (&argc, &argv);
48 loop = g_main_loop_new (NULL, FALSE);
49
50 /* build */
51 pipeline = gst_pipeline_new ("my-pipeline");
52 src = gst_element_factory_make ("videotestsrc", "src");
53 if (src == NULL)
54 g_error ("Could not create 'videotestsrc' element");
55
56 filter = gst_element_factory_make ("capsfilter", "filter");
57 g_assert (filter != NULL); /* should always exist */
58
59 csp = gst_element_factory_make ("videoconvert", "csp");
60 if (csp == NULL)
61 g_error ("Could not create 'videoconvert' element");
62
63 sink = gst_element_factory_make ("xvimagesink", "sink");
64 if (sink == NULL) {
65 sink = gst_element_factory_make ("ximagesink", "sink");
66 if (sink == NULL)
67 g_error ("Could not create neither 'xvimagesink' nor 'ximagesink' element");
68 }
69
70 gst_bin_add_many (GST_BIN (pipeline), src, filter, csp, sink, NULL);
71 gst_element_link_many (src, filter, csp, sink, NULL);
72 filtercaps = gst_caps_new_simple ("video/x-raw",
73 "format", G_TYPE_STRING, "RGB16",
74 "width", G_TYPE_INT, 384,
75 "height", G_TYPE_INT, 288,
76 "framerate", GST_TYPE_FRACTION, 25, 1,
77 NULL);
78 g_object_set (G_OBJECT (filter), "caps", filtercaps, NULL);
79 gst_caps_unref (filtercaps);
80
81 pad = gst_element_get_static_pad (src, "src");
82 gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BUFFER,
83 (GstPadProbeCallback) cb_have_data, NULL, NULL);
84 gst_object_unref (pad);
85
86 /* run */
87 gst_element_set_state (pipeline, GST_STATE_PLAYING);
88
89 /* wait until it's up and running or failed */
90 if (gst_element_get_state (pipeline, NULL, NULL, -1) == GST_STATE_CHANGE_FAILURE) {
91 g_error ("Failed to go into PLAYING state");
92 }
93
94 g_print ("Running ...\n");
95 g_main_loop_run (loop);
96
97 /* exit */
98 gst_element_set_state (pipeline, GST_STATE_NULL);
99 gst_object_unref (pipeline);
100
101 return 0;
102 }
162162
163163 .B Caps
164164
165 MIMETYPE \fI[, PROPERTY[, PROPERTY ...]]]\fR \fI[; CAPS[; CAPS ...]]\fR
166
167 Creates a capability with the given mimetype and optionally with given
168 properties. The mimetype can be escaped using " or '.
165 MEDIATYPE \fI[, PROPERTY[, PROPERTY ...]]]\fR \fI[; CAPS[; CAPS ...]]\fR
166
167 Creates a capability with the given media type and optionally with given
168 properties. The media type can be escaped using " or '.
169169 If you want to chain caps, you can add more caps in the same format afterwards.
170170
171171 .B Properties
11481148
11491149 diff = GST_CLOCK_DIFF (tfthen, tfnow);
11501150
1151 PRINT (_("Execution ended after %" G_GUINT64_FORMAT " ns.\n"), diff);
1151 PRINT (_("Execution ended after %" G_GINT64_FORMAT " ns.\n"), diff);
11521152 }
11531153
11541154 PRINT (_("Setting pipeline to PAUSED ...\n"));
11 #
22 # based on plot-timeline.py by Federico Mena-Quintero <federico at ximian dotcom>
33 # example:
4 # GST_DEBUG_NO_COLOR=1 GST_DEBUG="*:3" gst-launch-0.10 2>debug.log audiotestsrc num-buffers=10 ! audioconvert ! alsasink
4 # GST_DEBUG_NO_COLOR=1 GST_DEBUG="*:3" gst-launch-1.0 2>debug.log audiotestsrc num-buffers=10 ! audioconvert ! alsasink
55 # gst-plot-timeline.py debug.log --output=debug.png
66
77 import math
00 .TH GStreamer 1 "May 2003"
11 .SH "NAME"
2 gst\-typefind - print MIME type of file
2 gst\-typefind - print Media type of file
33 .SH "SYNOPSIS"
44 .B gst\-typefind <file>
55 .SH "DESCRIPTION"
66 .PP
77 \fIgst\-typefind\fP uses the GStreamer type finding system to
88 determine the relevant GStreamer plugin to parse or decode \fBfile\fP,
9 and the corresponding MIME type.
9 and the corresponding media type.
1010 .
1111 .SH "OPTIONS"
1212 .l
4747 gchar *version_str;
4848
4949 version_str = gst_version_string ();
50 g_print ("%s version %u.%u.%u\n", g_get_prgname (),
50 g_print ("%s version %d.%d.%d\n", g_get_prgname (),
5151 GST_VERSION_MAJOR, GST_VERSION_MINOR, GST_VERSION_MICRO);
5252 g_print ("%s\n", version_str);
5353 g_print ("%s\n", GST_PACKAGE_ORIGIN);
6161 #define GST_PACKAGE_ORIGIN "Unknown package origin"
6262
6363 /* GStreamer package release date/time for plugins as YYYY-MM-DD */
64 #define GST_PACKAGE_RELEASE_DATETIME "2012-09-23"
64 #define GST_PACKAGE_RELEASE_DATETIME "2012-10-07"
6565
6666 /* location of the installed gst-plugin-scanner */
6767 #define GST_PLUGIN_SCANNER_INSTALLED LIBDIR "\\gst-plugin-scanner"
336336 #define PACKAGE_NAME "GStreamer"
337337
338338 /* Define to the full name and version of this package. */
339 #define PACKAGE_STRING "GStreamer 1.0.0"
339 #define PACKAGE_STRING "GStreamer 1.0.1"
340340
341341 /* Define to the one symbol short name of this package. */
342342 #define PACKAGE_TARNAME "gstreamer"
345345 #undef PACKAGE_URL
346346
347347 /* Define to the version of this package. */
348 #define PACKAGE_VERSION "1.0.0"
348 #define PACKAGE_VERSION "1.0.1"
349349
350350 /* directory where plugins are located */
351351 #ifdef _DEBUG
379379 #undef USE_POISONING
380380
381381 /* Version number of package */
382 #define VERSION "1.0.0"
382 #define VERSION "1.0.1"
383383
384384 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
385385 significant byte first (like Motorola and SPARC, unlike Intel). */
15231523 gst_segment_flags_get_type (void)
15241524 {
15251525 static gsize id = 0;
1526 static const GEnumValue values[] = {
1527 {C_ENUM (GST_SEGMENT_FLAG_NONE), "GST_SEGMENT_FLAG_NONE", "none"},
1528 {C_ENUM (GST_SEGMENT_FLAG_RESET), "GST_SEGMENT_FLAG_RESET", "reset"},
1529 {C_ENUM (GST_SEGMENT_FLAG_SKIP), "GST_SEGMENT_FLAG_SKIP", "skip"},
1530 {C_ENUM (GST_SEGMENT_FLAG_SEGMENT), "GST_SEGMENT_FLAG_SEGMENT", "segment"},
1531 {0, NULL, NULL}
1532 };
1533
1534 if (g_once_init_enter (&id)) {
1535 GType tmp = g_enum_register_static ("GstSegmentFlags", values);
1526 static const GFlagsValue values[] = {
1527 {C_FLAGS (GST_SEGMENT_FLAG_NONE), "GST_SEGMENT_FLAG_NONE", "none"},
1528 {C_FLAGS (GST_SEGMENT_FLAG_RESET), "GST_SEGMENT_FLAG_RESET", "reset"},
1529 {C_FLAGS (GST_SEGMENT_FLAG_SKIP), "GST_SEGMENT_FLAG_SKIP", "skip"},
1530 {C_FLAGS (GST_SEGMENT_FLAG_SEGMENT), "GST_SEGMENT_FLAG_SEGMENT", "segment"},
1531 {0, NULL, NULL}
1532 };
1533
1534 if (g_once_init_enter (&id)) {
1535 GType tmp = g_flags_register_static ("GstSegmentFlags", values);
15361536 g_once_init_leave (&id, tmp);
15371537 }
15381538
5656 *
5757 * The micro version of GStreamer at compile time:
5858 */
59 #define GST_VERSION_MICRO (0)
59 #define GST_VERSION_MICRO (1)
6060 /**
6161 * GST_VERSION_NANO:
6262 *
8989 gst_base_transform_set_gap_aware
9090 gst_base_transform_set_in_place
9191 gst_base_transform_set_passthrough
92 gst_base_transform_set_prefer_passthrough
9293 gst_base_transform_set_qos_enabled
9394 gst_base_transform_update_qos
9495 gst_bit_reader_free