New upstream version 1.15.90
Sebastian Dröge
5 years ago
0 | === release 1.15.90 === | |
1 | ||
2 | 2019-04-11 00:19:11 +0100 Tim-Philipp Müller <tim@centricular.com> | |
3 | ||
4 | * ChangeLog: | |
5 | * NEWS: | |
6 | * RELEASE: | |
7 | * configure.ac: | |
8 | * gstreamer.doap: | |
9 | * meson.build: | |
10 | Release 1.15.90 | |
11 | ||
12 | 2019-04-11 00:19:11 +0100 Tim-Philipp Müller <tim@centricular.com> | |
13 | ||
14 | * docs/plugins/inspect/plugin-coreelements.xml: | |
15 | * docs/plugins/inspect/plugin-coretracers.xml: | |
16 | Update docs | |
17 | ||
18 | 2019-04-10 09:17:01 -0400 Julian Bouzas <julian.bouzas@collabora.com> | |
19 | ||
20 | * plugins/tracers/gstlatency.c: | |
21 | tracer: latency: Fix typo bug | |
22 | ||
23 | 2019-04-10 09:13:53 -0400 Julian Bouzas <julian.bouzas@collabora.com> | |
24 | ||
25 | * plugins/tracers/gstlatency.c: | |
26 | tracer: latency: Fix bug when storing latency probe event | |
27 | The pad name sotred in the latency event has no longer the name of the element, | |
28 | so we have to get the element Id, element name and pad name values from the data | |
29 | structure and compare all 3 values. | |
30 | ||
31 | 2019-04-10 10:18:54 +0300 Sebastian Dröge <sebastian@centricular.com> | |
32 | ||
33 | * gst/gstcontrolbinding.c: | |
34 | controlbinding: Check if the weak pointer was cleared before explicitly removing it | |
35 | Otherwise we'll get an assertion if the object behind the weak pointer | |
36 | was already destroyed in the meantime as we would pass NULL as first | |
37 | argument to g_object_remove_weak_pointer(). | |
38 | ||
39 | 2019-04-09 08:05:09 -0400 Julian Bouzas <julian.bouzas@collabora.com> | |
40 | ||
41 | * plugins/tracers/gstlatency.c: | |
42 | * tools/gst-stats.c: | |
43 | tracer: latency: Show element id, element name and pad name | |
44 | ||
45 | 2019-03-25 15:36:08 +0100 Julian Bouzas <julian.bouzas@collabora.com> | |
46 | ||
47 | * tools/gst-stats.c: | |
48 | gst-stats: Add element latency support | |
49 | This will output latency information when parsing a log file with gst-stats that | |
50 | has latency trace information. It will show the min, max and mean latency for | |
51 | the pipeline and all its elements. It will also show the reported latency for | |
52 | each element of the pipeline. Output example: | |
53 | Latency Statistics: | |
54 | pulsesrc0_src|fakesink0_sink: mean=190000043 min=190000043 max=190000043 | |
55 | Element Latency Statistics: | |
56 | flacparse0_src: mean=45561281 min=654988 max=90467575 | |
57 | flacenc0_src: mean=89938883 min=81913512 max=97964254 | |
58 | flacdec0_src: mean=45804881 min=228962 max=91380801 | |
59 | Element Reported Latency: | |
60 | pulsesrc0: min=10000000 max=200000000 ts=0:00:00.262846528 | |
61 | flacenc0: min=104489795 max=104489795 ts=0:00:00.262898616 | |
62 | flacparse0: min=0 max=0 ts=0:00:00.262927962 | |
63 | ||
64 | 2019-03-21 10:37:34 +0100 Julian Bouzas <julian.bouzas@collabora.com> | |
65 | ||
66 | * plugins/tracers/gstlatency.c: | |
67 | * plugins/tracers/gstlatency.h: | |
68 | tracer: latency: Show per-element reported latency | |
69 | ||
70 | 2019-03-20 12:20:48 +0100 Julian Bouzas <julian.bouzas@collabora.com> | |
71 | ||
72 | * plugins/tracers/gstlatency.c: | |
73 | tracer: latency: Show element's source pad name instead of element's name | |
74 | The full pad name gives more information than the element's name, which is very | |
75 | useful when elements have multiple source pads. | |
76 | ||
77 | 2019-03-18 21:55:50 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> | |
78 | ||
79 | * plugins/tracers/gstlatency.c: | |
80 | latency: Dot not override already stored events | |
81 | First, the event would be leaved, but also when an element takes | |
82 | several buffers before producing one, we want the reported latency to be | |
83 | the aggregation, so the distance from the oldest buffer. | |
84 | ||
85 | 2018-10-31 16:50:48 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> | |
86 | ||
87 | * plugins/tracers/gstlatency.c: | |
88 | * plugins/tracers/gstlatency.h: | |
89 | tracer: latency: Add parameter to select latency type | |
90 | This sets back the default to trace only pipeline latency, and add flags | |
91 | to enabled element tracing. It is now possible to only trace element | |
92 | latency, only trace pipeline latency, trace both or none. | |
93 | ||
94 | 2018-07-06 17:08:24 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> | |
95 | ||
96 | * plugins/tracers/gstlatency.c: | |
97 | tracer: latency: Add per element latency tracer | |
98 | This adds per element latency tracing. | |
99 | ||
100 | 2018-07-04 14:18:42 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> | |
101 | ||
102 | * plugins/tracers/gstlatency.c: | |
103 | tracer: Don't pass pads inside GstEvent | |
104 | This removes the passing of pad inside of a GstEvent. While this is not | |
105 | a bug, it may affect the live time of the pad, hense change the pipeline | |
106 | behaviour. | |
107 | ||
108 | 2018-11-13 21:19:22 +0100 Mathieu Duponchelle <mathieu@centricular.com> | |
109 | ||
110 | * libs/gst/base/gstbasesrc.c: | |
111 | * tests/check/libs/basesrc.c: | |
112 | basesrc: do not send EOS when automatic_eos is FALSE | |
113 | ||
114 | 2019-04-01 12:22:49 +0200 Mathieu Duponchelle <mathieu@centricular.com> | |
115 | ||
116 | * libs/gst/base/gstaggregator.c: | |
117 | aggregator: add buffer-consumed pad signal | |
118 | The signal will be emitted when a buffer was consumed on | |
119 | a pad, if the newly-added "emit-signals" property has been | |
120 | set to TRUE. | |
121 | Handlers connected to the signal will receive a valid reference on | |
122 | the consumed buffer, allowing for example the retrieval of metas in | |
123 | order to forward them once an output buffer is pushed out. | |
124 | ||
125 | 2019-04-05 11:43:53 +0200 Antonio Ospite <antonio.ospite@collabora.com> | |
126 | ||
127 | * tools/gst-inspect.c: | |
128 | gst-inspect: fix printing the first field of a GstStructure | |
129 | When printing a GstStructure property (e.g. the "stats" property in | |
130 | rtpsession) the first field is printed on the same line of the type | |
131 | description, and this is both inconsistent compared to how Enum values | |
132 | are printed and confusing as the reader might miss the first field. | |
133 | To fix this, add a newline before printing GstStructure fields in | |
134 | properties. | |
135 | NOTE: this does not change the existing inconsistent behavior of an | |
136 | extra newline *after* a GstStructure property, but the latter is not as | |
137 | annoying and it would take more effort to fix because GstStructure | |
138 | fields are printed in CAPS descriptions too. | |
139 | ||
140 | 2019-04-01 18:34:07 +0200 Mathieu Duponchelle <mathieu@centricular.com> | |
141 | ||
142 | * docs/gst/gstreamer-sections.txt: | |
143 | * gst/gstevent.c: | |
144 | * gst/gstevent.h: | |
145 | * gst/gstquark.c: | |
146 | * gst/gstquark.h: | |
147 | * tests/check/gst/gstevent.c: | |
148 | event: add new seek parameter, "trickmode-interval" | |
149 | When performing a key unit trickmode seek, it may be useful to | |
150 | specify a minimum interval between the output frames, either | |
151 | in very high rate cases, or as a protection against streams | |
152 | that may contain an overly large amount of key frames. | |
153 | One use case is ONVIF Section 6.5.3: | |
154 | <https://www.onvif.org/specs/stream/ONVIF-Streaming-Spec.pdf> | |
155 | ||
156 | 2019-03-22 17:46:03 +0100 Antonio Ospite <antonio.ospite@collabora.com> | |
157 | ||
158 | * tests/check/gstreamer.supp: | |
159 | tests: add the valgrind suppression file from the "common" module | |
160 | Other gstreamer repositories have their own valgrind suppression file | |
161 | directly in the repository. | |
162 | Add a suppression file to the core gstreamer repository too, this makes | |
163 | it easier to use it with gst-build which does not check out the common | |
164 | module. | |
165 | This is also a little step towards the removal of the common submodule. | |
166 | NOTE: the added file is the latest version from the "common" repository | |
167 | but it has been renamed from gst.supp to gstreamer.supp for symmetry | |
168 | with the suppression files in the other repositories. | |
169 | ||
170 | 2019-03-23 18:31:42 +0000 Tim-Philipp Müller <tim@centricular.com> | |
171 | ||
172 | * meson.build: | |
173 | g-i: pass --quiet to g-ir-scanner | |
174 | This suppresses the annoying 'g-ir-scanner: link: cc ..' output | |
175 | that we get even if everything works just fine. | |
176 | We still get g-ir-scanner warnings and compiler warnings if | |
177 | we pass this option. | |
178 | ||
179 | 2019-03-23 18:17:43 +0000 Tim-Philipp Müller <tim@centricular.com> | |
180 | ||
181 | * libs/gst/check/gstcheck.c: | |
182 | check: suppress some g-i warnings | |
183 | gstcheck.c:142: Warning: GstCheck: gst_check_add_log_filter: return value: Invalid non-constant return of bare structure or union; register as boxed type or (skip) | |
184 | gstcheck.h:178: Warning: GstCheck: gst_check_run_suite: argument suite: Unresolved type: 'Suite*' | |
185 | ||
186 | 2019-03-23 17:53:54 +0000 Tim-Philipp Müller <tim@centricular.com> | |
187 | ||
188 | * meson.build: | |
189 | g-i: silence 'nested extern' compiler warnings when building scanner binary | |
190 | We need a nested extern in our init section for the scanner binary | |
191 | so we can call gst_init to make sure GStreamer types are initialised | |
192 | (they are not all lazy init via get_type functions, but some are in | |
193 | exported variables). There doesn't seem to be any other mechanism to | |
194 | achieve this, so just remove that warning, it's not important at all. | |
195 | ||
196 | 2019-03-23 17:53:07 +0000 Tim-Philipp Müller <tim@centricular.com> | |
197 | ||
198 | * libs/gst/base/gstbitwriter.c: | |
199 | bitwriter: mark as 'skip' for gobject-introspection | |
200 | Silences g-ir-scanner warnings. We do the same for ByteWriter. | |
201 | ||
202 | 2019-03-21 18:55:16 +1100 Matthew Waters <matthew@centricular.com> | |
203 | ||
204 | * libs/gst/base/gstaggregator.c: | |
205 | aggregator: don't leak gap buffer when out of segment | |
206 | ||
207 | 2019-03-21 18:47:04 +1100 Matthew Waters <matthew@centricular.com> | |
208 | ||
209 | * libs/gst/base/gstaggregator.c: | |
210 | aggregator: take the pad lock around queue gap event removal | |
211 | As is done for every other queue interaction | |
212 | ||
213 | 2019-03-20 17:43:02 +1100 Matthew Waters <matthew@centricular.com> | |
214 | ||
215 | * libs/gst/base/gstbaseparse.c: | |
216 | baseparse: don't reset the disable-passthrough property value | |
217 | Resetting as a result of _reset() on PAUSED->READY is unexpected. | |
218 | ||
219 | 2019-03-14 11:59:43 +0100 Stephane Cerveau <scerveau@fluendo.com> | |
220 | ||
221 | * gst/gstelement.c: | |
222 | gst_element_get_factory: update documentation | |
223 | Inform about a potential NULL result. | |
224 | ||
225 | 2019-03-13 18:46:14 +0100 Stephane Cerveau <scerveau@fluendo.com> | |
226 | ||
227 | * gst/gstelementfactory.c: | |
228 | gst_element_factory_get_metadata: protect from null factory | |
229 | ||
230 | 2019-03-12 21:19:23 +0000 Damian Vicino <sdavtaker@gmail.com> | |
231 | ||
232 | * README: | |
233 | Update README | |
234 | ||
235 | 2019-03-12 20:12:37 +0000 Damian Vicino <sdavtaker@gmail.com> | |
236 | ||
237 | * README: | |
238 | Update README to have correct name of the license file documented (COPYING). There is no LICENSE file in the root directory, and COPYING file content is a license file. | |
239 | ||
240 | 2019-03-10 15:35:39 +0900 Seungha Yang <seungha.yang@navercorp.com> | |
241 | ||
242 | * tests/check/meson.build: | |
243 | tests: fdsrc: Exclude unit test on Windows | |
244 | Since elements_fdsrc.test_num_buffers uses blocking pipe on Windows, | |
245 | the test will never be finished. But emulating non-blocking fd without | |
246 | win32 APIs on Windows is a little tricky. | |
247 | ||
248 | 2019-03-08 16:19:29 +0100 Santiago Carot-Nemesio <scarot@twilio.com> | |
249 | ||
250 | * gst/gsttaskpool.c: | |
251 | gsttaskpool: Do not block tasks while cleaning up the taskpool | |
252 | There is a deadlock if any thread from the pool tries to push | |
253 | a new task while other thread is waiting for the pool of threads | |
254 | to finish. With this patch the thread will get an error when it | |
255 | tries to add a new task while the taskpool is being cleaned up. | |
256 | ||
257 | 2019-03-06 19:46:46 +0100 Marco Trevisan (Treviño) <mail@3v1n0.net> | |
258 | ||
259 | * gst/gsturi.c: | |
260 | gsturi: Fix annotation on get_path to return a nullable | |
261 | Use proper syntax or the (nullable): part will be part of the description | |
262 | ||
263 | 2019-03-06 19:34:12 +0100 Marco Trevisan (Treviño) <mail@3v1n0.net> | |
264 | ||
265 | * gst/gstmessage.c: | |
266 | gstmessage: Fix annotations on details | |
267 | Details argument should be nullable, but the docstring uses a wrong syntax. | |
268 | ||
269 | 2019-03-06 09:04:54 +0000 Tim-Philipp Müller <tim@centricular.com> | |
270 | ||
271 | * tests/check/gst/gstbuffer.c: | |
272 | tests: fix leak in buffer test_wrapped_bytes test | |
273 | ||
274 | 2019-03-01 11:59:14 +0100 Mathieu Duponchelle <mathieu@centricular.com> | |
275 | ||
276 | * gst/gstbuffer.c: | |
277 | * tests/check/gst/gstmeta.c: | |
278 | gstbuffer: store meta in add order | |
279 | The previous implementation of add was implemented as a prepend, | |
280 | switch to append as that seems like the expected order. | |
281 | ||
282 | 2019-03-04 09:01:07 +0000 Tim-Philipp Müller <tim@centricular.com> | |
283 | ||
284 | * NEWS: | |
285 | * RELEASE: | |
286 | * configure.ac: | |
287 | * docs/plugins/inspect/plugin-coreelements.xml: | |
288 | * docs/plugins/inspect/plugin-coretracers.xml: | |
289 | * meson.build: | |
290 | Back to development | |
291 | ||
292 | 2019-02-28 16:48:57 +0100 Santiago Carot-Nemesio <sancane@gmail.com> | |
293 | ||
294 | * gst/gsttaskpool.c: | |
295 | taskpool: Set error in case something goes wrong in the default handlers | |
296 | ||
0 | 297 | === release 1.15.2 === |
1 | 298 | |
2 | 299 | 2019-02-26 11:38:00 +0000 Tim-Philipp Müller <tim@centricular.com> |
8 | 305 | * gstreamer.doap: |
9 | 306 | * meson.build: |
10 | 307 | Release 1.15.2 |
308 | ||
309 | 2019-02-26 13:23:47 +0000 Tim-Philipp Müller <tim@centricular.com> | |
310 | ||
311 | * gst/parse/Makefile.am: | |
312 | meson: dist get_flex_version.py | |
11 | 313 | |
12 | 314 | 2019-02-26 11:38:00 +0000 Tim-Philipp Müller <tim@centricular.com> |
13 | 315 |
235 | 235 | $(top_srcdir)/common/release.mak \ |
236 | 236 | $(top_srcdir)/data/bash-completion/helpers/gst.in ABOUT-NLS \ |
237 | 237 | AUTHORS COPYING ChangeLog INSTALL NEWS README TODO compile \ |
238 | config.guess config.rpath config.sub depcomp install-sh \ | |
239 | ltmain.sh missing | |
238 | config.guess config.rpath config.sub install-sh ltmain.sh \ | |
239 | missing | |
240 | 240 | DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) |
241 | 241 | distdir = $(PACKAGE)-$(VERSION) |
242 | 242 | top_distdir = $(distdir) |
3 | 3 | |
4 | 4 | |
5 | 5 | GStreamer 1.16 has not been released yet. It is scheduled for release in |
6 | January/February 2019. | |
6 | April 2019. | |
7 | 7 | |
8 | 8 | 1.15.x is the unstable development version that is being developed in |
9 | 9 | the git master branch and which will eventually result in 1.16. |
14 | 14 | See https://gstreamer.freedesktop.org/releases/1.16/ for the latest |
15 | 15 | version of this document. |
16 | 16 | |
17 | _Last updated: Monday 25 January 2019, 15:00 UTC (log)_ | |
17 | _Last updated: Wednesday 10 April 2019, 00:50 UTC (log)_ | |
18 | 18 | |
19 | 19 | |
20 | 20 | Introduction |
646 | 646 | To make use of this feature, we need an additional uploader that can |
647 | 647 | import DMABUF FDs and also directly pass the pixel format, relying |
648 | 648 | on the GPU to do the conversion. |
649 | ||
650 | - The OpenGL library no longer restores the OpenGL viewport. This is a | |
651 | performance optimization to not require performing multiple | |
652 | expensive glGet*() function calls per frame. This affects any | |
653 | application or plugin use of the following functions and objects: | |
654 | - glcolorconvert library object (not the element) | |
655 | - glviewconvert library object (not the element) | |
656 | - gst_gl_framebuffer_draw_to_texture() | |
657 | - custom GstGLWindow implementations | |
649 | 658 | |
650 | 659 | |
651 | 660 | Tracing framework and debugging improvements |
1163 | 1172 | |
1164 | 1173 | Contributors |
1165 | 1174 | |
1166 | Aleix Conchillo Flaqué, Alessandro Decina, Alexandru Băluț, Alex Ashley, | |
1167 | Alexey Chernov, Alicia Boya García, Amit Pandya, Andoni Morales | |
1168 | Alastruey, Andreas Frisch, Andre McCurdy, Andy Green, Anthony Violo, | |
1169 | Antoine Jacoutot, Antonio Ospite, Arun Raghavan, Aurelien Jarno, | |
1175 | Aaron Boxer, Aleix Conchillo Flaqué, Alessandro Decina, Alexandru Băluț, | |
1176 | Alex Ashley, Alexey Chernov, Alicia Boya García, Amit Pandya, Andoni | |
1177 | Morales Alastruey, Andreas Frisch, Andre McCurdy, Andy Green, Anthony | |
1178 | Violo, Antoine Jacoutot, Antonio Ospite, Arun Raghavan, Aurelien Jarno, | |
1170 | 1179 | Aurélien Zanelli, ayaka, Bananahemic, Bastian Köcher, Branko Subasic, |
1171 | Brendan Shanks, Carlos Rafael Giani, Christoph Reiter, Corentin Noël, | |
1172 | Daeseok Youn, Daniel Drake, Daniel Klamt, Dardo D Kleiner, David Ing, | |
1173 | David Svensson Fors, Devarsh Thakkar, Dimitrios Katsaros, Edward Hervey, | |
1174 | Emilio Pozuelo Monfort, Enrique Ocaña González, Ezequiel Garcia, Fabien | |
1175 | Dessenne, Fabrizio Gennari, Florent Thiéry, Francisco Velazquez, | |
1176 | Freyr666, Garima Gaur, Gary Bisson, George Kiagiadakis, Georg Lippitsch, | |
1177 | Georg Ottinger, Geunsik Lim, Göran Jönsson, Guillaume Desmottes, H1Gdev, | |
1178 | Haihao Xiang, Haihua Hu, Harshad Khedkar, Havard Graff, He Junyan, | |
1179 | Hoonhee Lee, Hosang Lee, Hyunjun Ko, Ingo Randolf, Iñigo Huguet, James | |
1180 | Stevenson, Jan Alexander Steffens, Jan Schmidt, Jerome Laheurte, Jimmy | |
1181 | Ohn, Joakim Johansson, Jochen Henneberg, Johan Bjäreholt, John-Mark | |
1182 | Bell, John Nikolaides, Jonathan Karlsson, Jonny Lamb, Jordan Petridis, | |
1183 | Josep Torra, Joshua M. Doe, Jos van Egmond, Juan Navarro, Jun Xie, | |
1180 | Brendan Shanks, Carlos Rafael Giani, Charlie Turner, Christoph Reiter, | |
1181 | Corentin Noël, Daeseok Youn, Damian Vicino, Dan Kegel, Daniel Drake, | |
1182 | Daniel Klamt, Danilo Spinella, Dardo D Kleiner, David Ing, David | |
1183 | Svensson Fors, Devarsh Thakkar, Dimitrios Katsaros, Edward Hervey, | |
1184 | Emilio Pozuelo Monfort, Enrique Ocaña González, Erlend Eriksen, Ezequiel | |
1185 | Garcia, Fabien Dessenne, Fabrizio Gennari, Florent Thiéry, Francisco | |
1186 | Velazquez, Freyr666, Garima Gaur, Gary Bisson, George Kiagiadakis, Georg | |
1187 | Lippitsch, Georg Ottinger, Geunsik Lim, Göran Jönsson, Guillaume | |
1188 | Desmottes, H1Gdev, Haihao Xiang, Haihua Hu, Harshad Khedkar, Havard | |
1189 | Graff, He Junyan, Hoonhee Lee, Hosang Lee, Hyunjun Ko, Ilya Smelykh, | |
1190 | Ingo Randolf, Iñigo Huguet, Jakub Adam, James Stevenson, Jan Alexander | |
1191 | Steffens, Jan Schmidt, Jerome Laheurte, Jimmy Ohn, Joakim Johansson, | |
1192 | Jochen Henneberg, Johan Bjäreholt, John-Mark Bell, John Bassett, John | |
1193 | Nikolaides, Jonathan Karlsson, Jonny Lamb, Jordan Petridis, Josep Torra, | |
1194 | Joshua M. Doe, Jos van Egmond, Juan Navarro, Julian Bouzas, Jun Xie, | |
1184 | 1195 | Junyan He, Justin Kim, Kai Kang, Kim Tae Soo, Kirill Marinushkin, Kyrylo |
1185 | 1196 | Polezhaiev, Lars Petter Endresen, Linus Svensson, Louis-Francis |
1186 | Ratté-Boulianne, Luis de Bethencourt, Luz Paz, Lyon Wang, Maciej Wolny, | |
1187 | Marc-André Lureau, Marc Leeman, Marcos Kintschner, Marian Mihailescu, | |
1188 | Marinus Schraal, Mark Nauwelaerts, Marouen Ghodhbane, Martin Kelly, | |
1189 | Matej Knopp, Mathieu Duponchelle, Matteo Valdina, Matthew Waters, | |
1190 | Matthias Fend, memeka, Michael Drake, Michael Gruner, Michael Olbrich, | |
1191 | Michael Tretter, Miguel Paris, Mike Wey, Mikhail Fludkov, Naveen | |
1192 | Cherukuri, Nicola Murino, Nicolas Dufresne, Niels De Graef, Nirbheek | |
1193 | Chauhan, Norbert Wesp, Ognyan Tonchev, Olivier Crête, Omar Akkila, | |
1194 | Patricia Muscalu, Patrick Radizi, Patrik Nilsson, Paul Kocialkowski, Per | |
1195 | Forlin, Peter Körner, Peter Seiderer, Petr Kulhavy, Philippe Normand, | |
1196 | Philippe Renon, Philipp Zabel, Pierre Labastie, Roland Jon, Roman | |
1197 | Sivriver, Rosen Penev, Russel Winder, Sam Gigliotti, Sean-Der, Sebastian | |
1198 | Dröge, Seungha Yang, Sjoerd Simons, Snir Sheriber, Song Bing, Soon, | |
1199 | Thean Siew, Sreerenj Balachandran, Stefan Ringel, Stephane Cerveau, | |
1200 | Stian Selnes, Suhas Nayak, Takeshi Sato, Thiago Santos, Thibault | |
1201 | Saunier, Thomas Bluemel, Tianhao Liu, Tim-Philipp Müller, Tomasz | |
1202 | Andrzejak, Tomislav Tustonić, U. Artie Eoff, Ulf Olsson, Varunkumar | |
1203 | Allagadapa, Víctor Guzmán, Víctor Manuel Jáquez Leal, Vincenzo Bono, | |
1204 | Vineeth T M, Vivia Nikolaidou, Wang Fei, wangzq, Whoopie, Wim Taymans, | |
1205 | Wind Yuan, Wonchul Lee, Xabier Rodriguez Calvar, Xavier Claessens, | |
1206 | Haihao Xiang, Yacine Bandou, Yeongjin Jeong, Yuji Kuwabara, Zeeshan Ali, | |
1197 | Ratté-Boulianne, Lucas Stach, Luis de Bethencourt, Luz Paz, Lyon Wang, | |
1198 | Maciej Wolny, Marc-André Lureau, Marc Leeman, Marco Trevisan (Treviño), | |
1199 | Marcos Kintschner, Marian Mihailescu, Marinus Schraal, Mark Nauwelaerts, | |
1200 | Marouen Ghodhbane, Martin Kelly, Matej Knopp, Mathieu Duponchelle, | |
1201 | Matteo Valdina, Matthew Waters, Matthias Fend, memeka, Michael Drake, | |
1202 | Michael Gruner, Michael Olbrich, Michael Tretter, Miguel Paris, Mike | |
1203 | Wey, Mikhail Fludkov, Naveen Cherukuri, Nicola Murino, Nicolas Dufresne, | |
1204 | Niels De Graef, Nirbheek Chauhan, Norbert Wesp, Ognyan Tonchev, Olivier | |
1205 | Crête, Omar Akkila, Pat DeSantis, Patricia Muscalu, Patrick Radizi, | |
1206 | Patrik Nilsson, Paul Kocialkowski, Per Forlin, Peter Körner, Peter | |
1207 | Seiderer, Petr Kulhavy, Philippe Normand, Philippe Renon, Philipp Zabel, | |
1208 | Pierre Labastie, Piotr Drąg, Roland Jon, Roman Sivriver, Roman Shpuntov, | |
1209 | Rosen Penev, Russel Winder, Sam Gigliotti, Santiago Carot-Nemesio, | |
1210 | Sean-Der, Sebastian Dröge, Seungha Yang, Shi Yan, Sjoerd Simons, Snir | |
1211 | Sheriber, Song Bing, Soon, Thean Siew, Sreerenj Balachandran, Stefan | |
1212 | Ringel, Stephane Cerveau, Stian Selnes, Suhas Nayak, Takeshi Sato, | |
1213 | Thiago Santos, Thibault Saunier, Thomas Bluemel, Tianhao Liu, | |
1214 | Tim-Philipp Müller, Tobias Ronge, Tomasz Andrzejak, Tomislav Tustonić, | |
1215 | U. Artie Eoff, Ulf Olsson, Varunkumar Allagadapa, Víctor Guzmán, Víctor | |
1216 | Manuel Jáquez Leal, Vincenzo Bono, Vineeth T M, Vivia Nikolaidou, Wang | |
1217 | Fei, wangzq, Whoopie, Wim Taymans, Wind Yuan, Wonchul Lee, Xabier | |
1218 | Rodriguez Calvar, Xavier Claessens, Haihao Xiang, Yacine Bandou, | |
1219 | Yeongjin Jeong, Yuji Kuwabara, Zeeshan Ali, | |
1207 | 1220 | |
1208 | 1221 | … and many others who have contributed bug reports, translations, sent |
1209 | 1222 | suggestions or helped testing. |
1233 | 1246 | |
1234 | 1247 | 1.16.0 |
1235 | 1248 | |
1236 | 1.16.0 is scheduled to be released around January/February 2019. | |
1249 | 1.16.0 is scheduled to be released in April 2019. | |
1237 | 1250 | |
1238 | 1251 | |
1239 | 1252 | Known Issues |
1268 | 1281 | ------------------------------------------------------------------------ |
1269 | 1282 | |
1270 | 1283 | _These release notes have been prepared by Tim-Philipp Müller with_ |
1271 | _contributions from Sebastian Dröge._ | |
1284 | _contributions from Sebastian Dröge, Guillaume Desmottes and Matthew | |
1285 | Waters._ | |
1272 | 1286 | |
1273 | 1287 | _License: CC BY-SA 4.0_ |
233 | 233 | PLUG-IN DEPENDENCIES AND LICENSES |
234 | 234 | --------------------------------- |
235 | 235 | |
236 | GStreamer is developed under the terms of the LGPL (see LICENSE file for | |
236 | GStreamer is developed under the terms of the LGPL (see COPYING file for | |
237 | 237 | details). Some of our plug-ins however rely on libraries which are available |
238 | 238 | under other licenses. This means that if you are distributing an application |
239 | 239 | which has a non-GPL compatible license (for instance a closed-source |
0 | This is GStreamer core 1.15.2. | |
0 | This is GStreamer core 1.15.90. | |
1 | 1 | |
2 | 2 | GStreamer 1.15 is the development branch leading up to the next major |
3 | 3 | stable version which will be 1.16. |
0 | 0 | #! /bin/sh |
1 | 1 | # Guess values for system-dependent variables and create Makefiles. |
2 | # Generated by GNU Autoconf 2.69 for GStreamer 1.15.2. | |
2 | # Generated by GNU Autoconf 2.69 for GStreamer 1.15.90. | |
3 | 3 | # |
4 | 4 | # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>. |
5 | 5 | # |
590 | 590 | # Identity of this package. |
591 | 591 | PACKAGE_NAME='GStreamer' |
592 | 592 | PACKAGE_TARNAME='gstreamer' |
593 | PACKAGE_VERSION='1.15.2' | |
594 | PACKAGE_STRING='GStreamer 1.15.2' | |
593 | PACKAGE_VERSION='1.15.90' | |
594 | PACKAGE_STRING='GStreamer 1.15.90' | |
595 | 595 | PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer' |
596 | 596 | PACKAGE_URL='' |
597 | 597 | |
1685 | 1685 | # Omit some internal or obsolete options to make the list less imposing. |
1686 | 1686 | # This message is too long to be a string in the A/UX 3.1 sh. |
1687 | 1687 | cat <<_ACEOF |
1688 | \`configure' configures GStreamer 1.15.2 to adapt to many kinds of systems. | |
1688 | \`configure' configures GStreamer 1.15.90 to adapt to many kinds of systems. | |
1689 | 1689 | |
1690 | 1690 | Usage: $0 [OPTION]... [VAR=VALUE]... |
1691 | 1691 | |
1757 | 1757 | |
1758 | 1758 | if test -n "$ac_init_help"; then |
1759 | 1759 | case $ac_init_help in |
1760 | short | recursive ) echo "Configuration of GStreamer 1.15.2:";; | |
1760 | short | recursive ) echo "Configuration of GStreamer 1.15.90:";; | |
1761 | 1761 | esac |
1762 | 1762 | cat <<\_ACEOF |
1763 | 1763 | |
1969 | 1969 | test -n "$ac_init_help" && exit $ac_status |
1970 | 1970 | if $ac_init_version; then |
1971 | 1971 | cat <<\_ACEOF |
1972 | GStreamer configure 1.15.2 | |
1972 | GStreamer configure 1.15.90 | |
1973 | 1973 | generated by GNU Autoconf 2.69 |
1974 | 1974 | |
1975 | 1975 | Copyright (C) 2012 Free Software Foundation, Inc. |
2828 | 2828 | This file contains any messages produced by compilers while |
2829 | 2829 | running configure, to aid debugging if configure makes a mistake. |
2830 | 2830 | |
2831 | It was created by GStreamer $as_me 1.15.2, which was | |
2831 | It was created by GStreamer $as_me 1.15.90, which was | |
2832 | 2832 | generated by GNU Autoconf 2.69. Invocation command line was |
2833 | 2833 | |
2834 | 2834 | $ $0 $@ |
3806 | 3806 | |
3807 | 3807 | # Define the identity of the package. |
3808 | 3808 | PACKAGE='gstreamer' |
3809 | VERSION='1.15.2' | |
3809 | VERSION='1.15.90' | |
3810 | 3810 | |
3811 | 3811 | |
3812 | 3812 | cat >>confdefs.h <<_ACEOF |
4017 | 4017 | |
4018 | 4018 | |
4019 | 4019 | |
4020 | PACKAGE_VERSION_MAJOR=$(echo 1.15.2 | cut -d'.' -f1) | |
4021 | PACKAGE_VERSION_MINOR=$(echo 1.15.2 | cut -d'.' -f2) | |
4022 | PACKAGE_VERSION_MICRO=$(echo 1.15.2 | cut -d'.' -f3) | |
4020 | PACKAGE_VERSION_MAJOR=$(echo 1.15.90 | cut -d'.' -f1) | |
4021 | PACKAGE_VERSION_MINOR=$(echo 1.15.90 | cut -d'.' -f2) | |
4022 | PACKAGE_VERSION_MICRO=$(echo 1.15.90 | cut -d'.' -f3) | |
4023 | 4023 | |
4024 | 4024 | |
4025 | 4025 | |
4030 | 4030 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5 |
4031 | 4031 | $as_echo_n "checking nano version... " >&6; } |
4032 | 4032 | |
4033 | NANO=$(echo 1.15.2 | cut -d'.' -f4) | |
4033 | NANO=$(echo 1.15.90 | cut -d'.' -f4) | |
4034 | 4034 | |
4035 | 4035 | if test x"$NANO" = x || test "x$NANO" = "x0" ; then |
4036 | 4036 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5 |
8870 | 8870 | done |
8871 | 8871 | |
8872 | 8872 | |
8873 | GST_CURRENT=1502 | |
8873 | GST_CURRENT=1590 | |
8874 | 8874 | GST_REVISION=0 |
8875 | GST_AGE=1502 | |
8876 | GST_LIBVERSION=1502:0:1502 | |
8875 | GST_AGE=1590 | |
8876 | GST_LIBVERSION=1590:0:1590 | |
8877 | 8877 | |
8878 | 8878 | |
8879 | 8879 | |
9938 | 9938 | ecc*) |
9939 | 9939 | lt_prog_compiler_wl='-Wl,' |
9940 | 9940 | lt_prog_compiler_pic='-KPIC' |
9941 | lt_prog_compiler_static='-static' | |
9942 | ;; | |
9943 | # flang / f18. f95 an alias for gfortran or flang on Debian | |
9944 | flang* | f18* | f95*) | |
9945 | lt_prog_compiler_wl='-Wl,' | |
9946 | lt_prog_compiler_pic='-fPIC' | |
9941 | 9947 | lt_prog_compiler_static='-static' |
9942 | 9948 | ;; |
9943 | 9949 | # icc used to be incompatible with GCC. |
29109 | 29115 | # report actual input values of CONFIG_FILES etc. instead of their |
29110 | 29116 | # values after options handling. |
29111 | 29117 | ac_log=" |
29112 | This file was extended by GStreamer $as_me 1.15.2, which was | |
29118 | This file was extended by GStreamer $as_me 1.15.90, which was | |
29113 | 29119 | generated by GNU Autoconf 2.69. Invocation command line was |
29114 | 29120 | |
29115 | 29121 | CONFIG_FILES = $CONFIG_FILES |
29175 | 29181 | cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 |
29176 | 29182 | ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" |
29177 | 29183 | ac_cs_version="\\ |
29178 | GStreamer config.status 1.15.2 | |
29184 | GStreamer config.status 1.15.90 | |
29179 | 29185 | configured by $0, generated by GNU Autoconf 2.69, |
29180 | 29186 | with options \\"\$ac_cs_config\\" |
29181 | 29187 |
3 | 3 | dnl when going to/from release please set the nano (fourth number) right ! |
4 | 4 | dnl releases only do Wall, git and prerelease does Werror too |
5 | 5 | dnl |
6 | AC_INIT([GStreamer],[1.15.2],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gstreamer]) | |
6 | AC_INIT([GStreamer],[1.15.90],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gstreamer]) | |
7 | 7 | AG_GST_INIT |
8 | 8 | |
9 | 9 | dnl initialize automake (we require GNU make) |
61 | 61 | dnl 1.10.9 (who knows) => 1009 |
62 | 62 | dnl |
63 | 63 | dnl sets GST_LT_LDFLAGS |
64 | AS_LIBTOOL(GST, 1502, 0, 1502) | |
64 | AS_LIBTOOL(GST, 1590, 0, 1590) | |
65 | 65 | |
66 | 66 | dnl *** autotools stuff **** |
67 | 67 |
1215 | 1215 | GstSeekFlags |
1216 | 1216 | gst_event_new_seek |
1217 | 1217 | gst_event_parse_seek |
1218 | gst_event_set_seek_trickmode_interval | |
1219 | gst_event_parse_seek_trickmode_interval | |
1218 | 1220 | |
1219 | 1221 | gst_event_new_navigation |
1220 | 1222 |
3722 | 3722 | <div class="refsect3"> |
3723 | 3723 | <a name="gst-element-get-factory.returns"></a><h4>Returns</h4> |
3724 | 3724 | <p>the <a class="link" href="GstElementFactory.html" title="GstElementFactory"><span class="type">GstElementFactory</span></a> used for creating this |
3725 | element. no refcounting is needed. </p> | |
3726 | <p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> | |
3725 | element or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if element has not been registered (static element). no refcounting is needed. </p> | |
3726 | <p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></p> | |
3727 | 3727 | </div> |
3728 | 3728 | </div> |
3729 | 3729 | <hr> |
438 | 438 | </td> |
439 | 439 | <td class="function_name"> |
440 | 440 | <a class="link" href="GstEvent.html#gst-event-parse-seek" title="gst_event_parse_seek ()">gst_event_parse_seek</a> <span class="c_punctuation">()</span> |
441 | </td> | |
442 | </tr> | |
443 | <tr> | |
444 | <td class="function_type"> | |
445 | <span class="returnvalue">void</span> | |
446 | </td> | |
447 | <td class="function_name"> | |
448 | <a class="link" href="GstEvent.html#gst-event-set-seek-trickmode-interval" title="gst_event_set_seek_trickmode_interval ()">gst_event_set_seek_trickmode_interval</a> <span class="c_punctuation">()</span> | |
449 | </td> | |
450 | </tr> | |
451 | <tr> | |
452 | <td class="function_type"> | |
453 | <span class="returnvalue">void</span> | |
454 | </td> | |
455 | <td class="function_name"> | |
456 | <a class="link" href="GstEvent.html#gst-event-parse-seek-trickmode-interval" title="gst_event_parse_seek_trickmode_interval ()">gst_event_parse_seek_trickmode_interval</a> <span class="c_punctuation">()</span> | |
441 | 457 | </td> |
442 | 458 | </tr> |
443 | 459 | <tr> |
2657 | 2673 | </div> |
2658 | 2674 | <hr> |
2659 | 2675 | <div class="refsect2"> |
2676 | <a name="gst-event-set-seek-trickmode-interval"></a><h3>gst_event_set_seek_trickmode_interval ()</h3> | |
2677 | <pre class="programlisting"><span class="returnvalue">void</span> | |
2678 | gst_event_set_seek_trickmode_interval (<em class="parameter"><code><a class="link" href="GstEvent.html" title="GstEvent"><span class="type">GstEvent</span></a> *event</code></em>, | |
2679 | <em class="parameter"><code><a class="link" href="GstClock.html#GstClockTime" title="GstClockTime"><span class="type">GstClockTime</span></a> interval</code></em>);</pre> | |
2680 | <p>Sets a trickmode interval on a (writable) seek event. Elements | |
2681 | that support TRICKMODE_KEY_UNITS seeks SHOULD use this as the minimal | |
2682 | interval between each frame they may output.</p> | |
2683 | <p class="since">Since: 1.16</p> | |
2684 | </div> | |
2685 | <hr> | |
2686 | <div class="refsect2"> | |
2687 | <a name="gst-event-parse-seek-trickmode-interval"></a><h3>gst_event_parse_seek_trickmode_interval ()</h3> | |
2688 | <pre class="programlisting"><span class="returnvalue">void</span> | |
2689 | gst_event_parse_seek_trickmode_interval | |
2690 | (<em class="parameter"><code><a class="link" href="GstEvent.html" title="GstEvent"><span class="type">GstEvent</span></a> *event</code></em>, | |
2691 | <em class="parameter"><code><a class="link" href="GstClock.html#GstClockTime" title="GstClockTime"><span class="type">GstClockTime</span></a> *interval</code></em>);</pre> | |
2692 | <p>Retrieve the trickmode interval that may have been set on a | |
2693 | seek event with <a class="link" href="GstEvent.html#gst-event-set-seek-trickmode-interval" title="gst_event_set_seek_trickmode_interval ()"><code class="function">gst_event_set_seek_trickmode_interval()</code></a>.</p> | |
2694 | <div class="refsect3"> | |
2695 | <a name="gst-event-parse-seek-trickmode-interval.parameters"></a><h4>Parameters</h4> | |
2696 | <div class="informaltable"><table class="informaltable" width="100%" border="0"> | |
2697 | <colgroup> | |
2698 | <col width="150px" class="parameters_name"> | |
2699 | <col class="parameters_description"> | |
2700 | <col width="200px" class="parameters_annotations"> | |
2701 | </colgroup> | |
2702 | <tbody><tr> | |
2703 | <td class="parameter_name"><p>interval</p></td> | |
2704 | <td class="parameter_description"><p>. </p></td> | |
2705 | <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td> | |
2706 | </tr></tbody> | |
2707 | </table></div> | |
2708 | </div> | |
2709 | <p class="since">Since: 1.16</p> | |
2710 | </div> | |
2711 | <hr> | |
2712 | <div class="refsect2"> | |
2660 | 2713 | <a name="gst-event-new-navigation"></a><h3>gst_event_new_navigation ()</h3> |
2661 | 2714 | <pre class="programlisting"><a class="link" href="GstEvent.html" title="GstEvent"><span class="returnvalue">GstEvent</span></a> * |
2662 | 2715 | gst_event_new_navigation (<em class="parameter"><code><a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>);</pre> |
1735 | 1735 | </tr> |
1736 | 1736 | <tr> |
1737 | 1737 | <td class="parameter_name"><p>details</p></td> |
1738 | <td class="parameter_description"><p>(allow-none): A GstStructure with details. </p></td> | |
1739 | <td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td> | |
1738 | <td class="parameter_description"><p>A GstStructure with details. </p></td> | |
1739 | <td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td> | |
1740 | 1740 | </tr> |
1741 | 1741 | </tbody> |
1742 | 1742 | </table></div> |
1947 | 1947 | </tr> |
1948 | 1948 | <tr> |
1949 | 1949 | <td class="parameter_name"><p>details</p></td> |
1950 | <td class="parameter_description"><p>(allow-none): A GstStructure with details. </p></td> | |
1951 | <td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td> | |
1950 | <td class="parameter_description"><p>A GstStructure with details. </p></td> | |
1951 | <td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td> | |
1952 | 1952 | </tr> |
1953 | 1953 | </tbody> |
1954 | 1954 | </table></div> |
2114 | 2114 | </tr> |
2115 | 2115 | <tr> |
2116 | 2116 | <td class="parameter_name"><p>details</p></td> |
2117 | <td class="parameter_description"><p>(allow-none): A GstStructure with details. </p></td> | |
2118 | <td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td> | |
2117 | <td class="parameter_description"><p>A GstStructure with details. </p></td> | |
2118 | <td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td> | |
2119 | 2119 | </tr> |
2120 | 2120 | </tbody> |
2121 | 2121 | </table></div> |
834 | 834 | <keyword type="function" name="gst_event_parse_qos ()" link="GstEvent.html#gst-event-parse-qos"/> |
835 | 835 | <keyword type="function" name="gst_event_new_seek ()" link="GstEvent.html#gst-event-new-seek"/> |
836 | 836 | <keyword type="function" name="gst_event_parse_seek ()" link="GstEvent.html#gst-event-parse-seek"/> |
837 | <keyword type="function" name="gst_event_set_seek_trickmode_interval ()" link="GstEvent.html#gst-event-set-seek-trickmode-interval" since="1.16"/> | |
838 | <keyword type="function" name="gst_event_parse_seek_trickmode_interval ()" link="GstEvent.html#gst-event-parse-seek-trickmode-interval" since="1.16"/> | |
837 | 839 | <keyword type="function" name="gst_event_new_navigation ()" link="GstEvent.html#gst-event-new-navigation"/> |
838 | 840 | <keyword type="function" name="gst_event_new_latency ()" link="GstEvent.html#gst-event-new-latency"/> |
839 | 841 | <keyword type="function" name="gst_event_parse_latency ()" link="GstEvent.html#gst-event-parse-latency"/> |
1278 | 1278 | </div> |
1279 | 1279 | <div class="refsect3"> |
1280 | 1280 | <a name="gst-uri-get-path.returns"></a><h4>Returns</h4> |
1281 | <p>(nullable): The path from the URI. Once finished | |
1281 | <p>The path from the URI. Once finished | |
1282 | 1282 | with the string should be <a href="/usr/share/gtk-doc/html/glib/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a>'d. </p> |
1283 | <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> | |
1283 | <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></p> | |
1284 | 1284 | </div> |
1285 | 1285 | <p class="since">Since: <a class="link" href="ix07.html#api-index-1.6">1.6</a></p> |
1286 | 1286 | </div> |
142 | 142 | <hr> |
143 | 143 | <div class="refsect2"> |
144 | 144 | <a name="GST-VERSION-MICRO:CAPS"></a><h3>GST_VERSION_MICRO</h3> |
145 | <pre class="programlisting">#define GST_VERSION_MICRO (2) | |
145 | <pre class="programlisting">#define GST_VERSION_MICRO (90) | |
146 | 146 | </pre> |
147 | 147 | <p>The micro version of GStreamer at compile time:</p> |
148 | 148 | </div> |
14 | 14 | <div> |
15 | 15 | <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> |
16 | 16 | <div><p class="releaseinfo"> |
17 | for GStreamer Core 1.0 (1.15.2) | |
17 | for GStreamer Core 1.0 (1.15.90) | |
18 | 18 | The latest version of this documentation can be found on-line at |
19 | 19 | <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>. |
20 | 20 | </p></div> |
3273 | 3273 | </dt> |
3274 | 3274 | <dd></dd> |
3275 | 3275 | <dt> |
3276 | <a class="link" href="GstEvent.html#gst-event-parse-seek-trickmode-interval" title="gst_event_parse_seek_trickmode_interval ()">gst_event_parse_seek_trickmode_interval</a>, function in <a class="link" href="GstEvent.html" title="GstEvent">GstEvent</a> | |
3277 | </dt> | |
3278 | <dd></dd> | |
3279 | <dt> | |
3276 | 3280 | <a class="link" href="GstEvent.html#gst-event-parse-segment" title="gst_event_parse_segment ()">gst_event_parse_segment</a>, function in <a class="link" href="GstEvent.html" title="GstEvent">GstEvent</a> |
3277 | 3281 | </dt> |
3278 | 3282 | <dd></dd> |
3342 | 3346 | <dd></dd> |
3343 | 3347 | <dt> |
3344 | 3348 | <a class="link" href="GstEvent.html#gst-event-set-running-time-offset" title="gst_event_set_running_time_offset ()">gst_event_set_running_time_offset</a>, function in <a class="link" href="GstEvent.html" title="GstEvent">GstEvent</a> |
3349 | </dt> | |
3350 | <dd></dd> | |
3351 | <dt> | |
3352 | <a class="link" href="GstEvent.html#gst-event-set-seek-trickmode-interval" title="gst_event_set_seek_trickmode_interval ()">gst_event_set_seek_trickmode_interval</a>, function in <a class="link" href="GstEvent.html" title="GstEvent">GstEvent</a> | |
3345 | 3353 | </dt> |
3346 | 3354 | <dd></dd> |
3347 | 3355 | <dt> |
15 | 15 | <td width="100%" align="left" class="shortcuts"> |
16 | 16 | <a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> |
17 | 17 | <a href="#GstAggregatorPad.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> |
18 | <a href="#GstAggregatorPad.object-hierarchy" class="shortcut">Object Hierarchy</a></span> | |
18 | <a href="#GstAggregatorPad.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> | |
19 | <a href="#GstAggregatorPad.properties" class="shortcut">Properties</a></span><span id="nav_signals"> <span class="dim">|</span> | |
20 | <a href="#GstAggregatorPad.signals" class="shortcut">Signals</a></span> | |
19 | 21 | </td> |
20 | 22 | <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td> |
21 | 23 | <td><a accesskey="u" href="gstreamer-base.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td> |
83 | 85 | </table></div> |
84 | 86 | </div> |
85 | 87 | <div class="refsect1"> |
88 | <a name="GstAggregatorPad.properties"></a><h2>Properties</h2> | |
89 | <div class="informaltable"><table class="informaltable" border="0"> | |
90 | <colgroup> | |
91 | <col width="150px" class="properties_type"> | |
92 | <col width="300px" class="properties_name"> | |
93 | <col width="200px" class="properties_flags"> | |
94 | </colgroup> | |
95 | <tbody><tr> | |
96 | <td class="property_type"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td> | |
97 | <td class="property_name"><a class="link" href="GstAggregatorPad.html#GstAggregatorPad--emit-signals" title="The “emit-signals” property">emit-signals</a></td> | |
98 | <td class="property_flags">Read / Write</td> | |
99 | </tr></tbody> | |
100 | </table></div> | |
101 | </div> | |
102 | <div class="refsect1"> | |
103 | <a name="GstAggregatorPad.signals"></a><h2>Signals</h2> | |
104 | <div class="informaltable"><table class="informaltable" border="0"> | |
105 | <colgroup> | |
106 | <col width="150px" class="signals_return"> | |
107 | <col width="300px" class="signals_name"> | |
108 | <col width="200px" class="signals_flags"> | |
109 | </colgroup> | |
110 | <tbody><tr> | |
111 | <td class="signal_type"><span class="returnvalue">void</span></td> | |
112 | <td class="signal_name"><a class="link" href="GstAggregatorPad.html#GstAggregatorPad-buffer-consumed" title="The “buffer-consumed” signal">buffer-consumed</a></td> | |
113 | <td class="signal_flags"><a href="/usr/share/gtk-doc/html/gobject/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td> | |
114 | </tr></tbody> | |
115 | </table></div> | |
116 | </div> | |
117 | <div class="refsect1"> | |
86 | 118 | <a name="GstAggregatorPad.other"></a><h2>Types and Values</h2> |
87 | 119 | <div class="informaltable"><table class="informaltable" width="100%" border="0"> |
88 | 120 | <colgroup> |
329 | 361 | </div> |
330 | 362 | </div> |
331 | 363 | <div class="refsect1"> |
364 | <a name="GstAggregatorPad.property-details"></a><h2>Property Details</h2> | |
365 | <div class="refsect2"> | |
366 | <a name="GstAggregatorPad--emit-signals"></a><h3>The <code class="literal">“emit-signals”</code> property</h3> | |
367 | <pre class="programlisting"> “emit-signals” <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre> | |
368 | <p>Enables the emission of signals such as <a class="link" href="GstAggregatorPad.html#GstAggregatorPad-buffer-consumed" title="The “buffer-consumed” signal"><span class="type">“buffer-consumed”</span></a></p> | |
369 | <p>Flags: Read / Write</p> | |
370 | <p>Default value: FALSE</p> | |
371 | <p class="since">Since: 1.16</p> | |
372 | </div> | |
373 | </div> | |
374 | <div class="refsect1"> | |
375 | <a name="GstAggregatorPad.signal-details"></a><h2>Signal Details</h2> | |
376 | <div class="refsect2"> | |
377 | <a name="GstAggregatorPad-buffer-consumed"></a><h3>The <code class="literal">“buffer-consumed”</code> signal</h3> | |
378 | <pre class="programlisting"><span class="returnvalue">void</span> | |
379 | user_function (<a class="link" href="GstAggregatorPad.html" title="GstAggregatorPad"><span class="type">GstAggregatorPad</span></a> *gstaggregatorpad, | |
380 | <a href="../html/GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> *arg1, | |
381 | <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre> | |
382 | <p>Signals that a buffer was consumed. As aggregator pads store buffers | |
383 | in an internal queue, there is no direct match between input and output | |
384 | buffers at any given time. This signal can be useful to forward metas | |
385 | such as <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideometa.html#GstVideoTimeCodeMeta"><span class="type">GstVideoTimeCodeMeta</span></a> or <span class="type">GstVideoCaptionMeta</span> at the right time.</p> | |
386 | <div class="refsect3"> | |
387 | <a name="GstAggregatorPad-buffer-consumed.parameters"></a><h4>Parameters</h4> | |
388 | <div class="informaltable"><table class="informaltable" width="100%" border="0"> | |
389 | <colgroup> | |
390 | <col width="150px" class="parameters_name"> | |
391 | <col class="parameters_description"> | |
392 | <col width="200px" class="parameters_annotations"> | |
393 | </colgroup> | |
394 | <tbody><tr> | |
395 | <td class="parameter_name"><p>user_data</p></td> | |
396 | <td class="parameter_description"><p>user data set when the signal handler was connected.</p></td> | |
397 | <td class="parameter_annotations"> </td> | |
398 | </tr></tbody> | |
399 | </table></div> | |
400 | </div> | |
401 | <p>Flags: <a href="/usr/share/gtk-doc/html/gobject/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></p> | |
402 | <p class="since">Since: 1.16</p> | |
403 | </div> | |
404 | </div> | |
405 | <div class="refsect1"> | |
332 | 406 | <a name="GstAggregatorPad.see-also"></a><h2>See Also</h2> |
333 | 407 | <p>gstcollectpads for historical reasons.</p> |
334 | 408 | </div> |
828 | 828 | after the total size is returned. By default this is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> but sources |
829 | 829 | that can't return an authoritative size and only know that they're EOS |
830 | 830 | when trying to read more should set this to <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p> |
831 | <p>When <em class="parameter"><code>src</code></em> | |
832 | operates in <a href="../html/gstreamer-GstFormat.html#GST-FORMAT-TIME:CAPS"><code class="literal">GST_FORMAT_TIME</code></a>, <a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> will send an EOS | |
833 | when a buffer outside of the currently configured segment is pushed if | |
834 | <em class="parameter"><code>automatic_eos</code></em> | |
835 | is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>. Since 1.16, if <em class="parameter"><code>automatic_eos</code></em> | |
836 | is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> an | |
837 | EOS will be pushed only when the <span class="type">GstBaseSrc.create</span> implementation | |
838 | returns <a href="../html/GstPad.html#GST-FLOW-EOS:CAPS"><code class="literal">GST_FLOW_EOS</code></a>.</p> | |
831 | 839 | <div class="refsect3"> |
832 | 840 | <a name="gst-base-src-set-automatic-eos.parameters"></a><h4>Parameters</h4> |
833 | 841 | <div class="informaltable"><table class="informaltable" width="100%" border="0"> |
82 | 82 | <keyword type="function" name="gst_aggregator_pad_has_buffer ()" link="GstAggregatorPad.html#gst-aggregator-pad-has-buffer" since="1.14.1"/> |
83 | 83 | <keyword type="struct" name="struct GstAggregatorPad" link="GstAggregatorPad.html#GstAggregatorPad-struct"/> |
84 | 84 | <keyword type="struct" name="struct GstAggregatorPadClass" link="GstAggregatorPad.html#GstAggregatorPadClass"/> |
85 | <keyword type="property" name="The “emit-signals” property" link="GstAggregatorPad.html#GstAggregatorPad--emit-signals"/> | |
86 | <keyword type="signal" name="The “buffer-consumed” signal" link="GstAggregatorPad.html#GstAggregatorPad-buffer-consumed"/> | |
85 | 87 | <keyword type="function" name="gst_base_parse_merge_tags ()" link="GstBaseParse.html#gst-base-parse-merge-tags" since="1.6"/> |
86 | 88 | <keyword type="function" name="gst_base_parse_set_duration ()" link="GstBaseParse.html#gst-base-parse-set-duration"/> |
87 | 89 | <keyword type="function" name="gst_base_parse_set_average_bitrate ()" link="GstBaseParse.html#gst-base-parse-set-average-bitrate"/> |
329 | 329 | gst_bit_writer_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre> |
330 | 330 | <p>Creates a new, empty <a class="link" href="gstreamer-libs-GstBitWriter.html#GstBitWriter" title="struct GstBitWriter"><span class="type">GstBitWriter</span></a> instance.</p> |
331 | 331 | <p>Free-function: gst_bit_writer_free</p> |
332 | <p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p> | |
332 | 333 | <div class="refsect3"> |
333 | 334 | <a name="gst-bit-writer-new.returns"></a><h4>Returns</h4> |
334 | 335 | <p>a new, empty <a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> instance. </p> |
341 | 342 | <pre class="programlisting"><a class="link" href="gstreamer-libs-GstBitWriter.html#GstBitWriter" title="struct GstBitWriter"><span class="returnvalue">GstBitWriter</span></a> * |
342 | 343 | gst_bit_writer_new_with_size (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> size</code></em>, |
343 | 344 | <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> fixed</code></em>);</pre> |
345 | <p>Creates a <a class="link" href="gstreamer-libs-GstBitWriter.html#GstBitWriter" title="struct GstBitWriter"><span class="type">GstBitWriter</span></a> instance with the given initial data size.</p> | |
346 | <p>Free-function: gst_bit_writer_free</p> | |
347 | <p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p> | |
348 | <div class="refsect3"> | |
349 | <a name="gst-bit-writer-new-with-size.parameters"></a><h4>Parameters</h4> | |
350 | <div class="informaltable"><table class="informaltable" width="100%" border="0"> | |
351 | <colgroup> | |
352 | <col width="150px" class="parameters_name"> | |
353 | <col class="parameters_description"> | |
354 | <col width="200px" class="parameters_annotations"> | |
355 | </colgroup> | |
356 | <tbody> | |
357 | <tr> | |
358 | <td class="parameter_name"><p>size</p></td> | |
359 | <td class="parameter_description"><p>Initial size of data in bytes</p></td> | |
360 | <td class="parameter_annotations"> </td> | |
361 | </tr> | |
362 | <tr> | |
363 | <td class="parameter_name"><p>fixed</p></td> | |
364 | <td class="parameter_description"><p>If <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> the data can't be reallocated</p></td> | |
365 | <td class="parameter_annotations"> </td> | |
366 | </tr> | |
367 | </tbody> | |
368 | </table></div> | |
369 | </div> | |
370 | <div class="refsect3"> | |
371 | <a name="gst-bit-writer-new-with-size.returns"></a><h4>Returns</h4> | |
372 | <p>a new <a class="link" href="gstreamer-libs-GstBitWriter.html#GstBitWriter" title="struct GstBitWriter"><span class="type">GstBitWriter</span></a> instance. </p> | |
373 | <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> | |
374 | </div> | |
344 | 375 | </div> |
345 | 376 | <hr> |
346 | 377 | <div class="refsect2"> |
355 | 386 | bits from the |
356 | 387 | <a class="link" href="gstreamer-libs-GstBitWriter.html#GstBitWriter" title="struct GstBitWriter"><span class="type">GstBitWriter</span></a> from the beginnig.</p> |
357 | 388 | <p>Free-function: gst_bit_writer_free</p> |
389 | <p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p> | |
358 | 390 | <div class="refsect3"> |
359 | 391 | <a name="gst-bit-writer-new-with-data.parameters"></a><h4>Parameters</h4> |
360 | 392 | <div class="informaltable"><table class="informaltable" width="100%" border="0"> |
481 | 513 | gst_bit_writer_init (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBitWriter.html#GstBitWriter" title="struct GstBitWriter"><span class="type">GstBitWriter</span></a> *bitwriter</code></em>);</pre> |
482 | 514 | <p>Initializes <em class="parameter"><code>bitwriter</code></em> |
483 | 515 | to an empty instance.</p> |
516 | <p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p> | |
484 | 517 | <div class="refsect3"> |
485 | 518 | <a name="gst-bit-writer-init.parameters"></a><h4>Parameters</h4> |
486 | 519 | <div class="informaltable"><table class="informaltable" width="100%" border="0"> |
507 | 540 | <p>Initializes a <a class="link" href="gstreamer-libs-GstBitWriter.html#GstBitWriter" title="struct GstBitWriter"><span class="type">GstBitWriter</span></a> instance and allocates the given data |
508 | 541 | <em class="parameter"><code>size</code></em> |
509 | 542 | .</p> |
543 | <p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p> | |
510 | 544 | <div class="refsect3"> |
511 | 545 | <a name="gst-bit-writer-init-with-size.parameters"></a><h4>Parameters</h4> |
512 | 546 | <div class="informaltable"><table class="informaltable" width="100%" border="0"> |
550 | 584 | is <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> it is possible to read <em class="parameter"><code>size</code></em> |
551 | 585 | bits from the |
552 | 586 | <a class="link" href="gstreamer-libs-GstBitWriter.html#GstBitWriter" title="struct GstBitWriter"><span class="type">GstBitWriter</span></a> from the beginning.</p> |
587 | <p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p> | |
553 | 588 | <div class="refsect3"> |
554 | 589 | <a name="gst-bit-writer-init-with-data.parameters"></a><h4>Parameters</h4> |
555 | 590 | <div class="informaltable"><table class="informaltable" width="100%" border="0"> |
1649 | 1649 | gst_check_run_suite (<em class="parameter"><code><span class="type">Suite</span> *suite</code></em>, |
1650 | 1650 | <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>, |
1651 | 1651 | <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *fname</code></em>);</pre> |
1652 | <p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p> | |
1653 | <div class="refsect3"> | |
1654 | <a name="gst-check-run-suite.parameters"></a><h4>Parameters</h4> | |
1655 | <div class="informaltable"><table class="informaltable" width="100%" border="0"> | |
1656 | <colgroup> | |
1657 | <col width="150px" class="parameters_name"> | |
1658 | <col class="parameters_description"> | |
1659 | <col width="200px" class="parameters_annotations"> | |
1660 | </colgroup> | |
1661 | <tbody> | |
1662 | <tr> | |
1663 | <td class="parameter_name"><p>suite</p></td> | |
1664 | <td class="parameter_description"><p>the check test suite</p></td> | |
1665 | <td class="parameter_annotations"> </td> | |
1666 | </tr> | |
1667 | <tr> | |
1668 | <td class="parameter_name"><p>name</p></td> | |
1669 | <td class="parameter_description"><p>name</p></td> | |
1670 | <td class="parameter_annotations"> </td> | |
1671 | </tr> | |
1672 | <tr> | |
1673 | <td class="parameter_name"><p>fname</p></td> | |
1674 | <td class="parameter_description"><p>file name</p></td> | |
1675 | <td class="parameter_annotations"> </td> | |
1676 | </tr> | |
1677 | </tbody> | |
1678 | </table></div> | |
1679 | </div> | |
1680 | <div class="refsect3"> | |
1681 | <a name="gst-check-run-suite.returns"></a><h4>Returns</h4> | |
1682 | <p> number of failed tests</p> | |
1683 | </div> | |
1652 | 1684 | </div> |
1653 | 1685 | <hr> |
1654 | 1686 | <div class="refsect2"> |
2038 | 2070 | is NULL the |
2039 | 2071 | matching logs will be silently discarded by GstCheck.</p> |
2040 | 2072 | <p>MT safe.</p> |
2073 | <p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p> | |
2041 | 2074 | <div class="refsect3"> |
2042 | 2075 | <a name="gst-check-add-log-filter.parameters"></a><h4>Parameters</h4> |
2043 | 2076 | <div class="informaltable"><table class="informaltable" width="100%" border="0"> |
14 | 14 | <div> |
15 | 15 | <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> |
16 | 16 | <div><p class="releaseinfo"> |
17 | for GStreamer Library 1.0 (1.15.2) | |
17 | for GStreamer Library 1.0 (1.15.90) | |
18 | 18 | The latest version of this documentation can be found on-line at |
19 | 19 | <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>. |
20 | 20 | </p></div> |
201 | 201 | </dt> |
202 | 202 | <dd></dd> |
203 | 203 | <dt> |
204 | <a class="link" href="GstAggregatorPad.html#GstAggregatorPad-buffer-consumed" title="The “buffer-consumed” signal">GstAggregatorPad::buffer-consumed</a>, object signal in <a class="link" href="GstAggregatorPad.html" title="GstAggregatorPad">GstAggregatorPad</a> | |
205 | </dt> | |
206 | <dd></dd> | |
207 | <dt> | |
208 | <a class="link" href="GstAggregatorPad.html#GstAggregatorPad--emit-signals" title="The “emit-signals” property">GstAggregatorPad:emit-signals</a>, object property in <a class="link" href="GstAggregatorPad.html" title="GstAggregatorPad">GstAggregatorPad</a> | |
209 | </dt> | |
210 | <dd></dd> | |
211 | <dt> | |
204 | 212 | <a class="link" href="GstAggregatorPad.html#GstAggregatorPadClass" title="struct GstAggregatorPadClass">GstAggregatorPadClass</a>, struct in <a class="link" href="GstAggregatorPad.html" title="GstAggregatorPad">GstAggregatorPad</a> |
205 | 213 | </dt> |
206 | 214 | <dd></dd> |
43 | 43 | <tbody> |
44 | 44 | <tr> |
45 | 45 | <td class="property_type"> |
46 | <a href="../html/GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *</td> | |
46 | <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *</td> | |
47 | 47 | <td class="property_name"><a class="link" href="gstreamer-plugins-capsfilter.html#GstCapsFilter--caps" title="The “caps” property">caps</a></td> |
48 | 48 | <td class="property_flags">Read / Write</td> |
49 | 49 | </tr> |
78 | 78 | <a name="gstreamer-plugins-capsfilter.object-hierarchy"></a><h2>Object Hierarchy</h2> |
79 | 79 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
80 | 80 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
81 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
82 | <span class="lineart">╰──</span> <a href="../html/GstElement.html#GstElement-struct">GstElement</a> | |
83 | <span class="lineart">╰──</span> <a href="../html/GstBaseTransform.html#GstBaseTransform-struct">GstBaseTransform</a> | |
81 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
82 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct">GstElement</a> | |
83 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0/GstBaseTransform.html#GstBaseTransform-struct">GstBaseTransform</a> | |
84 | 84 | <span class="lineart">╰──</span> GstCapsFilter |
85 | 85 | </pre> |
86 | 86 | </div> |
243 | 243 | <a name="gstreamer-plugins-capsfilter.property-details"></a><h2>Property Details</h2> |
244 | 244 | <div class="refsect2"> |
245 | 245 | <a name="GstCapsFilter--caps"></a><h3>The <code class="literal">“caps”</code> property</h3> |
246 | <pre class="programlisting"> “caps” <a href="../html/GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *</pre> | |
246 | <pre class="programlisting"> “caps” <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *</pre> | |
247 | 247 | <p>Restrict the possible allowed capabilities (NULL means ANY). Setting this property takes a reference to the supplied GstCaps object.</p> |
248 | 248 | <p>Flags: Read / Write</p> |
249 | 249 | </div> |
43 | 43 | <tbody> |
44 | 44 | <tr> |
45 | 45 | <td class="property_type"> |
46 | <a href="../html/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *</td> | |
46 | <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *</td> | |
47 | 47 | <td class="property_name"><a class="link" href="gstreamer-plugins-concat.html#GstConcat--active-pad" title="The “active-pad” property">active-pad</a></td> |
48 | 48 | <td class="property_flags">Read</td> |
49 | 49 | </tr> |
72 | 72 | <a name="gstreamer-plugins-concat.object-hierarchy"></a><h2>Object Hierarchy</h2> |
73 | 73 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
74 | 74 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
75 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
76 | <span class="lineart">╰──</span> <a href="../html/GstElement.html#GstElement-struct">GstElement</a> | |
75 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
76 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct">GstElement</a> | |
77 | 77 | <span class="lineart">╰──</span> GstConcat |
78 | 78 | </pre> |
79 | 79 | </div> |
81 | 81 | <a name="gstreamer-plugins-concat.description"></a><h2>Description</h2> |
82 | 82 | <p>Concatenates streams together to one continuous stream.</p> |
83 | 83 | <p>All streams but the current one are blocked until the current one |
84 | finished with <a href="../html/GstEvent.html#GST-EVENT-EOS:CAPS"><code class="literal">GST_EVENT_EOS</code></a>. Then the next stream is enabled, while | |
85 | keeping the running time continuous for <a href="../html/gstreamer-GstFormat.html#GST-FORMAT-TIME:CAPS"><code class="literal">GST_FORMAT_TIME</code></a> segments or | |
86 | keeping the segment continuous for <a href="../html/gstreamer-GstFormat.html#GST-FORMAT-BYTES:CAPS"><code class="literal">GST_FORMAT_BYTES</code></a> segments.</p> | |
84 | finished with <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstEvent.html#GST-EVENT-EOS:CAPS"><code class="literal">GST_EVENT_EOS</code></a>. Then the next stream is enabled, while | |
85 | keeping the running time continuous for <a href="/usr/share/gtk-doc/html/gstreamer-1.0/gstreamer-GstFormat.html#GST-FORMAT-TIME:CAPS"><code class="literal">GST_FORMAT_TIME</code></a> segments or | |
86 | keeping the segment continuous for <a href="/usr/share/gtk-doc/html/gstreamer-1.0/gstreamer-GstFormat.html#GST-FORMAT-BYTES:CAPS"><code class="literal">GST_FORMAT_BYTES</code></a> segments.</p> | |
87 | 87 | <p>Streams are switched in the order in which the sinkpads were requested.</p> |
88 | 88 | <p>By default, the stream segment's base values are adjusted to ensure |
89 | 89 | the segment transitions between streams are continuous. In some cases, |
202 | 202 | <a name="gstreamer-plugins-concat.property-details"></a><h2>Property Details</h2> |
203 | 203 | <div class="refsect2"> |
204 | 204 | <a name="GstConcat--active-pad"></a><h3>The <code class="literal">“active-pad”</code> property</h3> |
205 | <pre class="programlisting"> “active-pad” <a href="../html/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *</pre> | |
205 | <pre class="programlisting"> “active-pad” <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *</pre> | |
206 | 206 | <p>Currently active src pad.</p> |
207 | 207 | <p>Flags: Read</p> |
208 | 208 | </div> |
66 | 66 | <a name="gstreamer-plugins-dataurisrc.object-hierarchy"></a><h2>Object Hierarchy</h2> |
67 | 67 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
68 | 68 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
69 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
70 | <span class="lineart">╰──</span> <a href="../html/GstElement.html#GstElement-struct">GstElement</a> | |
71 | <span class="lineart">╰──</span> <a href="../html/GstBaseSrc.html#GstBaseSrc-struct">GstBaseSrc</a> | |
69 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
70 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct">GstElement</a> | |
71 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0/GstBaseSrc.html#GstBaseSrc-struct">GstBaseSrc</a> | |
72 | 72 | <span class="lineart">╰──</span> GstDataURISrc |
73 | 73 | </pre> |
74 | 74 | </div> |
76 | 76 | <a name="gstreamer-plugins-dataurisrc.implemented-interfaces"></a><h2>Implemented Interfaces</h2> |
77 | 77 | <p> |
78 | 78 | GstDataURISrc implements |
79 | <a href="../html/gstreamer-GstUriHandler.html#GstURIHandler-struct">GstURIHandler</a>.</p> | |
79 | <a href="/usr/share/gtk-doc/html/gstreamer-1.0/gstreamer-GstUriHandler.html#GstURIHandler-struct">GstURIHandler</a>.</p> | |
80 | 80 | </div> |
81 | 81 | <div class="refsect1"> |
82 | 82 | <a name="gstreamer-plugins-dataurisrc.description"></a><h2>Description</h2> |
98 | 98 | <a name="gstreamer-plugins-downloadbuffer.object-hierarchy"></a><h2>Object Hierarchy</h2> |
99 | 99 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
100 | 100 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
101 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
102 | <span class="lineart">╰──</span> <a href="../html/GstElement.html#GstElement-struct">GstElement</a> | |
101 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
102 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct">GstElement</a> | |
103 | 103 | <span class="lineart">╰──</span> GstDownloadBuffer |
104 | 104 | </pre> |
105 | 105 | </div> |
136 | 136 | <a name="gstreamer-plugins-fakesink.object-hierarchy"></a><h2>Object Hierarchy</h2> |
137 | 137 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
138 | 138 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
139 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
140 | <span class="lineart">╰──</span> <a href="../html/GstElement.html#GstElement-struct">GstElement</a> | |
141 | <span class="lineart">╰──</span> <a href="../html/GstBaseSink.html#GstBaseSink-struct">GstBaseSink</a> | |
139 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
140 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct">GstElement</a> | |
141 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0/GstBaseSink.html#GstBaseSink-struct">GstBaseSink</a> | |
142 | 142 | <span class="lineart">╰──</span> GstFakeSink |
143 | 143 | </pre> |
144 | 144 | </div> |
376 | 376 | <a name="GstFakeSink-handoff"></a><h3>The <code class="literal">“handoff”</code> signal</h3> |
377 | 377 | <pre class="programlisting"><span class="returnvalue">void</span> |
378 | 378 | user_function (<a class="link" href="gstreamer-plugins-fakesink.html#GstFakeSink"><span class="type">GstFakeSink</span></a> *fakesink, |
379 | <a href="../html/GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> *buffer, | |
380 | <a href="../html/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *pad, | |
379 | <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> *buffer, | |
380 | <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *pad, | |
381 | 381 | <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre> |
382 | 382 | <p>This signal gets emitted before unreffing the buffer.</p> |
383 | 383 | <div class="refsect3"> |
419 | 419 | <a name="GstFakeSink-preroll-handoff"></a><h3>The <code class="literal">“preroll-handoff”</code> signal</h3> |
420 | 420 | <pre class="programlisting"><span class="returnvalue">void</span> |
421 | 421 | user_function (<a class="link" href="gstreamer-plugins-fakesink.html#GstFakeSink"><span class="type">GstFakeSink</span></a> *fakesink, |
422 | <a href="../html/GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> *buffer, | |
423 | <a href="../html/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *pad, | |
422 | <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> *buffer, | |
423 | <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *pad, | |
424 | 424 | <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre> |
425 | 425 | <p>This signal gets emitted before unreffing the buffer.</p> |
426 | 426 | <div class="refsect3"> |
73 | 73 | <td class="property_flags">Read / Write</td> |
74 | 74 | </tr> |
75 | 75 | <tr> |
76 | <td class="property_type"><a href="../html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a></td> | |
76 | <td class="property_type"><a href="/usr/share/gtk-doc/html/gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a></td> | |
77 | 77 | <td class="property_name"><a class="link" href="gstreamer-plugins-fakesrc.html#GstFakeSrc--format" title="The “format” property">format</a></td> |
78 | 78 | <td class="property_flags">Read / Write</td> |
79 | 79 | </tr> |
182 | 182 | <a name="gstreamer-plugins-fakesrc.object-hierarchy"></a><h2>Object Hierarchy</h2> |
183 | 183 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
184 | 184 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
185 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
186 | <span class="lineart">╰──</span> <a href="../html/GstElement.html#GstElement-struct">GstElement</a> | |
187 | <span class="lineart">╰──</span> <a href="../html/GstBaseSrc.html#GstBaseSrc-struct">GstBaseSrc</a> | |
185 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
186 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct">GstElement</a> | |
187 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0/GstBaseSrc.html#GstBaseSrc-struct">GstBaseSrc</a> | |
188 | 188 | <span class="lineart">╰──</span> GstFakeSrc |
189 | 189 | </pre> |
190 | 190 | </div> |
526 | 526 | <hr> |
527 | 527 | <div class="refsect2"> |
528 | 528 | <a name="GstFakeSrc--format"></a><h3>The <code class="literal">“format”</code> property</h3> |
529 | <pre class="programlisting"> “format” <a href="../html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a></pre> | |
529 | <pre class="programlisting"> “format” <a href="/usr/share/gtk-doc/html/gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a></pre> | |
530 | 530 | <p>Set the format of the newsegment events to produce.</p> |
531 | 531 | <p>Flags: Read / Write</p> |
532 | 532 | <p>Default value: GST_FORMAT_BYTES</p> |
621 | 621 | <a name="GstFakeSrc-handoff"></a><h3>The <code class="literal">“handoff”</code> signal</h3> |
622 | 622 | <pre class="programlisting"><span class="returnvalue">void</span> |
623 | 623 | user_function (<a class="link" href="gstreamer-plugins-fakesrc.html#GstFakeSrc"><span class="type">GstFakeSrc</span></a> *fakesrc, |
624 | <a href="../html/GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> *buffer, | |
625 | <a href="../html/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *pad, | |
624 | <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> *buffer, | |
625 | <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *pad, | |
626 | 626 | <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre> |
627 | 627 | <p>This signal gets emitted before sending the buffer.</p> |
628 | 628 | <div class="refsect3"> |
65 | 65 | <a name="gstreamer-plugins-fdsink.object-hierarchy"></a><h2>Object Hierarchy</h2> |
66 | 66 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
67 | 67 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
68 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
69 | <span class="lineart">╰──</span> <a href="../html/GstElement.html#GstElement-struct">GstElement</a> | |
70 | <span class="lineart">╰──</span> <a href="../html/GstBaseSink.html#GstBaseSink-struct">GstBaseSink</a> | |
68 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
69 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct">GstElement</a> | |
70 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0/GstBaseSink.html#GstBaseSink-struct">GstBaseSink</a> | |
71 | 71 | <span class="lineart">╰──</span> GstFdSink |
72 | 72 | </pre> |
73 | 73 | </div> |
75 | 75 | <a name="gstreamer-plugins-fdsink.implemented-interfaces"></a><h2>Implemented Interfaces</h2> |
76 | 76 | <p> |
77 | 77 | GstFdSink implements |
78 | <a href="../html/gstreamer-GstUriHandler.html#GstURIHandler-struct">GstURIHandler</a>.</p> | |
78 | <a href="/usr/share/gtk-doc/html/gstreamer-1.0/gstreamer-GstUriHandler.html#GstURIHandler-struct">GstURIHandler</a>.</p> | |
79 | 79 | </div> |
80 | 80 | <div class="refsect1"> |
81 | 81 | <a name="gstreamer-plugins-fdsink.description"></a><h2>Description</h2> |
82 | 82 | <p>Write data to a unix file descriptor.</p> |
83 | 83 | <p>This element will synchronize on the clock before writing the data on the |
84 | 84 | socket. For file descriptors where this does not make sense (files, ...) the |
85 | <a href="../html/GstBaseSink.html#GstBaseSink--sync"><span class="type">“sync”</span></a> property can be used to disable synchronisation.</p> | |
85 | <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0/GstBaseSink.html#GstBaseSink--sync"><span class="type">“sync”</span></a> property can be used to disable synchronisation.</p> | |
86 | 86 | <div class="refsynopsisdiv"> |
87 | 87 | <h2>Synopsis</h2> |
88 | 88 | <div class="refsect2"> |
72 | 72 | <a name="gstreamer-plugins-fdsrc.object-hierarchy"></a><h2>Object Hierarchy</h2> |
73 | 73 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
74 | 74 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
75 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
76 | <span class="lineart">╰──</span> <a href="../html/GstElement.html#GstElement-struct">GstElement</a> | |
77 | <span class="lineart">╰──</span> <a href="../html/GstBaseSrc.html#GstBaseSrc-struct">GstBaseSrc</a> | |
78 | <span class="lineart">╰──</span> <a href="../html/GstPushSrc.html#GstPushSrc-struct">GstPushSrc</a> | |
75 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
76 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct">GstElement</a> | |
77 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0/GstBaseSrc.html#GstBaseSrc-struct">GstBaseSrc</a> | |
78 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0/GstPushSrc.html#GstPushSrc-struct">GstPushSrc</a> | |
79 | 79 | <span class="lineart">╰──</span> GstFdSrc |
80 | 80 | </pre> |
81 | 81 | </div> |
83 | 83 | <a name="gstreamer-plugins-fdsrc.implemented-interfaces"></a><h2>Implemented Interfaces</h2> |
84 | 84 | <p> |
85 | 85 | GstFdSrc implements |
86 | <a href="../html/gstreamer-GstUriHandler.html#GstURIHandler-struct">GstURIHandler</a>.</p> | |
86 | <a href="/usr/share/gtk-doc/html/gstreamer-1.0/gstreamer-GstUriHandler.html#GstURIHandler-struct">GstURIHandler</a>.</p> | |
87 | 87 | </div> |
88 | 88 | <div class="refsect1"> |
89 | 89 | <a name="gstreamer-plugins-fdsrc.description"></a><h2>Description</h2> |
89 | 89 | <a name="gstreamer-plugins-filesink.object-hierarchy"></a><h2>Object Hierarchy</h2> |
90 | 90 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
91 | 91 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
92 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
93 | <span class="lineart">╰──</span> <a href="../html/GstElement.html#GstElement-struct">GstElement</a> | |
94 | <span class="lineart">╰──</span> <a href="../html/GstBaseSink.html#GstBaseSink-struct">GstBaseSink</a> | |
92 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
93 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct">GstElement</a> | |
94 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0/GstBaseSink.html#GstBaseSink-struct">GstBaseSink</a> | |
95 | 95 | <span class="lineart">╰──</span> GstFileSink |
96 | 96 | </pre> |
97 | 97 | </div> |
99 | 99 | <a name="gstreamer-plugins-filesink.implemented-interfaces"></a><h2>Implemented Interfaces</h2> |
100 | 100 | <p> |
101 | 101 | GstFileSink implements |
102 | <a href="../html/gstreamer-GstUriHandler.html#GstURIHandler-struct">GstURIHandler</a>.</p> | |
102 | <a href="/usr/share/gtk-doc/html/gstreamer-1.0/gstreamer-GstUriHandler.html#GstURIHandler-struct">GstURIHandler</a>.</p> | |
103 | 103 | </div> |
104 | 104 | <div class="refsect1"> |
105 | 105 | <a name="gstreamer-plugins-filesink.description"></a><h2>Description</h2> |
66 | 66 | <a name="gstreamer-plugins-filesrc.object-hierarchy"></a><h2>Object Hierarchy</h2> |
67 | 67 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
68 | 68 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
69 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
70 | <span class="lineart">╰──</span> <a href="../html/GstElement.html#GstElement-struct">GstElement</a> | |
71 | <span class="lineart">╰──</span> <a href="../html/GstBaseSrc.html#GstBaseSrc-struct">GstBaseSrc</a> | |
69 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
70 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct">GstElement</a> | |
71 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0/GstBaseSrc.html#GstBaseSrc-struct">GstBaseSrc</a> | |
72 | 72 | <span class="lineart">╰──</span> GstFileSrc |
73 | 73 | </pre> |
74 | 74 | </div> |
76 | 76 | <a name="gstreamer-plugins-filesrc.implemented-interfaces"></a><h2>Implemented Interfaces</h2> |
77 | 77 | <p> |
78 | 78 | GstFileSrc implements |
79 | <a href="../html/gstreamer-GstUriHandler.html#GstURIHandler-struct">GstURIHandler</a>.</p> | |
79 | <a href="/usr/share/gtk-doc/html/gstreamer-1.0/gstreamer-GstUriHandler.html#GstURIHandler-struct">GstURIHandler</a>.</p> | |
80 | 80 | </div> |
81 | 81 | <div class="refsect1"> |
82 | 82 | <a name="gstreamer-plugins-filesrc.description"></a><h2>Description</h2> |
64 | 64 | <a name="gstreamer-plugins-funnel.object-hierarchy"></a><h2>Object Hierarchy</h2> |
65 | 65 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
66 | 66 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
67 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
68 | <span class="lineart">╰──</span> <a href="../html/GstElement.html#GstElement-struct">GstElement</a> | |
67 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
68 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct">GstElement</a> | |
69 | 69 | <span class="lineart">╰──</span> GstFunnel |
70 | 70 | </pre> |
71 | 71 | </div> |
73 | 73 | <a name="gstreamer-plugins-funnel.description"></a><h2>Description</h2> |
74 | 74 | <p>Takes packets from various input sinks into one output source.</p> |
75 | 75 | <p>funnel always outputs a single, open ended segment from |
76 | 0 with in <a href="../html/gstreamer-GstFormat.html#GST-FORMAT-TIME:CAPS"><code class="literal">GST_FORMAT_TIME</code></a> and outputs the buffers of the | |
76 | 0 with in <a href="/usr/share/gtk-doc/html/gstreamer-1.0/gstreamer-GstFormat.html#GST-FORMAT-TIME:CAPS"><code class="literal">GST_FORMAT_TIME</code></a> and outputs the buffers of the | |
77 | 77 | different sinkpads with timestamps that are set to the |
78 | 78 | running time for that stream. funnel does not synchronize |
79 | 79 | the different input streams but simply forwards all buffers |
104 | 104 | <td class="property_flags">Read / Write</td> |
105 | 105 | </tr> |
106 | 106 | <tr> |
107 | <td class="property_type"><a href="../html/GstBuffer.html#GstBufferFlags"><span class="type">GstBufferFlags</span></a></td> | |
107 | <td class="property_type"><a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstBuffer.html#GstBufferFlags"><span class="type">GstBufferFlags</span></a></td> | |
108 | 108 | <td class="property_name"><a class="link" href="gstreamer-plugins-identity.html#GstIdentity--drop-buffer-flags" title="The “drop-buffer-flags” property">drop-buffer-flags</a></td> |
109 | 109 | <td class="property_flags">Read / Write</td> |
110 | 110 | </tr> |
158 | 158 | <a name="gstreamer-plugins-identity.object-hierarchy"></a><h2>Object Hierarchy</h2> |
159 | 159 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
160 | 160 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
161 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
162 | <span class="lineart">╰──</span> <a href="../html/GstElement.html#GstElement-struct">GstElement</a> | |
163 | <span class="lineart">╰──</span> <a href="../html/GstBaseTransform.html#GstBaseTransform-struct">GstBaseTransform</a> | |
161 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
162 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct">GstElement</a> | |
163 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0/GstBaseTransform.html#GstBaseTransform-struct">GstBaseTransform</a> | |
164 | 164 | <span class="lineart">╰──</span> GstIdentity |
165 | 165 | </pre> |
166 | 166 | </div> |
365 | 365 | <hr> |
366 | 366 | <div class="refsect2"> |
367 | 367 | <a name="GstIdentity--drop-buffer-flags"></a><h3>The <code class="literal">“drop-buffer-flags”</code> property</h3> |
368 | <pre class="programlisting"> “drop-buffer-flags” <a href="../html/GstBuffer.html#GstBufferFlags"><span class="type">GstBufferFlags</span></a></pre> | |
368 | <pre class="programlisting"> “drop-buffer-flags” <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstBuffer.html#GstBufferFlags"><span class="type">GstBufferFlags</span></a></pre> | |
369 | 369 | <p>Drop buffers with the given flags.</p> |
370 | 370 | <p>Flags: Read / Write</p> |
371 | 371 | <p class="since">Since: 1.8</p> |
403 | 403 | <a name="GstIdentity-handoff"></a><h3>The <code class="literal">“handoff”</code> signal</h3> |
404 | 404 | <pre class="programlisting"><span class="returnvalue">void</span> |
405 | 405 | user_function (<a class="link" href="gstreamer-plugins-identity.html#GstIdentity"><span class="type">GstIdentity</span></a> *identity, |
406 | <a href="../html/GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> *buffer, | |
406 | <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> *buffer, | |
407 | 407 | <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre> |
408 | 408 | <p>This signal gets emitted before passing the buffer downstream.</p> |
409 | 409 | <div class="refsect3"> |
43 | 43 | <tbody> |
44 | 44 | <tr> |
45 | 45 | <td class="property_type"> |
46 | <a href="../html/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *</td> | |
46 | <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *</td> | |
47 | 47 | <td class="property_name"><a class="link" href="gstreamer-plugins-input-selector.html#GstInputSelector--active-pad" title="The “active-pad” property">active-pad</a></td> |
48 | 48 | <td class="property_flags">Read / Write</td> |
49 | 49 | </tr> |
93 | 93 | <a name="gstreamer-plugins-input-selector.object-hierarchy"></a><h2>Object Hierarchy</h2> |
94 | 94 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
95 | 95 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
96 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
97 | <span class="lineart">╰──</span> <a href="../html/GstElement.html#GstElement-struct">GstElement</a> | |
96 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
97 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct">GstElement</a> | |
98 | 98 | <span class="lineart">╰──</span> GstInputSelector |
99 | 99 | </pre> |
100 | 100 | </div> |
105 | 105 | properties, which users may find useful, namely:</p> |
106 | 106 | <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> |
107 | 107 | <li class="listitem"><p>"running-time": Running time of stream on pad (<a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>)</p></li> |
108 | <li class="listitem"><p>"tags": The currently active tags on the pad (<a href="../html/GstTagList.html#GstTagList-struct"><span class="type">GstTagList</span></a>, boxed type)</p></li> | |
108 | <li class="listitem"><p>"tags": The currently active tags on the pad (<a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstTagList.html#GstTagList-struct"><span class="type">GstTagList</span></a>, boxed type)</p></li> | |
109 | 109 | <li class="listitem"><p>"active": If the pad is currently active (<a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>)</p></li> |
110 | <li class="listitem"><p>"always-ok" : Make an inactive pads return <a href="../html/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> instead of | |
111 | <a href="../html/GstPad.html#GST-FLOW-NOT-LINKED:CAPS"><span class="type">GST_FLOW_NOT_LINKED</span></a></p></li> | |
110 | <li class="listitem"><p>"always-ok" : Make an inactive pads return <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> instead of | |
111 | <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstPad.html#GST-FLOW-NOT-LINKED:CAPS"><span class="type">GST_FLOW_NOT_LINKED</span></a></p></li> | |
112 | 112 | </ul></div> |
113 | 113 | <div class="refsynopsisdiv"> |
114 | 114 | <h2>Synopsis</h2> |
237 | 237 | <a name="gstreamer-plugins-input-selector.property-details"></a><h2>Property Details</h2> |
238 | 238 | <div class="refsect2"> |
239 | 239 | <a name="GstInputSelector--active-pad"></a><h3>The <code class="literal">“active-pad”</code> property</h3> |
240 | <pre class="programlisting"> “active-pad” <a href="../html/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *</pre> | |
240 | <pre class="programlisting"> “active-pad” <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *</pre> | |
241 | 241 | <p>The currently active sink pad.</p> |
242 | 242 | <p>Flags: Read / Write</p> |
243 | 243 | </div> |
48 | 48 | <a name="gstreamer-plugins-latencytracer.object-hierarchy"></a><h2>Object Hierarchy</h2> |
49 | 49 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
50 | 50 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
51 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
52 | <span class="lineart">╰──</span> <a href="../html/GstTracer.html#GstTracer-struct">GstTracer</a> | |
51 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
52 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstTracer.html#GstTracer-struct">GstTracer</a> | |
53 | 53 | <span class="lineart">╰──</span> GstLatencyTracer |
54 | 54 | </pre> |
55 | 55 | </div> |
56 | 56 | <div class="refsect1"> |
57 | 57 | <a name="gstreamer-plugins-latencytracer.description"></a><h2>Description</h2> |
58 | 58 | <p>A tracing module that determines src-to-sink latencies by injecting custom |
59 | events at sources and process them at sinks.</p> | |
59 | events at sources and process them at sinks. This elements supports tracing | |
60 | the entire pipeline latency and per element latency. By default, only | |
61 | pipeline latency is traced. The 'flags' parameter can be used to enabled | |
62 | element tracing.</p> | |
63 | <p><code class="literal"> | |
64 | GST_TRACERS="latency(flags=pipeline+element)" GST_DEBUG=GST_TRACER:7 ./... | |
65 | </code></p> | |
60 | 66 | </div> |
61 | 67 | <div class="refsect1"> |
62 | 68 | <a name="gstreamer-plugins-latencytracer.functions_details"></a><h2>Functions</h2> |
48 | 48 | <a name="gstreamer-plugins-leakstracer.object-hierarchy"></a><h2>Object Hierarchy</h2> |
49 | 49 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
50 | 50 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
51 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
52 | <span class="lineart">╰──</span> <a href="../html/GstTracer.html#GstTracer-struct">GstTracer</a> | |
51 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
52 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstTracer.html#GstTracer-struct">GstTracer</a> | |
53 | 53 | <span class="lineart">╰──</span> GstLeaksTracer |
54 | 54 | </pre> |
55 | 55 | </div> |
48 | 48 | <a name="gstreamer-plugins-logtracer.object-hierarchy"></a><h2>Object Hierarchy</h2> |
49 | 49 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
50 | 50 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
51 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
52 | <span class="lineart">╰──</span> <a href="../html/GstTracer.html#GstTracer-struct">GstTracer</a> | |
51 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
52 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstTracer.html#GstTracer-struct">GstTracer</a> | |
53 | 53 | <span class="lineart">╰──</span> GstLogTracer |
54 | 54 | </pre> |
55 | 55 | </div> |
159 | 159 | <a name="gstreamer-plugins-multiqueue.object-hierarchy"></a><h2>Object Hierarchy</h2> |
160 | 160 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
161 | 161 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
162 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
163 | <span class="lineart">╰──</span> <a href="../html/GstElement.html#GstElement-struct">GstElement</a> | |
162 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
163 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct">GstElement</a> | |
164 | 164 | <span class="lineart">╰──</span> GstMultiQueue |
165 | 165 | </pre> |
166 | 166 | </div> |
171 | 171 | <p>1) Multiple streamhandling</p> |
172 | 172 | <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>The element handles queueing data on more than one stream at once. To |
173 | 173 | achieve such a feature it has request sink pads (sink<code class="literal">u</code>) and |
174 | 'sometimes' src pads (src<code class="literal">u</code>). When requesting a given sinkpad with <a href="../html/GstElement.html#gst-element-request-pad"><code class="function">gst_element_request_pad()</code></a>, | |
174 | 'sometimes' src pads (src<code class="literal">u</code>). When requesting a given sinkpad with <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#gst-element-request-pad"><code class="function">gst_element_request_pad()</code></a>, | |
175 | 175 | the associated srcpad for that stream will be created. |
176 | 176 | Example: requesting sink1 will generate src1.</p></li></ul></div> |
177 | 177 | <p>2) Non-starvation on multiple stream</p> |
43 | 43 | <tbody> |
44 | 44 | <tr> |
45 | 45 | <td class="property_type"> |
46 | <a href="../html/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *</td> | |
46 | <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *</td> | |
47 | 47 | <td class="property_name"><a class="link" href="gstreamer-plugins-output-selector.html#GstOutputSelector--active-pad" title="The “active-pad” property">active-pad</a></td> |
48 | 48 | <td class="property_flags">Read / Write</td> |
49 | 49 | </tr> |
83 | 83 | <a name="gstreamer-plugins-output-selector.object-hierarchy"></a><h2>Object Hierarchy</h2> |
84 | 84 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
85 | 85 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
86 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
87 | <span class="lineart">╰──</span> <a href="../html/GstElement.html#GstElement-struct">GstElement</a> | |
86 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
87 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct">GstElement</a> | |
88 | 88 | <span class="lineart">╰──</span> GstOutputSelector |
89 | 89 | </pre> |
90 | 90 | </div> |
229 | 229 | <a name="gstreamer-plugins-output-selector.property-details"></a><h2>Property Details</h2> |
230 | 230 | <div class="refsect2"> |
231 | 231 | <a name="GstOutputSelector--active-pad"></a><h3>The <code class="literal">“active-pad”</code> property</h3> |
232 | <pre class="programlisting"> “active-pad” <a href="../html/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *</pre> | |
232 | <pre class="programlisting"> “active-pad” <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *</pre> | |
233 | 233 | <p>Currently active src pad.</p> |
234 | 234 | <p>Flags: Read / Write</p> |
235 | 235 | </div> |
41 | 41 | </tr> |
42 | 42 | <tr> |
43 | 43 | <td><p><span class="term">version</span></p></td> |
44 | <td>1.15.2</td> | |
44 | <td>1.15.90</td> | |
45 | 45 | </tr> |
46 | 46 | <tr> |
47 | 47 | <td><p><span class="term">run-time license</span></p></td> |
49 | 49 | </tr> |
50 | 50 | <tr> |
51 | 51 | <td><p><span class="term">package</span></p></td> |
52 | <td>GStreamer source release</td> | |
52 | <td>GStreamer git</td> | |
53 | 53 | </tr> |
54 | 54 | <tr> |
55 | 55 | <td><p><span class="term">origin</span></p></td> |
40 | 40 | </tr> |
41 | 41 | <tr> |
42 | 42 | <td><p><span class="term">version</span></p></td> |
43 | <td>1.15.2</td> | |
43 | <td>1.15.90</td> | |
44 | 44 | </tr> |
45 | 45 | <tr> |
46 | 46 | <td><p><span class="term">run-time license</span></p></td> |
48 | 48 | </tr> |
49 | 49 | <tr> |
50 | 50 | <td><p><span class="term">package</span></p></td> |
51 | <td>GStreamer source release</td> | |
51 | <td>GStreamer git</td> | |
52 | 52 | </tr> |
53 | 53 | <tr> |
54 | 54 | <td><p><span class="term">origin</span></p></td> |
160 | 160 | <a name="gstreamer-plugins-queue.object-hierarchy"></a><h2>Object Hierarchy</h2> |
161 | 161 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
162 | 162 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
163 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
164 | <span class="lineart">╰──</span> <a href="../html/GstElement.html#GstElement-struct">GstElement</a> | |
163 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
164 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct">GstElement</a> | |
165 | 165 | <span class="lineart">╰──</span> GstQueue |
166 | 166 | </pre> |
167 | 167 | </div> |
179 | 179 | <a name="gstreamer-plugins-queue2.object-hierarchy"></a><h2>Object Hierarchy</h2> |
180 | 180 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
181 | 181 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
182 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
183 | <span class="lineart">╰──</span> <a href="../html/GstElement.html#GstElement-struct">GstElement</a> | |
182 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
183 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct">GstElement</a> | |
184 | 184 | <span class="lineart">╰──</span> GstQueue2 |
185 | 185 | </pre> |
186 | 186 | </div> |
48 | 48 | <a name="gstreamer-plugins-rusagetracer.object-hierarchy"></a><h2>Object Hierarchy</h2> |
49 | 49 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
50 | 50 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
51 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
52 | <span class="lineart">╰──</span> <a href="../html/GstTracer.html#GstTracer-struct">GstTracer</a> | |
51 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
52 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstTracer.html#GstTracer-struct">GstTracer</a> | |
53 | 53 | <span class="lineart">╰──</span> GstRUsageTracer |
54 | 54 | </pre> |
55 | 55 | </div> |
48 | 48 | <a name="gstreamer-plugins-statstracer.object-hierarchy"></a><h2>Object Hierarchy</h2> |
49 | 49 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
50 | 50 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
51 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
52 | <span class="lineart">╰──</span> <a href="../html/GstTracer.html#GstTracer-struct">GstTracer</a> | |
51 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
52 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstTracer.html#GstTracer-struct">GstTracer</a> | |
53 | 53 | <span class="lineart">╰──</span> GstStatsTracer |
54 | 54 | </pre> |
55 | 55 | </div> |
42 | 42 | </colgroup> |
43 | 43 | <tbody><tr> |
44 | 44 | <td class="property_type"> |
45 | <a href="../html/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *</td> | |
45 | <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *</td> | |
46 | 46 | <td class="property_name"><a class="link" href="gstreamer-plugins-streamiddemux.html#GstStreamidDemux--active-pad" title="The “active-pad” property">active-pad</a></td> |
47 | 47 | <td class="property_flags">Read</td> |
48 | 48 | </tr></tbody> |
65 | 65 | <a name="gstreamer-plugins-streamiddemux.object-hierarchy"></a><h2>Object Hierarchy</h2> |
66 | 66 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
67 | 67 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
68 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
69 | <span class="lineart">╰──</span> <a href="../html/GstElement.html#GstElement-struct">GstElement</a> | |
68 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
69 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct">GstElement</a> | |
70 | 70 | <span class="lineart">╰──</span> GstStreamidDemux |
71 | 71 | </pre> |
72 | 72 | </div> |
81 | 81 | <p><a class="link" href="gstreamer-plugins-streamiddemux.html#GstStreamidDemux--active-pad" title="The “active-pad” property"><span class="type">“active-pad”</span></a> provides information about which output pad |
82 | 82 | is activated at the moment.</p> |
83 | 83 | <p><em class="parameter"><code>see_also</code></em> |
84 | : <a class="link" href="gstreamer-plugins-funnel.html#GstFunnel"><span class="type">GstFunnel</span></a>, <a href="../html/GstEvent.html#gst-event-new-stream-start"><span class="type">gst_event_new_stream_start</span></a></p> | |
84 | : <a class="link" href="gstreamer-plugins-funnel.html#GstFunnel"><span class="type">GstFunnel</span></a>, <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstEvent.html#gst-event-new-stream-start"><span class="type">gst_event_new_stream_start</span></a></p> | |
85 | 85 | <div class="refsynopsisdiv"> |
86 | 86 | <h2>Synopsis</h2> |
87 | 87 | <div class="refsect2"> |
179 | 179 | <a name="gstreamer-plugins-streamiddemux.property-details"></a><h2>Property Details</h2> |
180 | 180 | <div class="refsect2"> |
181 | 181 | <a name="GstStreamidDemux--active-pad"></a><h3>The <code class="literal">“active-pad”</code> property</h3> |
182 | <pre class="programlisting"> “active-pad” <a href="../html/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *</pre> | |
182 | <pre class="programlisting"> “active-pad” <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *</pre> | |
183 | 183 | <p>The currently active src pad.</p> |
184 | 184 | <p>Flags: Read</p> |
185 | 185 | </div> |
43 | 43 | <tbody> |
44 | 44 | <tr> |
45 | 45 | <td class="property_type"> |
46 | <a href="../html/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *</td> | |
46 | <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *</td> | |
47 | 47 | <td class="property_name"><a class="link" href="gstreamer-plugins-tee.html#GstTee--alloc-pad" title="The “alloc-pad” property">alloc-pad</a></td> |
48 | 48 | <td class="property_flags">Read / Write</td> |
49 | 49 | </tr> |
104 | 104 | <a name="gstreamer-plugins-tee.object-hierarchy"></a><h2>Object Hierarchy</h2> |
105 | 105 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
106 | 106 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
107 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
108 | <span class="lineart">╰──</span> <a href="../html/GstElement.html#GstElement-struct">GstElement</a> | |
107 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
108 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct">GstElement</a> | |
109 | 109 | <span class="lineart">╰──</span> GstTee |
110 | 110 | </pre> |
111 | 111 | </div> |
266 | 266 | <a name="gstreamer-plugins-tee.property-details"></a><h2>Property Details</h2> |
267 | 267 | <div class="refsect2"> |
268 | 268 | <a name="GstTee--alloc-pad"></a><h3>The <code class="literal">“alloc-pad”</code> property</h3> |
269 | <pre class="programlisting"> “alloc-pad” <a href="../html/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *</pre> | |
269 | <pre class="programlisting"> “alloc-pad” <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *</pre> | |
270 | 270 | <p>The pad ALLOCATION queries will be proxied to (DEPRECATED, has no effect).</p> |
271 | 271 | <p>Flags: Read / Write</p> |
272 | 272 | </div> |
44 | 44 | <tbody> |
45 | 45 | <tr> |
46 | 46 | <td class="property_type"> |
47 | <a href="../html/GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *</td> | |
47 | <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *</td> | |
48 | 48 | <td class="property_name"><a class="link" href="gstreamer-plugins-typefind.html#GstTypeFindElement--caps" title="The “caps” property">caps</a></td> |
49 | 49 | <td class="property_flags">Read</td> |
50 | 50 | </tr> |
51 | 51 | <tr> |
52 | 52 | <td class="property_type"> |
53 | <a href="../html/GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *</td> | |
53 | <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *</td> | |
54 | 54 | <td class="property_name"><a class="link" href="gstreamer-plugins-typefind.html#GstTypeFindElement--force-caps" title="The “force-caps” property">force-caps</a></td> |
55 | 55 | <td class="property_flags">Read / Write</td> |
56 | 56 | </tr> |
94 | 94 | <a name="gstreamer-plugins-typefind.object-hierarchy"></a><h2>Object Hierarchy</h2> |
95 | 95 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
96 | 96 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
97 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
98 | <span class="lineart">╰──</span> <a href="../html/GstElement.html#GstElement-struct">GstElement</a> | |
97 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
98 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct">GstElement</a> | |
99 | 99 | <span class="lineart">╰──</span> GstTypeFindElement |
100 | 100 | </pre> |
101 | 101 | </div> |
108 | 108 | emitted, either from the streaming thread or the application thread |
109 | 109 | (the latter may happen when typefinding is done pull-based from the |
110 | 110 | state change function).</p> |
111 | <p>Plugins can register custom typefinders by using <a href="../html/GstTypeFindFactory.html#GstTypeFindFactory-struct"><span class="type">GstTypeFindFactory</span></a>.</p> | |
111 | <p>Plugins can register custom typefinders by using <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstTypeFindFactory.html#GstTypeFindFactory-struct"><span class="type">GstTypeFindFactory</span></a>.</p> | |
112 | 112 | <div class="refsynopsisdiv"> |
113 | 113 | <h2>Synopsis</h2> |
114 | 114 | <div class="refsect2"> |
206 | 206 | <a name="gstreamer-plugins-typefind.property-details"></a><h2>Property Details</h2> |
207 | 207 | <div class="refsect2"> |
208 | 208 | <a name="GstTypeFindElement--caps"></a><h3>The <code class="literal">“caps”</code> property</h3> |
209 | <pre class="programlisting"> “caps” <a href="../html/GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *</pre> | |
209 | <pre class="programlisting"> “caps” <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *</pre> | |
210 | 210 | <p>detected capabilities in stream.</p> |
211 | 211 | <p>Flags: Read</p> |
212 | 212 | </div> |
213 | 213 | <hr> |
214 | 214 | <div class="refsect2"> |
215 | 215 | <a name="GstTypeFindElement--force-caps"></a><h3>The <code class="literal">“force-caps”</code> property</h3> |
216 | <pre class="programlisting"> “force-caps” <a href="../html/GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *</pre> | |
216 | <pre class="programlisting"> “force-caps” <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *</pre> | |
217 | 217 | <p>force caps without doing a typefind.</p> |
218 | 218 | <p>Flags: Read / Write</p> |
219 | 219 | </div> |
234 | 234 | <pre class="programlisting"><span class="returnvalue">void</span> |
235 | 235 | user_function (<a class="link" href="gstreamer-plugins-typefind.html#GstTypeFindElement"><span class="type">GstTypeFindElement</span></a> *typefind, |
236 | 236 | <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> probability, |
237 | <a href="../html/GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *caps, | |
237 | <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *caps, | |
238 | 238 | <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre> |
239 | 239 | <p>This signal gets emitted when the type and its probability has |
240 | 240 | been found.</p> |
64 | 64 | <a name="gstreamer-plugins-valve.object-hierarchy"></a><h2>Object Hierarchy</h2> |
65 | 65 | <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> |
66 | 66 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> |
67 | <span class="lineart">╰──</span> <a href="../html/GstObject.html#GstObject-struct">GstObject</a> | |
68 | <span class="lineart">╰──</span> <a href="../html/GstElement.html#GstElement-struct">GstElement</a> | |
67 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> | |
68 | <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct">GstElement</a> | |
69 | 69 | <span class="lineart">╰──</span> GstValve |
70 | 70 | </pre> |
71 | 71 | </div> |
74 | 74 | <p>The valve is a simple element that drops buffers when the <a class="link" href="gstreamer-plugins-valve.html#GstValve--drop" title="The “drop” property"><span class="type">“drop”</span></a> |
75 | 75 | property is set to <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> and lets then through otherwise.</p> |
76 | 76 | <p>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="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> |
77 | is ignored. So downstream element can be set to <a href="../html/GstElement.html#GST-STATE-NULL:CAPS"><code class="literal">GST_STATE_NULL</code></a> and removed, | |
77 | is ignored. So downstream element can be set to <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GST-STATE-NULL:CAPS"><code class="literal">GST_STATE_NULL</code></a> and removed, | |
78 | 78 | without using pad blocking.</p> |
79 | 79 | <div class="refsynopsisdiv"> |
80 | 80 | <h2>Synopsis</h2> |
14 | 14 | <div> |
15 | 15 | <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> |
16 | 16 | <div><p class="releaseinfo"> |
17 | for GStreamer Core Plugins 1.0 (1.15.2) | |
17 | for GStreamer Core Plugins 1.0 (1.15.90) | |
18 | 18 | The latest version of this documentation can be found on-line at |
19 | 19 | <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>. |
20 | 20 | </p></div> |
2 | 2 | <description>GStreamer core elements</description> |
3 | 3 | <filename>../../plugins/elements/.libs/libgstcoreelements.so</filename> |
4 | 4 | <basename>libgstcoreelements.so</basename> |
5 | <version>1.15.2</version> | |
5 | <version>1.15.90</version> | |
6 | 6 | <license>LGPL</license> |
7 | 7 | <source>gstreamer</source> |
8 | 8 | <package>GStreamer source release</package> |
2 | 2 | <description>GStreamer core tracers</description> |
3 | 3 | <filename>../../plugins/tracers/.libs/libgstcoretracers.so</filename> |
4 | 4 | <basename>libgstcoretracers.so</basename> |
5 | <version>1.15.2</version> | |
5 | <version>1.15.90</version> | |
6 | 6 | <license>LGPL</license> |
7 | 7 | <source>gstreamer</source> |
8 | 8 | <package>GStreamer source release</package> |
144 | 144 | #define GST_BUFFER_MEM_PTR(b,i) (((GstBufferImpl *)(b))->mem[i]) |
145 | 145 | #define GST_BUFFER_BUFMEM(b) (((GstBufferImpl *)(b))->bufmem) |
146 | 146 | #define GST_BUFFER_META(b) (((GstBufferImpl *)(b))->item) |
147 | #define GST_BUFFER_TAIL_META(b) (((GstBufferImpl *)(b))->tail_item) | |
147 | 148 | |
148 | 149 | typedef struct |
149 | 150 | { |
161 | 162 | /* FIXME, make metadata allocation more efficient by using part of the |
162 | 163 | * GstBufferImpl */ |
163 | 164 | GstMetaItem *item; |
165 | GstMetaItem *tail_item; | |
164 | 166 | } GstBufferImpl; |
165 | 167 | |
166 | 168 | static gint64 meta_seq; /* 0 *//* ATOMIC */ |
2283 | 2285 | goto init_failed; |
2284 | 2286 | |
2285 | 2287 | item->seq_num = gst_atomic_int64_inc (&meta_seq); |
2286 | ||
2287 | /* and add to the list of metadata */ | |
2288 | item->next = GST_BUFFER_META (buffer); | |
2289 | GST_BUFFER_META (buffer) = item; | |
2288 | item->next = NULL; | |
2289 | ||
2290 | if (!GST_BUFFER_META (buffer)) { | |
2291 | GST_BUFFER_META (buffer) = item; | |
2292 | GST_BUFFER_TAIL_META (buffer) = item; | |
2293 | } else { | |
2294 | GST_BUFFER_TAIL_META (buffer)->next = item; | |
2295 | GST_BUFFER_TAIL_META (buffer) = item; | |
2296 | } | |
2290 | 2297 | |
2291 | 2298 | return result; |
2292 | 2299 | |
2326 | 2333 | const GstMetaInfo *info = meta->info; |
2327 | 2334 | |
2328 | 2335 | /* remove from list */ |
2336 | if (GST_BUFFER_TAIL_META (buffer) == walk) { | |
2337 | if (prev != walk) | |
2338 | GST_BUFFER_TAIL_META (buffer) = prev; | |
2339 | else | |
2340 | GST_BUFFER_TAIL_META (buffer) = NULL; | |
2341 | } | |
2342 | ||
2329 | 2343 | if (GST_BUFFER_META (buffer) == walk) |
2330 | 2344 | GST_BUFFER_META (buffer) = walk->next; |
2331 | 2345 | else |
2332 | 2346 | prev->next = walk->next; |
2347 | ||
2333 | 2348 | /* call free_func if any */ |
2334 | 2349 | if (info->free_func) |
2335 | 2350 | info->free_func (m, buffer); |
2464 | 2479 | g_return_val_if_fail (gst_buffer_is_writable (buffer), FALSE); |
2465 | 2480 | g_return_val_if_fail (!GST_META_FLAG_IS_SET (m, GST_META_FLAG_LOCKED), |
2466 | 2481 | FALSE); |
2482 | ||
2483 | if (GST_BUFFER_TAIL_META (buffer) == walk) { | |
2484 | if (prev != walk) | |
2485 | GST_BUFFER_TAIL_META (buffer) = prev; | |
2486 | else | |
2487 | GST_BUFFER_TAIL_META (buffer) = NULL; | |
2488 | } | |
2467 | 2489 | |
2468 | 2490 | /* remove from list */ |
2469 | 2491 | if (GST_BUFFER_META (buffer) == walk) |
171 | 171 | GstControlBinding *self = GST_CONTROL_BINDING (object); |
172 | 172 | |
173 | 173 | /* we did not took a reference */ |
174 | g_object_remove_weak_pointer ((GObject *) self->__object, | |
175 | (gpointer *) & self->__object); | |
174 | if (self->__object) | |
175 | g_object_remove_weak_pointer ((GObject *) self->__object, | |
176 | (gpointer *) & self->__object); | |
176 | 177 | self->__object = NULL; |
177 | 178 | g_weak_ref_clear (&self->ABI.abi.priv->object); |
178 | 179 |
3225 | 3225 | * |
3226 | 3226 | * Retrieves the factory that was used to create this element. |
3227 | 3227 | * |
3228 | * Returns: (transfer none): the #GstElementFactory used for creating this | |
3229 | * element. no refcounting is needed. | |
3228 | * Returns: (transfer none) (nullable): the #GstElementFactory used for creating this | |
3229 | * element or %NULL if element has not been registered (static element). no refcounting is needed. | |
3230 | 3230 | */ |
3231 | 3231 | GstElementFactory * |
3232 | 3232 | gst_element_get_factory (GstElement * element) |
508 | 508 | gst_element_factory_get_metadata (GstElementFactory * factory, |
509 | 509 | const gchar * key) |
510 | 510 | { |
511 | g_return_val_if_fail (GST_IS_ELEMENT_FACTORY (factory), NULL); | |
512 | ||
511 | 513 | return gst_structure_get_string ((GstStructure *) factory->metadata, key); |
512 | 514 | } |
513 | 515 |
1305 | 1305 | GST_QUARK (CUR_TYPE), GST_TYPE_SEEK_TYPE, start_type, |
1306 | 1306 | GST_QUARK (CUR), G_TYPE_INT64, start, |
1307 | 1307 | GST_QUARK (STOP_TYPE), GST_TYPE_SEEK_TYPE, stop_type, |
1308 | GST_QUARK (STOP), G_TYPE_INT64, stop, NULL); | |
1308 | GST_QUARK (STOP), G_TYPE_INT64, stop, | |
1309 | GST_QUARK (TRICKMODE_INTERVAL), GST_TYPE_CLOCK_TIME, 0, NULL); | |
1309 | 1310 | event = gst_event_new_custom (GST_EVENT_SEEK, structure); |
1310 | 1311 | |
1311 | 1312 | return event; |
1366 | 1367 | } |
1367 | 1368 | |
1368 | 1369 | /** |
1370 | * gst_event_set_seek_trickmode_interval: | |
1371 | * | |
1372 | * Sets a trickmode interval on a (writable) seek event. Elements | |
1373 | * that support TRICKMODE_KEY_UNITS seeks SHOULD use this as the minimal | |
1374 | * interval between each frame they may output. | |
1375 | * | |
1376 | * Since: 1.16 | |
1377 | */ | |
1378 | void | |
1379 | gst_event_set_seek_trickmode_interval (GstEvent * event, GstClockTime interval) | |
1380 | { | |
1381 | g_return_if_fail (event != NULL); | |
1382 | g_return_if_fail (GST_EVENT_TYPE (event) == GST_EVENT_SEEK); | |
1383 | g_return_if_fail (gst_event_is_writable (event)); | |
1384 | g_return_if_fail (GST_CLOCK_TIME_IS_VALID (interval)); | |
1385 | ||
1386 | gst_structure_id_set (GST_EVENT_STRUCTURE (event), | |
1387 | GST_QUARK (TRICKMODE_INTERVAL), GST_TYPE_CLOCK_TIME, interval, NULL); | |
1388 | } | |
1389 | ||
1390 | /** | |
1391 | * gst_event_parse_seek_trickmode_interval: | |
1392 | * @interval: (out) | |
1393 | * | |
1394 | * Retrieve the trickmode interval that may have been set on a | |
1395 | * seek event with gst_event_set_seek_trickmode_interval(). | |
1396 | * | |
1397 | * Since: 1.16 | |
1398 | */ | |
1399 | void | |
1400 | gst_event_parse_seek_trickmode_interval (GstEvent * event, | |
1401 | GstClockTime * interval) | |
1402 | { | |
1403 | g_return_if_fail (event != NULL); | |
1404 | g_return_if_fail (interval != NULL); | |
1405 | g_return_if_fail (GST_EVENT_TYPE (event) == GST_EVENT_SEEK); | |
1406 | ||
1407 | gst_structure_id_get (GST_EVENT_STRUCTURE (event), | |
1408 | GST_QUARK (TRICKMODE_INTERVAL), GST_TYPE_CLOCK_TIME, interval, NULL); | |
1409 | } | |
1410 | ||
1411 | /** | |
1369 | 1412 | * gst_event_new_navigation: |
1370 | 1413 | * @structure: (transfer full): description of the event. The event will take |
1371 | 1414 | * ownership of the structure. |
675 | 675 | GstSeekType *start_type, gint64 *start, |
676 | 676 | GstSeekType *stop_type, gint64 *stop); |
677 | 677 | |
678 | GST_API | |
679 | void gst_event_set_seek_trickmode_interval (GstEvent *event, GstClockTime interval); | |
680 | ||
681 | GST_API | |
682 | void gst_event_parse_seek_trickmode_interval (GstEvent *event, GstClockTime *interval); | |
683 | ||
678 | 684 | /* navigation event */ |
679 | 685 | |
680 | 686 | GST_API |
402 | 402 | * @src: (transfer none) (allow-none): The object originating the message. |
403 | 403 | * @error: (transfer none): The GError for this message. |
404 | 404 | * @debug: A debugging string. |
405 | * @details: (transfer full): (allow-none): A GstStructure with details | |
405 | * @details: (transfer full) (allow-none): A GstStructure with details | |
406 | 406 | * |
407 | 407 | * Create a new error message. The message will copy @error and |
408 | 408 | * @debug. This message is posted by element when a fatal event |
496 | 496 | * @src: (transfer none) (allow-none): The object originating the message. |
497 | 497 | * @error: (transfer none): The GError for this message. |
498 | 498 | * @debug: A debugging string. |
499 | * @details: (transfer full): (allow-none): A GstStructure with details | |
499 | * @details: (transfer full) (allow-none): A GstStructure with details | |
500 | 500 | * |
501 | 501 | * Create a new warning message. The message will make copies of @error and |
502 | 502 | * @debug. |
586 | 586 | * @src: (transfer none) (allow-none): The object originating the message. |
587 | 587 | * @error: (transfer none): The GError for this message. |
588 | 588 | * @debug: A debugging string. |
589 | * @details: (transfer full): (allow-none): A GstStructure with details | |
589 | * @details: (transfer full) (allow-none): A GstStructure with details | |
590 | 590 | * |
591 | 591 | * Create a new info message. The message will make copies of @error and |
592 | 592 | * @debug. |
75 | 75 | "GstMessageStreamsSelected", "GstMessageRedirect", "redirect-entry-locations", |
76 | 76 | "redirect-entry-taglists", "redirect-entry-structures", |
77 | 77 | "GstEventStreamGroupDone", "GstQueryBitrate", "nominal-bitrate", |
78 | "GstMessageDeviceChanged", "device-changed" | |
78 | "GstMessageDeviceChanged", "device-changed", "trickmode-interval", | |
79 | 79 | }; |
80 | 80 | |
81 | 81 | GQuark _priv_gst_quark_table[GST_QUARK_MAX]; |
220 | 220 | GST_QUARK_NOMINAL_BITRATE = 190, |
221 | 221 | GST_QUARK_MESSAGE_DEVICE_CHANGED = 191, |
222 | 222 | GST_QUARK_DEVICE_CHANGED = 192, |
223 | GST_QUARK_MAX = 193 | |
223 | GST_QUARK_TRICKMODE_INTERVAL = 193, | |
224 | GST_QUARK_MAX = 194 | |
224 | 225 | } GstQuarkId; |
225 | 226 | |
226 | 227 | extern GQuark _priv_gst_quark_table[GST_QUARK_MAX]; |
34 | 34 | |
35 | 35 | #include "gstinfo.h" |
36 | 36 | #include "gsttaskpool.h" |
37 | #include "gsterror.h" | |
37 | 38 | |
38 | 39 | GST_DEBUG_CATEGORY_STATIC (taskpool_debug); |
39 | 40 | #define GST_CAT_DEFAULT (taskpool_debug) |
72 | 73 | default_prepare (GstTaskPool * pool, GError ** error) |
73 | 74 | { |
74 | 75 | GST_OBJECT_LOCK (pool); |
75 | pool->pool = g_thread_pool_new ((GFunc) default_func, pool, -1, FALSE, NULL); | |
76 | pool->pool = g_thread_pool_new ((GFunc) default_func, pool, -1, FALSE, error); | |
76 | 77 | GST_OBJECT_UNLOCK (pool); |
77 | 78 | } |
78 | 79 | |
79 | 80 | static void |
80 | 81 | default_cleanup (GstTaskPool * pool) |
81 | 82 | { |
83 | GThreadPool *pool_; | |
84 | ||
82 | 85 | GST_OBJECT_LOCK (pool); |
83 | if (pool->pool) { | |
86 | pool_ = pool->pool; | |
87 | pool->pool = NULL; | |
88 | GST_OBJECT_UNLOCK (pool); | |
89 | ||
90 | if (pool_) { | |
84 | 91 | /* Shut down all the threads, we still process the ones scheduled |
85 | 92 | * because the unref happens in the thread function. |
86 | 93 | * Also wait for currently running ones to finish. */ |
87 | g_thread_pool_free (pool->pool, FALSE, TRUE); | |
88 | pool->pool = NULL; | |
94 | g_thread_pool_free (pool_, FALSE, TRUE); | |
89 | 95 | } |
90 | GST_OBJECT_UNLOCK (pool); | |
91 | 96 | } |
92 | 97 | |
93 | 98 | static gpointer |
105 | 110 | g_thread_pool_push (pool->pool, tdata, error); |
106 | 111 | else { |
107 | 112 | g_slice_free (TaskData, tdata); |
113 | g_set_error_literal (error, GST_CORE_ERROR, GST_CORE_ERROR_FAILED, | |
114 | "No thread pool"); | |
115 | ||
108 | 116 | } |
109 | 117 | GST_OBJECT_UNLOCK (pool); |
110 | 118 |
2246 | 2246 | * |
2247 | 2247 | * Extract the path string from the URI object. |
2248 | 2248 | * |
2249 | * Returns: (transfer full): (nullable): The path from the URI. Once finished | |
2250 | * with the string should be g_free()'d. | |
2249 | * Returns: (transfer full) (nullable): The path from the URI. Once finished | |
2250 | * with the string should be g_free()'d. | |
2251 | 2251 | * |
2252 | 2252 | * Since: 1.6 |
2253 | 2253 | */ |
39 | 39 | |
40 | 40 | <release> |
41 | 41 | <Version> |
42 | <revision>1.15.90</revision> | |
43 | <branch>master</branch> | |
44 | <name></name> | |
45 | <created>2019-04-11</created> | |
46 | <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.15.90.tar.xz" /> | |
47 | </Version> | |
48 | </release> | |
49 | ||
50 | <release> | |
51 | <Version> | |
42 | 52 | <revision>1.15.2</revision> |
43 | 53 | <branch>master</branch> |
44 | 54 | <name></name> |
129 | 129 | |
130 | 130 | static GstClockTime gst_aggregator_get_latency_unlocked (GstAggregator * self); |
131 | 131 | |
132 | static void gst_aggregator_pad_buffer_consumed (GstAggregatorPad * pad); | |
132 | static void gst_aggregator_pad_buffer_consumed (GstAggregatorPad * pad, | |
133 | GstBuffer * buffer); | |
133 | 134 | |
134 | 135 | GST_DEBUG_CATEGORY_STATIC (aggregator_debug); |
135 | 136 | #define GST_CAT_DEFAULT aggregator_debug |
260 | 261 | * the chain function is also happening. |
261 | 262 | */ |
262 | 263 | GMutex flush_lock; |
264 | ||
265 | /* properties */ | |
266 | gboolean emit_signals; | |
263 | 267 | }; |
264 | 268 | |
265 | 269 | /* Must be called with PAD_LOCK held */ |
816 | 820 | if (GST_IS_BUFFER (item->data) |
817 | 821 | && klass->skip_buffer (aggpad, agg, item->data)) { |
818 | 822 | GST_LOG_OBJECT (aggpad, "Skipping %" GST_PTR_FORMAT, item->data); |
819 | gst_aggregator_pad_buffer_consumed (aggpad); | |
823 | gst_aggregator_pad_buffer_consumed (aggpad, GST_BUFFER (item->data)); | |
820 | 824 | gst_buffer_unref (item->data); |
821 | 825 | g_queue_delete_link (&aggpad->priv->data, item); |
822 | 826 | } else { |
1470 | 1474 | GstBuffer *gapbuf; |
1471 | 1475 | |
1472 | 1476 | gst_event_parse_gap (event, &pts, &duration); |
1473 | gapbuf = gst_buffer_new (); | |
1474 | 1477 | |
1475 | 1478 | if (GST_CLOCK_TIME_IS_VALID (duration)) |
1476 | 1479 | endpts = pts + duration; |
1492 | 1495 | else |
1493 | 1496 | duration = GST_CLOCK_TIME_NONE; |
1494 | 1497 | |
1498 | gapbuf = gst_buffer_new (); | |
1495 | 1499 | GST_BUFFER_PTS (gapbuf) = pts; |
1496 | 1500 | GST_BUFFER_DURATION (gapbuf) = duration; |
1497 | 1501 | GST_BUFFER_FLAG_SET (gapbuf, GST_BUFFER_FLAG_GAP); |
1498 | 1502 | GST_BUFFER_FLAG_SET (gapbuf, GST_BUFFER_FLAG_DROPPABLE); |
1499 | 1503 | |
1500 | 1504 | /* Remove GAP event so we can replace it with the buffer */ |
1505 | PAD_LOCK (aggpad); | |
1501 | 1506 | if (g_queue_peek_tail (&aggpad->priv->data) == event) |
1502 | 1507 | gst_event_unref (g_queue_pop_tail (&aggpad->priv->data)); |
1508 | PAD_UNLOCK (aggpad); | |
1503 | 1509 | |
1504 | 1510 | if (gst_aggregator_pad_chain_internal (self, aggpad, gapbuf, FALSE) != |
1505 | 1511 | GST_FLOW_OK) { |
2818 | 2824 | ************************************/ |
2819 | 2825 | G_DEFINE_TYPE_WITH_PRIVATE (GstAggregatorPad, gst_aggregator_pad, GST_TYPE_PAD); |
2820 | 2826 | |
2827 | #define DEFAULT_PAD_EMIT_SIGNALS FALSE | |
2828 | ||
2829 | enum | |
2830 | { | |
2831 | PAD_PROP_0, | |
2832 | PAD_PROP_EMIT_SIGNALS, | |
2833 | }; | |
2834 | ||
2835 | enum | |
2836 | { | |
2837 | PAD_SIGNAL_BUFFER_CONSUMED, | |
2838 | PAD_LAST_SIGNAL, | |
2839 | }; | |
2840 | ||
2841 | static guint gst_aggregator_pad_signals[PAD_LAST_SIGNAL] = { 0 }; | |
2842 | ||
2821 | 2843 | static void |
2822 | 2844 | gst_aggregator_pad_constructed (GObject * object) |
2823 | 2845 | { |
2858 | 2880 | } |
2859 | 2881 | |
2860 | 2882 | static void |
2883 | gst_aggregator_pad_set_property (GObject * object, guint prop_id, | |
2884 | const GValue * value, GParamSpec * pspec) | |
2885 | { | |
2886 | GstAggregatorPad *pad = GST_AGGREGATOR_PAD (object); | |
2887 | ||
2888 | switch (prop_id) { | |
2889 | case PAD_PROP_EMIT_SIGNALS: | |
2890 | pad->priv->emit_signals = g_value_get_boolean (value); | |
2891 | break; | |
2892 | default: | |
2893 | G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | |
2894 | break; | |
2895 | } | |
2896 | } | |
2897 | ||
2898 | static void | |
2899 | gst_aggregator_pad_get_property (GObject * object, guint prop_id, | |
2900 | GValue * value, GParamSpec * pspec) | |
2901 | { | |
2902 | GstAggregatorPad *pad = GST_AGGREGATOR_PAD (object); | |
2903 | ||
2904 | switch (prop_id) { | |
2905 | case PAD_PROP_EMIT_SIGNALS: | |
2906 | g_value_set_boolean (value, pad->priv->emit_signals); | |
2907 | break; | |
2908 | default: | |
2909 | G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | |
2910 | break; | |
2911 | } | |
2912 | } | |
2913 | ||
2914 | static void | |
2861 | 2915 | gst_aggregator_pad_class_init (GstAggregatorPadClass * klass) |
2862 | 2916 | { |
2863 | 2917 | GObjectClass *gobject_class = (GObjectClass *) klass; |
2865 | 2919 | gobject_class->constructed = gst_aggregator_pad_constructed; |
2866 | 2920 | gobject_class->finalize = gst_aggregator_pad_finalize; |
2867 | 2921 | gobject_class->dispose = gst_aggregator_pad_dispose; |
2922 | gobject_class->set_property = gst_aggregator_pad_set_property; | |
2923 | gobject_class->get_property = gst_aggregator_pad_get_property; | |
2924 | ||
2925 | /** | |
2926 | * GstAggregatorPad::buffer-consumed: | |
2927 | * | |
2928 | * Signals that a buffer was consumed. As aggregator pads store buffers | |
2929 | * in an internal queue, there is no direct match between input and output | |
2930 | * buffers at any given time. This signal can be useful to forward metas | |
2931 | * such as #GstVideoTimeCodeMeta or #GstVideoCaptionMeta at the right time. | |
2932 | * | |
2933 | * Since: 1.16 | |
2934 | */ | |
2935 | gst_aggregator_pad_signals[PAD_SIGNAL_BUFFER_CONSUMED] = | |
2936 | g_signal_new ("buffer-consumed", G_TYPE_FROM_CLASS (klass), | |
2937 | G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_generic, | |
2938 | G_TYPE_NONE, 1, GST_TYPE_BUFFER); | |
2939 | ||
2940 | /** | |
2941 | * GstAggregatorPad:emit-signals: | |
2942 | * | |
2943 | * Enables the emission of signals such as #GstAggregatorPad::buffer-consumed | |
2944 | * | |
2945 | * Since: 1.16 | |
2946 | */ | |
2947 | g_object_class_install_property (gobject_class, PAD_PROP_EMIT_SIGNALS, | |
2948 | g_param_spec_boolean ("emit-signals", "Emit signals", | |
2949 | "Send signals to signal data consumption", DEFAULT_PAD_EMIT_SIGNALS, | |
2950 | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); | |
2868 | 2951 | } |
2869 | 2952 | |
2870 | 2953 | static void |
2880 | 2963 | |
2881 | 2964 | gst_aggregator_pad_reset_unlocked (pad); |
2882 | 2965 | pad->priv->negotiated = FALSE; |
2966 | pad->priv->emit_signals = DEFAULT_PAD_EMIT_SIGNALS; | |
2883 | 2967 | } |
2884 | 2968 | |
2885 | 2969 | /* Must be called with the PAD_LOCK held */ |
2886 | 2970 | static void |
2887 | gst_aggregator_pad_buffer_consumed (GstAggregatorPad * pad) | |
2971 | gst_aggregator_pad_buffer_consumed (GstAggregatorPad * pad, GstBuffer * buffer) | |
2888 | 2972 | { |
2889 | 2973 | pad->priv->num_buffers--; |
2890 | GST_TRACE_OBJECT (pad, "Consuming buffer"); | |
2974 | GST_TRACE_OBJECT (pad, "Consuming buffer %" GST_PTR_FORMAT, buffer); | |
2975 | if (buffer && pad->priv->emit_signals) { | |
2976 | g_signal_emit (pad, gst_aggregator_pad_signals[PAD_SIGNAL_BUFFER_CONSUMED], | |
2977 | 0, buffer); | |
2978 | } | |
2891 | 2979 | PAD_BROADCAST_EVENT (pad); |
2892 | 2980 | } |
2893 | 2981 | |
2924 | 3012 | buffer = aggclass->clip (self, pad, buffer); |
2925 | 3013 | |
2926 | 3014 | if (buffer == NULL) { |
2927 | gst_aggregator_pad_buffer_consumed (pad); | |
3015 | gst_aggregator_pad_buffer_consumed (pad, buffer); | |
2928 | 3016 | GST_TRACE_OBJECT (pad, "Clipping consumed the buffer"); |
2929 | 3017 | } |
2930 | 3018 | } |
2963 | 3051 | |
2964 | 3052 | if (buffer) { |
2965 | 3053 | pad->priv->clipped_buffer = NULL; |
2966 | gst_aggregator_pad_buffer_consumed (pad); | |
3054 | gst_aggregator_pad_buffer_consumed (pad, buffer); | |
2967 | 3055 | GST_DEBUG_OBJECT (pad, "Consumed: %" GST_PTR_FORMAT, buffer); |
2968 | 3056 | } |
2969 | 3057 |
641 | 641 | parse->priv->upstream_tags = NULL; |
642 | 642 | parse->priv->parser_tags = NULL; |
643 | 643 | parse->priv->parser_tags_merge_mode = GST_TAG_MERGE_APPEND; |
644 | parse->priv->disable_passthrough = DEFAULT_DISABLE_PASSTHROUGH; | |
644 | 645 | } |
645 | 646 | |
646 | 647 | static void |
832 | 833 | parse->priv->next_pts = GST_CLOCK_TIME_NONE; |
833 | 834 | parse->priv->next_dts = 0; |
834 | 835 | parse->priv->syncable = TRUE; |
835 | parse->priv->disable_passthrough = DEFAULT_DISABLE_PASSTHROUGH; | |
836 | 836 | parse->priv->passthrough = FALSE; |
837 | 837 | parse->priv->pts_interpolate = TRUE; |
838 | 838 | parse->priv->infer_ts = TRUE; |
655 | 655 | * that can't return an authoritative size and only know that they're EOS |
656 | 656 | * when trying to read more should set this to %FALSE. |
657 | 657 | * |
658 | * When @src operates in %GST_FORMAT_TIME, #GstBaseSrc will send an EOS | |
659 | * when a buffer outside of the currently configured segment is pushed if | |
660 | * @automatic_eos is %TRUE. Since 1.16, if @automatic_eos is %FALSE an | |
661 | * EOS will be pushed only when the #GstBaseSrc.create implementation | |
662 | * returns %GST_FLOW_EOS. | |
663 | * | |
658 | 664 | * Since: 1.4 |
659 | 665 | */ |
660 | 666 | void |
2930 | 2936 | /* positive rate, check if we reached the stop */ |
2931 | 2937 | if (src->segment.stop != -1) { |
2932 | 2938 | if (position >= src->segment.stop) { |
2933 | eos = TRUE; | |
2939 | if (g_atomic_int_get (&src->priv->automatic_eos)) | |
2940 | eos = TRUE; | |
2934 | 2941 | position = src->segment.stop; |
2935 | 2942 | } |
2936 | 2943 | } |
2938 | 2945 | /* negative rate, check if we reached the start. start is always set to |
2939 | 2946 | * something different from -1 */ |
2940 | 2947 | if (position <= src->segment.start) { |
2941 | eos = TRUE; | |
2948 | if (g_atomic_int_get (&src->priv->automatic_eos)) | |
2949 | eos = TRUE; | |
2942 | 2950 | position = src->segment.start; |
2943 | 2951 | } |
2944 | 2952 | /* when going reverse, all buffers are DISCONT */ |
37 | 37 | */ |
38 | 38 | |
39 | 39 | /** |
40 | * gst_bit_writer_new: | |
40 | * gst_bit_writer_new: (skip) | |
41 | 41 | * |
42 | 42 | * Creates a new, empty #GstBitWriter instance. |
43 | 43 | * |
56 | 56 | } |
57 | 57 | |
58 | 58 | /** |
59 | * gst_bit_writer_new_size: | |
59 | * gst_bit_writer_new_with_size: (skip) | |
60 | 60 | * @size: Initial size of data in bytes |
61 | 61 | * @fixed: If %TRUE the data can't be reallocated |
62 | 62 | * |
76 | 76 | } |
77 | 77 | |
78 | 78 | /** |
79 | * gst_bit_writer_new_with_data: | |
79 | * gst_bit_writer_new_with_data: (skip) | |
80 | 80 | * @data: Memory area for writing |
81 | 81 | * @size: Size of @data in bytes |
82 | 82 | * @initialized: if %TRUE the complete data can be read from the beginning |
100 | 100 | } |
101 | 101 | |
102 | 102 | /** |
103 | * gst_bit_writer_init: | |
103 | * gst_bit_writer_init: (skip) | |
104 | 104 | * @bitwriter: #GstBitWriter instance |
105 | 105 | * |
106 | 106 | * Initializes @bitwriter to an empty instance. |
116 | 116 | } |
117 | 117 | |
118 | 118 | /** |
119 | * gst_bit_writer_init_with_size: | |
119 | * gst_bit_writer_init_with_size: (skip) | |
120 | 120 | * @bitwriter: #GstBitWriter instance |
121 | 121 | * @size: the size on bytes to allocate for data |
122 | 122 | * @fixed: If %TRUE the data can't be reallocated |
138 | 138 | } |
139 | 139 | |
140 | 140 | /** |
141 | * gst_bit_writer_init_with_data: | |
141 | * gst_bit_writer_init_with_data: (skip) | |
142 | 142 | * @bitwriter: #GstBitWriter instance |
143 | 143 | * @data: (array length=size) (transfer none): Memory area for writing |
144 | 144 | * @size: Size of @data in bytes |
124 | 124 | |
125 | 125 | |
126 | 126 | /** |
127 | * gst_check_add_log_filter: | |
127 | * gst_check_add_log_filter: (skip) | |
128 | 128 | * @log_domain: the log domain of the message |
129 | 129 | * @log_level: the log level of the message |
130 | 130 | * @regex: (transfer full): a #GRegex to match the message |
1045 | 1045 | } |
1046 | 1046 | } |
1047 | 1047 | |
1048 | /** | |
1049 | * gst_check_run_suite: (skip) | |
1050 | * @suite: the check test suite | |
1051 | * @name: name | |
1052 | * @fname: file name | |
1053 | * | |
1054 | * Returns: number of failed tests | |
1055 | */ | |
1048 | 1056 | gint |
1049 | 1057 | gst_check_run_suite (Suite * suite, const gchar * name, const gchar * fname) |
1050 | 1058 | { |
30 | 30 | |
31 | 31 | PROGRAM=libtool |
32 | 32 | PACKAGE=libtool |
33 | VERSION="2.4.6 Debian-2.4.6-9" | |
33 | VERSION="2.4.6 Debian-2.4.6-10" | |
34 | 34 | package_revision=2.4.6 |
35 | 35 | |
36 | 36 | |
2140 | 2140 | compiler: $LTCC |
2141 | 2141 | compiler flags: $LTCFLAGS |
2142 | 2142 | linker: $LD (gnu? $with_gnu_ld) |
2143 | version: $progname $scriptversion Debian-2.4.6-9 | |
2143 | version: $progname $scriptversion Debian-2.4.6-10 | |
2144 | 2144 | automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` |
2145 | 2145 | autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` |
2146 | 2146 |
4703 | 4703 | _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' |
4704 | 4704 | _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' |
4705 | 4705 | ;; |
4706 | # flang / f18. f95 an alias for gfortran or flang on Debian | |
4707 | flang* | f18* | f95*) | |
4708 | _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' | |
4709 | _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' | |
4710 | _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' | |
4711 | ;; | |
4706 | 4712 | # icc used to be incompatible with GCC. |
4707 | 4713 | # ICC 10 doesn't accept -KPIC any more. |
4708 | 4714 | icc* | ifort*) |
0 | 0 | project('gstreamer', 'c', |
1 | version : '1.15.2', | |
1 | version : '1.15.90', | |
2 | 2 | meson_version : '>= 0.47', |
3 | 3 | default_options : [ 'warning_level=1', |
4 | 4 | 'buildtype=debugoptimized' ]) |
396 | 396 | '-Waddress', |
397 | 397 | '-Waggregate-return', |
398 | 398 | '-Wno-multichar', |
399 | '-Wnested-externs', | |
400 | 399 | '-Wdeclaration-after-statement', |
401 | 400 | '-Wvla', |
402 | 401 | '-Wpointer-arith', |
458 | 457 | 'g_setenv("GST_REGISTRY_1.0", "/no/way/this/exists.reg", TRUE);' + \ |
459 | 458 | 'g_setenv("GST_PLUGIN_PATH_1_0", "", TRUE);' + \ |
460 | 459 | 'g_setenv("GST_PLUGIN_SYSTEM_PATH_1_0", "", TRUE);' + \ |
461 | 'gst_init(NULL,NULL);' ] | |
460 | 'gst_init(NULL,NULL);', '--quiet'] | |
462 | 461 | |
463 | 462 | gst_c_args = ['-DHAVE_CONFIG_H'] |
464 | 463 |
22 | 22 | * @short_description: log processing latency stats |
23 | 23 | * |
24 | 24 | * A tracing module that determines src-to-sink latencies by injecting custom |
25 | * events at sources and process them at sinks. | |
25 | * events at sources and process them at sinks. This elements supports tracing | |
26 | * the entire pipeline latency and per element latency. By default, only | |
27 | * pipeline latency is traced. The 'flags' parameter can be used to enabled | |
28 | * element tracing. | |
29 | * | |
30 | * ``` | |
31 | * GST_TRACERS="latency(flags=pipeline+element)" GST_DEBUG=GST_TRACER:7 ./... | |
32 | * ``` | |
26 | 33 | */ |
27 | 34 | /* TODO(ensonic): if there are two sources feeding into a mixer/muxer and later |
28 | 35 | * we fan-out with tee and have two sinks, each sink would get all two events, |
47 | 54 | G_DEFINE_TYPE_WITH_CODE (GstLatencyTracer, gst_latency_tracer, GST_TYPE_TRACER, |
48 | 55 | _do_init); |
49 | 56 | |
57 | static void latency_query_stack_destroy (gpointer data); | |
58 | ||
50 | 59 | static GQuark latency_probe_id; |
60 | static GQuark sub_latency_probe_id; | |
51 | 61 | static GQuark latency_probe_pad; |
62 | static GQuark latency_probe_element; | |
63 | static GQuark latency_probe_element_id; | |
52 | 64 | static GQuark latency_probe_ts; |
65 | static GQuark drop_sub_latency_quark; | |
53 | 66 | |
54 | 67 | static GstTracerRecord *tr_latency; |
68 | static GstTracerRecord *tr_element_latency; | |
69 | static GstTracerRecord *tr_element_reported_latency; | |
70 | ||
71 | /* The private stack for each thread */ | |
72 | static GPrivate latency_query_stack = | |
73 | G_PRIVATE_INIT (latency_query_stack_destroy); | |
74 | ||
75 | struct LatencyQueryTableValue | |
76 | { | |
77 | GstElement *peer_element; | |
78 | guint64 min; | |
79 | guint64 max; | |
80 | }; | |
55 | 81 | |
56 | 82 | /* data helpers */ |
57 | 83 | |
88 | 114 | return GST_ELEMENT_CAST (parent); |
89 | 115 | } |
90 | 116 | |
117 | static void | |
118 | latency_query_table_value_destroy (gpointer data) | |
119 | { | |
120 | struct LatencyQueryTableValue *v = data; | |
121 | ||
122 | /* Unref the element */ | |
123 | if (v->peer_element) { | |
124 | gst_object_unref (v->peer_element); | |
125 | v->peer_element = NULL; | |
126 | } | |
127 | ||
128 | /* Destroy the structure */ | |
129 | g_free (v); | |
130 | } | |
131 | ||
132 | static void | |
133 | latency_query_stack_destroy (gpointer data) | |
134 | { | |
135 | GQueue *queue = data; | |
136 | g_queue_free_full (queue, latency_query_table_value_destroy); | |
137 | } | |
138 | ||
139 | static GQueue * | |
140 | local_latency_query_stack_get (void) | |
141 | { | |
142 | /* Make sure the stack exists */ | |
143 | GQueue *stack = g_private_get (&latency_query_stack); | |
144 | if (!stack) { | |
145 | g_private_set (&latency_query_stack, g_queue_new ()); | |
146 | stack = g_private_get (&latency_query_stack); | |
147 | } | |
148 | ||
149 | g_assert (stack); | |
150 | return stack; | |
151 | } | |
152 | ||
153 | static struct LatencyQueryTableValue * | |
154 | local_latency_query_stack_pop (void) | |
155 | { | |
156 | GQueue *stack = local_latency_query_stack_get (); | |
157 | return g_queue_pop_tail (stack); | |
158 | } | |
159 | ||
160 | static void | |
161 | local_latency_query_stack_push (struct LatencyQueryTableValue *value) | |
162 | { | |
163 | GQueue *stack = local_latency_query_stack_get (); | |
164 | g_queue_push_tail (stack, value); | |
165 | } | |
166 | ||
91 | 167 | /* hooks */ |
92 | 168 | |
93 | 169 | static void |
94 | log_latency (const GstStructure * data, GstPad * sink_pad, guint64 sink_ts) | |
95 | { | |
96 | GstPad *src_pad; | |
170 | log_latency (const GstStructure * data, GstElement * sink_parent, | |
171 | GstPad * sink_pad, guint64 sink_ts) | |
172 | { | |
97 | 173 | guint64 src_ts; |
98 | gchar *src, *sink; | |
99 | ||
100 | gst_structure_id_get (data, | |
101 | latency_probe_pad, GST_TYPE_PAD, &src_pad, | |
102 | latency_probe_ts, G_TYPE_UINT64, &src_ts, NULL); | |
103 | ||
104 | src = g_strdup_printf ("%s_%s", GST_DEBUG_PAD_NAME (src_pad)); | |
105 | sink = g_strdup_printf ("%s_%s", GST_DEBUG_PAD_NAME (sink_pad)); | |
106 | ||
107 | gst_tracer_record_log (tr_latency, src, sink, | |
174 | const char *src, *element_src, *id_element_src; | |
175 | const GValue *value; | |
176 | gchar *sink, *element_sink, *id_element_sink; | |
177 | ||
178 | value = gst_structure_id_get_value (data, latency_probe_ts); | |
179 | src_ts = g_value_get_uint64 (value); | |
180 | ||
181 | value = gst_structure_id_get_value (data, latency_probe_pad); | |
182 | src = g_value_get_string (value); | |
183 | ||
184 | value = gst_structure_id_get_value (data, latency_probe_element); | |
185 | element_src = g_value_get_string (value); | |
186 | ||
187 | value = gst_structure_id_get_value (data, latency_probe_element_id); | |
188 | id_element_src = g_value_get_string (value); | |
189 | ||
190 | id_element_sink = g_strdup_printf ("%p", sink_parent); | |
191 | element_sink = gst_element_get_name (sink_parent); | |
192 | sink = gst_pad_get_name (sink_pad); | |
193 | gst_tracer_record_log (tr_latency, id_element_src, element_src, src, | |
194 | id_element_sink, element_sink, sink, GST_CLOCK_DIFF (src_ts, sink_ts), | |
195 | sink_ts); | |
196 | g_free (sink); | |
197 | g_free (element_sink); | |
198 | g_free (id_element_sink); | |
199 | } | |
200 | ||
201 | static void | |
202 | log_element_latency (const GstStructure * data, GstElement * parent, | |
203 | GstPad * pad, guint64 sink_ts) | |
204 | { | |
205 | guint64 src_ts; | |
206 | gchar *pad_name, *element_name, *element_id; | |
207 | const GValue *value; | |
208 | ||
209 | element_id = g_strdup_printf ("%p", parent); | |
210 | element_name = gst_element_get_name (parent); | |
211 | pad_name = gst_pad_get_name (pad); | |
212 | ||
213 | /* TODO filtering */ | |
214 | ||
215 | value = gst_structure_id_get_value (data, latency_probe_ts); | |
216 | src_ts = g_value_get_uint64 (value); | |
217 | ||
218 | gst_tracer_record_log (tr_element_latency, element_id, element_name, pad_name, | |
108 | 219 | GST_CLOCK_DIFF (src_ts, sink_ts), sink_ts); |
109 | g_free (src); | |
110 | g_free (sink); | |
111 | } | |
112 | ||
113 | static void | |
114 | send_latency_probe (GstElement * parent, GstPad * pad, guint64 ts) | |
115 | { | |
220 | ||
221 | g_free (pad_name); | |
222 | g_free (element_name); | |
223 | g_free (element_id); | |
224 | } | |
225 | ||
226 | static void | |
227 | send_latency_probe (GstLatencyTracer * self, GstElement * parent, GstPad * pad, | |
228 | guint64 ts) | |
229 | { | |
230 | GstPad *peer_pad = GST_PAD_PEER (pad); | |
231 | GstElement *peer_parent = get_real_pad_parent (peer_pad); | |
232 | ||
116 | 233 | /* allow for non-parented pads to send latency probes as used in e.g. |
117 | 234 | * rtspsrc for TCP connections */ |
118 | if (!parent || (!GST_IS_BIN (parent) && | |
119 | GST_OBJECT_FLAG_IS_SET (parent, GST_ELEMENT_FLAG_SOURCE))) { | |
120 | GstEvent *latency_probe = gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM, | |
121 | gst_structure_new_id (latency_probe_id, | |
122 | latency_probe_pad, GST_TYPE_PAD, pad, | |
123 | latency_probe_ts, G_TYPE_UINT64, ts, | |
124 | NULL)); | |
125 | gst_pad_push_event (pad, latency_probe); | |
235 | if (peer_pad && (!parent || (!GST_IS_BIN (parent)))) { | |
236 | gchar *pad_name, *element_name, *element_id; | |
237 | GstEvent *latency_probe; | |
238 | ||
239 | if (self->flags & GST_LATENCY_TRACER_FLAG_PIPELINE && | |
240 | GST_OBJECT_FLAG_IS_SET (parent, GST_ELEMENT_FLAG_SOURCE)) { | |
241 | element_id = g_strdup_printf ("%p", parent); | |
242 | element_name = gst_element_get_name (parent); | |
243 | pad_name = gst_pad_get_name (pad); | |
244 | ||
245 | GST_DEBUG ("%s: Sending latency event", pad_name); | |
246 | ||
247 | latency_probe = gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM, | |
248 | gst_structure_new_id (latency_probe_id, | |
249 | latency_probe_element_id, G_TYPE_STRING, element_id, | |
250 | latency_probe_element, G_TYPE_STRING, element_name, | |
251 | latency_probe_pad, G_TYPE_STRING, pad_name, | |
252 | latency_probe_ts, G_TYPE_UINT64, ts, NULL)); | |
253 | g_free (pad_name); | |
254 | g_free (element_name); | |
255 | g_free (element_id); | |
256 | gst_pad_push_event (pad, latency_probe); | |
257 | } | |
258 | ||
259 | if (self->flags & GST_LATENCY_TRACER_FLAG_ELEMENT) { | |
260 | GST_DEBUG ("%s_%s: Sending sub-latency event", GST_DEBUG_PAD_NAME (pad)); | |
261 | ||
262 | element_id = g_strdup_printf ("%p", peer_parent); | |
263 | element_name = gst_element_get_name (peer_parent); | |
264 | pad_name = gst_pad_get_name (peer_pad); | |
265 | latency_probe = gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM, | |
266 | gst_structure_new_id (sub_latency_probe_id, | |
267 | latency_probe_element_id, G_TYPE_STRING, element_id, | |
268 | latency_probe_element, G_TYPE_STRING, element_name, | |
269 | latency_probe_pad, G_TYPE_STRING, pad_name, | |
270 | latency_probe_ts, G_TYPE_UINT64, ts, NULL)); | |
271 | gst_pad_push_event (pad, latency_probe); | |
272 | g_free (pad_name); | |
273 | g_free (element_name); | |
274 | g_free (element_id); | |
275 | } | |
126 | 276 | } |
127 | 277 | } |
128 | 278 | |
129 | 279 | static void |
130 | 280 | calculate_latency (GstElement * parent, GstPad * pad, guint64 ts) |
131 | 281 | { |
282 | GstElement *peer_parent = get_real_pad_parent (GST_PAD_PEER (pad)); | |
283 | ||
132 | 284 | if (parent && (!GST_IS_BIN (parent)) && |
133 | GST_OBJECT_FLAG_IS_SET (parent, GST_ELEMENT_FLAG_SINK)) { | |
134 | GstEvent *ev = g_object_get_qdata ((GObject *) pad, latency_probe_id); | |
135 | ||
285 | (!GST_OBJECT_FLAG_IS_SET (parent, GST_ELEMENT_FLAG_SOURCE))) { | |
286 | GstEvent *ev; | |
287 | ||
288 | /* FIXME unsafe use of peer */ | |
289 | if (GST_OBJECT_FLAG_IS_SET (peer_parent, GST_ELEMENT_FLAG_SINK)) { | |
290 | GST_DEBUG ("%s_%s: Should log full lantency now", | |
291 | GST_DEBUG_PAD_NAME (pad)); | |
292 | ev = g_object_get_qdata ((GObject *) pad, latency_probe_id); | |
293 | if (ev) { | |
294 | g_object_set_qdata ((GObject *) pad, latency_probe_id, NULL); | |
295 | log_latency (gst_event_get_structure (ev), peer_parent, | |
296 | GST_PAD_PEER (pad), ts); | |
297 | gst_event_unref (ev); | |
298 | } | |
299 | } | |
300 | ||
301 | GST_DEBUG ("%s_%s: Should log sub lantency now", GST_DEBUG_PAD_NAME (pad)); | |
302 | ev = g_object_get_qdata ((GObject *) pad, sub_latency_probe_id); | |
136 | 303 | if (ev) { |
137 | g_object_set_qdata ((GObject *) pad, latency_probe_id, NULL); | |
138 | log_latency (gst_event_get_structure (ev), pad, ts); | |
304 | g_object_set_qdata ((GObject *) pad, sub_latency_probe_id, NULL); | |
305 | log_element_latency (gst_event_get_structure (ev), parent, pad, ts); | |
139 | 306 | gst_event_unref (ev); |
140 | 307 | } |
141 | 308 | } |
142 | 309 | } |
143 | 310 | |
144 | 311 | static void |
145 | do_push_buffer_pre (GstTracer * self, guint64 ts, GstPad * pad) | |
146 | { | |
147 | GstPad *peer_pad = GST_PAD_PEER (pad); | |
312 | do_push_buffer_pre (GstTracer * tracer, guint64 ts, GstPad * pad) | |
313 | { | |
314 | GstLatencyTracer *self = (GstLatencyTracer *) tracer; | |
148 | 315 | GstElement *parent = get_real_pad_parent (pad); |
149 | GstElement *peer_parent = get_real_pad_parent (peer_pad); | |
150 | ||
151 | send_latency_probe (parent, pad, ts); | |
152 | calculate_latency (peer_parent, peer_pad, ts); | |
153 | } | |
154 | ||
155 | static void | |
156 | do_pull_range_pre (GstTracer * self, guint64 ts, GstPad * pad) | |
157 | { | |
316 | ||
317 | send_latency_probe (self, parent, pad, ts); | |
318 | calculate_latency (parent, pad, ts); | |
319 | } | |
320 | ||
321 | static void | |
322 | do_pull_range_pre (GstTracer * tracer, guint64 ts, GstPad * pad) | |
323 | { | |
324 | GstLatencyTracer *self = (GstLatencyTracer *) tracer; | |
158 | 325 | GstPad *peer_pad = GST_PAD_PEER (pad); |
159 | 326 | GstElement *parent = get_real_pad_parent (peer_pad); |
160 | 327 | |
161 | send_latency_probe (parent, peer_pad, ts); | |
328 | send_latency_probe (self, parent, peer_pad, ts); | |
162 | 329 | } |
163 | 330 | |
164 | 331 | static void |
169 | 336 | calculate_latency (parent, pad, ts); |
170 | 337 | } |
171 | 338 | |
339 | static GstPadProbeReturn | |
340 | do_drop_sub_latency_event (GstPad * pad, GstPadProbeInfo * info, | |
341 | gpointer user_data) | |
342 | { | |
343 | GstEvent *ev = info->data; | |
344 | GstPadProbeReturn ret = GST_PAD_PROBE_OK; | |
345 | ||
346 | if (GST_EVENT_TYPE (ev) == GST_EVENT_CUSTOM_DOWNSTREAM) { | |
347 | const GstStructure *data = gst_event_get_structure (ev); | |
348 | ||
349 | if (gst_structure_get_name_id (data) == sub_latency_probe_id) { | |
350 | const GValue *value; | |
351 | /* FIXME unsafe peer pad usage */ | |
352 | gchar *pad_name = g_strdup_printf ("%s_%s", | |
353 | GST_DEBUG_PAD_NAME (GST_PAD_PEER (pad))); | |
354 | ||
355 | value = gst_structure_id_get_value (data, latency_probe_pad); | |
356 | if (!g_str_equal (g_value_get_string (value), pad_name)) { | |
357 | GST_DEBUG ("%s: Dropping sub-latency event", pad_name); | |
358 | ret = GST_PAD_PROBE_DROP; | |
359 | } | |
360 | ||
361 | g_free (pad_name); | |
362 | } | |
363 | } | |
364 | ||
365 | return ret; | |
366 | } | |
367 | ||
172 | 368 | static void |
173 | 369 | do_push_event_pre (GstTracer * self, guint64 ts, GstPad * pad, GstEvent * ev) |
174 | 370 | { |
371 | GstElement *parent = get_real_pad_parent (pad); | |
175 | 372 | GstPad *peer_pad = GST_PAD_PEER (pad); |
176 | GstElement *parent = get_real_pad_parent (peer_pad); | |
373 | GstElement *peer_parent = get_real_pad_parent (peer_pad); | |
177 | 374 | |
178 | 375 | if (parent && (!GST_IS_BIN (parent)) && |
179 | GST_OBJECT_FLAG_IS_SET (parent, GST_ELEMENT_FLAG_SINK)) { | |
180 | if (GST_EVENT_TYPE (ev) == GST_EVENT_CUSTOM_DOWNSTREAM) { | |
181 | const GstStructure *data = gst_event_get_structure (ev); | |
182 | ||
183 | if (gst_structure_get_name_id (data) == latency_probe_id) { | |
184 | /* store event and calculate latency when the buffer that follows | |
185 | * has been processed */ | |
186 | g_object_set_qdata ((GObject *) peer_pad, latency_probe_id, | |
187 | gst_event_ref (ev)); | |
376 | (!GST_OBJECT_FLAG_IS_SET (parent, GST_ELEMENT_FLAG_SOURCE)) && | |
377 | GST_EVENT_TYPE (ev) == GST_EVENT_CUSTOM_DOWNSTREAM) { | |
378 | const GstStructure *data = gst_event_get_structure (ev); | |
379 | ||
380 | /* if not set yet, add a pad probe that prevents sub-latency event from | |
381 | * flowing further */ | |
382 | if (gst_structure_get_name_id (data) == latency_probe_id) { | |
383 | ||
384 | if (!g_object_get_qdata ((GObject *) pad, drop_sub_latency_quark)) { | |
385 | GST_DEBUG ("%s_%s: Adding pad probe to drop sub-latency event", | |
386 | GST_DEBUG_PAD_NAME (pad)); | |
387 | gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, | |
388 | do_drop_sub_latency_event, NULL, NULL); | |
389 | g_object_set_qdata ((GObject *) pad, drop_sub_latency_quark, | |
390 | (gpointer) 1); | |
188 | 391 | } |
189 | } | |
392 | ||
393 | /* FIXME unsafe peer access */ | |
394 | if (GST_OBJECT_FLAG_IS_SET (peer_parent, GST_ELEMENT_FLAG_SINK)) { | |
395 | GST_DEBUG ("%s_%s: Storing latency event", GST_DEBUG_PAD_NAME (pad)); | |
396 | ||
397 | /* store event so that we can calculate latency when the buffer that | |
398 | * follows has been processed */ | |
399 | if (!g_object_get_qdata ((GObject *) pad, latency_probe_id)) | |
400 | g_object_set_qdata ((GObject *) pad, latency_probe_id, | |
401 | gst_event_ref (ev)); | |
402 | } | |
403 | } | |
404 | ||
405 | if (gst_structure_get_name_id (data) == sub_latency_probe_id) { | |
406 | const GValue *value; | |
407 | gchar *element_id = g_strdup_printf ("%p", peer_parent); | |
408 | gchar *element_name = gst_element_get_name (peer_parent); | |
409 | gchar *pad_name = gst_pad_get_name (peer_pad); | |
410 | const gchar *value_element_id, *value_element_name, *value_pad_name; | |
411 | ||
412 | /* Get the element id, element name and pad name from data */ | |
413 | value = gst_structure_id_get_value (data, latency_probe_element_id); | |
414 | value_element_id = g_value_get_string (value); | |
415 | value = gst_structure_id_get_value (data, latency_probe_element); | |
416 | value_element_name = g_value_get_string (value); | |
417 | value = gst_structure_id_get_value (data, latency_probe_pad); | |
418 | value_pad_name = g_value_get_string (value); | |
419 | ||
420 | if (!g_str_equal (value_element_id, element_id) || | |
421 | !g_str_equal (value_element_name, element_name) || | |
422 | !g_str_equal (value_pad_name, pad_name)) { | |
423 | GST_DEBUG ("%s_%s: Storing latency event", GST_DEBUG_PAD_NAME (pad)); | |
424 | ||
425 | if (!g_object_get_qdata ((GObject *) pad, sub_latency_probe_id)) | |
426 | g_object_set_qdata ((GObject *) pad, sub_latency_probe_id, | |
427 | gst_event_ref (ev)); | |
428 | } | |
429 | ||
430 | g_free (pad_name); | |
431 | g_free (element_name); | |
432 | g_free (element_id); | |
433 | } | |
434 | } | |
435 | } | |
436 | ||
437 | static void | |
438 | do_query_post (GstLatencyTracer * tracer, GstClockTime ts, GstPad * pad, | |
439 | GstQuery * query, gboolean res) | |
440 | { | |
441 | /* Only check for latency queries if flag is enabled */ | |
442 | if ((tracer->flags & GST_LATENCY_TRACER_FLAG_REPORTED_ELEMENT) && | |
443 | (GST_QUERY_TYPE (query) == GST_QUERY_LATENCY)) { | |
444 | gboolean live; | |
445 | guint64 min = 0, max = 0, min_prev = 0, max_prev = 0; | |
446 | gchar *element_name, *element_id; | |
447 | struct LatencyQueryTableValue *value; | |
448 | GstElement *element = get_real_pad_parent (pad); | |
449 | GstElement *peer_element = get_real_pad_parent (GST_PAD_PEER (pad)); | |
450 | ||
451 | /* Parse the query */ | |
452 | gst_query_parse_latency (query, &live, &min, &max); | |
453 | ||
454 | /* Pop from stack */ | |
455 | value = local_latency_query_stack_pop (); | |
456 | while (value && value->peer_element == element) { | |
457 | min_prev = MAX (value->min, min_prev); | |
458 | max_prev = MAX (value->max, max_prev); | |
459 | value = local_latency_query_stack_pop (); | |
460 | } | |
461 | ||
462 | /* Push to stack */ | |
463 | value = g_new0 (struct LatencyQueryTableValue, 1); | |
464 | value->peer_element = gst_object_ref (peer_element); | |
465 | value->min = min; | |
466 | value->max = max; | |
467 | local_latency_query_stack_push (value); | |
468 | ||
469 | /* Get the pad name */ | |
470 | element_id = g_strdup_printf ("%p", element); | |
471 | element_name = gst_element_get_name (element); | |
472 | ||
473 | /* Log reported latency */ | |
474 | gst_tracer_record_log (tr_element_reported_latency, element_id, | |
475 | element_name, live, GST_CLOCK_DIFF (min_prev, min), | |
476 | GST_CLOCK_DIFF (max_prev, max), ts); | |
477 | ||
478 | /* Clean up */ | |
479 | g_free (element_name); | |
480 | g_free (element_id); | |
190 | 481 | } |
191 | 482 | } |
192 | 483 | |
193 | 484 | /* tracer class */ |
194 | 485 | |
195 | 486 | static void |
487 | gst_latency_tracer_constructed (GObject * object) | |
488 | { | |
489 | GstLatencyTracer *self = GST_LATENCY_TRACER (object); | |
490 | gchar *params, *tmp; | |
491 | GstStructure *params_struct = NULL; | |
492 | ||
493 | g_object_get (self, "params", ¶ms, NULL); | |
494 | ||
495 | if (!params) | |
496 | return; | |
497 | ||
498 | tmp = g_strdup_printf ("latency,%s", params); | |
499 | params_struct = gst_structure_from_string (tmp, NULL); | |
500 | g_free (tmp); | |
501 | ||
502 | /* Read the flags if available */ | |
503 | if (params_struct) { | |
504 | const gchar *flags = gst_structure_get_string (params_struct, "flags"); | |
505 | ||
506 | self->flags = 0; | |
507 | ||
508 | if (flags) { | |
509 | GStrv split = g_strsplit (flags, "+", -1); | |
510 | gint i; | |
511 | ||
512 | for (i = 0; split[i]; i++) { | |
513 | if (g_str_equal (split[i], "pipeline")) | |
514 | self->flags |= GST_LATENCY_TRACER_FLAG_PIPELINE; | |
515 | else if (g_str_equal (split[i], "element")) | |
516 | self->flags |= GST_LATENCY_TRACER_FLAG_ELEMENT; | |
517 | else if (g_str_equal (split[i], "reported")) | |
518 | self->flags |= GST_LATENCY_TRACER_FLAG_REPORTED_ELEMENT; | |
519 | else | |
520 | GST_WARNING ("Invalid latency tracer flags %s", split[i]); | |
521 | } | |
522 | ||
523 | g_strfreev (split); | |
524 | } | |
525 | } | |
526 | ||
527 | g_free (params); | |
528 | } | |
529 | ||
530 | static void | |
196 | 531 | gst_latency_tracer_class_init (GstLatencyTracerClass * klass) |
197 | 532 | { |
533 | GObjectClass *gobject_class = G_OBJECT_CLASS (klass); | |
534 | ||
535 | gobject_class->constructed = gst_latency_tracer_constructed; | |
536 | ||
198 | 537 | latency_probe_id = g_quark_from_static_string ("latency_probe.id"); |
538 | sub_latency_probe_id = g_quark_from_static_string ("sub_latency_probe.id"); | |
199 | 539 | latency_probe_pad = g_quark_from_static_string ("latency_probe.pad"); |
540 | latency_probe_element = g_quark_from_static_string ("latency_probe.element"); | |
541 | latency_probe_element_id = | |
542 | g_quark_from_static_string ("latency_probe.element_id"); | |
200 | 543 | latency_probe_ts = g_quark_from_static_string ("latency_probe.ts"); |
544 | drop_sub_latency_quark = | |
545 | g_quark_from_static_string ("drop_sub_latency.quark"); | |
201 | 546 | |
202 | 547 | /* announce trace formats */ |
203 | 548 | /* *INDENT-OFF* */ |
204 | 549 | tr_latency = gst_tracer_record_new ("latency.class", |
550 | "src-element-id", GST_TYPE_STRUCTURE, gst_structure_new ("scope", | |
551 | "type", G_TYPE_GTYPE, G_TYPE_STRING, | |
552 | "related-to", GST_TYPE_TRACER_VALUE_SCOPE, | |
553 | GST_TRACER_VALUE_SCOPE_ELEMENT, | |
554 | NULL), | |
555 | "src-element", GST_TYPE_STRUCTURE, gst_structure_new ("scope", | |
556 | "type", G_TYPE_GTYPE, G_TYPE_STRING, | |
557 | "related-to", GST_TYPE_TRACER_VALUE_SCOPE, | |
558 | GST_TRACER_VALUE_SCOPE_ELEMENT, | |
559 | NULL), | |
205 | 560 | "src", GST_TYPE_STRUCTURE, gst_structure_new ("scope", |
206 | 561 | "type", G_TYPE_GTYPE, G_TYPE_STRING, |
207 | 562 | "related-to", GST_TYPE_TRACER_VALUE_SCOPE, GST_TRACER_VALUE_SCOPE_PAD, |
563 | NULL), | |
564 | "sink-element-id", GST_TYPE_STRUCTURE, gst_structure_new ("scope", | |
565 | "type", G_TYPE_GTYPE, G_TYPE_STRING, | |
566 | "related-to", GST_TYPE_TRACER_VALUE_SCOPE, | |
567 | GST_TRACER_VALUE_SCOPE_ELEMENT, | |
568 | NULL), | |
569 | "sink-element", GST_TYPE_STRUCTURE, gst_structure_new ("scope", | |
570 | "type", G_TYPE_GTYPE, G_TYPE_STRING, | |
571 | "related-to", GST_TYPE_TRACER_VALUE_SCOPE, | |
572 | GST_TRACER_VALUE_SCOPE_ELEMENT, | |
208 | 573 | NULL), |
209 | 574 | "sink", GST_TYPE_STRUCTURE, gst_structure_new ("scope", |
210 | 575 | "type", G_TYPE_GTYPE, G_TYPE_STRING, |
224 | 589 | "max", G_TYPE_UINT64, G_MAXUINT64, |
225 | 590 | NULL), |
226 | 591 | NULL); |
592 | ||
593 | tr_element_latency = gst_tracer_record_new ("element-latency.class", | |
594 | "element-id", GST_TYPE_STRUCTURE, gst_structure_new ("scope", | |
595 | "type", G_TYPE_GTYPE, G_TYPE_STRING, | |
596 | "related-to", GST_TYPE_TRACER_VALUE_SCOPE, | |
597 | GST_TRACER_VALUE_SCOPE_ELEMENT, | |
598 | NULL), | |
599 | "element", GST_TYPE_STRUCTURE, gst_structure_new ("scope", | |
600 | "type", G_TYPE_GTYPE, G_TYPE_STRING, | |
601 | "related-to", GST_TYPE_TRACER_VALUE_SCOPE, | |
602 | GST_TRACER_VALUE_SCOPE_ELEMENT, | |
603 | NULL), | |
604 | "src", GST_TYPE_STRUCTURE, gst_structure_new ("scope", | |
605 | "type", G_TYPE_GTYPE, G_TYPE_STRING, | |
606 | "related-to", GST_TYPE_TRACER_VALUE_SCOPE, GST_TRACER_VALUE_SCOPE_PAD, | |
607 | NULL), | |
608 | "time", GST_TYPE_STRUCTURE, gst_structure_new ("value", | |
609 | "type", G_TYPE_GTYPE, G_TYPE_UINT64, | |
610 | "description", G_TYPE_STRING, | |
611 | "time it took for the buffer to go from src to sink ns", | |
612 | "min", G_TYPE_UINT64, G_GUINT64_CONSTANT (0), | |
613 | "max", G_TYPE_UINT64, G_MAXUINT64, | |
614 | NULL), | |
615 | "ts", GST_TYPE_STRUCTURE, gst_structure_new ("value", | |
616 | "type", G_TYPE_GTYPE, G_TYPE_UINT64, | |
617 | "description", G_TYPE_STRING, "ts when the latency has been logged", | |
618 | "min", G_TYPE_UINT64, G_GUINT64_CONSTANT (0), | |
619 | "max", G_TYPE_UINT64, G_MAXUINT64, | |
620 | NULL), | |
621 | NULL); | |
622 | ||
623 | ||
624 | tr_element_reported_latency = gst_tracer_record_new ( | |
625 | "element-reported-latency.class", | |
626 | "element-id", GST_TYPE_STRUCTURE, gst_structure_new ("scope", | |
627 | "type", G_TYPE_GTYPE, G_TYPE_STRING, | |
628 | "related-to", GST_TYPE_TRACER_VALUE_SCOPE, | |
629 | GST_TRACER_VALUE_SCOPE_ELEMENT, | |
630 | NULL), | |
631 | "element", GST_TYPE_STRUCTURE, gst_structure_new ("scope", | |
632 | "type", G_TYPE_GTYPE, G_TYPE_STRING, | |
633 | "related-to", GST_TYPE_TRACER_VALUE_SCOPE, | |
634 | GST_TRACER_VALUE_SCOPE_ELEMENT, | |
635 | NULL), | |
636 | "live", GST_TYPE_STRUCTURE, gst_structure_new ("value", | |
637 | "type", G_TYPE_GTYPE, G_TYPE_BOOLEAN, | |
638 | "description", G_TYPE_STRING, | |
639 | "wether the it is a live stream or not", | |
640 | NULL), | |
641 | "min", GST_TYPE_STRUCTURE, gst_structure_new ("value", | |
642 | "type", G_TYPE_GTYPE, G_TYPE_UINT64, | |
643 | "description", G_TYPE_STRING, | |
644 | "the minimum reported latency", | |
645 | "min", G_TYPE_UINT64, G_GUINT64_CONSTANT (0), | |
646 | "max", G_TYPE_UINT64, G_MAXUINT64, | |
647 | NULL), | |
648 | "max", GST_TYPE_STRUCTURE, gst_structure_new ("value", | |
649 | "type", G_TYPE_GTYPE, G_TYPE_UINT64, | |
650 | "description", G_TYPE_STRING, "the maximum reported latency", | |
651 | "min", G_TYPE_UINT64, G_GUINT64_CONSTANT (0), | |
652 | "max", G_TYPE_UINT64, G_MAXUINT64, | |
653 | NULL), | |
654 | "ts", GST_TYPE_STRUCTURE, gst_structure_new ("value", | |
655 | "type", G_TYPE_GTYPE, G_TYPE_UINT64, | |
656 | "description", G_TYPE_STRING, "ts when the latency has been reported", | |
657 | "min", G_TYPE_UINT64, G_GUINT64_CONSTANT (0), | |
658 | "max", G_TYPE_UINT64, G_MAXUINT64, | |
659 | NULL), | |
660 | NULL); | |
227 | 661 | /* *INDENT-ON* */ |
228 | 662 | } |
229 | 663 | |
231 | 665 | gst_latency_tracer_init (GstLatencyTracer * self) |
232 | 666 | { |
233 | 667 | GstTracer *tracer = GST_TRACER (self); |
668 | ||
669 | /* only trace pipeline latency by default */ | |
670 | self->flags = GST_LATENCY_TRACER_FLAG_PIPELINE; | |
234 | 671 | |
235 | 672 | /* in push mode, pre/post will be called before/after the peer chain |
236 | 673 | * function has been called. For this reaosn, we only use -pre to avoid |
251 | 688 | |
252 | 689 | gst_tracing_register_hook (tracer, "pad-push-event-pre", |
253 | 690 | G_CALLBACK (do_push_event_pre)); |
254 | } | |
691 | ||
692 | /* Add pad query post hook to get the reported per-element latency */ | |
693 | gst_tracing_register_hook (tracer, "pad-query-post", | |
694 | G_CALLBACK (do_query_post)); | |
695 | } |
41 | 41 | typedef struct _GstLatencyTracer GstLatencyTracer; |
42 | 42 | typedef struct _GstLatencyTracerClass GstLatencyTracerClass; |
43 | 43 | |
44 | typedef enum | |
45 | { | |
46 | GST_LATENCY_TRACER_FLAG_PIPELINE = 1 << 0, | |
47 | GST_LATENCY_TRACER_FLAG_ELEMENT = 1 << 1, | |
48 | GST_LATENCY_TRACER_FLAG_REPORTED_ELEMENT = 1 << 2, | |
49 | } GstLatencyTracerFlags; | |
50 | ||
44 | 51 | /** |
45 | 52 | * GstLatencyTracer: |
46 | 53 | * |
50 | 57 | GstTracer parent; |
51 | 58 | |
52 | 59 | /*< private >*/ |
60 | GstLatencyTracerFlags flags; | |
53 | 61 | }; |
54 | 62 | |
55 | 63 | struct _GstLatencyTracerClass { |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: gstreamer 0.9.7\n" |
8 | 8 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
9 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
9 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
10 | 10 | "PO-Revision-Date: 2005-12-05 11:45+0200\n" |
11 | 11 | "Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n" |
12 | 12 | "Language-Team: Afrikaans <i18n@af.org.za>\n" |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: gstreamer 0.10.28.2\n" |
8 | 8 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
9 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
9 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
10 | 10 | "PO-Revision-Date: 2010-06-07 22:01+0100\n" |
11 | 11 | "Last-Translator: astur <maacub@gmail.com>\n" |
12 | 12 | "Language-Team: Asturian <ubuntu-l10n-ast@lists.ubuntu.com>\n" |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: gstreamer-0.8.0\n" |
8 | 8 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
9 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
9 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
10 | 10 | "PO-Revision-Date: 2004-03-19 18:40+0200\n" |
11 | 11 | "Last-Translator: Metin Amiroff <metin@karegen.com>\n" |
12 | 12 | "Language-Team: Azerbaijani <translation-team-az@lists.sourceforge.net>\n" |
5 | 5 | msgstr "" |
6 | 6 | "Project-Id-Version: gstreamer 0.9.7\n" |
7 | 7 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
8 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
8 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
9 | 9 | "PO-Revision-Date: 2006-01-18 22:26+0200\n" |
10 | 10 | "Last-Translator: Ales Nyakhaychyk <nab@mail.by>\n" |
11 | 11 | "Language-Team: Belarusian <i18n@mova.org>\n" |
9 | 9 | msgstr "" |
10 | 10 | "Project-Id-Version: gstreamer 1.12.0\n" |
11 | 11 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
12 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
12 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
13 | 13 | "PO-Revision-Date: 2017-05-08 11:35+0200\n" |
14 | 14 | "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n" |
15 | 15 | "Language-Team: Bulgarian <dict@ludost.net>\n" |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: gstreamer 0.10.30.3\n" |
8 | 8 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
9 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
9 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
10 | 10 | "PO-Revision-Date: 2010-11-04 19:41+0100\n" |
11 | 11 | "Last-Translator: Jordi Mallach <jordi@sindominio.net>\n" |
12 | 12 | "Language-Team: Catalan <ca@dodds.net>\n" |
8 | 8 | msgstr "" |
9 | 9 | "Project-Id-Version: gstreamer 1.12.0\n" |
10 | 10 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
11 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
11 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
12 | 12 | "PO-Revision-Date: 2017-09-13 15:04+0200\n" |
13 | 13 | "Last-Translator: Marek Černocký <marek@manet.cz>\n" |
14 | 14 | "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n" |
9 | 9 | msgstr "" |
10 | 10 | "Project-Id-Version: gstreamer 1.15.1\n" |
11 | 11 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
12 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
12 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
13 | 13 | "PO-Revision-Date: 2019-02-14 13:26+0200\n" |
14 | 14 | "Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n" |
15 | 15 | "Language-Team: Danish <dansk@dansk-gruppen.dk>\n" |
8 | 8 | msgstr "" |
9 | 9 | "Project-Id-Version: gstreamer 1.12.0\n" |
10 | 10 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
11 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
11 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
12 | 12 | "PO-Revision-Date: 2017-05-25 16:25+0200\n" |
13 | 13 | "Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n" |
14 | 14 | "Language-Team: German <translation-team-de@lists.sourceforge.net>\n" |
5 | 5 | msgstr "" |
6 | 6 | "Project-Id-Version: gstreamer-0.10.30.3\n" |
7 | 7 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
8 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
8 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
9 | 9 | "PO-Revision-Date: 2010-11-29 11:14+0200\n" |
10 | 10 | "Last-Translator: Michael Kotsarinis <mk73628@gmail.com>\n" |
11 | 11 | "Language-Team: Greek <team@lists.gnome.gr>\n" |
5 | 5 | msgstr "" |
6 | 6 | "Project-Id-Version: gstreamer 0.8.1\n" |
7 | 7 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
8 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
8 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
9 | 9 | "PO-Revision-Date: 2004-04-26 10:36-0400\n" |
10 | 10 | "Last-Translator: Gareth Owen <gowen72@yahoo.com>\n" |
11 | 11 | "Language-Team: English (British) <en_gb@li.org>\n" |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: gstreamer 0.10.32.2\n" |
8 | 8 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
9 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
9 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
10 | 10 | "PO-Revision-Date: 2011-06-04 21:11+0100\n" |
11 | 11 | "Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n" |
12 | 12 | "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n" |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: gstreamer 0.10.32.2\n" |
8 | 8 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
9 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
9 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
10 | 10 | "PO-Revision-Date: 2011-10-02 15:45+0200\n" |
11 | 11 | "Last-Translator: Jorge González González <aloriel@gmail.com>\n" |
12 | 12 | "Language-Team: Spanish <es@li.org>\n" |
7 | 7 | msgstr "" |
8 | 8 | "Project-Id-Version: gstreamer-0.10.26.2\n" |
9 | 9 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
10 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
10 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
11 | 11 | "PO-Revision-Date: 2010-03-25 13:10+0100\n" |
12 | 12 | "Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n" |
13 | 13 | "Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n" |
11 | 11 | msgstr "" |
12 | 12 | "Project-Id-Version: gstreamer 0.10.30.3\n" |
13 | 13 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
14 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
14 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
15 | 15 | "PO-Revision-Date: 2010-11-17 23:10+0200\n" |
16 | 16 | "Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n" |
17 | 17 | "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n" |
9 | 9 | msgstr "" |
10 | 10 | "Project-Id-Version: gstreamer 1.12.0\n" |
11 | 11 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
12 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
12 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
13 | 13 | "PO-Revision-Date: 2017-05-05 22:33+0200\n" |
14 | 14 | "Last-Translator: Stéphane Aulery <lkppo@free.fr>\n" |
15 | 15 | "Language-Team: French <traduc@traduc.org>\n" |
5 | 5 | msgstr "" |
6 | 6 | "Project-Id-Version: gstreamer 1.10.0\n" |
7 | 7 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
8 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
8 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
9 | 9 | "PO-Revision-Date: 2017-03-19 15:41+0100\n" |
10 | 10 | "Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n" |
11 | 11 | "Language-Team: Friulian <f.t.public@gmail.com>\n" |
5 | 5 | msgstr "" |
6 | 6 | "Project-Id-Version: gstreamer 1.0.3\n" |
7 | 7 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
8 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
8 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
9 | 9 | "PO-Revision-Date: 2012-12-15 03:29+0200\n" |
10 | 10 | "Last-Translator: Fran Dieguez <frandieguez@ubuntu.com>\n" |
11 | 11 | "Language-Team: Galician <proxecto@trasno.net>\n" |
4 | 4 | #, fuzzy |
5 | 5 | msgid "" |
6 | 6 | msgstr "" |
7 | "Project-Id-Version: gstreamer 1.15.2\n" | |
7 | "Project-Id-Version: gstreamer 1.15.90\n" | |
8 | 8 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
9 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
9 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
10 | 10 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
11 | 11 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
12 | 12 | "Language-Team: LANGUAGE <LL@li.org>\n" |
1148 | 1148 | msgid "Internal data flow problem." |
1149 | 1149 | msgstr "" |
1150 | 1150 | |
1151 | #: libs/gst/base/gstbasesink.c:4222 libs/gst/base/gstbasesrc.c:2702 | |
1151 | #: libs/gst/base/gstbasesink.c:4222 libs/gst/base/gstbasesrc.c:2708 | |
1152 | 1152 | msgid "Internal data flow error." |
1153 | 1153 | msgstr "" |
1154 | 1154 | |
1155 | #: libs/gst/base/gstbasesrc.c:2632 | |
1155 | #: libs/gst/base/gstbasesrc.c:2638 | |
1156 | 1156 | msgid "Internal clock error." |
1157 | 1157 | msgstr "" |
1158 | 1158 | |
1159 | #: libs/gst/base/gstbasesrc.c:2660 plugins/elements/gstdownloadbuffer.c:842 | |
1159 | #: libs/gst/base/gstbasesrc.c:2666 plugins/elements/gstdownloadbuffer.c:842 | |
1160 | 1160 | #: plugins/elements/gstdownloadbuffer.c:1265 |
1161 | 1161 | msgid "Failed to map buffer." |
1162 | 1162 | msgstr "" |
1312 | 1312 | msgid "changeable only in NULL or READY state" |
1313 | 1313 | msgstr "" |
1314 | 1314 | |
1315 | #: tools/gst-inspect.c:1129 | |
1315 | #: tools/gst-inspect.c:1131 | |
1316 | 1316 | msgid "Blacklisted files:" |
1317 | 1317 | msgstr "" |
1318 | 1318 | |
1319 | #: tools/gst-inspect.c:1141 tools/gst-inspect.c:1274 | |
1319 | #: tools/gst-inspect.c:1143 tools/gst-inspect.c:1276 | |
1320 | 1320 | #, c-format |
1321 | 1321 | msgid "%sTotal count%s: %s" |
1322 | 1322 | msgstr "" |
1323 | 1323 | |
1324 | #: tools/gst-inspect.c:1143 | |
1324 | #: tools/gst-inspect.c:1145 | |
1325 | 1325 | #, c-format |
1326 | 1326 | msgid "%d blacklisted file" |
1327 | 1327 | msgid_plural "%d blacklisted files" |
1328 | 1328 | msgstr[0] "" |
1329 | 1329 | msgstr[1] "" |
1330 | 1330 | |
1331 | #: tools/gst-inspect.c:1276 | |
1331 | #: tools/gst-inspect.c:1278 | |
1332 | 1332 | #, c-format |
1333 | 1333 | msgid "%d plugin" |
1334 | 1334 | msgid_plural "%d plugins" |
1335 | 1335 | msgstr[0] "" |
1336 | 1336 | msgstr[1] "" |
1337 | 1337 | |
1338 | #: tools/gst-inspect.c:1279 | |
1338 | #: tools/gst-inspect.c:1281 | |
1339 | 1339 | #, c-format |
1340 | 1340 | msgid "%d blacklist entry" |
1341 | 1341 | msgid_plural "%d blacklist entries" |
1342 | 1342 | msgstr[0] "" |
1343 | 1343 | msgstr[1] "" |
1344 | 1344 | |
1345 | #: tools/gst-inspect.c:1284 | |
1345 | #: tools/gst-inspect.c:1286 | |
1346 | 1346 | #, c-format |
1347 | 1347 | msgid "%d feature" |
1348 | 1348 | msgid_plural "%d features" |
1349 | 1349 | msgstr[0] "" |
1350 | 1350 | msgstr[1] "" |
1351 | 1351 | |
1352 | #: tools/gst-inspect.c:1949 | |
1352 | #: tools/gst-inspect.c:1951 | |
1353 | 1353 | msgid "Print all elements" |
1354 | 1354 | msgstr "" |
1355 | 1355 | |
1356 | #: tools/gst-inspect.c:1951 | |
1356 | #: tools/gst-inspect.c:1953 | |
1357 | 1357 | msgid "Print list of blacklisted files" |
1358 | 1358 | msgstr "" |
1359 | 1359 | |
1360 | #: tools/gst-inspect.c:1953 | |
1360 | #: tools/gst-inspect.c:1955 | |
1361 | 1361 | msgid "" |
1362 | 1362 | "Print a machine-parsable list of features the specified plugin or all " |
1363 | 1363 | "plugins provide.\n" |
1365 | 1365 | "automatic plugin installation mechanisms" |
1366 | 1366 | msgstr "" |
1367 | 1367 | |
1368 | #: tools/gst-inspect.c:1958 | |
1368 | #: tools/gst-inspect.c:1960 | |
1369 | 1369 | msgid "List the plugin contents" |
1370 | 1370 | msgstr "" |
1371 | 1371 | |
1372 | #: tools/gst-inspect.c:1960 | |
1372 | #: tools/gst-inspect.c:1962 | |
1373 | 1373 | msgid "" |
1374 | 1374 | "A slashes ('/') separated list of types of elements (also known as klass) to " |
1375 | 1375 | "list. (unordered)" |
1376 | 1376 | msgstr "" |
1377 | 1377 | |
1378 | #: tools/gst-inspect.c:1963 | |
1378 | #: tools/gst-inspect.c:1965 | |
1379 | 1379 | msgid "Check if the specified element or plugin exists" |
1380 | 1380 | msgstr "" |
1381 | 1381 | |
1382 | #: tools/gst-inspect.c:1966 | |
1382 | #: tools/gst-inspect.c:1968 | |
1383 | 1383 | msgid "" |
1384 | 1384 | "When checking if an element or plugin exists, also check that its version is " |
1385 | 1385 | "at least the version specified" |
1386 | 1386 | msgstr "" |
1387 | 1387 | |
1388 | #: tools/gst-inspect.c:1970 | |
1388 | #: tools/gst-inspect.c:1972 | |
1389 | 1389 | msgid "Print supported URI schemes, with the elements that implement them" |
1390 | 1390 | msgstr "" |
1391 | 1391 | |
1392 | #: tools/gst-inspect.c:1975 | |
1392 | #: tools/gst-inspect.c:1977 | |
1393 | 1393 | msgid "" |
1394 | 1394 | "Disable colors in output. You can also achieve the same by " |
1395 | 1395 | "setting'GST_INSPECT_NO_COLORS' environment variable to any value." |
1396 | 1396 | msgstr "" |
1397 | 1397 | |
1398 | #: tools/gst-inspect.c:2131 | |
1398 | #: tools/gst-inspect.c:2133 | |
1399 | 1399 | #, c-format |
1400 | 1400 | msgid "Could not load plugin file: %s\n" |
1401 | 1401 | msgstr "" |
1402 | 1402 | |
1403 | #: tools/gst-inspect.c:2137 | |
1403 | #: tools/gst-inspect.c:2139 | |
1404 | 1404 | #, c-format |
1405 | 1405 | msgid "No such element or plugin '%s'\n" |
1406 | 1406 | msgstr "" |
11 | 11 | msgstr "" |
12 | 12 | "Project-Id-Version: gstreamer-1.15.1\n" |
13 | 13 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
14 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
14 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
15 | 15 | "PO-Revision-Date: 2019-02-03 13:10-0800\n" |
16 | 16 | "Last-Translator: Božidar Putanec <bozidarp@yahoo.com>\n" |
17 | 17 | "Language-Team: Croatian <lokalizacija@linux.hr>\n" |
7 | 7 | msgstr "" |
8 | 8 | "Project-Id-Version: gstreamer 1.12.0\n" |
9 | 9 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
10 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
10 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
11 | 11 | "PO-Revision-Date: 2017-05-05 20:17+0200\n" |
12 | 12 | "Last-Translator: Balázs Úr <urbalazs@gmail.com>\n" |
13 | 13 | "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n" |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: gstreamer 1.10.0\n" |
8 | 8 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
9 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
9 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
10 | 10 | "PO-Revision-Date: 2016-11-14 20:59+0700\n" |
11 | 11 | "Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n" |
12 | 12 | "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n" |
107 | 107 | msgstr "" |
108 | 108 | "Project-Id-Version: gstreamer-1.15.1\n" |
109 | 109 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
110 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
110 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
111 | 111 | "PO-Revision-Date: 2019-01-29 09:16+0100\n" |
112 | 112 | "Last-Translator: Milo Casagrande <milo@milo.name>\n" |
113 | 113 | "Language-Team: Italian <tp@lists.linux.it>\n" |
5 | 5 | msgstr "" |
6 | 6 | "Project-Id-Version: gstreamer 1.0.3\n" |
7 | 7 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
8 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
8 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
9 | 9 | "PO-Revision-Date: 2013-08-20 14:56+0900\n" |
10 | 10 | "Last-Translator: Makoto Kato <makoto.kt@gmail.com>\n" |
11 | 11 | "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n" |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: gstreamer 0.10.29.2\n" |
8 | 8 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
9 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
9 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
10 | 10 | "PO-Revision-Date: 2010-07-16 00:50+0300\n" |
11 | 11 | "Last-Translator: Žygimantas Beručka <uid0@akl.lt>\n" |
12 | 12 | "Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n" |
7 | 7 | msgstr "" |
8 | 8 | "Project-Id-Version: gstreamer 1.12.0\n" |
9 | 9 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
10 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
10 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
11 | 11 | "PO-Revision-Date: 2017-05-23 22:59+0200\n" |
12 | 12 | "Last-Translator: Johnny A. Solbu <johnny@solbu.net>\n" |
13 | 13 | "Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n" |
9 | 9 | msgstr "" |
10 | 10 | "Project-Id-Version: gstreamer 1.12.0\n" |
11 | 11 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
12 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
12 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
13 | 13 | "PO-Revision-Date: 2017-10-24 22:53+0100\n" |
14 | 14 | "Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n" |
15 | 15 | "Language-Team: Dutch <vertaling@vrijschrift.org>\n" |
5 | 5 | msgstr "" |
6 | 6 | "Project-Id-Version: gstreamer 1.15.1\n" |
7 | 7 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
8 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
8 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
9 | 9 | "PO-Revision-Date: 2019-01-24 21:45+0100\n" |
10 | 10 | "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n" |
11 | 11 | "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n" |
16 | 16 | msgstr "" |
17 | 17 | "Project-Id-Version: gstreamer-1.7.90\n" |
18 | 18 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
19 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
19 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
20 | 20 | "PO-Revision-Date: 2016-05-06 18:23-0300\n" |
21 | 21 | "Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n" |
22 | 22 | "Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge." |
4 | 4 | msgstr "" |
5 | 5 | "Project-Id-Version: gstreamer 0.10.29.2\n" |
6 | 6 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
7 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
7 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
8 | 8 | "PO-Revision-Date: 2010-08-16 01:10+0300\n" |
9 | 9 | "Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n" |
10 | 10 | "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n" |
8 | 8 | msgstr "" |
9 | 9 | "Project-Id-Version: gstreamer 1.15.1\n" |
10 | 10 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
11 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
11 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
12 | 12 | "PO-Revision-Date: 2019-01-25 19:43+0300\n" |
13 | 13 | "Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n" |
14 | 14 | "Language-Team: Russian <gnu@d07.ru>\n" |
14 | 14 | msgstr "" |
15 | 15 | "Project-Id-Version: gstreamer 0.8.8\n" |
16 | 16 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
17 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
17 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
18 | 18 | "PO-Revision-Date: 2005-04-04 10:55-0700\n" |
19 | 19 | "Last-Translator: Steven Michael Murphy <murf@e-tools.com>\n" |
20 | 20 | "Language-Team: Kinyarwanda <translation-team-rw@lists.sourceforge.net>\n" |
7 | 7 | msgstr "" |
8 | 8 | "Project-Id-Version: gstreamer 1.7.90\n" |
9 | 9 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
10 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
10 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
11 | 11 | "PO-Revision-Date: 2016-05-20 11:32+0100\n" |
12 | 12 | "Last-Translator: Peter Tuhársky <tuharsky@misbb.sk>\n" |
13 | 13 | "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n" |
9 | 9 | msgstr "" |
10 | 10 | "Project-Id-Version: gstreamer-1.2.1\n" |
11 | 11 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
12 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
12 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
13 | 13 | "PO-Revision-Date: 2014-04-09 22:38+0100\n" |
14 | 14 | "Last-Translator: Klemen Košir <klemen913@gmail.com>\n" |
15 | 15 | "Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n" |
5 | 5 | msgstr "" |
6 | 6 | "Project-Id-Version: gstreamer 0.8.4\n" |
7 | 7 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
8 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
8 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
9 | 9 | "PO-Revision-Date: 2004-08-07 23:46+0200\n" |
10 | 10 | "Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n" |
11 | 11 | "Language-Team: Albanian <begraj@hotmail.com>\n" |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: gstreamer-1.12.0\n" |
8 | 8 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
9 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
9 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
10 | 10 | "PO-Revision-Date: 2017-05-07 12:42+0200\n" |
11 | 11 | "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n" |
12 | 12 | "Language-Team: Serbian <(nothing)>\n" |
8 | 8 | msgstr "" |
9 | 9 | "Project-Id-Version: gstreamer 1.15.1\n" |
10 | 10 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
11 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
11 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
12 | 12 | "PO-Revision-Date: 2019-02-05 18:22+0100\n" |
13 | 13 | "Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n" |
14 | 14 | "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: gstreamer 1.15.1\n" |
8 | 8 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
9 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
9 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
10 | 10 | "PO-Revision-Date: 2019-01-25 11:54+0300\n" |
11 | 11 | "Last-Translator: Mehmet Kececi <mkececi@mehmetkececi.com>\n" |
12 | 12 | "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n" |
7 | 7 | msgstr "" |
8 | 8 | "Project-Id-Version: gstreamer 1.15.1\n" |
9 | 9 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
10 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
10 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
11 | 11 | "PO-Revision-Date: 2019-01-24 21:55+0200\n" |
12 | 12 | "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" |
13 | 13 | "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n" |
8 | 8 | msgstr "" |
9 | 9 | "Project-Id-Version: gstreamer 1.12.0\n" |
10 | 10 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
11 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
11 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
12 | 12 | "PO-Revision-Date: 2017-05-05 06:45+0700\n" |
13 | 13 | "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n" |
14 | 14 | "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n" |
6 | 6 | msgstr "" |
7 | 7 | "Project-Id-Version: gstreamer 1.12.0\n" |
8 | 8 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
9 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
9 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
10 | 10 | "PO-Revision-Date: 2017-05-05 22:53+0800\n" |
11 | 11 | "Last-Translator: Tianze Wang <zwpwjwtz@126.com>\n" |
12 | 12 | "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n" |
26 | 26 | msgstr "" |
27 | 27 | "Project-Id-Version: gstreamer 1.3.2\n" |
28 | 28 | "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" |
29 | "POT-Creation-Date: 2019-02-26 11:37+0000\n" | |
29 | "POT-Creation-Date: 2019-04-11 00:19+0100\n" | |
30 | 30 | "PO-Revision-Date: 2014-06-08 00:22+0800\n" |
31 | 31 | "Last-Translator: Wen Liao <wen.cf83@gmail.com>\n" |
32 | 32 | "Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n" |
917 | 917 | fail_unless (GST_MEMORY_IS_READONLY (mem)); |
918 | 918 | |
919 | 919 | gst_buffer_unref (buf); |
920 | g_bytes_unref (bytes); | |
920 | 921 | } |
921 | 922 | |
922 | 923 | GST_END_TEST; |
217 | 217 | GstSeekFlags flags; |
218 | 218 | GstSeekType start_type, stop_type; |
219 | 219 | gint64 start, stop; |
220 | GstClockTime trickmode_interval; | |
220 | 221 | |
221 | 222 | event = gst_event_new_seek (0.5, GST_FORMAT_BYTES, |
222 | 223 | GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE, |
238 | 239 | fail_unless (stop_type == GST_SEEK_TYPE_NONE); |
239 | 240 | fail_unless (stop == 0xdeadbeef); |
240 | 241 | |
242 | gst_event_parse_seek_trickmode_interval (event, &trickmode_interval); | |
243 | fail_unless_equals_uint64 (trickmode_interval, 0); | |
244 | ||
245 | gst_event_set_seek_trickmode_interval (event, GST_SECOND); | |
246 | gst_event_parse_seek_trickmode_interval (event, &trickmode_interval); | |
247 | fail_unless_equals_uint64 (trickmode_interval, GST_SECOND); | |
248 | ||
249 | gst_event_ref (event); | |
250 | ASSERT_CRITICAL (gst_event_set_seek_trickmode_interval (event, | |
251 | 2 * GST_SECOND)); | |
252 | gst_event_unref (event); | |
253 | ||
254 | gst_event_unref (event); | |
255 | ||
256 | event = gst_event_new_flush_start (); | |
257 | ASSERT_CRITICAL (gst_event_set_seek_trickmode_interval (event, GST_SECOND)); | |
241 | 258 | gst_event_unref (event); |
242 | 259 | } |
243 | 260 |
382 | 382 | |
383 | 383 | gst_buffer_foreach_meta (buffer, foreach_meta_remove_one, meta3); |
384 | 384 | |
385 | fail_unless (gst_buffer_iterate_meta (buffer, &state) == (GstMeta *) meta1); | |
385 | 386 | fail_unless (gst_buffer_iterate_meta (buffer, &state) == (GstMeta *) meta2); |
386 | fail_unless (gst_buffer_iterate_meta (buffer, &state) == (GstMeta *) meta1); | |
387 | 387 | fail_unless (gst_buffer_iterate_meta (buffer, &state) == NULL); |
388 | 388 | |
389 | 389 | /* clean up */ |
413 | 413 | |
414 | 414 | gst_buffer_foreach_meta (buffer, foreach_meta_remove_one, meta2); |
415 | 415 | |
416 | fail_unless (gst_buffer_iterate_meta (buffer, &state) == (GstMeta *) meta1); | |
416 | 417 | fail_unless (gst_buffer_iterate_meta (buffer, &state) == (GstMeta *) meta3); |
417 | fail_unless (gst_buffer_iterate_meta (buffer, &state) == (GstMeta *) meta1); | |
418 | 418 | fail_unless (gst_buffer_iterate_meta (buffer, &state) == NULL); |
419 | 419 | |
420 | 420 | /* clean up */ |
444 | 444 | |
445 | 445 | gst_buffer_foreach_meta (buffer, foreach_meta_remove_one, meta1); |
446 | 446 | |
447 | fail_unless (gst_buffer_iterate_meta (buffer, &state) == (GstMeta *) meta2); | |
447 | 448 | fail_unless (gst_buffer_iterate_meta (buffer, &state) == (GstMeta *) meta3); |
448 | fail_unless (gst_buffer_iterate_meta (buffer, &state) == (GstMeta *) meta2); | |
449 | 449 | fail_unless (gst_buffer_iterate_meta (buffer, &state) == NULL); |
450 | 450 | |
451 | 451 | /* clean up */ |
524 | 524 | |
525 | 525 | gst_buffer_foreach_meta (buffer, foreach_meta_remove_unpooled, NULL); |
526 | 526 | |
527 | fail_unless (gst_buffer_iterate_meta (buffer, &state) == (GstMeta *) meta2); | |
527 | 528 | fail_unless (gst_buffer_iterate_meta (buffer, &state) == (GstMeta *) meta5); |
528 | fail_unless (gst_buffer_iterate_meta (buffer, &state) == (GstMeta *) meta2); | |
529 | 529 | fail_unless (gst_buffer_iterate_meta (buffer, &state) == NULL); |
530 | 530 | |
531 | 531 | /* clean up */ |
903 | 903 | |
904 | 904 | GST_END_TEST; |
905 | 905 | |
906 | typedef struct | |
907 | { | |
908 | GstBaseSrc parent; | |
909 | GstSegment *segment; | |
910 | gboolean n_output_buffers; | |
911 | } TimeSrc; | |
912 | ||
913 | typedef GstBaseSrcClass TimeSrcClass; | |
914 | ||
915 | static GType time_src_get_type (void); | |
916 | ||
917 | G_DEFINE_TYPE (TimeSrc, time_src, GST_TYPE_BASE_SRC); | |
918 | ||
919 | static void | |
920 | time_src_init (TimeSrc * src) | |
921 | { | |
922 | gst_base_src_set_format (GST_BASE_SRC (src), GST_FORMAT_TIME); | |
923 | gst_base_src_set_automatic_eos (GST_BASE_SRC (src), FALSE); | |
924 | src->n_output_buffers = 0; | |
925 | } | |
926 | ||
927 | /* This test src outputs a compressed format, with a single GOP | |
928 | * starting at PTS 0. | |
929 | * | |
930 | * This means that in reverse playback, we may want to output | |
931 | * buffers outside the segment bounds, and decide when to EOS | |
932 | * from the create function. | |
933 | */ | |
934 | static GstFlowReturn | |
935 | time_src_create (GstBaseSrc * bsrc, guint64 offset, guint size, | |
936 | GstBuffer ** p_buf) | |
937 | { | |
938 | TimeSrc *src = (TimeSrc *) bsrc; | |
939 | ||
940 | if (src->segment->position >= src->segment->stop) | |
941 | return GST_FLOW_EOS; | |
942 | ||
943 | *p_buf = gst_buffer_new (); | |
944 | GST_BUFFER_PTS (*p_buf) = src->segment->position; | |
945 | GST_BUFFER_DURATION (*p_buf) = GST_SECOND; | |
946 | src->segment->position += GST_SECOND; | |
947 | ||
948 | src->n_output_buffers++; | |
949 | ||
950 | return GST_FLOW_OK; | |
951 | } | |
952 | ||
953 | static gboolean | |
954 | time_src_do_seek (GstBaseSrc * bsrc, GstSegment * segment) | |
955 | { | |
956 | TimeSrc *src = (TimeSrc *) bsrc; | |
957 | fail_unless (segment->format == GST_FORMAT_TIME); | |
958 | ||
959 | if (src->segment) | |
960 | gst_segment_free (src->segment); | |
961 | ||
962 | src->segment = gst_segment_copy (segment); | |
963 | ||
964 | ((TimeSrc *) bsrc)->segment->position = 0; | |
965 | ||
966 | return TRUE; | |
967 | } | |
968 | ||
969 | static gboolean | |
970 | time_src_is_seekable (GstBaseSrc * bsrc) | |
971 | { | |
972 | return TRUE; | |
973 | } | |
974 | ||
975 | static void | |
976 | time_src_class_init (TimeSrcClass * klass) | |
977 | { | |
978 | GstBaseSrcClass *gstbasesrc_class = GST_BASE_SRC_CLASS (klass); | |
979 | ||
980 | gst_element_class_add_static_pad_template (GST_ELEMENT_CLASS (klass), | |
981 | &src_template); | |
982 | ||
983 | gstbasesrc_class->create = time_src_create; | |
984 | gstbasesrc_class->do_seek = time_src_do_seek; | |
985 | gstbasesrc_class->is_seekable = time_src_is_seekable; | |
986 | } | |
987 | ||
988 | GST_START_TEST (basesrc_time_automatic_eos) | |
989 | { | |
990 | GstElement *src, *sink; | |
991 | GstElement *pipe; | |
992 | GstBus *bus; | |
993 | ||
994 | src = g_object_new (time_src_get_type (), NULL); | |
995 | sink = gst_element_factory_make ("fakesink", NULL); | |
996 | ||
997 | pipe = gst_pipeline_new (NULL); | |
998 | ||
999 | gst_bin_add (GST_BIN (pipe), src); | |
1000 | gst_bin_add (GST_BIN (pipe), sink); | |
1001 | ||
1002 | gst_element_link (src, sink); | |
1003 | ||
1004 | gst_element_set_state (pipe, GST_STATE_PAUSED); | |
1005 | gst_element_get_state (pipe, NULL, NULL, GST_CLOCK_TIME_NONE); | |
1006 | ||
1007 | gst_element_seek (pipe, -1.0, GST_FORMAT_TIME, | |
1008 | GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE, GST_SEEK_TYPE_SET, | |
1009 | GST_SECOND, GST_SEEK_TYPE_SET, 2 * GST_SECOND); | |
1010 | ||
1011 | gst_element_set_state (pipe, GST_STATE_PLAYING); | |
1012 | ||
1013 | bus = gst_pipeline_get_bus (GST_PIPELINE (pipe)); | |
1014 | ||
1015 | gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_EOS); | |
1016 | ||
1017 | gst_element_set_state (pipe, GST_STATE_NULL); | |
1018 | ||
1019 | /* - One preroll buffer | |
1020 | * - One (1-second) buffer outside the segment, our "keyframe" | |
1021 | * - One buffer inside the segment | |
1022 | */ | |
1023 | fail_unless_equals_int (((TimeSrc *) src)->n_output_buffers, 3); | |
1024 | ||
1025 | if (((TimeSrc *) src)->segment) | |
1026 | gst_segment_free (((TimeSrc *) src)->segment); | |
1027 | ||
1028 | gst_object_unref (bus); | |
1029 | gst_object_unref (pipe); | |
1030 | } | |
1031 | ||
1032 | GST_END_TEST; | |
1033 | ||
906 | 1034 | static Suite * |
907 | 1035 | gst_basesrc_suite (void) |
908 | 1036 | { |
919 | 1047 | tcase_add_test (tc, basesrc_seek_events_rate_update); |
920 | 1048 | tcase_add_test (tc, basesrc_seek_on_last_buffer); |
921 | 1049 | tcase_add_test (tc, basesrc_create_bufferlist); |
1050 | tcase_add_test (tc, basesrc_time_automatic_eos); | |
922 | 1051 | |
923 | 1052 | return s; |
924 | 1053 | } |
80 | 80 | [ 'elements/concat.c', not gst_registry ], |
81 | 81 | [ 'elements/dataurisrc.c', not gst_registry ], |
82 | 82 | [ 'elements/fakesrc.c', not gst_registry ], |
83 | [ 'elements/fdsrc.c', not gst_registry ], | |
83 | # FIXME: blocked forever on Windows due to missing fcntl (.. O_NONBLOCK) | |
84 | [ 'elements/fdsrc.c', not gst_registry or host_system == 'windows' ], | |
84 | 85 | [ 'elements/filesink.c', not gst_registry ], |
85 | 86 | [ 'elements/filesrc.c', not gst_registry ], |
86 | 87 | [ 'elements/funnel.c', not gst_registry ], |
635 | 635 | g_type_name (param->value_type), RESET_COLOR); |
636 | 636 | if (param->value_type == GST_TYPE_STRUCTURE) { |
637 | 637 | const GstStructure *s = gst_value_get_structure (&value); |
638 | if (s) | |
638 | if (s) { | |
639 | g_print ("\n"); | |
639 | 640 | gst_structure_foreach (s, print_field, |
640 | 641 | (gpointer) " "); |
642 | } | |
641 | 643 | } |
642 | 644 | } else if (G_IS_PARAM_SPEC_POINTER (param)) { |
643 | 645 | if (param->value_type != G_TYPE_POINTER) { |
36 | 36 | static GHashTable *threads = NULL; |
37 | 37 | static GPtrArray *elements = NULL; |
38 | 38 | static GPtrArray *pads = NULL; |
39 | static GHashTable *latencies = NULL; | |
40 | static GHashTable *element_latencies = NULL; | |
41 | static GQueue *element_reported_latencies = NULL; | |
39 | 42 | static guint64 num_buffers = 0, num_events = 0, num_messages = 0, num_queries = |
40 | 43 | 0; |
41 | 44 | static guint num_elements = 0, num_bins = 0, num_pads = 0, num_ghostpads = 0; |
42 | 45 | static GstClockTime last_ts = G_GUINT64_CONSTANT (0); |
43 | 46 | static guint total_cpuload = 0; |
44 | 47 | static gboolean have_cpuload = FALSE; |
48 | ||
49 | static gboolean have_latency = FALSE; | |
50 | static gboolean have_element_latency = FALSE; | |
51 | static gboolean have_element_reported_latency = FALSE; | |
52 | ||
53 | typedef struct | |
54 | { | |
55 | /* the number of latencies counted */ | |
56 | guint64 count; | |
57 | /* the total of all latencies */ | |
58 | guint64 total; | |
59 | /* the min of all latencies */ | |
60 | guint64 min; | |
61 | /* the max of all latencies */ | |
62 | guint64 max; | |
63 | } GstLatencyStats; | |
64 | ||
65 | typedef struct | |
66 | { | |
67 | /* The element name */ | |
68 | gchar *element; | |
69 | /* The timestamp of the reported latency */ | |
70 | guint64 ts; | |
71 | /* the min reported latency */ | |
72 | guint64 min; | |
73 | /* the max reported latency */ | |
74 | guint64 max; | |
75 | } GstReportedLatency; | |
45 | 76 | |
46 | 77 | typedef struct |
47 | 78 | { |
88 | 119 | } GstThreadStats; |
89 | 120 | |
90 | 121 | /* stats helper */ |
122 | ||
123 | static void | |
124 | latencies_foreach_print_stats (gchar * key, GstLatencyStats * ls, gpointer data) | |
125 | { | |
126 | printf ("\t%s: mean=%" G_GUINT64_FORMAT " min=%" G_GUINT64_FORMAT " max=%" | |
127 | G_GUINT64_FORMAT "\n", key, ls->total / ls->count, ls->min, ls->max); | |
128 | } | |
129 | ||
130 | static void | |
131 | reported_latencies_foreach_print_stats (GstReportedLatency * rl, gpointer data) | |
132 | { | |
133 | printf ("\t%s: min=%" G_GUINT64_FORMAT " max=%" G_GUINT64_FORMAT " ts=%" | |
134 | GST_TIME_FORMAT "\n", rl->element, rl->min, | |
135 | rl->max, GST_TIME_ARGS (rl->ts)); | |
136 | } | |
137 | ||
138 | static void | |
139 | free_latency_stats (gpointer data) | |
140 | { | |
141 | g_slice_free (GstLatencyStats, data); | |
142 | } | |
143 | ||
144 | static void | |
145 | free_reported_latency (gpointer data) | |
146 | { | |
147 | GstReportedLatency *rl = data; | |
148 | ||
149 | if (rl->element) | |
150 | g_free (rl->element); | |
151 | ||
152 | g_free (data); | |
153 | } | |
91 | 154 | |
92 | 155 | static void |
93 | 156 | free_element_stats (gpointer data) |
409 | 472 | have_cpuload = TRUE; |
410 | 473 | } |
411 | 474 | |
475 | static void | |
476 | update_latency_table (GHashTable * table, const gchar * key, guint64 time) | |
477 | { | |
478 | /* Find the values in the hash table */ | |
479 | GstLatencyStats *ls = g_hash_table_lookup (table, key); | |
480 | if (!ls) { | |
481 | /* Insert the new key if the value does not exist */ | |
482 | ls = g_new0 (GstLatencyStats, 1); | |
483 | ls->count = 1; | |
484 | ls->total = time; | |
485 | ls->min = time; | |
486 | ls->max = time; | |
487 | g_hash_table_insert (table, g_strdup (key), ls); | |
488 | } else { | |
489 | /* Otherwise update the existing value */ | |
490 | ls->count++; | |
491 | ls->total += time; | |
492 | if (ls->min > time) | |
493 | ls->min = time; | |
494 | if (ls->max < time) | |
495 | ls->max = time; | |
496 | } | |
497 | } | |
498 | ||
499 | static void | |
500 | do_latency_stats (GstStructure * s) | |
501 | { | |
502 | gchar *key = NULL; | |
503 | const gchar *src = NULL, *sink = NULL, *src_element = NULL, | |
504 | *sink_element = NULL, *src_element_id = NULL, *sink_element_id = NULL; | |
505 | guint64 ts = 0, time = 0; | |
506 | ||
507 | /* Get the values from the structure */ | |
508 | src = gst_structure_get_string (s, "src"); | |
509 | sink = gst_structure_get_string (s, "sink"); | |
510 | src_element = gst_structure_get_string (s, "src-element"); | |
511 | sink_element = gst_structure_get_string (s, "sink-element"); | |
512 | src_element_id = gst_structure_get_string (s, "src-element-id"); | |
513 | sink_element_id = gst_structure_get_string (s, "sink-element-id"); | |
514 | gst_structure_get (s, "time", G_TYPE_UINT64, &time, NULL); | |
515 | gst_structure_get (s, "ts", G_TYPE_UINT64, &ts, NULL); | |
516 | ||
517 | /* Update last_ts */ | |
518 | last_ts = MAX (last_ts, ts); | |
519 | ||
520 | /* Get the key */ | |
521 | key = g_strdup_printf ("%s.%s.%s|%s.%s.%s", src_element_id, src_element, | |
522 | src, sink_element_id, sink_element, sink); | |
523 | ||
524 | /* Update the latency in the table */ | |
525 | update_latency_table (latencies, key, time); | |
526 | ||
527 | /* Clean up */ | |
528 | g_free (key); | |
529 | ||
530 | have_latency = TRUE; | |
531 | } | |
532 | ||
533 | static void | |
534 | do_element_latency_stats (GstStructure * s) | |
535 | { | |
536 | gchar *key = NULL; | |
537 | const gchar *src = NULL, *element = NULL, *element_id = NULL; | |
538 | guint64 ts = 0, time = 0; | |
539 | ||
540 | /* Get the values from the structure */ | |
541 | src = gst_structure_get_string (s, "src"); | |
542 | element = gst_structure_get_string (s, "element"); | |
543 | element_id = gst_structure_get_string (s, "element-id"); | |
544 | gst_structure_get (s, "time", G_TYPE_UINT64, &time, NULL); | |
545 | gst_structure_get (s, "ts", G_TYPE_UINT64, &ts, NULL); | |
546 | ||
547 | /* Update last_ts */ | |
548 | last_ts = MAX (last_ts, ts); | |
549 | ||
550 | /* Get the key */ | |
551 | key = g_strdup_printf ("%s.%s.%s", element_id, element, src); | |
552 | ||
553 | /* Update the latency in the table */ | |
554 | update_latency_table (element_latencies, key, time); | |
555 | ||
556 | /* Clean up */ | |
557 | g_free (key); | |
558 | ||
559 | have_element_latency = TRUE; | |
560 | } | |
561 | ||
562 | static void | |
563 | do_element_reported_latency (GstStructure * s) | |
564 | { | |
565 | const gchar *element = NULL, *element_id = NULL; | |
566 | guint64 ts = 0, min = 0, max = 0; | |
567 | GstReportedLatency *rl = NULL; | |
568 | ||
569 | /* Get the values from the structure */ | |
570 | element_id = gst_structure_get_string (s, "element-id"); | |
571 | element = gst_structure_get_string (s, "element"); | |
572 | gst_structure_get (s, "min", G_TYPE_UINT64, &min, NULL); | |
573 | gst_structure_get (s, "max", G_TYPE_UINT64, &max, NULL); | |
574 | gst_structure_get (s, "ts", G_TYPE_UINT64, &ts, NULL); | |
575 | ||
576 | /* Update last_ts */ | |
577 | last_ts = MAX (last_ts, ts); | |
578 | ||
579 | /* Insert/Update the key in the table */ | |
580 | rl = g_new0 (GstReportedLatency, 1); | |
581 | rl->element = g_strdup_printf ("%s.%s", element_id, element); | |
582 | rl->ts = ts; | |
583 | rl->min = min; | |
584 | rl->max = max; | |
585 | g_queue_push_tail (element_reported_latencies, rl); | |
586 | ||
587 | have_element_reported_latency = TRUE; | |
588 | } | |
589 | ||
412 | 590 | /* reporting */ |
413 | 591 | |
414 | 592 | static gint |
667 | 845 | elements = g_ptr_array_new_with_free_func (free_element_stats); |
668 | 846 | pads = g_ptr_array_new_with_free_func (free_pad_stats); |
669 | 847 | threads = g_hash_table_new_full (NULL, NULL, NULL, free_thread_stats); |
848 | latencies = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, | |
849 | free_latency_stats); | |
850 | element_latencies = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, | |
851 | free_latency_stats); | |
852 | element_reported_latencies = g_queue_new (); | |
670 | 853 | |
671 | 854 | return TRUE; |
672 | 855 | } |
680 | 863 | g_ptr_array_free (elements, TRUE); |
681 | 864 | if (threads) |
682 | 865 | g_hash_table_destroy (threads); |
866 | ||
867 | if (latencies) { | |
868 | g_hash_table_remove_all (latencies); | |
869 | g_hash_table_destroy (latencies); | |
870 | latencies = NULL; | |
871 | } | |
872 | if (element_latencies) { | |
873 | g_hash_table_remove_all (element_latencies); | |
874 | g_hash_table_destroy (element_latencies); | |
875 | element_latencies = NULL; | |
876 | } | |
877 | if (element_reported_latencies) { | |
878 | g_queue_free_full (element_reported_latencies, free_reported_latency); | |
879 | element_reported_latencies = NULL; | |
880 | } | |
683 | 881 | |
684 | 882 | if (raw_log) |
685 | 883 | g_regex_unref (raw_log); |
757 | 955 | puts (""); |
758 | 956 | g_slist_free (list); |
759 | 957 | } |
958 | ||
959 | /* latency stats */ | |
960 | if (have_latency) { | |
961 | puts ("Latency Statistics:"); | |
962 | g_hash_table_foreach (latencies, (GHFunc) latencies_foreach_print_stats, | |
963 | NULL); | |
964 | puts (""); | |
965 | } | |
966 | ||
967 | /* element latency stats */ | |
968 | if (have_element_latency) { | |
969 | puts ("Element Latency Statistics:"); | |
970 | g_hash_table_foreach (element_latencies, | |
971 | (GHFunc) latencies_foreach_print_stats, NULL); | |
972 | puts (""); | |
973 | } | |
974 | ||
975 | /* element reported latency stats */ | |
976 | if (have_element_reported_latency) { | |
977 | puts ("Element Reported Latency:"); | |
978 | g_queue_foreach (element_reported_latencies, | |
979 | (GFunc) reported_latencies_foreach_print_stats, NULL); | |
980 | puts (""); | |
981 | } | |
760 | 982 | } |
761 | 983 | |
762 | 984 | static void |
811 | 1033 | do_thread_rusage_stats (s); |
812 | 1034 | } else if (!strcmp (name, "proc-rusage")) { |
813 | 1035 | do_proc_rusage_stats (s); |
1036 | } else if (!strcmp (name, "latency")) { | |
1037 | do_latency_stats (s); | |
1038 | } else if (!strcmp (name, "element-latency")) { | |
1039 | do_element_latency_stats (s); | |
1040 | } else if (!strcmp (name, "element-reported-latency")) { | |
1041 | do_element_reported_latency (s); | |
814 | 1042 | } else { |
815 | 1043 | // TODO(ensonic): parse the xxx.class log lines |
816 | 1044 | if (!g_str_has_suffix (data, ".class")) { |