1 /*
2  * This file is part of gtkD.
3  *
4  * gtkD is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License
6  * as published by the Free Software Foundation; either version 3
7  * of the License, or (at your option) any later version, with
8  * some exceptions, please read the COPYING file.
9  *
10  * gtkD is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with gtkD; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
18  */
19 
20 // generated automatically - do not change
21 // find conversion definition on APILookup.txt
22 // implement new conversion functionalities on the wrap.utils pakage
23 
24 
25 module gstreamerc.gstreamertypes;
26 
27 public import gtkc.glibtypes;
28 public import gtkc.gobjecttypes;
29 
30 enum GST_CLOCK_TIME_NONE = 18446744073709551615UL;
31 
32 public alias void* GstAllocationParamsAutoptr;
33 
34 public alias void* GstAllocatorAutoptr;
35 
36 public alias void* GstAtomicQueueAutoptr;
37 
38 public alias void* GstBinAutoptr;
39 
40 public alias void* GstBufferListAutoptr;
41 
42 public alias void* GstBufferPoolAutoptr;
43 
44 public alias void* GstBufferAutoptr;
45 
46 public alias void* GstBusAutoptr;
47 
48 public alias void* GstCapsFeaturesAutoptr;
49 
50 public alias void* GstCapsAutoptr;
51 
52 /**
53  * A datatype to hold the handle to an outstanding sync or async clock callback.
54  */
55 public alias void* GstClockID;
56 
57 /**
58  * A datatype to hold a time, measured in nanoseconds.
59  */
60 public alias ulong GstClockTime;
61 
62 /**
63  * A datatype to hold a time difference, measured in nanoseconds.
64  */
65 public alias long GstClockTimeDiff;
66 
67 public alias void* GstClockAutoptr;
68 
69 public alias void* GstContextAutoptr;
70 
71 public alias void* GstControlBindingAutoptr;
72 
73 public alias void* GstControlSourceAutoptr;
74 
75 public alias void* GstDateTimeAutoptr;
76 
77 public alias void* GstDeviceMonitorAutoptr;
78 
79 public alias void* GstDeviceProviderFactoryAutoptr;
80 
81 public alias void* GstDeviceProviderAutoptr;
82 
83 public alias void* GstDeviceAutoptr;
84 
85 public alias ulong GstElementFactoryListType;
86 
87 public alias void* GstElementFactoryAutoptr;
88 
89 public alias void* GstElementAutoptr;
90 
91 public alias void* GstEventAutoptr;
92 
93 public alias void* GstGhostPadAutoptr;
94 
95 public alias void* GstIteratorAutoptr;
96 
97 public alias void* GstMemoryAutoptr;
98 
99 public alias void* GstMessageAutoptr;
100 
101 public alias void* GstObjectAutoptr;
102 
103 public alias void* GstPadTemplateAutoptr;
104 
105 public alias void* GstPadAutoptr;
106 
107 public alias void* GstParseContextAutoptr;
108 
109 public alias void* GstPipelineAutoptr;
110 
111 public alias void* GstPluginFeatureAutoptr;
112 
113 public alias void* GstPluginAutoptr;
114 
115 public alias void* GstProxyPadAutoptr;
116 
117 public alias void* GstQueryAutoptr;
118 
119 public alias void* GstRegistryAutoptr;
120 
121 public alias void* GstSampleAutoptr;
122 
123 public alias void* GstSegmentAutoptr;
124 
125 public alias void* GstStructureAutoptr;
126 
127 public alias void* GstSystemClockAutoptr;
128 
129 public alias void* GstTagListAutoptr;
130 
131 public alias void* GstTaskPoolAutoptr;
132 
133 public alias void* GstTaskAutoptr;
134 
135 public alias void* GstTocEntryAutoptr;
136 
137 public alias void* GstTocAutoptr;
138 
139 public alias void* GstTracerFactoryAutoptr;
140 
141 public alias void* GstTracerRecordAutoptr;
142 
143 public alias void* GstTracerAutoptr;
144 
145 public alias void* GstTypeFindFactoryAutoptr;
146 
147 public alias void* GstUriAutoptr;
148 
149 public alias void* GstValueArrayAutoptr;
150 
151 /**
152  * Flags for allocators.
153  */
154 public enum GstAllocatorFlags
155 {
156 	/**
157 	 * The allocator has a custom alloc function.
158 	 */
159 	CUSTOM_ALLOC = 16,
160 	/**
161 	 * first flag that can be used for custom purposes
162 	 */
163 	LAST = 1048576,
164 }
165 alias GstAllocatorFlags AllocatorFlags;
166 
167 /**
168  * GstBinFlags are a set of flags specific to bins. Most are set/used
169  * internally. They can be checked using the GST_OBJECT_FLAG_IS_SET () macro,
170  * and (un)set using GST_OBJECT_FLAG_SET () and GST_OBJECT_FLAG_UNSET ().
171  */
172 public enum GstBinFlags
173 {
174 	/**
175 	 * don't resync a state change when elements are
176 	 * added or linked in the bin (Since 1.0.5)
177 	 */
178 	NO_RESYNC = 16384,
179 	/**
180 	 * the last enum in the series of flags for bins.
181 	 * Derived classes can use this as first value in a list of flags.
182 	 */
183 	LAST = 524288,
184 }
185 alias GstBinFlags BinFlags;
186 
187 /**
188  * A set of flags that can be provided to the gst_buffer_copy_into()
189  * function to specify which items should be copied.
190  */
191 public enum GstBufferCopyFlags
192 {
193 	/**
194 	 * copy nothing
195 	 */
196 	NONE = 0,
197 	/**
198 	 * flag indicating that buffer flags should be copied
199 	 */
200 	FLAGS = 1,
201 	/**
202 	 * flag indicating that buffer pts, dts,
203 	 * duration, offset and offset_end should be copied
204 	 */
205 	TIMESTAMPS = 2,
206 	/**
207 	 * flag indicating that buffer meta should be
208 	 * copied
209 	 */
210 	META = 4,
211 	/**
212 	 * flag indicating that buffer memory should be reffed
213 	 * and appended to already existing memory. Unless the memory is marked as
214 	 * NO_SHARE, no actual copy of the memory is made but it is simply reffed.
215 	 * Add @GST_BUFFER_COPY_DEEP to force a real copy.
216 	 */
217 	MEMORY = 8,
218 	/**
219 	 * flag indicating that buffer memory should be
220 	 * merged
221 	 */
222 	MERGE = 16,
223 	/**
224 	 * flag indicating that memory should always be
225 	 * copied instead of reffed (Since 1.2)
226 	 */
227 	DEEP = 32,
228 }
229 alias GstBufferCopyFlags BufferCopyFlags;
230 
231 /**
232  * A set of buffer flags used to describe properties of a #GstBuffer.
233  */
234 public enum GstBufferFlags
235 {
236 	/**
237 	 * the buffer is live data and should be discarded in
238 	 * the PAUSED state.
239 	 */
240 	LIVE = 16,
241 	/**
242 	 * the buffer contains data that should be dropped
243 	 * because it will be clipped against the segment
244 	 * boundaries or because it does not contain data
245 	 * that should be shown to the user.
246 	 */
247 	DECODE_ONLY = 32,
248 	/**
249 	 * the buffer marks a data discontinuity in the stream.
250 	 * This typically occurs after a seek or a dropped buffer
251 	 * from a live or network source.
252 	 */
253 	DISCONT = 64,
254 	/**
255 	 * the buffer timestamps might have a discontinuity
256 	 * and this buffer is a good point to resynchronize.
257 	 */
258 	RESYNC = 128,
259 	/**
260 	 * the buffer data is corrupted.
261 	 */
262 	CORRUPTED = 256,
263 	/**
264 	 * the buffer contains a media specific marker. for
265 	 * video this is typically the end of a frame boundary, for audio
266 	 * this is usually the start of a talkspurt.
267 	 */
268 	MARKER = 512,
269 	/**
270 	 * the buffer contains header information that is
271 	 * needed to decode the following data.
272 	 */
273 	HEADER = 1024,
274 	/**
275 	 * the buffer has been created to fill a gap in the
276 	 * stream and contains media neutral data (elements can
277 	 * switch to optimized code path that ignores the buffer
278 	 * content).
279 	 */
280 	GAP = 2048,
281 	/**
282 	 * the buffer can be dropped without breaking the
283 	 * stream, for example to reduce bandwidth.
284 	 */
285 	DROPPABLE = 4096,
286 	/**
287 	 * this unit cannot be decoded independently.
288 	 */
289 	DELTA_UNIT = 8192,
290 	/**
291 	 * this flag is set when memory of the buffer
292 	 * is added/removed
293 	 */
294 	TAG_MEMORY = 16384,
295 	/**
296 	 * Elements which write to disk or permanent
297 	 * storage should ensure the data is synced after
298 	 * writing the contents of this buffer. (Since 1.6)
299 	 */
300 	SYNC_AFTER = 32768,
301 	/**
302 	 * additional media specific flags can be added starting from
303 	 * this flag.
304 	 */
305 	LAST = 1048576,
306 }
307 alias GstBufferFlags BufferFlags;
308 
309 /**
310  * Additional flags to control the allocation of a buffer
311  */
312 public enum GstBufferPoolAcquireFlags
313 {
314 	/**
315 	 * no flags
316 	 */
317 	NONE = 0,
318 	/**
319 	 * buffer is keyframe
320 	 */
321 	KEY_UNIT = 1,
322 	/**
323 	 * when the bufferpool is empty, acquire_buffer
324 	 * will by default block until a buffer is released into the pool again. Setting
325 	 * this flag makes acquire_buffer return #GST_FLOW_EOS instead of blocking.
326 	 */
327 	DONTWAIT = 2,
328 	/**
329 	 * buffer is discont
330 	 */
331 	DISCONT = 4,
332 	/**
333 	 * last flag, subclasses can use private flags
334 	 * starting from this value.
335 	 */
336 	LAST = 65536,
337 }
338 alias GstBufferPoolAcquireFlags BufferPoolAcquireFlags;
339 
340 /**
341  * The different types of buffering methods.
342  */
343 public enum GstBufferingMode
344 {
345 	/**
346 	 * a small amount of data is buffered
347 	 */
348 	STREAM = 0,
349 	/**
350 	 * the stream is being downloaded
351 	 */
352 	DOWNLOAD = 1,
353 	/**
354 	 * the stream is being downloaded in a ringbuffer
355 	 */
356 	TIMESHIFT = 2,
357 	/**
358 	 * the stream is a live stream
359 	 */
360 	LIVE = 3,
361 }
362 alias GstBufferingMode BufferingMode;
363 
364 /**
365  * The standard flags that a bus may have.
366  */
367 public enum GstBusFlags
368 {
369 	/**
370 	 * The bus is currently dropping all messages
371 	 */
372 	FLUSHING = 16,
373 	/**
374 	 * offset to define more flags
375 	 */
376 	FLAG_LAST = 32,
377 }
378 alias GstBusFlags BusFlags;
379 
380 /**
381  * The result values for a GstBusSyncHandler.
382  */
383 public enum GstBusSyncReply
384 {
385 	/**
386 	 * drop the message
387 	 */
388 	DROP = 0,
389 	/**
390 	 * pass the message to the async queue
391 	 */
392 	PASS = 1,
393 	/**
394 	 * pass message to async queue, continue if message is handled
395 	 */
396 	ASYNC = 2,
397 }
398 alias GstBusSyncReply BusSyncReply;
399 
400 /**
401  * Extra flags for a caps.
402  */
403 public enum GstCapsFlags
404 {
405 	/**
406 	 * Caps has no specific content, but can contain
407 	 * anything.
408 	 */
409 	ANY = 16,
410 }
411 alias GstCapsFlags CapsFlags;
412 
413 /**
414  * Modes of caps intersection
415  *
416  * @GST_CAPS_INTERSECT_ZIG_ZAG tries to preserve overall order of both caps
417  * by iterating on the caps' structures as the following matrix shows:
418  * |[
419  * caps1
420  * +-------------
421  * | 1  2  4  7
422  * caps2 | 3  5  8 10
423  * | 6  9 11 12
424  * ]|
425  * Used when there is no explicit precedence of one caps over the other. e.g.
426  * tee's sink pad getcaps function, it will probe its src pad peers' for their
427  * caps and intersect them with this mode.
428  *
429  * @GST_CAPS_INTERSECT_FIRST is useful when an element wants to preserve
430  * another element's caps priority order when intersecting with its own caps.
431  * Example: If caps1 is [A, B, C] and caps2 is [E, B, D, A], the result
432  * would be [A, B], maintaining the first caps priority on the intersection.
433  */
434 public enum GstCapsIntersectMode
435 {
436 	/**
437 	 * Zig-zags over both caps.
438 	 */
439 	ZIG_ZAG = 0,
440 	/**
441 	 * Keeps the first caps order.
442 	 */
443 	FIRST = 1,
444 }
445 alias GstCapsIntersectMode CapsIntersectMode;
446 
447 /**
448  * The type of the clock entry
449  */
450 public enum GstClockEntryType
451 {
452 	/**
453 	 * a single shot timeout
454 	 */
455 	SINGLE = 0,
456 	/**
457 	 * a periodic timeout request
458 	 */
459 	PERIODIC = 1,
460 }
461 alias GstClockEntryType ClockEntryType;
462 
463 /**
464  * The capabilities of this clock
465  */
466 public enum GstClockFlags
467 {
468 	/**
469 	 * clock can do a single sync timeout request
470 	 */
471 	CAN_DO_SINGLE_SYNC = 16,
472 	/**
473 	 * clock can do a single async timeout request
474 	 */
475 	CAN_DO_SINGLE_ASYNC = 32,
476 	/**
477 	 * clock can do sync periodic timeout requests
478 	 */
479 	CAN_DO_PERIODIC_SYNC = 64,
480 	/**
481 	 * clock can do async periodic timeout callbacks
482 	 */
483 	CAN_DO_PERIODIC_ASYNC = 128,
484 	/**
485 	 * clock's resolution can be changed
486 	 */
487 	CAN_SET_RESOLUTION = 256,
488 	/**
489 	 * clock can be slaved to a master clock
490 	 */
491 	CAN_SET_MASTER = 512,
492 	/**
493 	 * clock needs to be synced before it can be used
494 	 * (Since 1.6)
495 	 */
496 	NEEDS_STARTUP_SYNC = 1024,
497 	/**
498 	 * subclasses can add additional flags starting from this flag
499 	 */
500 	LAST = 4096,
501 }
502 alias GstClockFlags ClockFlags;
503 
504 /**
505  * The return value of a clock operation.
506  */
507 public enum GstClockReturn
508 {
509 	/**
510 	 * The operation succeeded.
511 	 */
512 	OK = 0,
513 	/**
514 	 * The operation was scheduled too late.
515 	 */
516 	EARLY = 1,
517 	/**
518 	 * The clockID was unscheduled
519 	 */
520 	UNSCHEDULED = 2,
521 	/**
522 	 * The ClockID is busy
523 	 */
524 	BUSY = 3,
525 	/**
526 	 * A bad time was provided to a function.
527 	 */
528 	BADTIME = 4,
529 	/**
530 	 * An error occurred
531 	 */
532 	ERROR = 5,
533 	/**
534 	 * Operation is not supported
535 	 */
536 	UNSUPPORTED = 6,
537 	/**
538 	 * The ClockID is done waiting
539 	 */
540 	DONE = 7,
541 }
542 alias GstClockReturn ClockReturn;
543 
544 /**
545  * The different kind of clocks.
546  */
547 public enum GstClockType
548 {
549 	/**
550 	 * time since Epoch
551 	 */
552 	REALTIME = 0,
553 	/**
554 	 * monotonic time since some unspecified starting
555 	 * point
556 	 */
557 	MONOTONIC = 1,
558 	/**
559 	 * some other time source is used (Since 1.0.5)
560 	 */
561 	OTHER = 2,
562 }
563 alias GstClockType ClockType;
564 
565 /**
566  * Core errors are errors inside the core GStreamer library.
567  */
568 public enum GstCoreError
569 {
570 	/**
571 	 * a general error which doesn't fit in any other
572 	 * category.  Make sure you add a custom message to the error call.
573 	 */
574 	FAILED = 1,
575 	/**
576 	 * do not use this except as a placeholder for
577 	 * deciding where to go while developing code.
578 	 */
579 	TOO_LAZY = 2,
580 	/**
581 	 * use this when you do not want to implement
582 	 * this functionality yet.
583 	 */
584 	NOT_IMPLEMENTED = 3,
585 	/**
586 	 * used for state change errors.
587 	 */
588 	STATE_CHANGE = 4,
589 	/**
590 	 * used for pad-related errors.
591 	 */
592 	PAD = 5,
593 	/**
594 	 * used for thread-related errors.
595 	 */
596 	THREAD = 6,
597 	/**
598 	 * used for negotiation-related errors.
599 	 */
600 	NEGOTIATION = 7,
601 	/**
602 	 * used for event-related errors.
603 	 */
604 	EVENT = 8,
605 	/**
606 	 * used for seek-related errors.
607 	 */
608 	SEEK = 9,
609 	/**
610 	 * used for caps-related errors.
611 	 */
612 	CAPS = 10,
613 	/**
614 	 * used for negotiation-related errors.
615 	 */
616 	TAG = 11,
617 	/**
618 	 * used if a plugin is missing.
619 	 */
620 	MISSING_PLUGIN = 12,
621 	/**
622 	 * used for clock related errors.
623 	 */
624 	CLOCK = 13,
625 	/**
626 	 * used if functionality has been disabled at
627 	 * compile time.
628 	 */
629 	DISABLED = 14,
630 	/**
631 	 * the number of core error types.
632 	 */
633 	NUM_ERRORS = 15,
634 }
635 alias GstCoreError CoreError;
636 
637 /**
638  * These are some terminal style flags you can use when creating your
639  * debugging categories to make them stand out in debugging output.
640  */
641 public enum GstDebugColorFlags
642 {
643 	/**
644 	 * Use black as foreground color.
645 	 */
646 	FG_BLACK = 0,
647 	/**
648 	 * Use red as foreground color.
649 	 */
650 	FG_RED = 1,
651 	/**
652 	 * Use green as foreground color.
653 	 */
654 	FG_GREEN = 2,
655 	/**
656 	 * Use yellow as foreground color.
657 	 */
658 	FG_YELLOW = 3,
659 	/**
660 	 * Use blue as foreground color.
661 	 */
662 	FG_BLUE = 4,
663 	/**
664 	 * Use magenta as foreground color.
665 	 */
666 	FG_MAGENTA = 5,
667 	/**
668 	 * Use cyan as foreground color.
669 	 */
670 	FG_CYAN = 6,
671 	/**
672 	 * Use white as foreground color.
673 	 */
674 	FG_WHITE = 7,
675 	/**
676 	 * Use black as background color.
677 	 */
678 	BG_BLACK = 0,
679 	/**
680 	 * Use red as background color.
681 	 */
682 	BG_RED = 16,
683 	/**
684 	 * Use green as background color.
685 	 */
686 	BG_GREEN = 32,
687 	/**
688 	 * Use yellow as background color.
689 	 */
690 	BG_YELLOW = 48,
691 	/**
692 	 * Use blue as background color.
693 	 */
694 	BG_BLUE = 64,
695 	/**
696 	 * Use magenta as background color.
697 	 */
698 	BG_MAGENTA = 80,
699 	/**
700 	 * Use cyan as background color.
701 	 */
702 	BG_CYAN = 96,
703 	/**
704 	 * Use white as background color.
705 	 */
706 	BG_WHITE = 112,
707 	/**
708 	 * Make the output bold.
709 	 */
710 	BOLD = 256,
711 	/**
712 	 * Underline the output.
713 	 */
714 	UNDERLINE = 512,
715 }
716 alias GstDebugColorFlags DebugColorFlags;
717 
718 public enum GstDebugColorMode
719 {
720 	/**
721 	 * Do not use colors in logs.
722 	 */
723 	OFF = 0,
724 	/**
725 	 * Paint logs in a platform-specific way.
726 	 */
727 	ON = 1,
728 	/**
729 	 * Paint logs with UNIX terminal color codes
730 	 * no matter what platform GStreamer is running on.
731 	 */
732 	UNIX = 2,
733 }
734 alias GstDebugColorMode DebugColorMode;
735 
736 /**
737  * Available details for pipeline graphs produced by GST_DEBUG_BIN_TO_DOT_FILE()
738  * and GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS().
739  */
740 public enum GstDebugGraphDetails
741 {
742 	/**
743 	 * show caps-name on edges
744 	 */
745 	MEDIA_TYPE = 1,
746 	/**
747 	 * show caps-details on edges
748 	 */
749 	CAPS_DETAILS = 2,
750 	/**
751 	 * show modified parameters on
752 	 * elements
753 	 */
754 	NON_DEFAULT_PARAMS = 4,
755 	/**
756 	 * show element states
757 	 */
758 	STATES = 8,
759 	/**
760 	 * show full element parameter values even
761 	 * if they are very long
762 	 */
763 	FULL_PARAMS = 16,
764 	/**
765 	 * show all the typical details that one might want
766 	 */
767 	ALL = 15,
768 	/**
769 	 * show all details regardless of how large or
770 	 * verbose they make the resulting output
771 	 */
772 	VERBOSE = -1,
773 }
774 alias GstDebugGraphDetails DebugGraphDetails;
775 
776 /**
777  * The level defines the importance of a debugging message. The more important a
778  * message is, the greater the probability that the debugging system outputs it.
779  */
780 public enum GstDebugLevel
781 {
782 	/**
783 	 * No debugging level specified or desired. Used to deactivate
784 	 * debugging output.
785 	 */
786 	NONE = 0,
787 	/**
788 	 * Error messages are to be used only when an error occurred
789 	 * that stops the application from keeping working correctly.
790 	 * An examples is gst_element_error, which outputs a message with this priority.
791 	 * It does not mean that the application is terminating as with g_error.
792 	 */
793 	ERROR = 1,
794 	/**
795 	 * Warning messages are to inform about abnormal behaviour
796 	 * that could lead to problems or weird behaviour later on. An example of this
797 	 * would be clocking issues ("your computer is pretty slow") or broken input
798 	 * data ("Can't synchronize to stream.")
799 	 */
800 	WARNING = 2,
801 	/**
802 	 * Fixme messages are messages that indicate that something
803 	 * in the executed code path is not fully implemented or handled yet. Note
804 	 * that this does not replace proper error handling in any way, the purpose
805 	 * of this message is to make it easier to spot incomplete/unfinished pieces
806 	 * of code when reading the debug log.
807 	 */
808 	FIXME = 3,
809 	/**
810 	 * Informational messages should be used to keep the developer
811 	 * updated about what is happening.
812 	 * Examples where this should be used are when a typefind function has
813 	 * successfully determined the type of the stream or when an mp3 plugin detects
814 	 * the format to be used. ("This file has mono sound.")
815 	 */
816 	INFO = 4,
817 	/**
818 	 * Debugging messages should be used when something common
819 	 * happens that is not the expected default behavior, or something that's
820 	 * useful to know but doesn't happen all the time (ie. per loop iteration or
821 	 * buffer processed or event handled).
822 	 * An example would be notifications about state changes or receiving/sending
823 	 * of events.
824 	 */
825 	DEBUG = 5,
826 	/**
827 	 * Log messages are messages that are very common but might be
828 	 * useful to know. As a rule of thumb a pipeline that is running as expected
829 	 * should never output anything else but LOG messages whilst processing data.
830 	 * Use this log level to log recurring information in chain functions and
831 	 * loop functions, for example.
832 	 */
833 	LOG = 6,
834 	/**
835 	 * Tracing-related messages.
836 	 * Examples for this are referencing/dereferencing of objects.
837 	 */
838 	TRACE = 7,
839 	/**
840 	 * memory dump messages are used to log (small) chunks of
841 	 * data as memory dumps in the log. They will be displayed as hexdump with
842 	 * ASCII characters.
843 	 */
844 	MEMDUMP = 9,
845 	/**
846 	 * The number of defined debugging levels.
847 	 */
848 	COUNT = 10,
849 }
850 alias GstDebugLevel DebugLevel;
851 
852 /**
853  * The standard flags that an element may have.
854  */
855 public enum GstElementFlags
856 {
857 	/**
858 	 * ignore state changes from parent
859 	 */
860 	LOCKED_STATE = 16,
861 	/**
862 	 * the element is a sink
863 	 */
864 	SINK = 32,
865 	/**
866 	 * the element is a source.
867 	 */
868 	SOURCE = 64,
869 	/**
870 	 * the element can provide a clock
871 	 */
872 	PROVIDE_CLOCK = 128,
873 	/**
874 	 * the element requires a clock
875 	 */
876 	REQUIRE_CLOCK = 256,
877 	/**
878 	 * the element can use an index
879 	 */
880 	INDEXABLE = 512,
881 	/**
882 	 * offset to define more flags
883 	 */
884 	LAST = 16384,
885 }
886 alias GstElementFlags ElementFlags;
887 
888 /**
889  * #GstEventType lists the standard event types that can be sent in a pipeline.
890  *
891  * The custom event types can be used for private messages between elements
892  * that can't be expressed using normal
893  * GStreamer buffer passing semantics. Custom events carry an arbitrary
894  * #GstStructure.
895  * Specific custom events are distinguished by the name of the structure.
896  */
897 public enum GstEventType
898 {
899 	/**
900 	 * unknown event.
901 	 */
902 	UNKNOWN = 0,
903 	/**
904 	 * Start a flush operation. This event clears all data
905 	 * from the pipeline and unblock all streaming threads.
906 	 */
907 	FLUSH_START = 2563,
908 	/**
909 	 * Stop a flush operation. This event resets the
910 	 * running-time of the pipeline.
911 	 */
912 	FLUSH_STOP = 5127,
913 	/**
914 	 * Event to mark the start of a new stream. Sent before any
915 	 * other serialized event and only sent at the start of a new stream,
916 	 * not after flushing seeks.
917 	 */
918 	STREAM_START = 10254,
919 	/**
920 	 * #GstCaps event. Notify the pad of a new media type.
921 	 */
922 	CAPS = 12814,
923 	/**
924 	 * A new media segment follows in the dataflow. The
925 	 * segment events contains information for clipping buffers and
926 	 * converting buffer timestamps to running-time and
927 	 * stream-time.
928 	 */
929 	SEGMENT = 17934,
930 	/**
931 	 * A new set of metadata tags has been found in the stream.
932 	 */
933 	TAG = 20510,
934 	/**
935 	 * Notification of buffering requirements. Currently not
936 	 * used yet.
937 	 */
938 	BUFFERSIZE = 23054,
939 	/**
940 	 * An event that sinks turn into a message. Used to
941 	 * send messages that should be emitted in sync with
942 	 * rendering.
943 	 */
944 	SINK_MESSAGE = 25630,
945 	/**
946 	 * End-Of-Stream. No more data is to be expected to follow
947 	 * without a SEGMENT event.
948 	 */
949 	EOS = 28174,
950 	/**
951 	 * An event which indicates that a new table of contents (TOC)
952 	 * was found or updated.
953 	 */
954 	TOC = 30750,
955 	/**
956 	 * An event which indicates that new or updated
957 	 * encryption information has been found in the stream.
958 	 */
959 	PROTECTION = 33310,
960 	/**
961 	 * Marks the end of a segment playback.
962 	 */
963 	SEGMENT_DONE = 38406,
964 	/**
965 	 * Marks a gap in the datastream.
966 	 */
967 	GAP = 40966,
968 	/**
969 	 * A quality message. Used to indicate to upstream elements
970 	 * that the downstream elements should adjust their processing
971 	 * rate.
972 	 */
973 	QOS = 48641,
974 	/**
975 	 * A request for a new playback position and rate.
976 	 */
977 	SEEK = 51201,
978 	/**
979 	 * Navigation events are usually used for communicating
980 	 * user requests, such as mouse or keyboard movements,
981 	 * to upstream elements.
982 	 */
983 	NAVIGATION = 53761,
984 	/**
985 	 * Notification of new latency adjustment. Sinks will use
986 	 * the latency information to adjust their synchronisation.
987 	 */
988 	LATENCY = 56321,
989 	/**
990 	 * A request for stepping through the media. Sinks will usually
991 	 * execute the step operation.
992 	 */
993 	STEP = 58881,
994 	/**
995 	 * A request for upstream renegotiating caps and reconfiguring.
996 	 */
997 	RECONFIGURE = 61441,
998 	/**
999 	 * A request for a new playback position based on TOC
1000 	 * entry's UID.
1001 	 */
1002 	TOC_SELECT = 64001,
1003 	/**
1004 	 * Upstream custom event
1005 	 */
1006 	CUSTOM_UPSTREAM = 69121,
1007 	/**
1008 	 * Downstream custom event that travels in the
1009 	 * data flow.
1010 	 */
1011 	CUSTOM_DOWNSTREAM = 71686,
1012 	/**
1013 	 * Custom out-of-band downstream event.
1014 	 */
1015 	CUSTOM_DOWNSTREAM_OOB = 74242,
1016 	/**
1017 	 * Custom sticky downstream event.
1018 	 */
1019 	CUSTOM_DOWNSTREAM_STICKY = 76830,
1020 	/**
1021 	 * Custom upstream or downstream event.
1022 	 * In-band when travelling downstream.
1023 	 */
1024 	CUSTOM_BOTH = 79367,
1025 	/**
1026 	 * Custom upstream or downstream out-of-band event.
1027 	 */
1028 	CUSTOM_BOTH_OOB = 81923,
1029 }
1030 alias GstEventType EventType;
1031 
1032 /**
1033  * #GstEventTypeFlags indicate the aspects of the different #GstEventType
1034  * values. You can get the type flags of a #GstEventType with the
1035  * gst_event_type_get_flags() function.
1036  */
1037 public enum GstEventTypeFlags
1038 {
1039 	/**
1040 	 * Set if the event can travel upstream.
1041 	 */
1042 	UPSTREAM = 1,
1043 	/**
1044 	 * Set if the event can travel downstream.
1045 	 */
1046 	DOWNSTREAM = 2,
1047 	/**
1048 	 * Set if the event should be serialized with data
1049 	 * flow.
1050 	 */
1051 	SERIALIZED = 4,
1052 	/**
1053 	 * Set if the event is sticky on the pads.
1054 	 */
1055 	STICKY = 8,
1056 	/**
1057 	 * Multiple sticky events can be on a pad, each
1058 	 * identified by the event name.
1059 	 */
1060 	STICKY_MULTI = 16,
1061 }
1062 alias GstEventTypeFlags EventTypeFlags;
1063 
1064 /**
1065  * The result of passing data to a pad.
1066  *
1067  * Note that the custom return values should not be exposed outside of the
1068  * element scope.
1069  */
1070 public enum GstFlowReturn
1071 {
1072 	/**
1073 	 * Pre-defined custom success code.
1074 	 */
1075 	CUSTOM_SUCCESS_2 = 102,
1076 	/**
1077 	 * Pre-defined custom success code (define your
1078 	 * custom success code to this to avoid compiler
1079 	 * warnings).
1080 	 */
1081 	CUSTOM_SUCCESS_1 = 101,
1082 	/**
1083 	 * Elements can use values starting from
1084 	 * this (and higher) to define custom success
1085 	 * codes.
1086 	 */
1087 	CUSTOM_SUCCESS = 100,
1088 	/**
1089 	 * Data passing was ok.
1090 	 */
1091 	OK = 0,
1092 	/**
1093 	 * Pad is not linked.
1094 	 */
1095 	NOT_LINKED = -1,
1096 	/**
1097 	 * Pad is flushing.
1098 	 */
1099 	FLUSHING = -2,
1100 	/**
1101 	 * Pad is EOS.
1102 	 */
1103 	EOS = -3,
1104 	/**
1105 	 * Pad is not negotiated.
1106 	 */
1107 	NOT_NEGOTIATED = -4,
1108 	/**
1109 	 * Some (fatal) error occurred. Element generating
1110 	 * this error should post an error message with more
1111 	 * details.
1112 	 */
1113 	ERROR = -5,
1114 	/**
1115 	 * This operation is not supported.
1116 	 */
1117 	NOT_SUPPORTED = -6,
1118 	/**
1119 	 * Elements can use values starting from
1120 	 * this (and lower) to define custom error codes.
1121 	 */
1122 	CUSTOM_ERROR = -100,
1123 	/**
1124 	 * Pre-defined custom error code (define your
1125 	 * custom error code to this to avoid compiler
1126 	 * warnings).
1127 	 */
1128 	CUSTOM_ERROR_1 = -101,
1129 	/**
1130 	 * Pre-defined custom error code.
1131 	 */
1132 	CUSTOM_ERROR_2 = -102,
1133 }
1134 alias GstFlowReturn FlowReturn;
1135 
1136 /**
1137  * Standard predefined formats
1138  */
1139 public enum GstFormat
1140 {
1141 	/**
1142 	 * undefined format
1143 	 */
1144 	UNDEFINED = 0,
1145 	/**
1146 	 * the default format of the pad/element. This can be
1147 	 * samples for raw audio, frames/fields for raw video (some, but not all,
1148 	 * elements support this; use @GST_FORMAT_TIME if you don't have a good
1149 	 * reason to query for samples/frames)
1150 	 */
1151 	DEFAULT = 1,
1152 	/**
1153 	 * bytes
1154 	 */
1155 	BYTES = 2,
1156 	/**
1157 	 * time in nanoseconds
1158 	 */
1159 	TIME = 3,
1160 	/**
1161 	 * buffers (few, if any, elements implement this as of
1162 	 * May 2009)
1163 	 */
1164 	BUFFERS = 4,
1165 	/**
1166 	 * percentage of stream (few, if any, elements implement
1167 	 * this as of May 2009)
1168 	 */
1169 	PERCENT = 5,
1170 }
1171 alias GstFormat Format;
1172 
1173 /**
1174  * The result of a #GstIteratorItemFunction.
1175  */
1176 public enum GstIteratorItem
1177 {
1178 	/**
1179 	 * Skip this item
1180 	 */
1181 	SKIP = 0,
1182 	/**
1183 	 * Return item
1184 	 */
1185 	PASS = 1,
1186 	/**
1187 	 * Stop after this item.
1188 	 */
1189 	END = 2,
1190 }
1191 alias GstIteratorItem IteratorItem;
1192 
1193 /**
1194  * The result of gst_iterator_next().
1195  */
1196 public enum GstIteratorResult
1197 {
1198 	/**
1199 	 * No more items in the iterator
1200 	 */
1201 	DONE = 0,
1202 	/**
1203 	 * An item was retrieved
1204 	 */
1205 	OK = 1,
1206 	/**
1207 	 * Datastructure changed while iterating
1208 	 */
1209 	RESYNC = 2,
1210 	/**
1211 	 * An error happened
1212 	 */
1213 	ERROR = 3,
1214 }
1215 alias GstIteratorResult IteratorResult;
1216 
1217 /**
1218  * Library errors are for errors from the library being used by elements
1219  * (initializing, finalizing, settings, ...)
1220  */
1221 public enum GstLibraryError
1222 {
1223 	/**
1224 	 * a general error which doesn't fit in any other
1225 	 * category.  Make sure you add a custom message to the error call.
1226 	 */
1227 	FAILED = 1,
1228 	/**
1229 	 * do not use this except as a placeholder for
1230 	 * deciding where to go while developing code.
1231 	 */
1232 	TOO_LAZY = 2,
1233 	/**
1234 	 * used when the library could not be opened.
1235 	 */
1236 	INIT = 3,
1237 	/**
1238 	 * used when the library could not be closed.
1239 	 */
1240 	SHUTDOWN = 4,
1241 	/**
1242 	 * used when the library doesn't accept settings.
1243 	 */
1244 	SETTINGS = 5,
1245 	/**
1246 	 * used when the library generated an encoding error.
1247 	 */
1248 	ENCODE = 6,
1249 	/**
1250 	 * the number of library error types.
1251 	 */
1252 	NUM_ERRORS = 7,
1253 }
1254 alias GstLibraryError LibraryError;
1255 
1256 /**
1257  * Flags used when locking miniobjects
1258  */
1259 public enum GstLockFlags
1260 {
1261 	/**
1262 	 * lock for read access
1263 	 */
1264 	READ = 1,
1265 	/**
1266 	 * lock for write access
1267 	 */
1268 	WRITE = 2,
1269 	/**
1270 	 * lock for exclusive access
1271 	 */
1272 	EXCLUSIVE = 4,
1273 	/**
1274 	 * first flag that can be used for custom purposes
1275 	 */
1276 	LAST = 256,
1277 }
1278 alias GstLockFlags LockFlags;
1279 
1280 /**
1281  * Flags used when mapping memory
1282  */
1283 public enum GstMapFlags
1284 {
1285 	/**
1286 	 * map for read access
1287 	 */
1288 	READ = 1,
1289 	/**
1290 	 * map for write access
1291 	 */
1292 	WRITE = 2,
1293 	/**
1294 	 * first flag that can be used for custom purposes
1295 	 */
1296 	FLAG_LAST = 65536,
1297 }
1298 alias GstMapFlags MapFlags;
1299 
1300 /**
1301  * Flags for wrapped memory.
1302  */
1303 public enum GstMemoryFlags
1304 {
1305 	/**
1306 	 * memory is readonly. It is not allowed to map the
1307 	 * memory with #GST_MAP_WRITE.
1308 	 */
1309 	READONLY = 2,
1310 	/**
1311 	 * memory must not be shared. Copies will have to be
1312 	 * made when this memory needs to be shared between buffers.
1313 	 */
1314 	NO_SHARE = 16,
1315 	/**
1316 	 * the memory prefix is filled with 0 bytes
1317 	 */
1318 	ZERO_PREFIXED = 32,
1319 	/**
1320 	 * the memory padding is filled with 0 bytes
1321 	 */
1322 	ZERO_PADDED = 64,
1323 	/**
1324 	 * the memory is physically contiguous. (Since 1.2)
1325 	 */
1326 	PHYSICALLY_CONTIGUOUS = 128,
1327 	/**
1328 	 * the memory can't be mapped via gst_memory_map() without any preconditions. (Since 1.2)
1329 	 */
1330 	NOT_MAPPABLE = 256,
1331 	/**
1332 	 * first flag that can be used for custom purposes
1333 	 */
1334 	LAST = 1048576,
1335 }
1336 alias GstMemoryFlags MemoryFlags;
1337 
1338 /**
1339  * The different message types that are available.
1340  */
1341 public enum GstMessageType : uint
1342 {
1343 	/**
1344 	 * an undefined message
1345 	 */
1346 	UNKNOWN = 0,
1347 	/**
1348 	 * end-of-stream reached in a pipeline. The application will
1349 	 * only receive this message in the PLAYING state and every time it sets a
1350 	 * pipeline to PLAYING that is in the EOS state. The application can perform a
1351 	 * flushing seek in the pipeline, which will undo the EOS state again.
1352 	 */
1353 	EOS = 1,
1354 	/**
1355 	 * an error occurred. When the application receives an error
1356 	 * message it should stop playback of the pipeline and not assume that more
1357 	 * data will be played.
1358 	 */
1359 	ERROR = 2,
1360 	/**
1361 	 * a warning occurred.
1362 	 */
1363 	WARNING = 4,
1364 	/**
1365 	 * an info message occurred
1366 	 */
1367 	INFO = 8,
1368 	/**
1369 	 * a tag was found.
1370 	 */
1371 	TAG = 16,
1372 	/**
1373 	 * the pipeline is buffering. When the application
1374 	 * receives a buffering message in the PLAYING state for a non-live pipeline it
1375 	 * must PAUSE the pipeline until the buffering completes, when the percentage
1376 	 * field in the message is 100%. For live pipelines, no action must be
1377 	 * performed and the buffering percentage can be used to inform the user about
1378 	 * the progress.
1379 	 */
1380 	BUFFERING = 32,
1381 	/**
1382 	 * a state change happened
1383 	 */
1384 	STATE_CHANGED = 64,
1385 	/**
1386 	 * an element changed state in a streaming thread.
1387 	 * This message is deprecated.
1388 	 */
1389 	STATE_DIRTY = 128,
1390 	/**
1391 	 * a stepping operation finished.
1392 	 */
1393 	STEP_DONE = 256,
1394 	/**
1395 	 * an element notifies its capability of providing
1396 	 * a clock. This message is used internally and
1397 	 * never forwarded to the application.
1398 	 */
1399 	CLOCK_PROVIDE = 512,
1400 	/**
1401 	 * The current clock as selected by the pipeline became
1402 	 * unusable. The pipeline will select a new clock on
1403 	 * the next PLAYING state change. The application
1404 	 * should set the pipeline to PAUSED and back to
1405 	 * PLAYING when this message is received.
1406 	 */
1407 	CLOCK_LOST = 1024,
1408 	/**
1409 	 * a new clock was selected in the pipeline.
1410 	 */
1411 	NEW_CLOCK = 2048,
1412 	/**
1413 	 * the structure of the pipeline changed. This
1414 	 * message is used internally and never forwarded to the application.
1415 	 */
1416 	STRUCTURE_CHANGE = 4096,
1417 	/**
1418 	 * status about a stream, emitted when it starts,
1419 	 * stops, errors, etc..
1420 	 */
1421 	STREAM_STATUS = 8192,
1422 	/**
1423 	 * message posted by the application, possibly
1424 	 * via an application-specific element.
1425 	 */
1426 	APPLICATION = 16384,
1427 	/**
1428 	 * element-specific message, see the specific element's
1429 	 * documentation
1430 	 */
1431 	ELEMENT = 32768,
1432 	/**
1433 	 * pipeline started playback of a segment. This
1434 	 * message is used internally and never forwarded to the application.
1435 	 */
1436 	SEGMENT_START = 65536,
1437 	/**
1438 	 * pipeline completed playback of a segment. This
1439 	 * message is forwarded to the application after all elements that posted
1440 	 * @GST_MESSAGE_SEGMENT_START posted a GST_MESSAGE_SEGMENT_DONE message.
1441 	 */
1442 	SEGMENT_DONE = 131072,
1443 	/**
1444 	 * The duration of a pipeline changed. The
1445 	 * application can get the new duration with a duration query.
1446 	 */
1447 	DURATION_CHANGED = 262144,
1448 	/**
1449 	 * Posted by elements when their latency changes. The
1450 	 * application should recalculate and distribute a new latency.
1451 	 */
1452 	LATENCY = 524288,
1453 	/**
1454 	 * Posted by elements when they start an ASYNC
1455 	 * #GstStateChange. This message is not forwarded to the application but is used
1456 	 * internally.
1457 	 */
1458 	ASYNC_START = 1048576,
1459 	/**
1460 	 * Posted by elements when they complete an ASYNC
1461 	 * #GstStateChange. The application will only receive this message from the toplevel
1462 	 * pipeline.
1463 	 */
1464 	ASYNC_DONE = 2097152,
1465 	/**
1466 	 * Posted by elements when they want the pipeline to
1467 	 * change state. This message is a suggestion to the application which can
1468 	 * decide to perform the state change on (part of) the pipeline.
1469 	 */
1470 	REQUEST_STATE = 4194304,
1471 	/**
1472 	 * A stepping operation was started.
1473 	 */
1474 	STEP_START = 8388608,
1475 	/**
1476 	 * A buffer was dropped or an element changed its processing
1477 	 * strategy for Quality of Service reasons.
1478 	 */
1479 	QOS = 16777216,
1480 	/**
1481 	 * A progress message.
1482 	 */
1483 	PROGRESS = 33554432,
1484 	/**
1485 	 * A new table of contents (TOC) was found or previously found TOC
1486 	 * was updated.
1487 	 */
1488 	TOC = 67108864,
1489 	/**
1490 	 * Message to request resetting the pipeline's
1491 	 * running time from the pipeline. This is an internal message which
1492 	 * applications will likely never receive.
1493 	 */
1494 	RESET_TIME = 134217728,
1495 	/**
1496 	 * Message indicating start of a new stream. Useful
1497 	 * e.g. when using playbin in gapless playback mode, to get notified when
1498 	 * the next title actually starts playing (which will be some time after
1499 	 * the URI for the next title has been set).
1500 	 */
1501 	STREAM_START = 268435456,
1502 	/**
1503 	 * Message indicating that an element wants a specific context (Since 1.2)
1504 	 */
1505 	NEED_CONTEXT = 536870912,
1506 	/**
1507 	 * Message indicating that an element created a context (Since 1.2)
1508 	 */
1509 	HAVE_CONTEXT = 1073741824,
1510 	/**
1511 	 * Message is an extended message type (see below).
1512 	 * These extended message IDs can't be used directly with mask-based API
1513 	 * like gst_bus_poll() or gst_bus_timed_pop_filtered(), but you can still
1514 	 * filter for GST_MESSAGE_EXTENDED and then check the result for the
1515 	 * specific type. (Since 1.4)
1516 	 */
1517 	EXTENDED = 2147483648,
1518 	/**
1519 	 * Message indicating a #GstDevice was added to
1520 	 * a #GstDeviceProvider (Since 1.4)
1521 	 */
1522 	DEVICE_ADDED = 2147483649,
1523 	/**
1524 	 * Message indicating a #GstDevice was removed
1525 	 * from a #GstDeviceProvider (Since 1.4)
1526 	 */
1527 	DEVICE_REMOVED = 2147483650,
1528 	/**
1529 	 * mask for all of the above messages.
1530 	 */
1531 	ANY = 4294967295,
1532 }
1533 alias GstMessageType MessageType;
1534 
1535 /**
1536  * Extra metadata flags.
1537  */
1538 public enum GstMetaFlags
1539 {
1540 	/**
1541 	 * no flags
1542 	 */
1543 	NONE = 0,
1544 	/**
1545 	 * metadata should not be modified
1546 	 */
1547 	READONLY = 1,
1548 	/**
1549 	 * metadata is managed by a bufferpool
1550 	 */
1551 	POOLED = 2,
1552 	/**
1553 	 * metadata should not be removed
1554 	 */
1555 	LOCKED = 4,
1556 	/**
1557 	 * additional flags can be added starting from this flag.
1558 	 */
1559 	LAST = 65536,
1560 }
1561 alias GstMetaFlags MetaFlags;
1562 
1563 /**
1564  * Flags for the mini object
1565  */
1566 public enum GstMiniObjectFlags
1567 {
1568 	/**
1569 	 * the object can be locked and unlocked with
1570 	 * gst_mini_object_lock() and gst_mini_object_unlock().
1571 	 */
1572 	LOCKABLE = 1,
1573 	/**
1574 	 * the object is permanently locked in
1575 	 * READONLY mode. Only read locks can be performed on the object.
1576 	 */
1577 	LOCK_READONLY = 2,
1578 	/**
1579 	 * first flag that can be used by subclasses.
1580 	 */
1581 	LAST = 16,
1582 }
1583 alias GstMiniObjectFlags MiniObjectFlags;
1584 
1585 /**
1586  * The standard flags that an gstobject may have.
1587  */
1588 public enum GstObjectFlags
1589 {
1590 	/**
1591 	 * subclasses can add additional flags starting from this flag
1592 	 */
1593 	LAST = 16,
1594 }
1595 alias GstObjectFlags ObjectFlags;
1596 
1597 /**
1598  * The direction of a pad.
1599  */
1600 public enum GstPadDirection
1601 {
1602 	/**
1603 	 * direction is unknown.
1604 	 */
1605 	UNKNOWN = 0,
1606 	/**
1607 	 * the pad is a source pad.
1608 	 */
1609 	SRC = 1,
1610 	/**
1611 	 * the pad is a sink pad.
1612 	 */
1613 	SINK = 2,
1614 }
1615 alias GstPadDirection PadDirection;
1616 
1617 /**
1618  * Pad state flags
1619  */
1620 public enum GstPadFlags
1621 {
1622 	/**
1623 	 * is dataflow on a pad blocked
1624 	 */
1625 	BLOCKED = 16,
1626 	/**
1627 	 * is pad flushing
1628 	 */
1629 	FLUSHING = 32,
1630 	/**
1631 	 * is pad in EOS state
1632 	 */
1633 	EOS = 64,
1634 	/**
1635 	 * is pad currently blocking on a buffer or event
1636 	 */
1637 	BLOCKING = 128,
1638 	/**
1639 	 * ensure that there is a parent object before calling
1640 	 * into the pad callbacks.
1641 	 */
1642 	NEED_PARENT = 256,
1643 	/**
1644 	 * the pad should be reconfigured/renegotiated.
1645 	 * The flag has to be unset manually after
1646 	 * reconfiguration happened.
1647 	 */
1648 	NEED_RECONFIGURE = 512,
1649 	/**
1650 	 * the pad has pending events
1651 	 */
1652 	PENDING_EVENTS = 1024,
1653 	/**
1654 	 * the pad is using fixed caps. This means that
1655 	 * once the caps are set on the pad, the default caps query function
1656 	 * will only return those caps.
1657 	 */
1658 	FIXED_CAPS = 2048,
1659 	/**
1660 	 * the default event and query handler will forward
1661 	 * all events and queries to the internally linked pads
1662 	 * instead of discarding them.
1663 	 */
1664 	PROXY_CAPS = 4096,
1665 	/**
1666 	 * the default query handler will forward
1667 	 * allocation queries to the internally linked pads
1668 	 * instead of discarding them.
1669 	 */
1670 	PROXY_ALLOCATION = 8192,
1671 	/**
1672 	 * the default query handler will forward
1673 	 * scheduling queries to the internally linked pads
1674 	 * instead of discarding them.
1675 	 */
1676 	PROXY_SCHEDULING = 16384,
1677 	/**
1678 	 * the default accept-caps handler will check
1679 	 * it the caps intersect the query-caps result instead
1680 	 * of checking for a subset. This is interesting for
1681 	 * parsers that can accept incompletely specified caps.
1682 	 */
1683 	ACCEPT_INTERSECT = 32768,
1684 	/**
1685 	 * the default accept-caps handler will use
1686 	 * the template pad caps instead of query caps to
1687 	 * compare with the accept caps. Use this in combination
1688 	 * with %GST_PAD_FLAG_ACCEPT_INTERSECT. (Since 1.6)
1689 	 */
1690 	ACCEPT_TEMPLATE = 65536,
1691 	/**
1692 	 * offset to define more flags
1693 	 */
1694 	LAST = 1048576,
1695 }
1696 alias GstPadFlags PadFlags;
1697 
1698 /**
1699  * The amount of checking to be done when linking pads. @GST_PAD_LINK_CHECK_CAPS
1700  * and @GST_PAD_LINK_CHECK_TEMPLATE_CAPS are mutually exclusive. If both are
1701  * specified, expensive but safe @GST_PAD_LINK_CHECK_CAPS are performed.
1702  *
1703  * <warning><para>
1704  * Only disable some of the checks if you are 100% certain you know the link
1705  * will not fail because of hierarchy/caps compatibility failures. If uncertain,
1706  * use the default checks (%GST_PAD_LINK_CHECK_DEFAULT) or the regular methods
1707  * for linking the pads.
1708  * </para></warning>
1709  */
1710 public enum GstPadLinkCheck
1711 {
1712 	/**
1713 	 * Don't check hierarchy or caps compatibility.
1714 	 */
1715 	NOTHING = 0,
1716 	/**
1717 	 * Check the pads have same parents/grandparents.
1718 	 * Could be omitted if it is already known that the two elements that own the
1719 	 * pads are in the same bin.
1720 	 */
1721 	HIERARCHY = 1,
1722 	/**
1723 	 * Check if the pads are compatible by using
1724 	 * their template caps. This is much faster than @GST_PAD_LINK_CHECK_CAPS, but
1725 	 * would be unsafe e.g. if one pad has %GST_CAPS_ANY.
1726 	 */
1727 	TEMPLATE_CAPS = 2,
1728 	/**
1729 	 * Check if the pads are compatible by comparing the
1730 	 * caps returned by gst_pad_query_caps().
1731 	 */
1732 	CAPS = 4,
1733 	/**
1734 	 * The default checks done when linking
1735 	 * pads (i.e. the ones used by gst_pad_link()).
1736 	 */
1737 	DEFAULT = 5,
1738 }
1739 alias GstPadLinkCheck PadLinkCheck;
1740 
1741 /**
1742  * Result values from gst_pad_link and friends.
1743  */
1744 public enum GstPadLinkReturn
1745 {
1746 	/**
1747 	 * link succeeded
1748 	 */
1749 	OK = 0,
1750 	/**
1751 	 * pads have no common grandparent
1752 	 */
1753 	WRONG_HIERARCHY = -1,
1754 	/**
1755 	 * pad was already linked
1756 	 */
1757 	WAS_LINKED = -2,
1758 	/**
1759 	 * pads have wrong direction
1760 	 */
1761 	WRONG_DIRECTION = -3,
1762 	/**
1763 	 * pads do not have common format
1764 	 */
1765 	NOFORMAT = -4,
1766 	/**
1767 	 * pads cannot cooperate in scheduling
1768 	 */
1769 	NOSCHED = -5,
1770 	/**
1771 	 * refused for some reason
1772 	 */
1773 	REFUSED = -6,
1774 }
1775 alias GstPadLinkReturn PadLinkReturn;
1776 
1777 /**
1778  * The status of a GstPad. After activating a pad, which usually happens when the
1779  * parent element goes from READY to PAUSED, the GstPadMode defines if the
1780  * pad operates in push or pull mode.
1781  */
1782 public enum GstPadMode
1783 {
1784 	/**
1785 	 * Pad will not handle dataflow
1786 	 */
1787 	NONE = 0,
1788 	/**
1789 	 * Pad handles dataflow in downstream push mode
1790 	 */
1791 	PUSH = 1,
1792 	/**
1793 	 * Pad handles dataflow in upstream pull mode
1794 	 */
1795 	PULL = 2,
1796 }
1797 alias GstPadMode PadMode;
1798 
1799 /**
1800  * Indicates when this pad will become available.
1801  */
1802 public enum GstPadPresence
1803 {
1804 	/**
1805 	 * the pad is always available
1806 	 */
1807 	ALWAYS = 0,
1808 	/**
1809 	 * the pad will become available depending on the media stream
1810 	 */
1811 	SOMETIMES = 1,
1812 	/**
1813 	 * the pad is only available on request with
1814 	 * gst_element_request_pad().
1815 	 */
1816 	REQUEST = 2,
1817 }
1818 alias GstPadPresence PadPresence;
1819 
1820 /**
1821  * Different return values for the #GstPadProbeCallback.
1822  */
1823 public enum GstPadProbeReturn
1824 {
1825 	/**
1826 	 * drop data in data probes. For push mode this means that
1827 	 * the data item is not sent downstream. For pull mode, it means that
1828 	 * the data item is not passed upstream. In both cases, no more probes
1829 	 * are called and #GST_FLOW_OK or %TRUE is returned to the caller.
1830 	 */
1831 	DROP = 0,
1832 	/**
1833 	 * normal probe return value. This leaves the probe in
1834 	 * place, and defers decisions about dropping or passing data to other
1835 	 * probes, if any. If there are no other probes, the default behaviour
1836 	 * for the probe type applies (block for blocking probes, and pass for
1837 	 * non-blocking probes).
1838 	 */
1839 	OK = 1,
1840 	/**
1841 	 * remove this probe.
1842 	 */
1843 	REMOVE = 2,
1844 	/**
1845 	 * pass the data item in the block probe and block on the
1846 	 * next item.
1847 	 */
1848 	PASS = 3,
1849 	/**
1850 	 * Data has been handled in the probe and will not be
1851 	 * forwarded further. For events and buffers this is the same behaviour as
1852 	 * @GST_PAD_PROBE_DROP (except that in this case you need to unref the buffer
1853 	 * or event yourself). For queries it will also return %TRUE to the caller.
1854 	 * The probe can also modify the #GstFlowReturn value by using the
1855 	 * #GST_PAD_PROBE_INFO_FLOW_RETURN() accessor.
1856 	 * Note that the resulting query must contain valid entries.
1857 	 * Since: 1.6
1858 	 */
1859 	HANDLED = 4,
1860 }
1861 alias GstPadProbeReturn PadProbeReturn;
1862 
1863 /**
1864  * The different probing types that can occur. When either one of
1865  * @GST_PAD_PROBE_TYPE_IDLE or @GST_PAD_PROBE_TYPE_BLOCK is used, the probe will be a
1866  * blocking probe.
1867  */
1868 public enum GstPadProbeType
1869 {
1870 	/**
1871 	 * invalid probe type
1872 	 */
1873 	INVALID = 0,
1874 	/**
1875 	 * probe idle pads and block
1876 	 */
1877 	IDLE = 1,
1878 	/**
1879 	 * probe and block pads
1880 	 */
1881 	BLOCK = 2,
1882 	/**
1883 	 * probe buffers
1884 	 */
1885 	BUFFER = 16,
1886 	/**
1887 	 * probe buffer lists
1888 	 */
1889 	BUFFER_LIST = 32,
1890 	/**
1891 	 * probe downstream events
1892 	 */
1893 	EVENT_DOWNSTREAM = 64,
1894 	/**
1895 	 * probe upstream events
1896 	 */
1897 	EVENT_UPSTREAM = 128,
1898 	/**
1899 	 * probe flush events. This probe has to be
1900 	 * explicitly enabled and is not included in the
1901 	 * @@GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM or
1902 	 * @@GST_PAD_PROBE_TYPE_EVENT_UPSTREAM probe types.
1903 	 */
1904 	EVENT_FLUSH = 256,
1905 	/**
1906 	 * probe downstream queries
1907 	 */
1908 	QUERY_DOWNSTREAM = 512,
1909 	/**
1910 	 * probe upstream queries
1911 	 */
1912 	QUERY_UPSTREAM = 1024,
1913 	/**
1914 	 * probe push
1915 	 */
1916 	PUSH = 4096,
1917 	/**
1918 	 * probe pull
1919 	 */
1920 	PULL = 8192,
1921 	/**
1922 	 * probe and block at the next opportunity, at data flow or when idle
1923 	 */
1924 	BLOCKING = 3,
1925 	/**
1926 	 * probe downstream data (buffers, buffer lists, and events)
1927 	 */
1928 	DATA_DOWNSTREAM = 112,
1929 	/**
1930 	 * probe upstream data (events)
1931 	 */
1932 	DATA_UPSTREAM = 128,
1933 	/**
1934 	 * probe upstream and downstream data (buffers, buffer lists, and events)
1935 	 */
1936 	DATA_BOTH = 240,
1937 	/**
1938 	 * probe and block downstream data (buffers, buffer lists, and events)
1939 	 */
1940 	BLOCK_DOWNSTREAM = 114,
1941 	/**
1942 	 * probe and block upstream data (events)
1943 	 */
1944 	BLOCK_UPSTREAM = 130,
1945 	/**
1946 	 * probe upstream and downstream events
1947 	 */
1948 	EVENT_BOTH = 192,
1949 	/**
1950 	 * probe upstream and downstream queries
1951 	 */
1952 	QUERY_BOTH = 1536,
1953 	/**
1954 	 * probe upstream events and queries and downstream buffers, buffer lists, events and queries
1955 	 */
1956 	ALL_BOTH = 1776,
1957 	/**
1958 	 * probe push and pull
1959 	 */
1960 	SCHEDULING = 12288,
1961 }
1962 alias GstPadProbeType PadProbeType;
1963 
1964 /**
1965  * Flags for the padtemplate
1966  */
1967 public enum GstPadTemplateFlags
1968 {
1969 	/**
1970 	 * first flag that can be used by subclasses.
1971 	 */
1972 	LAST = 256,
1973 }
1974 alias GstPadTemplateFlags PadTemplateFlags;
1975 
1976 /**
1977  * The different parsing errors that can occur.
1978  */
1979 public enum GstParseError
1980 {
1981 	/**
1982 	 * A syntax error occurred.
1983 	 */
1984 	SYNTAX = 0,
1985 	/**
1986 	 * The description contained an unknown element
1987 	 */
1988 	NO_SUCH_ELEMENT = 1,
1989 	/**
1990 	 * An element did not have a specified property
1991 	 */
1992 	NO_SUCH_PROPERTY = 2,
1993 	/**
1994 	 * There was an error linking two pads.
1995 	 */
1996 	LINK = 3,
1997 	/**
1998 	 * There was an error setting a property
1999 	 */
2000 	COULD_NOT_SET_PROPERTY = 4,
2001 	/**
2002 	 * An empty bin was specified.
2003 	 */
2004 	EMPTY_BIN = 5,
2005 	/**
2006 	 * An empty description was specified
2007 	 */
2008 	EMPTY = 6,
2009 	/**
2010 	 * A delayed link did not get resolved.
2011 	 */
2012 	DELAYED_LINK = 7,
2013 }
2014 alias GstParseError ParseError;
2015 
2016 /**
2017  * Parsing options.
2018  */
2019 public enum GstParseFlags
2020 {
2021 	/**
2022 	 * Do not use any special parsing options.
2023 	 */
2024 	NONE = 0,
2025 	/**
2026 	 * Always return %NULL when an error occurs
2027 	 * (default behaviour is to return partially constructed bins or elements
2028 	 * in some cases)
2029 	 */
2030 	FATAL_ERRORS = 1,
2031 	/**
2032 	 * If a bin only has a single element,
2033 	 * just return the element.
2034 	 */
2035 	NO_SINGLE_ELEMENT_BINS = 2,
2036 }
2037 alias GstParseFlags ParseFlags;
2038 
2039 /**
2040  * Pipeline flags
2041  */
2042 public enum GstPipelineFlags
2043 {
2044 	/**
2045 	 * this pipeline works with a fixed clock
2046 	 */
2047 	FIXED_CLOCK = 524288,
2048 	/**
2049 	 * offset to define more flags
2050 	 */
2051 	LAST = 8388608,
2052 }
2053 alias GstPipelineFlags PipelineFlags;
2054 
2055 /**
2056  * Flags used in connection with gst_plugin_add_dependency().
2057  */
2058 public enum GstPluginDependencyFlags
2059 {
2060 	/**
2061 	 * no special flags
2062 	 */
2063 	NONE = 0,
2064 	/**
2065 	 * recurse into subdirectories
2066 	 */
2067 	RECURSE = 1,
2068 	/**
2069 	 * use paths
2070 	 * argument only if none of the environment variables is set
2071 	 */
2072 	PATHS_ARE_DEFAULT_ONLY = 2,
2073 	/**
2074 	 * interpret
2075 	 * filename argument as filter suffix and check all matching files in
2076 	 * the directory
2077 	 */
2078 	FILE_NAME_IS_SUFFIX = 4,
2079 	/**
2080 	 * interpret
2081 	 * filename argument as filter prefix and check all matching files in
2082 	 * the directory. Since 1.8.
2083 	 */
2084 	FILE_NAME_IS_PREFIX = 8,
2085 }
2086 alias GstPluginDependencyFlags PluginDependencyFlags;
2087 
2088 /**
2089  * The plugin loading errors
2090  */
2091 public enum GstPluginError
2092 {
2093 	/**
2094 	 * The plugin could not be loaded
2095 	 */
2096 	MODULE = 0,
2097 	/**
2098 	 * The plugin has unresolved dependencies
2099 	 */
2100 	DEPENDENCIES = 1,
2101 	/**
2102 	 * The plugin has already be loaded from a different file
2103 	 */
2104 	NAME_MISMATCH = 2,
2105 }
2106 alias GstPluginError PluginError;
2107 
2108 /**
2109  * The plugin loading state
2110  */
2111 public enum GstPluginFlags
2112 {
2113 	/**
2114 	 * Temporarily loaded plugins
2115 	 */
2116 	CACHED = 16,
2117 	/**
2118 	 * The plugin won't be scanned (again)
2119 	 */
2120 	BLACKLISTED = 32,
2121 }
2122 alias GstPluginFlags PluginFlags;
2123 
2124 /**
2125  * The type of a %GST_MESSAGE_PROGRESS. The progress messages inform the
2126  * application of the status of asynchronous tasks.
2127  */
2128 public enum GstProgressType
2129 {
2130 	/**
2131 	 * A new task started.
2132 	 */
2133 	START = 0,
2134 	/**
2135 	 * A task completed and a new one continues.
2136 	 */
2137 	CONTINUE = 1,
2138 	/**
2139 	 * A task completed.
2140 	 */
2141 	COMPLETE = 2,
2142 	/**
2143 	 * A task was canceled.
2144 	 */
2145 	CANCELED = 3,
2146 	/**
2147 	 * A task caused an error. An error message is also
2148 	 * posted on the bus.
2149 	 */
2150 	ERROR = 4,
2151 }
2152 alias GstProgressType ProgressType;
2153 
2154 /**
2155  * The different types of QoS events that can be given to the
2156  * gst_event_new_qos() method.
2157  */
2158 public enum GstQOSType
2159 {
2160 	/**
2161 	 * The QoS event type that is produced when upstream
2162 	 * elements are producing data too quickly and the element can't keep up
2163 	 * processing the data. Upstream should reduce their production rate. This
2164 	 * type is also used when buffers arrive early or in time.
2165 	 */
2166 	OVERFLOW = 0,
2167 	/**
2168 	 * The QoS event type that is produced when upstream
2169 	 * elements are producing data too slowly and need to speed up their
2170 	 * production rate.
2171 	 */
2172 	UNDERFLOW = 1,
2173 	/**
2174 	 * The QoS event type that is produced when the
2175 	 * application enabled throttling to limit the data rate.
2176 	 */
2177 	THROTTLE = 2,
2178 }
2179 alias GstQOSType QOSType;
2180 
2181 /**
2182  * Standard predefined Query types
2183  */
2184 public enum GstQueryType
2185 {
2186 	/**
2187 	 * unknown query type
2188 	 */
2189 	UNKNOWN = 0,
2190 	/**
2191 	 * current position in stream
2192 	 */
2193 	POSITION = 2563,
2194 	/**
2195 	 * total duration of the stream
2196 	 */
2197 	DURATION = 5123,
2198 	/**
2199 	 * latency of stream
2200 	 */
2201 	LATENCY = 7683,
2202 	/**
2203 	 * current jitter of stream
2204 	 */
2205 	JITTER = 10243,
2206 	/**
2207 	 * current rate of the stream
2208 	 */
2209 	RATE = 12803,
2210 	/**
2211 	 * seeking capabilities
2212 	 */
2213 	SEEKING = 15363,
2214 	/**
2215 	 * segment start/stop positions
2216 	 */
2217 	SEGMENT = 17923,
2218 	/**
2219 	 * convert values between formats
2220 	 */
2221 	CONVERT = 20483,
2222 	/**
2223 	 * query supported formats for convert
2224 	 */
2225 	FORMATS = 23043,
2226 	/**
2227 	 * query available media for efficient seeking.
2228 	 */
2229 	BUFFERING = 28163,
2230 	/**
2231 	 * a custom application or element defined query.
2232 	 */
2233 	CUSTOM = 30723,
2234 	/**
2235 	 * query the URI of the source or sink.
2236 	 */
2237 	URI = 33283,
2238 	/**
2239 	 * the buffer allocation properties
2240 	 */
2241 	ALLOCATION = 35846,
2242 	/**
2243 	 * the scheduling properties
2244 	 */
2245 	SCHEDULING = 38401,
2246 	/**
2247 	 * the accept caps query
2248 	 */
2249 	ACCEPT_CAPS = 40963,
2250 	/**
2251 	 * the caps query
2252 	 */
2253 	CAPS = 43523,
2254 	/**
2255 	 * wait till all serialized data is consumed downstream
2256 	 */
2257 	DRAIN = 46086,
2258 	/**
2259 	 * query the pipeline-local context from
2260 	 * downstream or upstream (since 1.2)
2261 	 */
2262 	CONTEXT = 48643,
2263 }
2264 alias GstQueryType QueryType;
2265 
2266 /**
2267  * #GstQueryTypeFlags indicate the aspects of the different #GstQueryType
2268  * values. You can get the type flags of a #GstQueryType with the
2269  * gst_query_type_get_flags() function.
2270  */
2271 public enum GstQueryTypeFlags
2272 {
2273 	/**
2274 	 * Set if the query can travel upstream.
2275 	 */
2276 	UPSTREAM = 1,
2277 	/**
2278 	 * Set if the query can travel downstream.
2279 	 */
2280 	DOWNSTREAM = 2,
2281 	/**
2282 	 * Set if the query should be serialized with data
2283 	 * flow.
2284 	 */
2285 	SERIALIZED = 4,
2286 }
2287 alias GstQueryTypeFlags QueryTypeFlags;
2288 
2289 /**
2290  * Element priority ranks. Defines the order in which the autoplugger (or
2291  * similar rank-picking mechanisms, such as e.g. gst_element_make_from_uri())
2292  * will choose this element over an alternative one with the same function.
2293  *
2294  * These constants serve as a rough guidance for defining the rank of a
2295  * #GstPluginFeature. Any value is valid, including values bigger than
2296  * @GST_RANK_PRIMARY.
2297  */
2298 public enum GstRank
2299 {
2300 	/**
2301 	 * will be chosen last or not at all
2302 	 */
2303 	NONE = 0,
2304 	/**
2305 	 * unlikely to be chosen
2306 	 */
2307 	MARGINAL = 64,
2308 	/**
2309 	 * likely to be chosen
2310 	 */
2311 	SECONDARY = 128,
2312 	/**
2313 	 * will be chosen first
2314 	 */
2315 	PRIMARY = 256,
2316 }
2317 alias GstRank Rank;
2318 
2319 /**
2320  * Resource errors are for any resource used by an element:
2321  * memory, files, network connections, process space, ...
2322  * They're typically used by source and sink elements.
2323  */
2324 public enum GstResourceError
2325 {
2326 	/**
2327 	 * a general error which doesn't fit in any other
2328 	 * category.  Make sure you add a custom message to the error call.
2329 	 */
2330 	FAILED = 1,
2331 	/**
2332 	 * do not use this except as a placeholder for
2333 	 * deciding where to go while developing code.
2334 	 */
2335 	TOO_LAZY = 2,
2336 	/**
2337 	 * used when the resource could not be found.
2338 	 */
2339 	NOT_FOUND = 3,
2340 	/**
2341 	 * used when resource is busy.
2342 	 */
2343 	BUSY = 4,
2344 	/**
2345 	 * used when resource fails to open for reading.
2346 	 */
2347 	OPEN_READ = 5,
2348 	/**
2349 	 * used when resource fails to open for writing.
2350 	 */
2351 	OPEN_WRITE = 6,
2352 	/**
2353 	 * used when resource cannot be opened for
2354 	 * both reading and writing, or either (but unspecified which).
2355 	 */
2356 	OPEN_READ_WRITE = 7,
2357 	/**
2358 	 * used when the resource can't be closed.
2359 	 */
2360 	CLOSE = 8,
2361 	/**
2362 	 * used when the resource can't be read from.
2363 	 */
2364 	READ = 9,
2365 	/**
2366 	 * used when the resource can't be written to.
2367 	 */
2368 	WRITE = 10,
2369 	/**
2370 	 * used when a seek on the resource fails.
2371 	 */
2372 	SEEK = 11,
2373 	/**
2374 	 * used when a synchronize on the resource fails.
2375 	 */
2376 	SYNC = 12,
2377 	/**
2378 	 * used when settings can't be manipulated on.
2379 	 */
2380 	SETTINGS = 13,
2381 	/**
2382 	 * used when the resource has no space left.
2383 	 */
2384 	NO_SPACE_LEFT = 14,
2385 	/**
2386 	 * used when the resource can't be opened
2387 	 * due to missing authorization.
2388 	 * (Since 1.2.4)
2389 	 */
2390 	NOT_AUTHORIZED = 15,
2391 	/**
2392 	 * the number of resource error types.
2393 	 */
2394 	NUM_ERRORS = 16,
2395 }
2396 alias GstResourceError ResourceError;
2397 
2398 /**
2399  * The different scheduling flags.
2400  */
2401 public enum GstSchedulingFlags
2402 {
2403 	/**
2404 	 * if seeking is possible
2405 	 */
2406 	SEEKABLE = 1,
2407 	/**
2408 	 * if sequential access is recommended
2409 	 */
2410 	SEQUENTIAL = 2,
2411 	/**
2412 	 * if bandwidth is limited and buffering possible (since 1.2)
2413 	 */
2414 	BANDWIDTH_LIMITED = 4,
2415 }
2416 alias GstSchedulingFlags SchedulingFlags;
2417 
2418 /**
2419  * The different search modes.
2420  */
2421 public enum GstSearchMode
2422 {
2423 	/**
2424 	 * Only search for exact matches.
2425 	 */
2426 	EXACT = 0,
2427 	/**
2428 	 * Search for an exact match or the element just before.
2429 	 */
2430 	BEFORE = 1,
2431 	/**
2432 	 * Search for an exact match or the element just after.
2433 	 */
2434 	AFTER = 2,
2435 }
2436 alias GstSearchMode SearchMode;
2437 
2438 /**
2439  * Flags to be used with gst_element_seek() or gst_event_new_seek(). All flags
2440  * can be used together.
2441  *
2442  * A non flushing seek might take some time to perform as the currently
2443  * playing data in the pipeline will not be cleared.
2444  *
2445  * An accurate seek might be slower for formats that don't have any indexes
2446  * or timestamp markers in the stream. Specifying this flag might require a
2447  * complete scan of the file in those cases.
2448  *
2449  * When performing a segment seek: after the playback of the segment completes,
2450  * no EOS will be emitted by the element that performed the seek, but a
2451  * %GST_MESSAGE_SEGMENT_DONE message will be posted on the bus by the element.
2452  * When this message is posted, it is possible to send a new seek event to
2453  * continue playback. With this seek method it is possible to perform seamless
2454  * looping or simple linear editing.
2455  *
2456  * When doing fast forward (rate > 1.0) or fast reverse (rate < -1.0) trickmode
2457  * playback, the %GST_SEEK_FLAG_TRICKMODE flag can be used to instruct decoders
2458  * and demuxers to adjust the playback rate by skipping frames. This can improve
2459  * performance and decrease CPU usage because not all frames need to be decoded.
2460  *
2461  * Beyond that, the %GST_SEEK_FLAG_TRICKMODE_KEY_UNITS flag can be used to
2462  * request that decoders skip all frames except key units, and
2463  * %GST_SEEK_FLAG_TRICKMODE_NO_AUDIO flags can be used to request that audio
2464  * decoders do no decoding at all, and simple output silence.
2465  *
2466  * The %GST_SEEK_FLAG_SNAP_BEFORE flag can be used to snap to the previous
2467  * relevant location, and the %GST_SEEK_FLAG_SNAP_AFTER flag can be used to
2468  * select the next relevant location. If %GST_SEEK_FLAG_KEY_UNIT is specified,
2469  * the relevant location is a keyframe. If both flags are specified, the nearest
2470  * of these locations will be selected. If none are specified, the implementation is
2471  * free to select whichever it wants.
2472  *
2473  * The before and after here are in running time, so when playing backwards,
2474  * the next location refers to the one that will played in next, and not the
2475  * one that is located after in the actual source stream.
2476  *
2477  * Also see part-seeking.txt in the GStreamer design documentation for more
2478  * details on the meaning of these flags and the behaviour expected of
2479  * elements that handle them.
2480  */
2481 public enum GstSeekFlags
2482 {
2483 	/**
2484 	 * no flag
2485 	 */
2486 	NONE = 0,
2487 	/**
2488 	 * flush pipeline
2489 	 */
2490 	FLUSH = 1,
2491 	/**
2492 	 * accurate position is requested, this might
2493 	 * be considerably slower for some formats.
2494 	 */
2495 	ACCURATE = 2,
2496 	/**
2497 	 * seek to the nearest keyframe. This might be
2498 	 * faster but less accurate.
2499 	 */
2500 	KEY_UNIT = 4,
2501 	/**
2502 	 * perform a segment seek.
2503 	 */
2504 	SEGMENT = 8,
2505 	/**
2506 	 * when doing fast forward or fast reverse playback, allow
2507 	 * elements to skip frames instead of generating all
2508 	 * frames. (Since 1.6)
2509 	 */
2510 	TRICKMODE = 16,
2511 	/**
2512 	 * Deprecated backward compatibility flag, replaced
2513 	 * by %GST_SEEK_FLAG_TRICKMODE
2514 	 */
2515 	SKIP = 16,
2516 	/**
2517 	 * go to a location before the requested position,
2518 	 * if %GST_SEEK_FLAG_KEY_UNIT this means the keyframe at or before
2519 	 * the requested position the one at or before the seek target.
2520 	 */
2521 	SNAP_BEFORE = 32,
2522 	/**
2523 	 * go to a location after the requested position,
2524 	 * if %GST_SEEK_FLAG_KEY_UNIT this means the keyframe at of after the
2525 	 * requested position.
2526 	 */
2527 	SNAP_AFTER = 64,
2528 	/**
2529 	 * go to a position near the requested position,
2530 	 * if %GST_SEEK_FLAG_KEY_UNIT this means the keyframe closest
2531 	 * to the requested position, if both keyframes are at an equal
2532 	 * distance, behaves like %GST_SEEK_FLAG_SNAP_BEFORE.
2533 	 */
2534 	SNAP_NEAREST = 96,
2535 	/**
2536 	 * when doing fast forward or fast reverse
2537 	 * playback, request that elements only decode keyframes
2538 	 * and skip all other content, for formats that have
2539 	 * keyframes. (Since 1.6)
2540 	 */
2541 	TRICKMODE_KEY_UNITS = 128,
2542 	/**
2543 	 * when doing fast forward or fast reverse
2544 	 * playback, request that audio decoder elements skip
2545 	 * decoding and output only gap events or silence. (Since 1.6)
2546 	 */
2547 	TRICKMODE_NO_AUDIO = 256,
2548 }
2549 alias GstSeekFlags SeekFlags;
2550 
2551 /**
2552  * The different types of seek events. When constructing a seek event with
2553  * gst_event_new_seek() or when doing gst_segment_do_seek ().
2554  */
2555 public enum GstSeekType
2556 {
2557 	/**
2558 	 * no change in position is required
2559 	 */
2560 	NONE = 0,
2561 	/**
2562 	 * absolute position is requested
2563 	 */
2564 	SET = 1,
2565 	/**
2566 	 * relative position to duration is requested
2567 	 */
2568 	END = 2,
2569 }
2570 alias GstSeekType SeekType;
2571 
2572 /**
2573  * Flags for the GstSegment structure. Currently mapped to the corresponding
2574  * values of the seek flags.
2575  */
2576 public enum GstSegmentFlags
2577 {
2578 	/**
2579 	 * no flags
2580 	 */
2581 	NONE = 0,
2582 	/**
2583 	 * reset the pipeline running_time to the segment
2584 	 * running_time
2585 	 */
2586 	RESET = 1,
2587 	/**
2588 	 * perform skip playback (Since 1.6)
2589 	 */
2590 	TRICKMODE = 16,
2591 	/**
2592 	 * Deprecated backward compatibility flag, replaced
2593 	 * by @GST_SEGMENT_FLAG_TRICKMODE
2594 	 */
2595 	SKIP = 16,
2596 	/**
2597 	 * send SEGMENT_DONE instead of EOS
2598 	 */
2599 	SEGMENT = 8,
2600 	/**
2601 	 * Decode only keyframes, where
2602 	 * possible (Since 1.6)
2603 	 */
2604 	TRICKMODE_KEY_UNITS = 128,
2605 	/**
2606 	 * Do not decode any audio, where
2607 	 * possible (Since 1.6)
2608 	 */
2609 	TRICKMODE_NO_AUDIO = 256,
2610 }
2611 alias GstSegmentFlags SegmentFlags;
2612 
2613 /**
2614  * The possible states an element can be in. States can be changed using
2615  * gst_element_set_state() and checked using gst_element_get_state().
2616  */
2617 public enum GstState
2618 {
2619 	/**
2620 	 * no pending state.
2621 	 */
2622 	VOID_PENDING = 0,
2623 	/**
2624 	 * the NULL state or initial state of an element.
2625 	 */
2626 	NULL = 1,
2627 	/**
2628 	 * the element is ready to go to PAUSED.
2629 	 */
2630 	READY = 2,
2631 	/**
2632 	 * the element is PAUSED, it is ready to accept and
2633 	 * process data. Sink elements however only accept one
2634 	 * buffer and then block.
2635 	 */
2636 	PAUSED = 3,
2637 	/**
2638 	 * the element is PLAYING, the #GstClock is running and
2639 	 * the data is flowing.
2640 	 */
2641 	PLAYING = 4,
2642 }
2643 alias GstState State;
2644 
2645 /**
2646  * These are the different state changes an element goes through.
2647  * %GST_STATE_NULL &rArr; %GST_STATE_PLAYING is called an upwards state change
2648  * and %GST_STATE_PLAYING &rArr; %GST_STATE_NULL a downwards state change.
2649  */
2650 public enum GstStateChange
2651 {
2652 	/**
2653 	 * state change from NULL to READY.
2654 	 * <itemizedlist>
2655 	 * <listitem><para>
2656 	 * The element must check if the resources it needs are available. Device
2657 	 * sinks and -sources typically try to probe the device to constrain their
2658 	 * caps.
2659 	 * </para></listitem>
2660 	 * <listitem><para>
2661 	 * The element opens the device (in case feature need to be probed).
2662 	 * </para></listitem>
2663 	 * </itemizedlist>
2664 	 */
2665 	NULL_TO_READY = 10,
2666 	/**
2667 	 * state change from READY to PAUSED.
2668 	 * <itemizedlist>
2669 	 * <listitem><para>
2670 	 * The element pads are activated in order to receive data in PAUSED.
2671 	 * Streaming threads are started.
2672 	 * </para></listitem>
2673 	 * <listitem><para>
2674 	 * Some elements might need to return %GST_STATE_CHANGE_ASYNC and complete
2675 	 * the state change when they have enough information. It is a requirement
2676 	 * for sinks to return %GST_STATE_CHANGE_ASYNC and complete the state change
2677 	 * when they receive the first buffer or %GST_EVENT_EOS (preroll).
2678 	 * Sinks also block the dataflow when in PAUSED.
2679 	 * </para></listitem>
2680 	 * <listitem><para>
2681 	 * A pipeline resets the running_time to 0.
2682 	 * </para></listitem>
2683 	 * <listitem><para>
2684 	 * Live sources return %GST_STATE_CHANGE_NO_PREROLL and don't generate data.
2685 	 * </para></listitem>
2686 	 * </itemizedlist>
2687 	 */
2688 	READY_TO_PAUSED = 19,
2689 	/**
2690 	 * state change from PAUSED to PLAYING.
2691 	 * <itemizedlist>
2692 	 * <listitem><para>
2693 	 * Most elements ignore this state change.
2694 	 * </para></listitem>
2695 	 * <listitem><para>
2696 	 * The pipeline selects a #GstClock and distributes this to all the children
2697 	 * before setting them to PLAYING. This means that it is only allowed to
2698 	 * synchronize on the #GstClock in the PLAYING state.
2699 	 * </para></listitem>
2700 	 * <listitem><para>
2701 	 * The pipeline uses the #GstClock and the running_time to calculate the
2702 	 * base_time. The base_time is distributed to all children when performing
2703 	 * the state change.
2704 	 * </para></listitem>
2705 	 * <listitem><para>
2706 	 * Sink elements stop blocking on the preroll buffer or event and start
2707 	 * rendering the data.
2708 	 * </para></listitem>
2709 	 * <listitem><para>
2710 	 * Sinks can post %GST_MESSAGE_EOS in the PLAYING state. It is not allowed
2711 	 * to post %GST_MESSAGE_EOS when not in the PLAYING state.
2712 	 * </para></listitem>
2713 	 * <listitem><para>
2714 	 * While streaming in PAUSED or PLAYING elements can create and remove
2715 	 * sometimes pads.
2716 	 * </para></listitem>
2717 	 * <listitem><para>
2718 	 * Live sources start generating data and return %GST_STATE_CHANGE_SUCCESS.
2719 	 * </para></listitem>
2720 	 * </itemizedlist>
2721 	 */
2722 	PAUSED_TO_PLAYING = 28,
2723 	/**
2724 	 * state change from PLAYING to PAUSED.
2725 	 * <itemizedlist>
2726 	 * <listitem><para>
2727 	 * Most elements ignore this state change.
2728 	 * </para></listitem>
2729 	 * <listitem><para>
2730 	 * The pipeline calculates the running_time based on the last selected
2731 	 * #GstClock and the base_time. It stores this information to continue
2732 	 * playback when going back to the PLAYING state.
2733 	 * </para></listitem>
2734 	 * <listitem><para>
2735 	 * Sinks unblock any #GstClock wait calls.
2736 	 * </para></listitem>
2737 	 * <listitem><para>
2738 	 * When a sink does not have a pending buffer to play, it returns
2739 	 * %GST_STATE_CHANGE_ASYNC from this state change and completes the state
2740 	 * change when it receives a new buffer or an %GST_EVENT_EOS.
2741 	 * </para></listitem>
2742 	 * <listitem><para>
2743 	 * Any queued %GST_MESSAGE_EOS items are removed since they will be reposted
2744 	 * when going back to the PLAYING state. The EOS messages are queued in
2745 	 * #GstBin containers.
2746 	 * </para></listitem>
2747 	 * <listitem><para>
2748 	 * Live sources stop generating data and return %GST_STATE_CHANGE_NO_PREROLL.
2749 	 * </para></listitem>
2750 	 * </itemizedlist>
2751 	 */
2752 	PLAYING_TO_PAUSED = 35,
2753 	/**
2754 	 * state change from PAUSED to READY.
2755 	 * <itemizedlist>
2756 	 * <listitem><para>
2757 	 * Sinks unblock any waits in the preroll.
2758 	 * </para></listitem>
2759 	 * <listitem><para>
2760 	 * Elements unblock any waits on devices
2761 	 * </para></listitem>
2762 	 * <listitem><para>
2763 	 * Chain or get_range functions return %GST_FLOW_FLUSHING.
2764 	 * </para></listitem>
2765 	 * <listitem><para>
2766 	 * The element pads are deactivated so that streaming becomes impossible and
2767 	 * all streaming threads are stopped.
2768 	 * </para></listitem>
2769 	 * <listitem><para>
2770 	 * The sink forgets all negotiated formats
2771 	 * </para></listitem>
2772 	 * <listitem><para>
2773 	 * Elements remove all sometimes pads
2774 	 * </para></listitem>
2775 	 * </itemizedlist>
2776 	 */
2777 	PAUSED_TO_READY = 26,
2778 	/**
2779 	 * state change from READY to NULL.
2780 	 * <itemizedlist>
2781 	 * <listitem><para>
2782 	 * Elements close devices
2783 	 * </para></listitem>
2784 	 * <listitem><para>
2785 	 * Elements reset any internal state.
2786 	 * </para></listitem>
2787 	 * </itemizedlist>
2788 	 */
2789 	READY_TO_NULL = 17,
2790 }
2791 alias GstStateChange StateChange;
2792 
2793 /**
2794  * The possible return values from a state change function such as
2795  * gst_element_set_state(). Only @GST_STATE_CHANGE_FAILURE is a real failure.
2796  */
2797 public enum GstStateChangeReturn
2798 {
2799 	/**
2800 	 * the state change failed
2801 	 */
2802 	FAILURE = 0,
2803 	/**
2804 	 * the state change succeeded
2805 	 */
2806 	SUCCESS = 1,
2807 	/**
2808 	 * the state change will happen asynchronously
2809 	 */
2810 	ASYNC = 2,
2811 	/**
2812 	 * the state change succeeded but the element
2813 	 * cannot produce data in %GST_STATE_PAUSED.
2814 	 * This typically happens with live sources.
2815 	 */
2816 	NO_PREROLL = 3,
2817 }
2818 alias GstStateChangeReturn StateChangeReturn;
2819 
2820 /**
2821  * Stream errors are for anything related to the stream being processed:
2822  * format errors, media type errors, ...
2823  * They're typically used by decoders, demuxers, converters, ...
2824  */
2825 public enum GstStreamError
2826 {
2827 	/**
2828 	 * a general error which doesn't fit in any other
2829 	 * category.  Make sure you add a custom message to the error call.
2830 	 */
2831 	FAILED = 1,
2832 	/**
2833 	 * do not use this except as a placeholder for
2834 	 * deciding where to go while developing code.
2835 	 */
2836 	TOO_LAZY = 2,
2837 	/**
2838 	 * use this when you do not want to implement
2839 	 * this functionality yet.
2840 	 */
2841 	NOT_IMPLEMENTED = 3,
2842 	/**
2843 	 * used when the element doesn't know the
2844 	 * stream's type.
2845 	 */
2846 	TYPE_NOT_FOUND = 4,
2847 	/**
2848 	 * used when the element doesn't handle this type
2849 	 * of stream.
2850 	 */
2851 	WRONG_TYPE = 5,
2852 	/**
2853 	 * used when there's no codec to handle the
2854 	 * stream's type.
2855 	 */
2856 	CODEC_NOT_FOUND = 6,
2857 	/**
2858 	 * used when decoding fails.
2859 	 */
2860 	DECODE = 7,
2861 	/**
2862 	 * used when encoding fails.
2863 	 */
2864 	ENCODE = 8,
2865 	/**
2866 	 * used when demuxing fails.
2867 	 */
2868 	DEMUX = 9,
2869 	/**
2870 	 * used when muxing fails.
2871 	 */
2872 	MUX = 10,
2873 	/**
2874 	 * used when the stream is of the wrong format
2875 	 * (for example, wrong caps).
2876 	 */
2877 	FORMAT = 11,
2878 	/**
2879 	 * used when the stream is encrypted and can't be
2880 	 * decrypted because this is not supported by the element.
2881 	 */
2882 	DECRYPT = 12,
2883 	/**
2884 	 * used when the stream is encrypted and
2885 	 * can't be decrypted because no suitable key is available.
2886 	 */
2887 	DECRYPT_NOKEY = 13,
2888 	/**
2889 	 * the number of stream error types.
2890 	 */
2891 	NUM_ERRORS = 14,
2892 }
2893 alias GstStreamError StreamError;
2894 
2895 public enum GstStreamFlags
2896 {
2897 	/**
2898 	 * This stream has no special attributes
2899 	 */
2900 	NONE = 0,
2901 	/**
2902 	 * This stream is a sparse stream (e.g. a subtitle
2903 	 * stream), data may flow only in irregular intervals with large gaps in
2904 	 * between.
2905 	 */
2906 	SPARSE = 1,
2907 	/**
2908 	 * This stream should be selected by default. This
2909 	 * flag may be used by demuxers to signal that a stream should be selected
2910 	 * by default in a playback scenario.
2911 	 */
2912 	SELECT = 2,
2913 	/**
2914 	 * This stream should not be selected by default.
2915 	 * This flag may be used by demuxers to signal that a stream should not
2916 	 * be selected by default in a playback scenario, but only if explicitly
2917 	 * selected by the user (e.g. an audio track for the hard of hearing or
2918 	 * a director's commentary track).
2919 	 */
2920 	UNSELECT = 4,
2921 }
2922 alias GstStreamFlags StreamFlags;
2923 
2924 /**
2925  * The type of a %GST_MESSAGE_STREAM_STATUS. The stream status messages inform the
2926  * application of new streaming threads and their status.
2927  */
2928 public enum GstStreamStatusType
2929 {
2930 	/**
2931 	 * A new thread need to be created.
2932 	 */
2933 	CREATE = 0,
2934 	/**
2935 	 * a thread entered its loop function
2936 	 */
2937 	ENTER = 1,
2938 	/**
2939 	 * a thread left its loop function
2940 	 */
2941 	LEAVE = 2,
2942 	/**
2943 	 * a thread is destroyed
2944 	 */
2945 	DESTROY = 3,
2946 	/**
2947 	 * a thread is started
2948 	 */
2949 	START = 8,
2950 	/**
2951 	 * a thread is paused
2952 	 */
2953 	PAUSE = 9,
2954 	/**
2955 	 * a thread is stopped
2956 	 */
2957 	STOP = 10,
2958 }
2959 alias GstStreamStatusType StreamStatusType;
2960 
2961 /**
2962  * The type of a %GST_MESSAGE_STRUCTURE_CHANGE.
2963  */
2964 public enum GstStructureChangeType
2965 {
2966 	/**
2967 	 * Pad linking is starting or done.
2968 	 */
2969 	LINK = 0,
2970 	/**
2971 	 * Pad unlinking is starting or done.
2972 	 */
2973 	UNLINK = 1,
2974 }
2975 alias GstStructureChangeType StructureChangeType;
2976 
2977 /**
2978  * Extra tag flags used when registering tags.
2979  */
2980 public enum GstTagFlag
2981 {
2982 	/**
2983 	 * undefined flag
2984 	 */
2985 	UNDEFINED = 0,
2986 	/**
2987 	 * tag is meta data
2988 	 */
2989 	META = 1,
2990 	/**
2991 	 * tag is encoded
2992 	 */
2993 	ENCODED = 2,
2994 	/**
2995 	 * tag is decoded
2996 	 */
2997 	DECODED = 3,
2998 	/**
2999 	 * number of tag flags
3000 	 */
3001 	COUNT = 4,
3002 }
3003 alias GstTagFlag TagFlag;
3004 
3005 /**
3006  * The different tag merging modes are basically replace, overwrite and append,
3007  * but they can be seen from two directions. Given two taglists: (A) the tags
3008  * already in the element and (B) the ones that are supplied to the element (
3009  * e.g. via gst_tag_setter_merge_tags() / gst_tag_setter_add_tags() or a
3010  * %GST_EVENT_TAG), how are these tags merged?
3011  * In the table below this is shown for the cases that a tag exists in the list
3012  * (A) or does not exists (!A) and combinations thereof.
3013  *
3014  * <table frame="all" colsep="1" rowsep="1">
3015  * <title>merge mode</title>
3016  * <tgroup cols='5' align='left'>
3017  * <thead>
3018  * <row>
3019  * <entry>merge mode</entry>
3020  * <entry>A + B</entry>
3021  * <entry>A + !B</entry>
3022  * <entry>!A + B</entry>
3023  * <entry>!A + !B</entry>
3024  * </row>
3025  * </thead>
3026  * <tbody>
3027  * <row>
3028  * <entry>REPLACE_ALL</entry>
3029  * <entry>B</entry>
3030  * <entry>-</entry>
3031  * <entry>B</entry>
3032  * <entry>-</entry>
3033  * </row>
3034  * <row>
3035  * <entry>REPLACE</entry>
3036  * <entry>B</entry>
3037  * <entry>A</entry>
3038  * <entry>B</entry>
3039  * <entry>-</entry>
3040  * </row>
3041  * <row>
3042  * <entry>APPEND</entry>
3043  * <entry>A, B</entry>
3044  * <entry>A</entry>
3045  * <entry>B</entry>
3046  * <entry>-</entry>
3047  * </row>
3048  * <row>
3049  * <entry>PREPEND</entry>
3050  * <entry>B, A</entry>
3051  * <entry>A</entry>
3052  * <entry>B</entry>
3053  * <entry>-</entry>
3054  * </row>
3055  * <row>
3056  * <entry>KEEP</entry>
3057  * <entry>A</entry>
3058  * <entry>A</entry>
3059  * <entry>B</entry>
3060  * <entry>-</entry>
3061  * </row>
3062  * <row>
3063  * <entry>KEEP_ALL</entry>
3064  * <entry>A</entry>
3065  * <entry>A</entry>
3066  * <entry>-</entry>
3067  * <entry>-</entry>
3068  * </row>
3069  * </tbody>
3070  * </tgroup>
3071  * </table>
3072  */
3073 public enum GstTagMergeMode
3074 {
3075 	/**
3076 	 * undefined merge mode
3077 	 */
3078 	UNDEFINED = 0,
3079 	/**
3080 	 * replace all tags (clear list and append)
3081 	 */
3082 	REPLACE_ALL = 1,
3083 	/**
3084 	 * replace tags
3085 	 */
3086 	REPLACE = 2,
3087 	/**
3088 	 * append tags
3089 	 */
3090 	APPEND = 3,
3091 	/**
3092 	 * prepend tags
3093 	 */
3094 	PREPEND = 4,
3095 	/**
3096 	 * keep existing tags
3097 	 */
3098 	KEEP = 5,
3099 	/**
3100 	 * keep all existing tags
3101 	 */
3102 	KEEP_ALL = 6,
3103 	/**
3104 	 * the number of merge modes
3105 	 */
3106 	COUNT = 7,
3107 }
3108 alias GstTagMergeMode TagMergeMode;
3109 
3110 /**
3111  * GstTagScope specifies if a taglist applies to the complete
3112  * medium or only to one single stream.
3113  */
3114 public enum GstTagScope
3115 {
3116 	/**
3117 	 * tags specific to this single stream
3118 	 */
3119 	STREAM = 0,
3120 	/**
3121 	 * global tags for the complete medium
3122 	 */
3123 	GLOBAL = 1,
3124 }
3125 alias GstTagScope TagScope;
3126 
3127 /**
3128  * The different states a task can be in
3129  */
3130 public enum GstTaskState
3131 {
3132 	/**
3133 	 * the task is started and running
3134 	 */
3135 	STARTED = 0,
3136 	/**
3137 	 * the task is stopped
3138 	 */
3139 	STOPPED = 1,
3140 	/**
3141 	 * the task is paused
3142 	 */
3143 	PAUSED = 2,
3144 }
3145 alias GstTaskState TaskState;
3146 
3147 /**
3148  * The different types of TOC entries (see #GstTocEntry).
3149  *
3150  * There are two types of TOC entries: alternatives or parts in a sequence.
3151  */
3152 public enum GstTocEntryType
3153 {
3154 	/**
3155 	 * entry is an angle (i.e. an alternative)
3156 	 */
3157 	ANGLE = -3,
3158 	/**
3159 	 * entry is a version (i.e. alternative)
3160 	 */
3161 	VERSION = -2,
3162 	/**
3163 	 * entry is an edition (i.e. alternative)
3164 	 */
3165 	EDITION = -1,
3166 	/**
3167 	 * invalid entry type value
3168 	 */
3169 	INVALID = 0,
3170 	/**
3171 	 * entry is a title (i.e. a part of a sequence)
3172 	 */
3173 	TITLE = 1,
3174 	/**
3175 	 * entry is a track (i.e. a part of a sequence)
3176 	 */
3177 	TRACK = 2,
3178 	/**
3179 	 * entry is a chapter (i.e. a part of a sequence)
3180 	 */
3181 	CHAPTER = 3,
3182 }
3183 alias GstTocEntryType TocEntryType;
3184 
3185 /**
3186  * How a #GstTocEntry should be repeated. By default, entries are played a
3187  * single time.
3188  *
3189  * Since: 1.4
3190  */
3191 public enum GstTocLoopType
3192 {
3193 	/**
3194 	 * single forward playback
3195 	 */
3196 	NONE = 0,
3197 	/**
3198 	 * repeat forward
3199 	 */
3200 	FORWARD = 1,
3201 	/**
3202 	 * repeat backward
3203 	 */
3204 	REVERSE = 2,
3205 	/**
3206 	 * repeat forward and backward
3207 	 */
3208 	PING_PONG = 3,
3209 }
3210 alias GstTocLoopType TocLoopType;
3211 
3212 /**
3213  * The scope of a TOC.
3214  */
3215 public enum GstTocScope
3216 {
3217 	/**
3218 	 * global TOC representing all selectable options
3219 	 * (this is what applications are usually interested in)
3220 	 */
3221 	GLOBAL = 1,
3222 	/**
3223 	 * TOC for the currently active/selected stream
3224 	 * (this is a TOC representing the current stream from start to EOS,
3225 	 * and is what a TOC writer / muxer is usually interested in; it will
3226 	 * usually be a subset of the global TOC, e.g. just the chapters of
3227 	 * the current title, or the chapters selected for playback from the
3228 	 * current title)
3229 	 */
3230 	CURRENT = 2,
3231 }
3232 alias GstTocScope TocScope;
3233 
3234 /**
3235  * Flag that describe the value. These flags help applications processing the
3236  * logs to understand the values.
3237  */
3238 public enum GstTracerValueFlags
3239 {
3240 	/**
3241 	 * no flags
3242 	 */
3243 	NONE = 0,
3244 	/**
3245 	 * the value is optional. When using this flag
3246 	 * one need to have an additional boolean arg before this value in the
3247 	 * var-args list passed to  gst_tracer_record_log().
3248 	 */
3249 	OPTIONAL = 1,
3250 	/**
3251 	 * the value is combined since the start of
3252 	 * tracing
3253 	 */
3254 	AGGREGATED = 2,
3255 }
3256 alias GstTracerValueFlags TracerValueFlags;
3257 
3258 /**
3259  * Tracing record will contain fields that contain a meassured value or extra
3260  * meta-data. One such meta data are values that tell where a measurement was
3261  * taken. This enumerating declares to which scope such a meta data field
3262  * relates to. If it is e.g. %GST_TRACER_VALUE_SCOPE_PAD, then each of the log
3263  * events may contain values for different #GstPads.
3264  *
3265  * Since: 1.8
3266  */
3267 public enum GstTracerValueScope
3268 {
3269 	/**
3270 	 * the value is related to the process
3271 	 */
3272 	PROCESS = 0,
3273 	/**
3274 	 * the value is related to a thread
3275 	 */
3276 	THREAD = 1,
3277 	/**
3278 	 * the value is related to an #GstElement
3279 	 */
3280 	ELEMENT = 2,
3281 	/**
3282 	 * the value is related to a #GstPad
3283 	 */
3284 	PAD = 3,
3285 }
3286 alias GstTracerValueScope TracerValueScope;
3287 
3288 /**
3289  * The probability of the typefind function. Higher values have more certainty
3290  * in doing a reliable typefind.
3291  */
3292 public enum GstTypeFindProbability
3293 {
3294 	/**
3295 	 * type undetected.
3296 	 */
3297 	NONE = 0,
3298 	/**
3299 	 * unlikely typefind.
3300 	 */
3301 	MINIMUM = 1,
3302 	/**
3303 	 * possible type detected.
3304 	 */
3305 	POSSIBLE = 50,
3306 	/**
3307 	 * likely a type was detected.
3308 	 */
3309 	LIKELY = 80,
3310 	/**
3311 	 * nearly certain that a type was detected.
3312 	 */
3313 	NEARLY_CERTAIN = 99,
3314 	/**
3315 	 * very certain a type was detected.
3316 	 */
3317 	MAXIMUM = 100,
3318 }
3319 alias GstTypeFindProbability TypeFindProbability;
3320 
3321 /**
3322  * Different URI-related errors that can occur.
3323  */
3324 public enum GstURIError
3325 {
3326 	/**
3327 	 * The protocol is not supported
3328 	 */
3329 	UNSUPPORTED_PROTOCOL = 0,
3330 	/**
3331 	 * There was a problem with the URI
3332 	 */
3333 	BAD_URI = 1,
3334 	/**
3335 	 * Could not set or change the URI because the
3336 	 * URI handler was in a state where that is not possible or not permitted
3337 	 */
3338 	BAD_STATE = 2,
3339 	/**
3340 	 * There was a problem with the entity that
3341 	 * the URI references
3342 	 */
3343 	BAD_REFERENCE = 3,
3344 }
3345 alias GstURIError URIError;
3346 
3347 /**
3348  * The different types of URI direction.
3349  */
3350 public enum GstURIType
3351 {
3352 	/**
3353 	 * The URI direction is unknown
3354 	 */
3355 	UNKNOWN = 0,
3356 	/**
3357 	 * The URI is a consumer.
3358 	 */
3359 	SINK = 1,
3360 	/**
3361 	 * The URI is a producer.
3362 	 */
3363 	SRC = 2,
3364 }
3365 alias GstURIType URIType;
3366 
3367 struct GstAllocationParams
3368 {
3369 	/**
3370 	 * flags to control allocation
3371 	 */
3372 	GstMemoryFlags flags;
3373 	/**
3374 	 * the desired alignment of the memory
3375 	 */
3376 	size_t alig;
3377 	/**
3378 	 * the desired prefix
3379 	 */
3380 	size_t prefix;
3381 	/**
3382 	 * the desired padding
3383 	 */
3384 	size_t padding;
3385 	void*[4] GstReserved;
3386 }
3387 
3388 struct GstAllocator
3389 {
3390 	GstObject object;
3391 	const(char)* memType;
3392 	/**
3393 	 * the implementation of the GstMemoryMapFunction
3394 	 */
3395 	GstMemoryMapFunction memMap;
3396 	/**
3397 	 * the implementation of the GstMemoryUnmapFunction
3398 	 */
3399 	GstMemoryUnmapFunction memUnmap;
3400 	/**
3401 	 * the implementation of the GstMemoryCopyFunction
3402 	 */
3403 	GstMemoryCopyFunction memCopy;
3404 	/**
3405 	 * the implementation of the GstMemoryShareFunction
3406 	 */
3407 	GstMemoryShareFunction memShare;
3408 	/**
3409 	 * the implementation of the GstMemoryIsSpanFunction
3410 	 */
3411 	GstMemoryIsSpanFunction memIsSpan;
3412 	/**
3413 	 * the implementation of the GstMemoryMapFullFunction.
3414 	 * Will be used instead of @mem_map if present. (Since 1.6)
3415 	 */
3416 	GstMemoryMapFullFunction memMapFull;
3417 	/**
3418 	 * the implementation of the GstMemoryUnmapFullFunction.
3419 	 * Will be used instead of @mem_unmap if present. (Since 1.6)
3420 	 */
3421 	GstMemoryUnmapFullFunction memUnmapFull;
3422 	void*[2] GstReserved;
3423 	GstAllocatorPrivate* priv;
3424 }
3425 
3426 /**
3427  * The #GstAllocator is used to create new memory.
3428  */
3429 struct GstAllocatorClass
3430 {
3431 	/**
3432 	 * Object parent class
3433 	 */
3434 	GstObjectClass objectClass;
3435 	/**
3436 	 *
3437 	 * Params:
3438 	 *     allocator = a #GstAllocator to use
3439 	 *     size = size of the visible memory area
3440 	 *     params = optional parameters
3441 	 * Return: a new #GstMemory.
3442 	 */
3443 	extern(C) GstMemory* function(GstAllocator* allocator, size_t size, GstAllocationParams* params) alloc;
3444 	/** */
3445 	extern(C) void function(GstAllocator* allocator, GstMemory* memory) free;
3446 	void*[4] GstReserved;
3447 }
3448 
3449 struct GstAllocatorPrivate;
3450 
3451 struct GstAtomicQueue;
3452 
3453 struct GstBin
3454 {
3455 	GstElement element;
3456 	/**
3457 	 * the number of children in this bin
3458 	 */
3459 	int numchildren;
3460 	/**
3461 	 * the list of children in this bin
3462 	 */
3463 	GList* children;
3464 	/**
3465 	 * updated whenever @children changes
3466 	 */
3467 	uint childrenCookie;
3468 	/**
3469 	 * internal bus for handling child messages
3470 	 */
3471 	GstBus* childBus;
3472 	/**
3473 	 * queued and cached messages
3474 	 */
3475 	GList* messages;
3476 	/**
3477 	 * the bin is currently calculating its state
3478 	 */
3479 	bool polling;
3480 	/**
3481 	 * the bin needs to recalculate its state (deprecated)
3482 	 */
3483 	bool stateDirty;
3484 	/**
3485 	 * the bin needs to select a new clock
3486 	 */
3487 	bool clockDirty;
3488 	/**
3489 	 * the last clock selected
3490 	 */
3491 	GstClock* providedClock;
3492 	/**
3493 	 * the element that provided @provided_clock
3494 	 */
3495 	GstElement* clockProvider;
3496 	GstBinPrivate* priv;
3497 	void*[4] GstReserved;
3498 }
3499 
3500 /**
3501  * Subclasses can override the @add_element and @remove_element to
3502  * update the list of children in the bin.
3503  *
3504  * The @handle_message method can be overridden to implement custom
3505  * message handling.  @handle_message takes ownership of the message, just like
3506  * #gst_element_post_message.
3507  */
3508 struct GstBinClass
3509 {
3510 	/**
3511 	 * bin parent class
3512 	 */
3513 	GstElementClass parentClass;
3514 	GThreadPool* pool;
3515 	/** */
3516 	extern(C) void function(GstBin* bin, GstElement* child) elementAdded;
3517 	/** */
3518 	extern(C) void function(GstBin* bin, GstElement* child) elementRemoved;
3519 	/** */
3520 	extern(C) int function(GstBin* bin, GstElement* element) addElement;
3521 	/** */
3522 	extern(C) int function(GstBin* bin, GstElement* element) removeElement;
3523 	/** */
3524 	extern(C) void function(GstBin* bin, GstMessage* message) handleMessage;
3525 	/** */
3526 	extern(C) int function(GstBin* bin) doLatency;
3527 	void*[4] GstReserved;
3528 }
3529 
3530 struct GstBinPrivate;
3531 
3532 
3533 struct GstBuffer
3534 {
3535 	/**
3536 	 * the parent structure
3537 	 */
3538 	GstMiniObject miniObject;
3539 	/**
3540 	 * pointer to the pool owner of the buffer
3541 	 */
3542 	GstBufferPool* pool;
3543 	/**
3544 	 * presentation timestamp of the buffer, can be #GST_CLOCK_TIME_NONE when the
3545 	 * pts is not known or relevant. The pts contains the timestamp when the
3546 	 * media should be presented to the user.
3547 	 */
3548 	GstClockTime pts;
3549 	/**
3550 	 * decoding timestamp of the buffer, can be #GST_CLOCK_TIME_NONE when the
3551 	 * dts is not known or relevant. The dts contains the timestamp when the
3552 	 * media should be processed.
3553 	 */
3554 	GstClockTime dts;
3555 	/**
3556 	 * duration in time of the buffer data, can be #GST_CLOCK_TIME_NONE
3557 	 * when the duration is not known or relevant.
3558 	 */
3559 	GstClockTime duration;
3560 	/**
3561 	 * a media specific offset for the buffer data.
3562 	 * For video frames, this is the frame number of this buffer.
3563 	 * For audio samples, this is the offset of the first sample in this buffer.
3564 	 * For file data or compressed data this is the byte offset of the first
3565 	 * byte in this buffer.
3566 	 */
3567 	ulong offset;
3568 	/**
3569 	 * the last offset contained in this buffer. It has the same
3570 	 * format as @offset.
3571 	 */
3572 	ulong offsetEnd;
3573 }
3574 
3575 struct GstBufferList;
3576 
3577 struct GstBufferPool
3578 {
3579 	GstObject object;
3580 	int flushing;
3581 	GstBufferPoolPrivate* priv;
3582 	void*[4] GstReserved;
3583 }
3584 
3585 /**
3586  * Parameters passed to the gst_buffer_pool_acquire_buffer() function to control the
3587  * allocation of the buffer.
3588  *
3589  * The default implementation ignores the @start and @stop members but other
3590  * implementations can use this extra information to decide what buffer to
3591  * return.
3592  */
3593 struct GstBufferPoolAcquireParams
3594 {
3595 	/**
3596 	 * the format of @start and @stop
3597 	 */
3598 	GstFormat format;
3599 	/**
3600 	 * the start position
3601 	 */
3602 	long start;
3603 	/**
3604 	 * the stop position
3605 	 */
3606 	long stop;
3607 	/**
3608 	 * additional flags
3609 	 */
3610 	GstBufferPoolAcquireFlags flags;
3611 	void*[4] GstReserved;
3612 }
3613 
3614 /**
3615  * The GstBufferPool class.
3616  */
3617 struct GstBufferPoolClass
3618 {
3619 	/**
3620 	 * Object parent class
3621 	 */
3622 	GstObjectClass objectClass;
3623 	/**
3624 	 *
3625 	 * Params:
3626 	 *     pool = a #GstBufferPool
3627 	 * Return: a %NULL terminated array
3628 	 *     of strings.
3629 	 */
3630 	extern(C) char** function(GstBufferPool* pool) getOptions;
3631 	/**
3632 	 *
3633 	 * Params:
3634 	 *     pool = a #GstBufferPool
3635 	 *     config = a #GstStructure
3636 	 * Return: %TRUE when the configuration could be set.
3637 	 */
3638 	extern(C) int function(GstBufferPool* pool, GstStructure* config) setConfig;
3639 	/** */
3640 	extern(C) int function(GstBufferPool* pool) start;
3641 	/** */
3642 	extern(C) int function(GstBufferPool* pool) stop;
3643 	/**
3644 	 *
3645 	 * Params:
3646 	 *     pool = a #GstBufferPool
3647 	 *     buffer = a location for a #GstBuffer
3648 	 *     params = parameters.
3649 	 * Return: a #GstFlowReturn such as %GST_FLOW_FLUSHING when the pool is
3650 	 *     inactive.
3651 	 */
3652 	extern(C) GstFlowReturn function(GstBufferPool* pool, GstBuffer** buffer, GstBufferPoolAcquireParams* params) acquireBuffer;
3653 	/** */
3654 	extern(C) GstFlowReturn function(GstBufferPool* pool, GstBuffer** buffer, GstBufferPoolAcquireParams* params) allocBuffer;
3655 	/** */
3656 	extern(C) void function(GstBufferPool* pool, GstBuffer* buffer) resetBuffer;
3657 	/** */
3658 	extern(C) void function(GstBufferPool* pool, GstBuffer* buffer) releaseBuffer;
3659 	/** */
3660 	extern(C) void function(GstBufferPool* pool, GstBuffer* buffer) freeBuffer;
3661 	/** */
3662 	extern(C) void function(GstBufferPool* pool) flushStart;
3663 	/** */
3664 	extern(C) void function(GstBufferPool* pool) flushStop;
3665 	void*[2] GstReserved;
3666 }
3667 
3668 struct GstBufferPoolPrivate;
3669 
3670 struct GstBus
3671 {
3672 	GstObject object;
3673 	GstBusPrivate* priv;
3674 	void*[4] GstReserved;
3675 }
3676 
3677 struct GstBusClass
3678 {
3679 	GstObjectClass parentClass;
3680 	/** */
3681 	extern(C) void function(GstBus* bus, GstMessage* message) message;
3682 	/** */
3683 	extern(C) void function(GstBus* bus, GstMessage* message) syncMessage;
3684 	void*[4] GstReserved;
3685 }
3686 
3687 struct GstBusPrivate;
3688 
3689 struct GstCaps
3690 {
3691 	/**
3692 	 * the parent type
3693 	 */
3694 	GstMiniObject miniObject;
3695 }
3696 
3697 struct GstCapsFeatures;
3698 
3699 struct GstChildProxy;
3700 
3701 /**
3702  * #GstChildProxy interface.
3703  */
3704 struct GstChildProxyInterface
3705 {
3706 	/**
3707 	 * parent interface type.
3708 	 */
3709 	GTypeInterface parent;
3710 	/**
3711 	 *
3712 	 * Params:
3713 	 *     parent = the parent object to get the child from
3714 	 *     name = the child's name
3715 	 * Return: the child object or %NULL if
3716 	 *     not found. Unref after usage.
3717 	 *
3718 	 *     MT safe.
3719 	 */
3720 	extern(C) GObject* function(GstChildProxy* parent, const(char)* name) getChildByName;
3721 	/**
3722 	 *
3723 	 * Params:
3724 	 *     parent = the parent object to get the child from
3725 	 *     index = the child's position in the child list
3726 	 * Return: the child object or %NULL if
3727 	 *     not found (index too high). Unref after usage.
3728 	 *
3729 	 *     MT safe.
3730 	 */
3731 	extern(C) GObject* function(GstChildProxy* parent, uint index) getChildByIndex;
3732 	/**
3733 	 *
3734 	 * Params:
3735 	 *     parent = the parent object
3736 	 * Return: the number of child objects
3737 	 *
3738 	 *     MT safe.
3739 	 */
3740 	extern(C) uint function(GstChildProxy* parent) getChildrenCount;
3741 	/** */
3742 	extern(C) void function(GstChildProxy* parent, GObject* child, const(char)* name) childAdded;
3743 	/** */
3744 	extern(C) void function(GstChildProxy* parent, GObject* child, const(char)* name) childRemoved;
3745 	void*[4] GstReserved;
3746 }
3747 
3748 struct GstClock
3749 {
3750 	GstObject object;
3751 	GstClockPrivate* priv;
3752 	void*[4] GstReserved;
3753 }
3754 
3755 /**
3756  * GStreamer clock class. Override the vmethods to implement the clock
3757  * functionality.
3758  */
3759 struct GstClockClass
3760 {
3761 	/**
3762 	 * the parent class structure
3763 	 */
3764 	GstObjectClass parentClass;
3765 	/** */
3766 	extern(C) GstClockTime function(GstClock* clock, GstClockTime oldResolution, GstClockTime newResolution) changeResolution;
3767 	/**
3768 	 *
3769 	 * Params:
3770 	 *     clock = a #GstClock
3771 	 * Return: the resolution of the clock in units of #GstClockTime.
3772 	 *
3773 	 *     MT safe.
3774 	 */
3775 	extern(C) GstClockTime function(GstClock* clock) getResolution;
3776 	/**
3777 	 *
3778 	 * Params:
3779 	 *     clock = a #GstClock to query
3780 	 * Return: the internal time of the clock. Or GST_CLOCK_TIME_NONE when
3781 	 *     given invalid input.
3782 	 *
3783 	 *     MT safe.
3784 	 */
3785 	extern(C) GstClockTime function(GstClock* clock) getInternalTime;
3786 	/** */
3787 	extern(C) GstClockReturn function(GstClock* clock, GstClockEntry* entry, GstClockTimeDiff* jitter) wait;
3788 	/** */
3789 	extern(C) GstClockReturn function(GstClock* clock, GstClockEntry* entry) waitAsync;
3790 	/** */
3791 	extern(C) void function(GstClock* clock, GstClockEntry* entry) unschedule;
3792 	void*[4] GstReserved;
3793 }
3794 
3795 /**
3796  * All pending timeouts or periodic notifies are converted into
3797  * an entry.
3798  * Note that GstClockEntry should be treated as an opaque structure. It must
3799  * not be extended or allocated using a custom allocator.
3800  */
3801 struct GstClockEntry
3802 {
3803 	/**
3804 	 * reference counter (read-only)
3805 	 */
3806 	int refcount;
3807 	GstClock* clock;
3808 	GstClockEntryType type;
3809 	GstClockTime time;
3810 	GstClockTime interval;
3811 	GstClockReturn status;
3812 	GstClockCallback func;
3813 	void* userData;
3814 	GDestroyNotify destroyData;
3815 	bool unscheduled;
3816 	bool wokenUp;
3817 	void*[4] GstReserved;
3818 }
3819 
3820 struct GstClockPrivate;
3821 
3822 struct GstContext;
3823 
3824 struct GstControlBinding
3825 {
3826 	GstObject parent;
3827 	/**
3828 	 * name of the property of this binding
3829 	 */
3830 	char* name;
3831 	/**
3832 	 * #GParamSpec for this property
3833 	 */
3834 	GParamSpec* pspec;
3835 	GstObject* object;
3836 	bool disabled;
3837 	void*[4] GstReserved;
3838 }
3839 
3840 /**
3841  * The class structure of #GstControlBinding.
3842  */
3843 struct GstControlBindingClass
3844 {
3845 	/**
3846 	 * Parent class
3847 	 */
3848 	GstObjectClass parentClass;
3849 	/**
3850 	 *
3851 	 * Params:
3852 	 *     binding = the control binding
3853 	 *     object = the object that has controlled properties
3854 	 *     timestamp = the time that should be processed
3855 	 *     lastSync = the last time this was called
3856 	 * Return: %TRUE if the controller value could be applied to the object
3857 	 *     property, %FALSE otherwise
3858 	 */
3859 	extern(C) int function(GstControlBinding* binding, GstObject* object, GstClockTime timestamp, GstClockTime lastSync) syncValues;
3860 	/**
3861 	 *
3862 	 * Params:
3863 	 *     binding = the control binding
3864 	 *     timestamp = the time the control-change should be read from
3865 	 * Return: the GValue of the property at the given time,
3866 	 *     or %NULL if the property isn't controlled.
3867 	 */
3868 	extern(C) GValue* function(GstControlBinding* binding, GstClockTime timestamp) getValue;
3869 	/**
3870 	 *
3871 	 * Params:
3872 	 *     binding = the control binding
3873 	 *     timestamp = the time that should be processed
3874 	 *     interval = the time spacing between subsequent values
3875 	 *     nValues = the number of values
3876 	 *     values = array to put control-values in
3877 	 * Return: %TRUE if the given array could be filled, %FALSE otherwise
3878 	 */
3879 	extern(C) int function(GstControlBinding* binding, GstClockTime timestamp, GstClockTime interval, uint nValues, void* values) getValueArray;
3880 	/**
3881 	 *
3882 	 * Params:
3883 	 *     binding = the control binding
3884 	 *     timestamp = the time that should be processed
3885 	 *     interval = the time spacing between subsequent values
3886 	 *     nValues = the number of values
3887 	 *     values = array to put control-values in
3888 	 * Return: %TRUE if the given array could be filled, %FALSE otherwise
3889 	 */
3890 	extern(C) int function(GstControlBinding* binding, GstClockTime timestamp, GstClockTime interval, uint nValues, GValue* values) getGValueArray;
3891 	void*[4] GstReserved;
3892 }
3893 
3894 struct GstControlSource
3895 {
3896 	GstObject parent;
3897 	/**
3898 	 * Function for returning a value for a given timestamp
3899 	 */
3900 	GstControlSourceGetValue getValue;
3901 	/**
3902 	 * Function for returning a values array for a given timestamp
3903 	 */
3904 	GstControlSourceGetValueArray getValueArray;
3905 	void*[4] GstReserved;
3906 }
3907 
3908 /**
3909  * The class structure of #GstControlSource.
3910  */
3911 struct GstControlSourceClass
3912 {
3913 	/**
3914 	 * Parent class
3915 	 */
3916 	GstObjectClass parentClass;
3917 	void*[4] GstReserved;
3918 }
3919 
3920 struct GstDateTime;
3921 
3922 struct GstDebugCategory
3923 {
3924 	int threshold;
3925 	uint color;
3926 	const(char)* name;
3927 	const(char)* description;
3928 }
3929 
3930 struct GstDebugMessage;
3931 
3932 struct GstDevice
3933 {
3934 	/**
3935 	 * The parent #GstObject strucuture.
3936 	 */
3937 	GstObject parent;
3938 	GstDevicePrivate* priv;
3939 	void*[4] GstReserved;
3940 }
3941 
3942 /**
3943  * The class structure for a #GstDevice object.
3944  *
3945  * Since: 1.4
3946  */
3947 struct GstDeviceClass
3948 {
3949 	/**
3950 	 * The parent #GstObjectClass strucuture.
3951 	 */
3952 	GstObjectClass parentClass;
3953 	/**
3954 	 *
3955 	 * Params:
3956 	 *     device = a #GstDevice
3957 	 *     name = name of new element, or %NULL to automatically
3958 	 *         create a unique name.
3959 	 * Return: a new #GstElement configured to use this device
3960 	 */
3961 	extern(C) GstElement* function(GstDevice* device, const(char)* name) createElement;
3962 	/**
3963 	 *
3964 	 * Params:
3965 	 *     device = a #GstDevice
3966 	 *     element = a #GstElement
3967 	 * Return: %TRUE if the element could be reconfigured to use this device,
3968 	 *     %FALSE otherwise.
3969 	 */
3970 	extern(C) int function(GstDevice* device, GstElement* element) reconfigureElement;
3971 	void*[4] GstReserved;
3972 }
3973 
3974 struct GstDeviceMonitor
3975 {
3976 	/**
3977 	 * the parent #GstObject structure
3978 	 */
3979 	GstObject parent;
3980 	GstDeviceMonitorPrivate* priv;
3981 	void*[4] GstReserved;
3982 }
3983 
3984 /**
3985  * Opaque device monitor class structure.
3986  *
3987  * Since: 1.4
3988  */
3989 struct GstDeviceMonitorClass
3990 {
3991 	/**
3992 	 * the parent #GstObjectClass structure
3993 	 */
3994 	GstObjectClass parentClass;
3995 	void*[4] GstReserved;
3996 }
3997 
3998 struct GstDeviceMonitorPrivate;
3999 
4000 struct GstDevicePrivate;
4001 
4002 struct GstDeviceProvider
4003 {
4004 	/**
4005 	 * The parent #GstObject
4006 	 */
4007 	GstObject parent;
4008 	/**
4009 	 * a #GList of the #GstDevice objects
4010 	 */
4011 	GList* devices;
4012 	GstDeviceProviderPrivate* priv;
4013 	void*[4] GstReserved;
4014 }
4015 
4016 struct GstDeviceProviderClass
4017 {
4018 	/**
4019 	 * the parent #GstObjectClass structure
4020 	 */
4021 	GstObjectClass parentClass;
4022 	/**
4023 	 * a pointer to the #GstDeviceProviderFactory that creates this
4024 	 * provider
4025 	 */
4026 	GstDeviceProviderFactory* factory;
4027 	/** */
4028 	extern(C) GList* function(GstDeviceProvider* provider) probe;
4029 	/**
4030 	 *
4031 	 * Params:
4032 	 *     provider = A #GstDeviceProvider
4033 	 * Return: %TRUE if the device providering could be started
4034 	 */
4035 	extern(C) int function(GstDeviceProvider* provider) start;
4036 	/** */
4037 	extern(C) void function(GstDeviceProvider* provider) stop;
4038 	void* metadata;
4039 	void*[4] GstReserved;
4040 }
4041 
4042 struct GstDeviceProviderFactory;
4043 
4044 /**
4045  * The opaque #GstDeviceProviderFactoryClass data structure.
4046  *
4047  * Since: 1.4
4048  */
4049 struct GstDeviceProviderFactoryClass;
4050 
4051 struct GstDeviceProviderPrivate;
4052 
4053 
4054 struct GstElement
4055 {
4056 	GstObject object;
4057 	/**
4058 	 * Used to serialize execution of gst_element_set_state()
4059 	 */
4060 	GRecMutex stateLock;
4061 	/**
4062 	 * Used to signal completion of a state change
4063 	 */
4064 	GCond stateCond;
4065 	/**
4066 	 * Used to detect concurrent execution of
4067 	 * gst_element_set_state() and gst_element_get_state()
4068 	 */
4069 	uint stateCookie;
4070 	/**
4071 	 * the target state of an element as set by the application
4072 	 */
4073 	GstState targetState;
4074 	/**
4075 	 * the current state of an element
4076 	 */
4077 	GstState currentState;
4078 	/**
4079 	 * the next state of an element, can be #GST_STATE_VOID_PENDING if
4080 	 * the element is in the correct state.
4081 	 */
4082 	GstState nextState;
4083 	/**
4084 	 * the final state the element should go to, can be
4085 	 * #GST_STATE_VOID_PENDING if the element is in the correct state
4086 	 */
4087 	GstState pendingState;
4088 	/**
4089 	 * the last return value of an element state change
4090 	 */
4091 	GstStateChangeReturn lastReturn;
4092 	/**
4093 	 * the bus of the element. This bus is provided to the element by the
4094 	 * parent element or the application. A #GstPipeline has a bus of its own.
4095 	 */
4096 	GstBus* bus;
4097 	/**
4098 	 * the clock of the element. This clock is usually provided to the
4099 	 * element by the toplevel #GstPipeline.
4100 	 */
4101 	GstClock* clock;
4102 	/**
4103 	 * the time of the clock right before the element is set to
4104 	 * PLAYING. Subtracting @base_time from the current clock time in the PLAYING
4105 	 * state will yield the running_time against the clock.
4106 	 */
4107 	GstClockTimeDiff baseTime;
4108 	/**
4109 	 * the running_time of the last PAUSED state
4110 	 */
4111 	GstClockTime startTime;
4112 	/**
4113 	 * number of pads of the element, includes both source and sink pads.
4114 	 */
4115 	ushort numpads;
4116 	/**
4117 	 * list of pads
4118 	 */
4119 	GList* pads;
4120 	/**
4121 	 * number of source pads of the element.
4122 	 */
4123 	ushort numsrcpads;
4124 	/**
4125 	 * list of source pads
4126 	 */
4127 	GList* srcpads;
4128 	/**
4129 	 * number of sink pads of the element.
4130 	 */
4131 	ushort numsinkpads;
4132 	/**
4133 	 * list of sink pads
4134 	 */
4135 	GList* sinkpads;
4136 	/**
4137 	 * updated whenever the a pad is added or removed
4138 	 */
4139 	uint padsCookie;
4140 	GList* contexts;
4141 	void*[3] GstReserved;
4142 }
4143 
4144 struct GstElementClass
4145 {
4146 	/**
4147 	 * the parent class structure
4148 	 */
4149 	GstObjectClass parentClass;
4150 	/**
4151 	 * metadata for elements of this class
4152 	 */
4153 	void* metadata;
4154 	/**
4155 	 * the #GstElementFactory that creates these elements
4156 	 */
4157 	GstElementFactory* elementfactory;
4158 	/**
4159 	 * a #GList of #GstPadTemplate
4160 	 */
4161 	GList* padtemplates;
4162 	/**
4163 	 * the number of padtemplates
4164 	 */
4165 	int numpadtemplates;
4166 	/**
4167 	 * changed whenever the padtemplates change
4168 	 */
4169 	uint padTemplCookie;
4170 	/** */
4171 	extern(C) void function(GstElement* element, GstPad* pad) padAdded;
4172 	/** */
4173 	extern(C) void function(GstElement* element, GstPad* pad) padRemoved;
4174 	/** */
4175 	extern(C) void function(GstElement* element) noMorePads;
4176 	/**
4177 	 *
4178 	 * Params:
4179 	 *     element = a #GstElement to find a request pad of.
4180 	 *     templ = a #GstPadTemplate of which we want a pad of.
4181 	 *     name = the name of the request #GstPad
4182 	 *         to retrieve. Can be %NULL.
4183 	 *     caps = the caps of the pad we want to
4184 	 *         request. Can be %NULL.
4185 	 * Return: requested #GstPad if found,
4186 	 *     otherwise %NULL.  Release after usage.
4187 	 */
4188 	extern(C) GstPad* function(GstElement* element, GstPadTemplate* templ, const(char)* name, GstCaps* caps) requestNewPad;
4189 	/** */
4190 	extern(C) void function(GstElement* element, GstPad* pad) releasePad;
4191 	/**
4192 	 *
4193 	 * Params:
4194 	 *     element = a #GstElement to get the state of.
4195 	 *     state = a pointer to #GstState to hold the state.
4196 	 *         Can be %NULL.
4197 	 *     pending = a pointer to #GstState to hold the pending
4198 	 *         state. Can be %NULL.
4199 	 *     timeout = a #GstClockTime to specify the timeout for an async
4200 	 *         state change or %GST_CLOCK_TIME_NONE for infinite timeout.
4201 	 * Return: %GST_STATE_CHANGE_SUCCESS if the element has no more pending state
4202 	 *     and the last state change succeeded, %GST_STATE_CHANGE_ASYNC if the
4203 	 *     element is still performing a state change or
4204 	 *     %GST_STATE_CHANGE_FAILURE if the last state change failed.
4205 	 *
4206 	 *     MT safe.
4207 	 */
4208 	extern(C) GstStateChangeReturn function(GstElement* element, GstState* state, GstState* pending, GstClockTime timeout) getState;
4209 	/**
4210 	 *
4211 	 * Params:
4212 	 *     element = a #GstElement to change state of.
4213 	 *     state = the element's new #GstState.
4214 	 * Return: Result of the state change using #GstStateChangeReturn.
4215 	 *
4216 	 *     MT safe.
4217 	 */
4218 	extern(C) GstStateChangeReturn function(GstElement* element, GstState state) setState;
4219 	/**
4220 	 *
4221 	 * Params:
4222 	 *     element = a #GstElement
4223 	 *     transition = the requested transition
4224 	 * Return: the #GstStateChangeReturn of the state transition.
4225 	 */
4226 	extern(C) GstStateChangeReturn function(GstElement* element, GstStateChange transition) changeState;
4227 	/** */
4228 	extern(C) void function(GstElement* element, GstState oldstate, GstState newstate, GstState pending) stateChanged;
4229 	/** */
4230 	extern(C) void function(GstElement* element, GstBus* bus) setBus;
4231 	/**
4232 	 *
4233 	 * Params:
4234 	 *     element = a #GstElement to query
4235 	 * Return: the GstClock provided by the
4236 	 *     element or %NULL if no clock could be provided.  Unref after usage.
4237 	 *
4238 	 *     MT safe.
4239 	 */
4240 	extern(C) GstClock* function(GstElement* element) provideClock;
4241 	/**
4242 	 *
4243 	 * Params:
4244 	 *     element = a #GstElement to set the clock for.
4245 	 *     clock = the #GstClock to set for the element.
4246 	 * Return: %TRUE if the element accepted the clock. An element can refuse a
4247 	 *     clock when it, for example, is not able to slave its internal clock to the
4248 	 *     @clock or when it requires a specific clock to operate.
4249 	 *
4250 	 *     MT safe.
4251 	 */
4252 	extern(C) int function(GstElement* element, GstClock* clock) setClock;
4253 	/**
4254 	 *
4255 	 * Params:
4256 	 *     element = a #GstElement to send the event to.
4257 	 *     event = the #GstEvent to send to the element.
4258 	 * Return: %TRUE if the event was handled. Events that trigger a preroll (such
4259 	 *     as flushing seeks and steps) will emit %GST_MESSAGE_ASYNC_DONE.
4260 	 */
4261 	extern(C) int function(GstElement* element, GstEvent* event) sendEvent;
4262 	/**
4263 	 *
4264 	 * Params:
4265 	 *     element = a #GstElement to perform the query on.
4266 	 *     query = the #GstQuery.
4267 	 * Return: %TRUE if the query could be performed.
4268 	 *
4269 	 *     MT safe.
4270 	 */
4271 	extern(C) int function(GstElement* element, GstQuery* query) query;
4272 	/**
4273 	 *
4274 	 * Params:
4275 	 *     element = a #GstElement posting the message
4276 	 *     message = a #GstMessage to post
4277 	 * Return: %TRUE if the message was successfully posted. The function returns
4278 	 *     %FALSE if the element did not have a bus.
4279 	 *
4280 	 *     MT safe.
4281 	 */
4282 	extern(C) int function(GstElement* element, GstMessage* message) postMessage;
4283 	/** */
4284 	extern(C) void function(GstElement* element, GstContext* context) setContext;
4285 	void*[18] GstReserved;
4286 }
4287 
4288 struct GstElementFactory;
4289 
4290 struct GstElementFactoryClass;
4291 
4292 struct GstEvent
4293 {
4294 	/**
4295 	 * the parent structure
4296 	 */
4297 	GstMiniObject miniObject;
4298 	/**
4299 	 * the #GstEventType of the event
4300 	 */
4301 	GstEventType type;
4302 	/**
4303 	 * the timestamp of the event
4304 	 */
4305 	ulong timestamp;
4306 	/**
4307 	 * the sequence number of the event
4308 	 */
4309 	uint seqnum;
4310 }
4311 
4312 
4313 /**
4314  * A format definition
4315  */
4316 struct GstFormatDefinition
4317 {
4318 	/**
4319 	 * The unique id of this format
4320 	 */
4321 	GstFormat value;
4322 	/**
4323 	 * A short nick of the format
4324 	 */
4325 	const(char)* nick;
4326 	/**
4327 	 * A longer description of the format
4328 	 */
4329 	const(char)* description;
4330 	/**
4331 	 * A quark for the nick
4332 	 */
4333 	GQuark quark;
4334 }
4335 
4336 
4337 
4338 struct GstGhostPad
4339 {
4340 	GstProxyPad pad;
4341 	GstGhostPadPrivate* priv;
4342 }
4343 
4344 struct GstGhostPadClass
4345 {
4346 	GstProxyPadClass parentClass;
4347 	void*[4] GstReserved;
4348 }
4349 
4350 struct GstGhostPadPrivate;
4351 
4352 
4353 
4354 struct GstIterator
4355 {
4356 	/**
4357 	 * The function to copy the iterator
4358 	 */
4359 	GstIteratorCopyFunction copy;
4360 	/**
4361 	 * The function to get the next item in the iterator
4362 	 */
4363 	GstIteratorNextFunction next;
4364 	/**
4365 	 * The function to be called for each item retrieved
4366 	 */
4367 	GstIteratorItemFunction item;
4368 	/**
4369 	 * The function to call when a resync is needed.
4370 	 */
4371 	GstIteratorResyncFunction resync;
4372 	/**
4373 	 * The function to call when the iterator is freed
4374 	 */
4375 	GstIteratorFreeFunction free;
4376 	/**
4377 	 * The iterator that is currently pushed with gst_iterator_push()
4378 	 */
4379 	GstIterator* pushed;
4380 	/**
4381 	 * The type of the object that this iterator will return
4382 	 */
4383 	GType type;
4384 	/**
4385 	 * The lock protecting the data structure and the cookie.
4386 	 */
4387 	GMutex* lock;
4388 	/**
4389 	 * The cookie; the value of the master_cookie when this iterator was
4390 	 * created.
4391 	 */
4392 	uint cookie;
4393 	/**
4394 	 * A pointer to the master cookie.
4395 	 */
4396 	uint* masterCookie;
4397 	/**
4398 	 * the size of the iterator
4399 	 */
4400 	uint size;
4401 	void*[4] GstReserved;
4402 }
4403 
4404 /**
4405  * A structure containing the result of a map operation such as
4406  * gst_memory_map(). It contains the data and size.
4407  */
4408 struct GstMapInfo
4409 {
4410 	/**
4411 	 * a pointer to the mapped memory
4412 	 */
4413 	GstMemory* memory;
4414 	/**
4415 	 * flags used when mapping the memory
4416 	 */
4417 	GstMapFlags flags;
4418 	/**
4419 	 * a pointer to the mapped data
4420 	 */
4421 	ubyte* data;
4422 	/**
4423 	 * the valid size in @data
4424 	 */
4425 	size_t size;
4426 	/**
4427 	 * the maximum bytes in @data
4428 	 */
4429 	size_t maxsize;
4430 	/**
4431 	 * extra private user_data that the implementation of the memory
4432 	 * can use to store extra info.
4433 	 */
4434 	void*[4] userData;
4435 	void*[4] GstReserved;
4436 }
4437 
4438 struct GstMemory
4439 {
4440 	/**
4441 	 * parent structure
4442 	 */
4443 	GstMiniObject miniObject;
4444 	/**
4445 	 * pointer to the #GstAllocator
4446 	 */
4447 	GstAllocator* allocator;
4448 	/**
4449 	 * parent memory block
4450 	 */
4451 	GstMemory* parent;
4452 	/**
4453 	 * the maximum size allocated
4454 	 */
4455 	size_t maxsize;
4456 	/**
4457 	 * the alignment of the memory
4458 	 */
4459 	size_t alig;
4460 	/**
4461 	 * the offset where valid data starts
4462 	 */
4463 	size_t offset;
4464 	/**
4465 	 * the size of valid data
4466 	 */
4467 	size_t size;
4468 }
4469 
4470 struct GstMessage
4471 {
4472 	/**
4473 	 * the parent structure
4474 	 */
4475 	GstMiniObject miniObject;
4476 	/**
4477 	 * the #GstMessageType of the message
4478 	 */
4479 	GstMessageType type;
4480 	/**
4481 	 * the timestamp of the message
4482 	 */
4483 	ulong timestamp;
4484 	/**
4485 	 * the src of the message
4486 	 */
4487 	GstObject* src;
4488 	/**
4489 	 * the sequence number of the message
4490 	 */
4491 	uint seqnum;
4492 	GMutex lock;
4493 	GCond cond;
4494 }
4495 
4496 /**
4497  * The #GstMeta structure should be included as the first member of a #GstBuffer
4498  * metadata structure. The structure defines the API of the metadata and should
4499  * be accessible to all elements using the metadata.
4500  *
4501  * A metadata API is registered with gst_meta_api_type_register() which takes a
4502  * name for the metadata API and some tags associated with the metadata.
4503  * With gst_meta_api_type_has_tag() one can check if a certain metadata API
4504  * contains a given tag.
4505  *
4506  * Multiple implementations of a metadata API can be registered.
4507  * To implement a metadata API, gst_meta_register() should be used. This
4508  * function takes all parameters needed to create, free and transform metadata
4509  * along with the size of the metadata. The function returns a #GstMetaInfo
4510  * structure that contains the information for the implementation of the API.
4511  *
4512  * A specific implementation can be retrieved by name with gst_meta_get_info().
4513  *
4514  * See #GstBuffer for how the metadata can be added, retrieved and removed from
4515  * buffers.
4516  */
4517 struct GstMeta
4518 {
4519 	/**
4520 	 * extra flags for the metadata
4521 	 */
4522 	GstMetaFlags flags;
4523 	/**
4524 	 * pointer to the #GstMetaInfo
4525 	 */
4526 	GstMetaInfo* info;
4527 }
4528 
4529 /**
4530  * The #GstMetaInfo provides information about a specific metadata
4531  * structure.
4532  */
4533 struct GstMetaInfo
4534 {
4535 	/**
4536 	 * tag identifying the metadata structure and api
4537 	 */
4538 	GType api;
4539 	/**
4540 	 * type identifying the implementor of the api
4541 	 */
4542 	GType type;
4543 	/**
4544 	 * size of the metadata
4545 	 */
4546 	size_t size;
4547 	/**
4548 	 * function for initializing the metadata
4549 	 */
4550 	GstMetaInitFunction initFunc;
4551 	/**
4552 	 * function for freeing the metadata
4553 	 */
4554 	GstMetaFreeFunction freeFunc;
4555 	/**
4556 	 * function for transforming the metadata
4557 	 */
4558 	GstMetaTransformFunction transformFunc;
4559 	void*[4] GstReserved;
4560 }
4561 
4562 /**
4563  * Extra data passed to a "gst-copy" transform #GstMetaTransformFunction.
4564  */
4565 struct GstMetaTransformCopy
4566 {
4567 	/**
4568 	 * %TRUE if only region is copied
4569 	 */
4570 	bool region;
4571 	/**
4572 	 * the offset to copy, 0 if @region is %FALSE, otherwise > 0
4573 	 */
4574 	size_t offset;
4575 	/**
4576 	 * the size to copy, -1 or the buffer size when @region is %FALSE
4577 	 */
4578 	size_t size;
4579 }
4580 
4581 struct GstMiniObject
4582 {
4583 	/**
4584 	 * the GType of the object
4585 	 */
4586 	GType type;
4587 	/**
4588 	 * atomic refcount
4589 	 */
4590 	int refcount;
4591 	/**
4592 	 * atomic state of the locks
4593 	 */
4594 	int lockstate;
4595 	/**
4596 	 * extra flags.
4597 	 */
4598 	uint flags;
4599 	/**
4600 	 * a copy function
4601 	 */
4602 	GstMiniObjectCopyFunction copy;
4603 	/**
4604 	 * a dispose function
4605 	 */
4606 	GstMiniObjectDisposeFunction dispose;
4607 	/**
4608 	 * the free function
4609 	 */
4610 	GstMiniObjectFreeFunction free;
4611 	uint nQdata;
4612 	void* qdata;
4613 }
4614 
4615 struct GstObject
4616 {
4617 	GObject object;
4618 	/**
4619 	 * object LOCK
4620 	 */
4621 	GMutex lock;
4622 	/**
4623 	 * The name of the object
4624 	 */
4625 	char* name;
4626 	/**
4627 	 * this object's parent, weak ref
4628 	 */
4629 	GstObject* parent;
4630 	/**
4631 	 * flags for this object
4632 	 */
4633 	uint flags;
4634 	GList* controlBindings;
4635 	ulong controlRate;
4636 	ulong lastSync;
4637 	void* GstReserved;
4638 }
4639 
4640 /**
4641  * GStreamer base object class.
4642  */
4643 struct GstObjectClass
4644 {
4645 	/**
4646 	 * parent
4647 	 */
4648 	GObjectClass parentClass;
4649 	/**
4650 	 * separator used by gst_object_get_path_string()
4651 	 */
4652 	const(char)* pathStringSeparator;
4653 	/** */
4654 	extern(C) void function(GstObject* object, GstObject* orig, GParamSpec* pspec) deepNotify;
4655 	void*[4] GstReserved;
4656 }
4657 
4658 struct GstPad
4659 {
4660 	GstObject object;
4661 	/**
4662 	 * private data owned by the parent element
4663 	 */
4664 	void* elementPrivate;
4665 	/**
4666 	 * padtemplate for this pad
4667 	 */
4668 	GstPadTemplate* padtemplate;
4669 	/**
4670 	 * the direction of the pad, cannot change after creating
4671 	 * the pad.
4672 	 */
4673 	GstPadDirection direction;
4674 	GRecMutex streamRecLock;
4675 	GstTask* task;
4676 	GCond blockCond;
4677 	GHookList probes;
4678 	GstPadMode mode;
4679 	GstPadActivateFunction activatefunc;
4680 	void* activatedata;
4681 	GDestroyNotify activatenotify;
4682 	GstPadActivateModeFunction activatemodefunc;
4683 	void* activatemodedata;
4684 	GDestroyNotify activatemodenotify;
4685 	GstPad* peer;
4686 	GstPadLinkFunction linkfunc;
4687 	void* linkdata;
4688 	GDestroyNotify linknotify;
4689 	GstPadUnlinkFunction unlinkfunc;
4690 	void* unlinkdata;
4691 	GDestroyNotify unlinknotify;
4692 	GstPadChainFunction chainfunc;
4693 	void* chaindata;
4694 	GDestroyNotify chainnotify;
4695 	GstPadChainListFunction chainlistfunc;
4696 	void* chainlistdata;
4697 	GDestroyNotify chainlistnotify;
4698 	GstPadGetRangeFunction getrangefunc;
4699 	void* getrangedata;
4700 	GDestroyNotify getrangenotify;
4701 	GstPadEventFunction eventfunc;
4702 	void* eventdata;
4703 	GDestroyNotify eventnotify;
4704 	long offset;
4705 	GstPadQueryFunction queryfunc;
4706 	void* querydata;
4707 	GDestroyNotify querynotify;
4708 	GstPadIterIntLinkFunction iterintlinkfunc;
4709 	void* iterintlinkdata;
4710 	GDestroyNotify iterintlinknotify;
4711 	int numProbes;
4712 	int numBlocked;
4713 	GstPadPrivate* priv;
4714 	union ABI
4715 	{
4716 		void*[4] GstReserved;
4717 		struct Abi
4718 		{
4719 			GstFlowReturn lastFlowret;
4720 			GstPadEventFullFunction eventfullfunc;
4721 		}
4722 		Abi abi;
4723 	}
4724 	ABI abi;
4725 }
4726 
4727 struct GstPadClass
4728 {
4729 	GstObjectClass parentClass;
4730 	/** */
4731 	extern(C) void function(GstPad* pad, GstPad* peer) linked;
4732 	/** */
4733 	extern(C) void function(GstPad* pad, GstPad* peer) unlinked;
4734 	void*[4] GstReserved;
4735 }
4736 
4737 struct GstPadPrivate;
4738 
4739 struct GstPadProbeInfo
4740 {
4741 	/**
4742 	 * the current probe type
4743 	 */
4744 	GstPadProbeType type;
4745 	/**
4746 	 * the id of the probe
4747 	 */
4748 	gulong id;
4749 	/**
4750 	 * type specific data, check the @type field to know the
4751 	 * datatype.  This field can be %NULL.
4752 	 */
4753 	void* data;
4754 	/**
4755 	 * offset of pull probe, this field is valid when @type contains
4756 	 * #GST_PAD_PROBE_TYPE_PULL
4757 	 */
4758 	ulong offset;
4759 	/**
4760 	 * size of pull probe, this field is valid when @type contains
4761 	 * #GST_PAD_PROBE_TYPE_PULL
4762 	 */
4763 	uint size;
4764 	union ABI
4765 	{
4766 		void*[4] GstReserved;
4767 		struct Abi
4768 		{
4769 			GstFlowReturn flowRet;
4770 		}
4771 		Abi abi;
4772 	}
4773 	ABI abi;
4774 }
4775 
4776 struct GstPadTemplate
4777 {
4778 	GstObject object;
4779 	char* nameTemplate;
4780 	GstPadDirection direction;
4781 	GstPadPresence presence;
4782 	GstCaps* caps;
4783 	void*[4] GstReserved;
4784 }
4785 
4786 struct GstPadTemplateClass
4787 {
4788 	GstObjectClass parentClass;
4789 	/** */
4790 	extern(C) void function(GstPadTemplate* templ, GstPad* pad) padCreated;
4791 	void*[4] GstReserved;
4792 }
4793 
4794 
4795 /**
4796  * A GParamSpec derived structure that contains the meta data for fractional
4797  * properties.
4798  */
4799 struct GstParamSpecFraction
4800 {
4801 	/**
4802 	 * super class
4803 	 */
4804 	GParamSpec parentInstance;
4805 	/**
4806 	 * minimal numerator
4807 	 */
4808 	int minNum;
4809 	/**
4810 	 * minimal denominator
4811 	 */
4812 	int minDen;
4813 	/**
4814 	 * maximal numerator
4815 	 */
4816 	int maxNum;
4817 	/**
4818 	 * maximal denominator
4819 	 */
4820 	int maxDen;
4821 	/**
4822 	 * default numerator
4823 	 */
4824 	int defNum;
4825 	/**
4826 	 * default denominator
4827 	 */
4828 	int defDen;
4829 }
4830 
4831 /**
4832  * The #GstParentBufferMeta is a #GstMeta which can be attached to a #GstBuffer
4833  * to hold a reference to another buffer that is only released when the child
4834  * #GstBuffer is released.
4835  *
4836  * Typically, #GstParentBufferMeta is used when the child buffer is directly
4837  * using the #GstMemory of the parent buffer, and wants to prevent the parent
4838  * buffer from being returned to a buffer pool until the #GstMemory is available
4839  * for re-use.
4840  *
4841  * Since: 1.6
4842  */
4843 struct GstParentBufferMeta
4844 {
4845 	/**
4846 	 * the parent #GstMeta structure
4847 	 */
4848 	GstMeta parent;
4849 	/**
4850 	 * the #GstBuffer on which a reference is being held.
4851 	 */
4852 	GstBuffer* buffer;
4853 }
4854 
4855 struct GstParseContext;
4856 
4857 struct GstPipeline
4858 {
4859 	GstBin bin;
4860 	/**
4861 	 * The fixed clock of the pipeline, used when
4862 	 * GST_PIPELINE_FLAG_FIXED_CLOCK is set.
4863 	 */
4864 	GstClock* fixedClock;
4865 	/**
4866 	 * The stream time of the pipeline. A better name for this
4867 	 * property would be the running_time, the total time spent in the
4868 	 * PLAYING state without being flushed. (deprecated, use the start_time
4869 	 * on GstElement).
4870 	 */
4871 	GstClockTime streamTime;
4872 	/**
4873 	 * Extra delay added to base_time to compensate for computing delays
4874 	 * when setting elements to PLAYING.
4875 	 */
4876 	GstClockTime delay;
4877 	GstPipelinePrivate* priv;
4878 	void*[4] GstReserved;
4879 }
4880 
4881 struct GstPipelineClass
4882 {
4883 	GstBinClass parentClass;
4884 	void*[4] GstReserved;
4885 }
4886 
4887 struct GstPipelinePrivate;
4888 
4889 struct GstPlugin;
4890 
4891 struct GstPluginClass;
4892 
4893 /**
4894  * A plugin should export a variable of this type called plugin_desc. The plugin
4895  * loader will use the data provided there to initialize the plugin.
4896  *
4897  * The @licence parameter must be one of: LGPL, GPL, QPL, GPL/QPL, MPL,
4898  * BSD, MIT/X11, Proprietary, unknown.
4899  */
4900 struct GstPluginDesc
4901 {
4902 	/**
4903 	 * the major version number of core that plugin was compiled for
4904 	 */
4905 	int majorVersion;
4906 	/**
4907 	 * the minor version number of core that plugin was compiled for
4908 	 */
4909 	int minorVersion;
4910 	/**
4911 	 * a unique name of the plugin
4912 	 */
4913 	const(char)* name;
4914 	/**
4915 	 * description of plugin
4916 	 */
4917 	const(char)* description;
4918 	/**
4919 	 * pointer to the init function of this plugin.
4920 	 */
4921 	GstPluginInitFunc pluginInit;
4922 	/**
4923 	 * version of the plugin
4924 	 */
4925 	const(char)* versio;
4926 	/**
4927 	 * effective license of plugin
4928 	 */
4929 	const(char)* license;
4930 	/**
4931 	 * source module plugin belongs to
4932 	 */
4933 	const(char)* source;
4934 	/**
4935 	 * shipped package plugin belongs to
4936 	 */
4937 	const(char)* p;
4938 	/**
4939 	 * URL to provider of plugin
4940 	 */
4941 	const(char)* origin;
4942 	/**
4943 	 * date time string in ISO 8601
4944 	 * format (or rather, a subset thereof), or %NULL. Allowed are the
4945 	 * following formats: "YYYY-MM-DD" and "YYY-MM-DDTHH:MMZ" (with
4946 	 * 'T' a separator and 'Z' indicating UTC/Zulu time). This field
4947 	 * should be set via the GST_PACKAGE_RELEASE_DATETIME
4948 	 * preprocessor macro.
4949 	 */
4950 	const(char)* releaseDatetime;
4951 	void*[4] GstReserved;
4952 }
4953 
4954 struct GstPluginFeature;
4955 
4956 struct GstPluginFeatureClass;
4957 
4958 struct GstPoll;
4959 
4960 struct GstPollFD
4961 {
4962 	/**
4963 	 * a file descriptor
4964 	 */
4965 	int fd;
4966 	int idx;
4967 }
4968 
4969 struct GstPreset;
4970 
4971 /**
4972  * #GstPreset interface.
4973  */
4974 struct GstPresetInterface
4975 {
4976 	/**
4977 	 * parent interface type.
4978 	 */
4979 	GTypeInterface parent;
4980 	/**
4981 	 *
4982 	 * Params:
4983 	 *     preset = a #GObject that implements #GstPreset
4984 	 * Return: list with names, use g_strfreev() after usage.
4985 	 */
4986 	extern(C) char** function(GstPreset* preset) getPresetNames;
4987 	/**
4988 	 *
4989 	 * Params:
4990 	 *     preset = a #GObject that implements #GstPreset
4991 	 * Return: an
4992 	 *     array of property names which should be freed with g_strfreev() after use.
4993 	 */
4994 	extern(C) char** function(GstPreset* preset) getPropertyNames;
4995 	/**
4996 	 *
4997 	 * Params:
4998 	 *     preset = a #GObject that implements #GstPreset
4999 	 *     name = preset name to load
5000 	 * Return: %TRUE for success, %FALSE if e.g. there is no preset with that @name
5001 	 */
5002 	extern(C) int function(GstPreset* preset, const(char)* name) loadPreset;
5003 	/**
5004 	 *
5005 	 * Params:
5006 	 *     preset = a #GObject that implements #GstPreset
5007 	 *     name = preset name to save
5008 	 * Return: %TRUE for success, %FALSE
5009 	 */
5010 	extern(C) int function(GstPreset* preset, const(char)* name) savePreset;
5011 	/**
5012 	 *
5013 	 * Params:
5014 	 *     preset = a #GObject that implements #GstPreset
5015 	 *     oldName = current preset name
5016 	 *     newName = new preset name
5017 	 * Return: %TRUE for success, %FALSE if e.g. there is no preset with @old_name
5018 	 */
5019 	extern(C) int function(GstPreset* preset, const(char)* oldName, const(char)* newName) renamePreset;
5020 	/**
5021 	 *
5022 	 * Params:
5023 	 *     preset = a #GObject that implements #GstPreset
5024 	 *     name = preset name to remove
5025 	 * Return: %TRUE for success, %FALSE if e.g. there is no preset with that @name
5026 	 */
5027 	extern(C) int function(GstPreset* preset, const(char)* name) deletePreset;
5028 	/**
5029 	 *
5030 	 * Params:
5031 	 *     preset = a #GObject that implements #GstPreset
5032 	 *     name = preset name
5033 	 *     tag = meta data item name
5034 	 *     value = new value
5035 	 * Return: %TRUE for success, %FALSE if e.g. there is no preset with that @name
5036 	 */
5037 	extern(C) int function(GstPreset* preset, const(char)* name, const(char)* tag, const(char)* value) setMeta;
5038 	/**
5039 	 *
5040 	 * Params:
5041 	 *     preset = a #GObject that implements #GstPreset
5042 	 *     name = preset name
5043 	 *     tag = meta data item name
5044 	 *     value = value
5045 	 * Return: %TRUE for success, %FALSE if e.g. there is no preset with that @name
5046 	 *     or no value for the given @tag
5047 	 */
5048 	extern(C) int function(GstPreset* preset, const(char)* name, const(char)* tag, char** value) getMeta;
5049 	void*[4] GstReserved;
5050 }
5051 
5052 /**
5053  * Metadata type that holds information about a sample from a protection-protected
5054  * track, including the information needed to decrypt it (if it is encrypted).
5055  *
5056  * Since: 1.6
5057  */
5058 struct GstProtectionMeta
5059 {
5060 	/**
5061 	 * the parent #GstMeta.
5062 	 */
5063 	GstMeta meta;
5064 	/**
5065 	 * the cryptographic information needed to decrypt the sample.
5066 	 */
5067 	GstStructure* info;
5068 }
5069 
5070 struct GstProxyPad
5071 {
5072 	GstPad pad;
5073 	GstProxyPadPrivate* priv;
5074 }
5075 
5076 struct GstProxyPadClass
5077 {
5078 	GstPadClass parentClass;
5079 	void*[1] GstReserved;
5080 }
5081 
5082 struct GstProxyPadPrivate;
5083 
5084 struct GstQuery
5085 {
5086 	/**
5087 	 * The parent #GstMiniObject type
5088 	 */
5089 	GstMiniObject miniObject;
5090 	/**
5091 	 * the #GstQueryType
5092 	 */
5093 	GstQueryType type;
5094 }
5095 
5096 struct GstRegistry
5097 {
5098 	GstObject object;
5099 	GstRegistryPrivate* priv;
5100 }
5101 
5102 struct GstRegistryClass
5103 {
5104 	GstObjectClass parentClass;
5105 }
5106 
5107 struct GstRegistryPrivate;
5108 
5109 struct GstSample;
5110 
5111 struct GstSegment
5112 {
5113 	/**
5114 	 * flags for this segment
5115 	 */
5116 	GstSegmentFlags flags;
5117 	/**
5118 	 * the playback rate of the segment
5119 	 */
5120 	double rate;
5121 	/**
5122 	 * the already applied rate to the segment
5123 	 */
5124 	double appliedRate;
5125 	/**
5126 	 * the format of the segment values
5127 	 */
5128 	GstFormat format;
5129 	/**
5130 	 * the running time (plus elapsed time, see offset) of the segment start
5131 	 */
5132 	ulong base;
5133 	/**
5134 	 * the amount (in buffer timestamps) that has already been elapsed in
5135 	 * the segment
5136 	 */
5137 	ulong offset;
5138 	/**
5139 	 * the start of the segment in buffer timestamp time (PTS)
5140 	 */
5141 	ulong start;
5142 	/**
5143 	 * the stop of the segment in buffer timestamp time (PTS)
5144 	 */
5145 	ulong stop;
5146 	/**
5147 	 * the stream time of the segment start
5148 	 */
5149 	ulong time;
5150 	/**
5151 	 * the buffer timestamp position in the segment (used internally by
5152 	 * elements such as sources, demuxers or parsers to track progress)
5153 	 */
5154 	ulong position;
5155 	/**
5156 	 * the duration of the segment
5157 	 */
5158 	ulong duration;
5159 	void*[4] GstReserved;
5160 }
5161 
5162 struct GstStaticCaps
5163 {
5164 	/**
5165 	 * the cached #GstCaps
5166 	 */
5167 	GstCaps* caps;
5168 	/**
5169 	 * a string describing a caps
5170 	 */
5171 	const(char)* str;
5172 	void*[4] GstReserved;
5173 }
5174 
5175 struct GstStaticPadTemplate
5176 {
5177 	/**
5178 	 * the name of the template
5179 	 */
5180 	const(char)* nameTemplate;
5181 	/**
5182 	 * the direction of the template
5183 	 */
5184 	GstPadDirection direction;
5185 	/**
5186 	 * the presence of the template
5187 	 */
5188 	GstPadPresence presence;
5189 	/**
5190 	 * the caps of the template.
5191 	 */
5192 	GstStaticCaps staticCaps;
5193 }
5194 
5195 struct GstStructure
5196 {
5197 	/**
5198 	 * the GType of a structure
5199 	 */
5200 	GType type;
5201 	GQuark name;
5202 }
5203 
5204 struct GstSystemClock
5205 {
5206 	GstClock clock;
5207 	GstSystemClockPrivate* priv;
5208 	void*[4] GstReserved;
5209 }
5210 
5211 struct GstSystemClockClass
5212 {
5213 	GstClockClass parentClass;
5214 	void*[4] GstReserved;
5215 }
5216 
5217 struct GstSystemClockPrivate;
5218 
5219 struct GstTagList
5220 {
5221 	/**
5222 	 * the parent type
5223 	 */
5224 	GstMiniObject miniObject;
5225 }
5226 
5227 struct GstTagSetter;
5228 
5229 /**
5230  * #GstTagSetterInterface interface.
5231  */
5232 struct GstTagSetterInterface
5233 {
5234 	/**
5235 	 * parent interface type.
5236 	 */
5237 	GTypeInterface gIface;
5238 }
5239 
5240 struct GstTask
5241 {
5242 	GstObject object;
5243 	/**
5244 	 * the state of the task
5245 	 */
5246 	GstTaskState state;
5247 	/**
5248 	 * used to pause/resume the task
5249 	 */
5250 	GCond cond;
5251 	/**
5252 	 * The lock taken when iterating the task function
5253 	 */
5254 	GRecMutex* lock;
5255 	/**
5256 	 * the function executed by this task
5257 	 */
5258 	GstTaskFunction func;
5259 	/**
5260 	 * user_data passed to the task function
5261 	 */
5262 	void* userData;
5263 	/**
5264 	 * GDestroyNotify for @user_data
5265 	 */
5266 	GDestroyNotify notify;
5267 	/**
5268 	 * a flag indicating that the task is running
5269 	 */
5270 	bool running;
5271 	GThread* thread;
5272 	GstTaskPrivate* priv;
5273 	void*[4] GstReserved;
5274 }
5275 
5276 struct GstTaskClass
5277 {
5278 	GstObjectClass parentClass;
5279 	GstTaskPool* pool;
5280 	void*[4] GstReserved;
5281 }
5282 
5283 struct GstTaskPool
5284 {
5285 	GstObject object;
5286 	GThreadPool* pool;
5287 	void*[4] GstReserved;
5288 }
5289 
5290 /**
5291  * The #GstTaskPoolClass object.
5292  */
5293 struct GstTaskPoolClass
5294 {
5295 	/**
5296 	 * the parent class structure
5297 	 */
5298 	GstObjectClass parentClass;
5299 	/** */
5300 	extern(C) void function(GstTaskPool* pool, GError** err) prepare;
5301 	/** */
5302 	extern(C) void function(GstTaskPool* pool) cleanup;
5303 	/**
5304 	 *
5305 	 * Params:
5306 	 *     pool = a #GstTaskPool
5307 	 *     func = the function to call
5308 	 *     userData = data to pass to @func
5309 	 * Return: a pointer that should be used
5310 	 *     for the gst_task_pool_join function. This pointer can be %NULL, you
5311 	 *     must check @error to detect errors.
5312 	 *
5313 	 * Throws: GException on failure.
5314 	 */
5315 	extern(C) void* function(GstTaskPool* pool, GstTaskPoolFunction func, void* userData, GError** err) push;
5316 	/** */
5317 	extern(C) void function(GstTaskPool* pool, void* id) join;
5318 	void*[4] GstReserved;
5319 }
5320 
5321 struct GstTaskPrivate;
5322 
5323 /**
5324  * Structure for saving a timestamp and a value.
5325  */
5326 struct GstTimedValue
5327 {
5328 	/**
5329 	 * timestamp of the value change
5330 	 */
5331 	GstClockTime timestamp;
5332 	/**
5333 	 * the corresponding value
5334 	 */
5335 	double value;
5336 }
5337 
5338 struct GstToc;
5339 
5340 struct GstTocEntry;
5341 
5342 struct GstTocSetter;
5343 
5344 /**
5345  * #GstTocSetterInterface interface.
5346  */
5347 struct GstTocSetterInterface
5348 {
5349 	/**
5350 	 * parent interface type.
5351 	 */
5352 	GTypeInterface gIface;
5353 }
5354 
5355 struct GstTracer
5356 {
5357 	GstObject parent;
5358 	GstTracerPrivate* priv;
5359 	void*[4] GstReserved;
5360 }
5361 
5362 struct GstTracerClass
5363 {
5364 	GstObjectClass parentClass;
5365 	void*[4] GstReserved;
5366 }
5367 
5368 struct GstTracerFactory;
5369 
5370 struct GstTracerFactoryClass;
5371 
5372 struct GstTracerPrivate;
5373 
5374 struct GstTracerRecord;
5375 
5376 struct GstTracerRecordClass;
5377 
5378 struct GstTypeFind
5379 {
5380 	/** */
5381 	extern(C) ubyte* function(void* data, long offset, uint size) peek;
5382 	/** */
5383 	extern(C) void function(void* data, uint probability, GstCaps* caps) suggest;
5384 	/**
5385 	 * The data used by the caller of the typefinding function.
5386 	 */
5387 	void* data;
5388 	/** */
5389 	extern(C) ulong function(void* data) getLength;
5390 	void*[4] GstReserved;
5391 }
5392 
5393 struct GstTypeFindFactory;
5394 
5395 struct GstTypeFindFactoryClass;
5396 
5397 struct GstURIHandler;
5398 
5399 /**
5400  * Any #GstElement using this interface should implement these methods.
5401  */
5402 struct GstURIHandlerInterface
5403 {
5404 	/**
5405 	 * The parent interface type
5406 	 */
5407 	GTypeInterface parent;
5408 	/** */
5409 	extern(C) GstURIType function(GType type) getType;
5410 	/** */
5411 	extern(C) char** function(GType type) getProtocols;
5412 	/**
5413 	 *
5414 	 * Params:
5415 	 *     handler = A #GstURIHandler
5416 	 * Return: the URI currently handled by
5417 	 *     the @handler.  Returns %NULL if there are no URI currently
5418 	 *     handled. The returned string must be freed with g_free() when no
5419 	 *     longer needed.
5420 	 */
5421 	extern(C) char* function(GstURIHandler* handler) getUri;
5422 	/**
5423 	 *
5424 	 * Params:
5425 	 *     handler = A #GstURIHandler
5426 	 *     uri = URI to set
5427 	 * Return: %TRUE if the URI was set successfully, else %FALSE.
5428 	 *
5429 	 * Throws: GException on failure.
5430 	 */
5431 	extern(C) int function(GstURIHandler* handler, const(char)* uri, GError** err) setUri;
5432 }
5433 
5434 struct GstUri;
5435 
5436 struct GstValueArray;
5437 
5438 
5439 /**
5440  * VTable for the #GValue @type.
5441  */
5442 struct GstValueTable
5443 {
5444 	/**
5445 	 * a #GType
5446 	 */
5447 	GType type;
5448 	/**
5449 	 * a #GstValueCompareFunc
5450 	 */
5451 	GstValueCompareFunc compare;
5452 	/**
5453 	 * a #GstValueSerializeFunc
5454 	 */
5455 	GstValueSerializeFunc serialize;
5456 	/**
5457 	 * a #GstValueDeserializeFunc
5458 	 */
5459 	GstValueDeserializeFunc deserialize;
5460 	void*[4] GstReserved;
5461 }
5462 
5463 /**
5464  * A function that will be called from gst_buffer_foreach_meta(). The @meta
5465  * field will point to a the reference of the meta.
5466  *
5467  * @buffer should not be modified from this callback.
5468  *
5469  * When this function returns %TRUE, the next meta will be
5470  * returned. When %FALSE is returned, gst_buffer_foreach_meta() will return.
5471  *
5472  * When @meta is set to %NULL, the item will be removed from the buffer.
5473  *
5474  * Params:
5475  *     buffer = a #GstBuffer
5476  *     meta = a pointer to a #GstMeta
5477  *     userData = user data passed to gst_buffer_foreach_meta()
5478  *
5479  * Return: %FALSE when gst_buffer_foreach_meta() should stop
5480  */
5481 public alias extern(C) int function(GstBuffer* buffer, GstMeta** meta, void* userData) GstBufferForeachMetaFunc;
5482 
5483 /**
5484  * A function that will be called from gst_buffer_list_foreach(). The @buffer
5485  * field will point to a the reference of the buffer at @idx.
5486  *
5487  * When this function returns %TRUE, the next buffer will be
5488  * returned. When %FALSE is returned, gst_buffer_list_foreach() will return.
5489  *
5490  * When @buffer is set to %NULL, the item will be removed from the bufferlist.
5491  * When @buffer has been made writable, the new buffer reference can be assigned
5492  * to @buffer. This function is responsible for unreffing the old buffer when
5493  * removing or modifying.
5494  *
5495  * Params:
5496  *     buffer = pointer the buffer
5497  *     idx = the index of @buffer
5498  *     userData = user data passed to gst_buffer_list_foreach()
5499  *
5500  * Return: %FALSE when gst_buffer_list_foreach() should stop
5501  */
5502 public alias extern(C) int function(GstBuffer** buffer, uint idx, void* userData) GstBufferListFunc;
5503 
5504 /**
5505  * Specifies the type of function passed to gst_bus_add_watch() or
5506  * gst_bus_add_watch_full(), which is called from the mainloop when a message
5507  * is available on the bus.
5508  *
5509  * The message passed to the function will be unreffed after execution of this
5510  * function so it should not be freed in the function.
5511  *
5512  * Note that this function is used as a GSourceFunc which means that returning
5513  * %FALSE will remove the GSource from the mainloop.
5514  *
5515  * Params:
5516  *     bus = the #GstBus that sent the message
5517  *     message = the #GstMessage
5518  *     userData = user data that has been given, when registering the handler
5519  *
5520  * Return: %FALSE if the event source should be removed.
5521  */
5522 public alias extern(C) int function(GstBus* bus, GstMessage* message, void* userData) GstBusFunc;
5523 
5524 /**
5525  * Handler will be invoked synchronously, when a new message has been injected
5526  * into the bus. This function is mostly used internally. Only one sync handler
5527  * can be attached to a given bus.
5528  *
5529  * If the handler returns GST_BUS_DROP, it should unref the message, else the
5530  * message should not be unreffed by the sync handler.
5531  *
5532  * Params:
5533  *     bus = the #GstBus that sent the message
5534  *     message = the #GstMessage
5535  *     userData = user data that has been given, when registering the handler
5536  *
5537  * Return: #GstBusSyncReply stating what to do with the message
5538  */
5539 public alias extern(C) GstBusSyncReply function(GstBus* bus, GstMessage* message, void* userData) GstBusSyncHandler;
5540 
5541 /**
5542  * A function that will be called in gst_caps_filter_and_map_in_place().
5543  * The function may modify @features and @structure, and both will be
5544  * removed from the caps if %FALSE is returned.
5545  *
5546  * Params:
5547  *     features = the #GstCapsFeatures
5548  *     structure = the #GstStructure
5549  *     userData = user data
5550  *
5551  * Return: %TRUE if the features and structure should be preserved,
5552  *     %FALSE if it should be removed.
5553  */
5554 public alias extern(C) int function(GstCapsFeatures* features, GstStructure* structure, void* userData) GstCapsFilterMapFunc;
5555 
5556 /**
5557  * A function that will be called in gst_caps_foreach(). The function may
5558  * not modify @features or @structure.
5559  *
5560  * Params:
5561  *     features = the #GstCapsFeatures
5562  *     structure = the #GstStructure
5563  *     userData = user data
5564  *
5565  * Return: %TRUE if the foreach operation should continue, %FALSE if
5566  *     the foreach operation should stop with %FALSE.
5567  *
5568  * Since: 1.6
5569  */
5570 public alias extern(C) int function(GstCapsFeatures* features, GstStructure* structure, void* userData) GstCapsForeachFunc;
5571 
5572 /**
5573  * A function that will be called in gst_caps_map_in_place(). The function
5574  * may modify @features and @structure.
5575  *
5576  * Params:
5577  *     features = the #GstCapsFeatures
5578  *     structure = the #GstStructure
5579  *     userData = user data
5580  *
5581  * Return: %TRUE if the map operation should continue, %FALSE if
5582  *     the map operation should stop with %FALSE.
5583  */
5584 public alias extern(C) int function(GstCapsFeatures* features, GstStructure* structure, void* userData) GstCapsMapFunc;
5585 
5586 /**
5587  * The function prototype of the callback.
5588  *
5589  * Params:
5590  *     clock = The clock that triggered the callback
5591  *     time = The time it was triggered
5592  *     id = The #GstClockID that expired
5593  *     userData = user data passed in the gst_clock_id_wait_async() function
5594  *
5595  * Return: %TRUE or %FALSE (currently unused)
5596  */
5597 public alias extern(C) int function(GstClock* clock, GstClockTime time, GstClockID id, void* userData) GstClockCallback;
5598 
5599 /** */
5600 public alias extern(C) void function(GstControlBinding* binding, double srcValue, GValue* destValue) GstControlBindingConvert;
5601 
5602 /**
5603  * Function for returning a value for a given timestamp.
5604  *
5605  * Params:
5606  *     self = the #GstControlSource instance
5607  *     timestamp = timestamp for which a value should be calculated
5608  *     value = a value which will be set to the result.
5609  *
5610  * Return: %TRUE if the value was successfully calculated.
5611  */
5612 public alias extern(C) int function(GstControlSource* self, GstClockTime timestamp, double* value) GstControlSourceGetValue;
5613 
5614 /**
5615  * Function for returning an array of values for starting at a given timestamp.
5616  *
5617  * Params:
5618  *     self = the #GstControlSource instance
5619  *     timestamp = timestamp for which a value should be calculated
5620  *     interval = the time spacing between subsequent values
5621  *     nValues = the number of values
5622  *     values = array to put control-values in
5623  *
5624  * Return: %TRUE if the values were successfully calculated.
5625  */
5626 public alias extern(C) int function(GstControlSource* self, GstClockTime timestamp, GstClockTime interval, uint nValues, double* values) GstControlSourceGetValueArray;
5627 
5628 /** */
5629 public alias extern(C) void function() GstDebugFuncPtr;
5630 
5631 /**
5632  * This function will be called when creating a copy of @it and should
5633  * create a copy of all custom iterator fields or increase their
5634  * reference counts.
5635  *
5636  * Params:
5637  *     it = The original iterator
5638  *     copy = The copied iterator
5639  */
5640 public alias extern(C) void function(GstIterator* it, GstIterator* copy) GstIteratorCopyFunction;
5641 
5642 /**
5643  * A function to be passed to gst_iterator_fold().
5644  *
5645  * Params:
5646  *     item = the item to fold
5647  *     ret = a #GValue collecting the result
5648  *     userData = data passed to gst_iterator_fold()
5649  *
5650  * Return: %TRUE if the fold should continue, %FALSE if it should stop.
5651  */
5652 public alias extern(C) int function(GValue* item, GValue* ret, void* userData) GstIteratorFoldFunction;
5653 
5654 /**
5655  * A function that is called by gst_iterator_foreach() for every element.
5656  *
5657  * Params:
5658  *     item = The item
5659  *     userData = User data
5660  */
5661 public alias extern(C) void function(GValue* item, void* userData) GstIteratorForeachFunction;
5662 
5663 /**
5664  * This function will be called when the iterator is freed.
5665  *
5666  * Implementors of a #GstIterator should implement this
5667  * function and pass it to the constructor of the custom iterator.
5668  * The function will be called with the iterator lock held.
5669  *
5670  * Params:
5671  *     it = the iterator
5672  */
5673 public alias extern(C) void function(GstIterator* it) GstIteratorFreeFunction;
5674 
5675 /**
5676  * The function that will be called after the next item of the iterator
5677  * has been retrieved. This function can be used to skip items or stop
5678  * the iterator.
5679  *
5680  * The function will be called with the iterator lock held.
5681  *
5682  * Params:
5683  *     it = the iterator
5684  *     item = the item being retrieved.
5685  *
5686  * Return: the result of the operation.
5687  */
5688 public alias extern(C) GstIteratorItem function(GstIterator* it, GValue* item) GstIteratorItemFunction;
5689 
5690 /**
5691  * The function that will be called when the next element of the iterator
5692  * should be retrieved.
5693  *
5694  * Implementors of a #GstIterator should implement this
5695  * function and pass it to the constructor of the custom iterator.
5696  * The function will be called with the iterator lock held.
5697  *
5698  * Params:
5699  *     it = the iterator
5700  *     result = a pointer to hold the next item
5701  *
5702  * Return: the result of the operation.
5703  */
5704 public alias extern(C) GstIteratorResult function(GstIterator* it, GValue* result) GstIteratorNextFunction;
5705 
5706 /**
5707  * This function will be called whenever a concurrent update happened
5708  * to the iterated datastructure. The implementor of the iterator should
5709  * restart the iterator from the beginning and clean up any state it might
5710  * have.
5711  *
5712  * Implementors of a #GstIterator should implement this
5713  * function and pass it to the constructor of the custom iterator.
5714  * The function will be called with the iterator lock held.
5715  *
5716  * Params:
5717  *     it = the iterator
5718  */
5719 public alias extern(C) void function(GstIterator* it) GstIteratorResyncFunction;
5720 
5721 /**
5722  * Function prototype for a logging function that can be registered with
5723  * gst_debug_add_log_function().
5724  * Use G_GNUC_NO_INSTRUMENT on that function.
5725  *
5726  * Params:
5727  *     category = a #GstDebugCategory
5728  *     level = a #GstDebugLevel
5729  *     file = file name
5730  *     funct = function name
5731  *     line = line number
5732  *     object = a #GObject
5733  *     message = the message
5734  *     userData = user data for the log function
5735  */
5736 public alias extern(C) void function(GstDebugCategory* category, GstDebugLevel level, const(char)* file, const(char)* funct, int line, GObject* object, GstDebugMessage* message, void* userData) GstLogFunction;
5737 
5738 /**
5739  * Copy @size bytes from @mem starting at @offset and return them wrapped in a
5740  * new GstMemory object.
5741  * If @size is set to -1, all bytes starting at @offset are copied.
5742  *
5743  * Params:
5744  *     mem = a #GstMemory
5745  *     offset = an offset
5746  *     size = a size or -1
5747  *
5748  * Return: a new #GstMemory object wrapping a copy of the requested region in
5749  *     @mem.
5750  */
5751 public alias extern(C) GstMemory* function(GstMemory* mem, ptrdiff_t offset, ptrdiff_t size) GstMemoryCopyFunction;
5752 
5753 /**
5754  * Check if @mem1 and @mem2 occupy contiguous memory and return the offset of
5755  * @mem1 in the parent buffer in @offset.
5756  *
5757  * Params:
5758  *     mem1 = a #GstMemory
5759  *     mem2 = a #GstMemory
5760  *     offset = a result offset
5761  *
5762  * Return: %TRUE if @mem1 and @mem2 are in contiguous memory.
5763  */
5764 public alias extern(C) int function(GstMemory* mem1, GstMemory* mem2, size_t* offset) GstMemoryIsSpanFunction;
5765 
5766 /**
5767  * Get the memory of @mem that can be accessed according to the mode specified
5768  * in @info's flags. The function should return a pointer that contains at least
5769  * @maxsize bytes.
5770  *
5771  * Params:
5772  *     mem = a #GstMemory
5773  *     info = the #GstMapInfo to map with
5774  *     maxsize = size to map
5775  *
5776  * Return: a pointer to memory of which at least @maxsize bytes can be
5777  *     accessed according to the access pattern in @info's flags.
5778  */
5779 public alias extern(C) void* function(GstMemory* mem, GstMapInfo* info, size_t maxsize) GstMemoryMapFullFunction;
5780 
5781 /**
5782  * Get the memory of @mem that can be accessed according to the mode specified
5783  * in @flags. The function should return a pointer that contains at least
5784  * @maxsize bytes.
5785  *
5786  * Params:
5787  *     mem = a #GstMemory
5788  *     maxsize = size to map
5789  *     flags = access mode for the memory
5790  *
5791  * Return: a pointer to memory of which at least @maxsize bytes can be
5792  *     accessed according to the access pattern in @flags.
5793  */
5794 public alias extern(C) void* function(GstMemory* mem, size_t maxsize, GstMapFlags flags) GstMemoryMapFunction;
5795 
5796 /**
5797  * Share @size bytes from @mem starting at @offset and return them wrapped in a
5798  * new GstMemory object. If @size is set to -1, all bytes starting at @offset are
5799  * shared. This function does not make a copy of the bytes in @mem.
5800  *
5801  * Params:
5802  *     mem = a #GstMemory
5803  *     offset = an offset
5804  *     size = a size or -1
5805  *
5806  * Return: a new #GstMemory object sharing the requested region in @mem.
5807  */
5808 public alias extern(C) GstMemory* function(GstMemory* mem, ptrdiff_t offset, ptrdiff_t size) GstMemoryShareFunction;
5809 
5810 /**
5811  * Return the pointer previously retrieved with gst_memory_map() with @info.
5812  *
5813  * Params:
5814  *     mem = a #GstMemory
5815  *     info = a #GstMapInfo
5816  */
5817 public alias extern(C) void function(GstMemory* mem, GstMapInfo* info) GstMemoryUnmapFullFunction;
5818 
5819 /**
5820  * Return the pointer previously retrieved with gst_memory_map().
5821  *
5822  * Params:
5823  *     mem = a #GstMemory
5824  */
5825 public alias extern(C) void function(GstMemory* mem) GstMemoryUnmapFunction;
5826 
5827 /**
5828  * Function called when @meta is freed in @buffer.
5829  *
5830  * Params:
5831  *     meta = a #GstMeta
5832  *     buffer = a #GstBuffer
5833  */
5834 public alias extern(C) void function(GstMeta* meta, GstBuffer* buffer) GstMetaFreeFunction;
5835 
5836 /**
5837  * Function called when @meta is initialized in @buffer.
5838  *
5839  * Params:
5840  *     meta = a #GstMeta
5841  *     params = parameters passed to the init function
5842  *     buffer = a #GstBuffer
5843  */
5844 public alias extern(C) int function(GstMeta* meta, void* params, GstBuffer* buffer) GstMetaInitFunction;
5845 
5846 /**
5847  * Function called for each @meta in @buffer as a result of performing a
5848  * transformation on @transbuf. Additional @type specific transform data
5849  * is passed to the function as @data.
5850  *
5851  * Implementations should check the @type of the transform and parse
5852  * additional type specific fields in @data that should be used to update
5853  * the metadata on @transbuf.
5854  *
5855  * Params:
5856  *     transbuf = a #GstBuffer
5857  *     meta = a #GstMeta
5858  *     buffer = a #GstBuffer
5859  *     type = the transform type
5860  *     data = transform specific data.
5861  *
5862  * Return: %TRUE if the transform could be performed
5863  */
5864 public alias extern(C) int function(GstBuffer* transbuf, GstMeta* meta, GstBuffer* buffer, GQuark type, void* data) GstMetaTransformFunction;
5865 
5866 /**
5867  * Function prototype for methods to create copies of instances.
5868  *
5869  * Params:
5870  *     obj = MiniObject to copy
5871  *
5872  * Return: reference to cloned instance.
5873  */
5874 public alias extern(C) GstMiniObject* function(GstMiniObject* obj) GstMiniObjectCopyFunction;
5875 
5876 /**
5877  * Function prototype for when a miniobject has lost its last refcount.
5878  * Implementation of the mini object are allowed to revive the
5879  * passed object by doing a gst_mini_object_ref(). If the object is not
5880  * revived after the dispose function, the function should return %TRUE
5881  * and the memory associated with the object is freed.
5882  *
5883  * Params:
5884  *     obj = MiniObject to dispose
5885  *
5886  * Return: %TRUE if the object should be cleaned up.
5887  */
5888 public alias extern(C) int function(GstMiniObject* obj) GstMiniObjectDisposeFunction;
5889 
5890 /**
5891  * Virtual function prototype for methods to free resources used by
5892  * mini-objects.
5893  *
5894  * Params:
5895  *     obj = MiniObject to free
5896  */
5897 public alias extern(C) void function(GstMiniObject* obj) GstMiniObjectFreeFunction;
5898 
5899 /**
5900  * A #GstMiniObjectNotify function can be added to a mini object as a
5901  * callback that gets triggered when gst_mini_object_unref() drops the
5902  * last ref and @obj is about to be freed.
5903  *
5904  * Params:
5905  *     userData = data that was provided when the notify was added
5906  *     obj = the mini object
5907  */
5908 public alias extern(C) void function(void* userData, GstMiniObject* obj) GstMiniObjectNotify;
5909 
5910 /**
5911  * This function is called when the pad is activated during the element
5912  * READY to PAUSED state change. By default this function will call the
5913  * activate function that puts the pad in push mode but elements can
5914  * override this function to activate the pad in pull mode if they wish.
5915  *
5916  * Params:
5917  *     pad = a #GstPad
5918  *     parent = the parent of @pad
5919  *
5920  * Return: %TRUE if the pad could be activated.
5921  */
5922 public alias extern(C) int function(GstPad* pad, GstObject* parent) GstPadActivateFunction;
5923 
5924 /**
5925  * The prototype of the push and pull activate functions.
5926  *
5927  * Params:
5928  *     pad = a #GstPad
5929  *     parent = the parent of @pad
5930  *     mode = the requested activation mode of @pad
5931  *     active = activate or deactivate the pad.
5932  *
5933  * Return: %TRUE if the pad could be activated or deactivated.
5934  */
5935 public alias extern(C) int function(GstPad* pad, GstObject* parent, GstPadMode mode, int active) GstPadActivateModeFunction;
5936 
5937 /**
5938  * A function that will be called on sinkpads when chaining buffers.
5939  * The function typically processes the data contained in the buffer and
5940  * either consumes the data or passes it on to the internally linked pad(s).
5941  *
5942  * The implementer of this function receives a refcount to @buffer and should
5943  * gst_buffer_unref() when the buffer is no longer needed.
5944  *
5945  * When a chain function detects an error in the data stream, it must post an
5946  * error on the bus and return an appropriate #GstFlowReturn value.
5947  *
5948  * Params:
5949  *     pad = the sink #GstPad that performed the chain.
5950  *     parent = the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT
5951  *         flag is set, @parent is guaranteed to be not-%NULL and remain valid
5952  *         during the execution of this function.
5953  *     buffer = the #GstBuffer that is chained, not %NULL.
5954  *
5955  * Return: #GST_FLOW_OK for success
5956  */
5957 public alias extern(C) GstFlowReturn function(GstPad* pad, GstObject* parent, GstBuffer* buffer) GstPadChainFunction;
5958 
5959 /**
5960  * A function that will be called on sinkpads when chaining buffer lists.
5961  * The function typically processes the data contained in the buffer list and
5962  * either consumes the data or passes it on to the internally linked pad(s).
5963  *
5964  * The implementer of this function receives a refcount to @list and
5965  * should gst_buffer_list_unref() when the list is no longer needed.
5966  *
5967  * When a chainlist function detects an error in the data stream, it must
5968  * post an error on the bus and return an appropriate #GstFlowReturn value.
5969  *
5970  * Params:
5971  *     pad = the sink #GstPad that performed the chain.
5972  *     parent = the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT
5973  *         flag is set, @parent is guaranteed to be not-%NULL and remain valid
5974  *         during the execution of this function.
5975  *     list = the #GstBufferList that is chained, not %NULL.
5976  *
5977  * Return: #GST_FLOW_OK for success
5978  */
5979 public alias extern(C) GstFlowReturn function(GstPad* pad, GstObject* parent, GstBufferList* list) GstPadChainListFunction;
5980 
5981 /**
5982  * Function signature to handle an event for the pad.
5983  *
5984  * This variant is for specific elements that will take into account the
5985  * last downstream flow return (from a pad push), in which case they can
5986  * return it.
5987  *
5988  * Params:
5989  *     pad = the #GstPad to handle the event.
5990  *     parent = the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT
5991  *         flag is set, @parent is guaranteed to be not-%NULL and remain valid
5992  *         during the execution of this function.
5993  *     event = the #GstEvent to handle.
5994  *
5995  * Return: %GST_FLOW_OK if the event was handled properly, or any other
5996  *     #GstFlowReturn dependent on downstream state.
5997  *
5998  * Since: 1.8
5999  */
6000 public alias extern(C) GstFlowReturn function(GstPad* pad, GstObject* parent, GstEvent* event) GstPadEventFullFunction;
6001 
6002 /**
6003  * Function signature to handle an event for the pad.
6004  *
6005  * Params:
6006  *     pad = the #GstPad to handle the event.
6007  *     parent = the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT
6008  *         flag is set, @parent is guaranteed to be not-%NULL and remain valid
6009  *         during the execution of this function.
6010  *     event = the #GstEvent to handle.
6011  *
6012  * Return: %TRUE if the pad could handle the event.
6013  */
6014 public alias extern(C) int function(GstPad* pad, GstObject* parent, GstEvent* event) GstPadEventFunction;
6015 
6016 /**
6017  * A forward function is called for all internally linked pads, see
6018  * gst_pad_forward().
6019  *
6020  * Params:
6021  *     pad = the #GstPad that is forwarded.
6022  *     userData = the gpointer to optional user data.
6023  *
6024  * Return: %TRUE if the dispatching procedure has to be stopped.
6025  */
6026 public alias extern(C) int function(GstPad* pad, void* userData) GstPadForwardFunction;
6027 
6028 /**
6029  * This function will be called on source pads when a peer element
6030  * request a buffer at the specified @offset and @length. If this function
6031  * returns #GST_FLOW_OK, the result buffer will be stored in @buffer. The
6032  * contents of @buffer is invalid for any other return value.
6033  *
6034  * This function is installed on a source pad with
6035  * gst_pad_set_getrange_function() and can only be called on source pads after
6036  * they are successfully activated with gst_pad_activate_mode() with the
6037  * #GST_PAD_MODE_PULL.
6038  *
6039  * @offset and @length are always given in byte units. @offset must normally be a value
6040  * between 0 and the length in bytes of the data available on @pad. The
6041  * length (duration in bytes) can be retrieved with a #GST_QUERY_DURATION or with a
6042  * #GST_QUERY_SEEKING.
6043  *
6044  * Any @offset larger or equal than the length will make the function return
6045  * #GST_FLOW_EOS, which corresponds to EOS. In this case @buffer does not
6046  * contain a valid buffer.
6047  *
6048  * The buffer size of @buffer will only be smaller than @length when @offset is
6049  * near the end of the stream. In all other cases, the size of @buffer must be
6050  * exactly the requested size.
6051  *
6052  * It is allowed to call this function with a 0 @length and valid @offset, in
6053  * which case @buffer will contain a 0-sized buffer and the function returns
6054  * #GST_FLOW_OK.
6055  *
6056  * When this function is called with a -1 @offset, the sequentially next buffer
6057  * of length @length in the stream is returned.
6058  *
6059  * When this function is called with a -1 @length, a buffer with a default
6060  * optimal length is returned in @buffer. The length might depend on the value
6061  * of @offset.
6062  *
6063  * Params:
6064  *     pad = the src #GstPad to perform the getrange on.
6065  *     parent = the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT
6066  *         flag is set, @parent is guaranteed to be not-%NULL and remain valid
6067  *         during the execution of this function.
6068  *     offset = the offset of the range
6069  *     length = the length of the range
6070  *     buffer = a memory location to hold the result buffer, cannot be %NULL.
6071  *
6072  * Return: #GST_FLOW_OK for success and a valid buffer in @buffer. Any other
6073  *     return value leaves @buffer undefined.
6074  */
6075 public alias extern(C) GstFlowReturn function(GstPad* pad, GstObject* parent, ulong offset, uint length, GstBuffer** buffer) GstPadGetRangeFunction;
6076 
6077 /**
6078  * The signature of the internal pad link iterator function.
6079  *
6080  * Params:
6081  *     pad = The #GstPad to query.
6082  *     parent = the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT
6083  *         flag is set, @parent is guaranteed to be not-%NULL and remain valid
6084  *         during the execution of this function.
6085  *
6086  * Return: a new #GstIterator that will iterate over all pads that are
6087  *     linked to the given pad on the inside of the parent element.
6088  *
6089  *     the caller must call gst_iterator_free() after usage.
6090  */
6091 public alias extern(C) GstIterator* function(GstPad* pad, GstObject* parent) GstPadIterIntLinkFunction;
6092 
6093 /**
6094  * Function signature to handle a new link on the pad.
6095  *
6096  * Params:
6097  *     pad = the #GstPad that is linked.
6098  *     parent = the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT
6099  *         flag is set, @parent is guaranteed to be not-%NULL and remain valid
6100  *         during the execution of this function.
6101  *     peer = the peer #GstPad of the link
6102  *
6103  * Return: the result of the link with the specified peer.
6104  */
6105 public alias extern(C) GstPadLinkReturn function(GstPad* pad, GstObject* parent, GstPad* peer) GstPadLinkFunction;
6106 
6107 /**
6108  * Callback used by gst_pad_add_probe(). Gets called to notify about the current
6109  * blocking type.
6110  *
6111  * The callback is allowed to modify the data pointer in @info.
6112  *
6113  * Params:
6114  *     pad = the #GstPad that is blocked
6115  *     info = #GstPadProbeInfo
6116  *     userData = the gpointer to optional user data.
6117  *
6118  * Return: a #GstPadProbeReturn
6119  */
6120 public alias extern(C) GstPadProbeReturn function(GstPad* pad, GstPadProbeInfo* info, void* userData) GstPadProbeCallback;
6121 
6122 /**
6123  * The signature of the query function.
6124  *
6125  * Params:
6126  *     pad = the #GstPad to query.
6127  *     parent = the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT
6128  *         flag is set, @parent is guaranteed to be not-%NULL and remain valid
6129  *         during the execution of this function.
6130  *     query = the #GstQuery object to execute
6131  *
6132  * Return: %TRUE if the query could be performed.
6133  */
6134 public alias extern(C) int function(GstPad* pad, GstObject* parent, GstQuery* query) GstPadQueryFunction;
6135 
6136 /**
6137  * Callback used by gst_pad_sticky_events_foreach().
6138  *
6139  * When this function returns %TRUE, the next event will be
6140  * returned. When %FALSE is returned, gst_pad_sticky_events_foreach() will return.
6141  *
6142  * When @event is set to %NULL, the item will be removed from the list of sticky events.
6143  * @event can be replaced by assigning a new reference to it.
6144  * This function is responsible for unreffing the old event when
6145  * removing or modifying.
6146  *
6147  * Params:
6148  *     pad = the #GstPad.
6149  *     event = a sticky #GstEvent.
6150  *     userData = the #gpointer to optional user data.
6151  *
6152  * Return: %TRUE if the iteration should continue
6153  */
6154 public alias extern(C) int function(GstPad* pad, GstEvent** event, void* userData) GstPadStickyEventsForeachFunction;
6155 
6156 /**
6157  * Function signature to handle a unlinking the pad prom its peer.
6158  *
6159  * Params:
6160  *     pad = the #GstPad that is linked.
6161  *     parent = the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT
6162  *         flag is set, @parent is guaranteed to be not-%NULL and remain valid
6163  *         during the execution of this function.
6164  */
6165 public alias extern(C) void function(GstPad* pad, GstObject* parent) GstPadUnlinkFunction;
6166 
6167 /**
6168  * A function that can be used with e.g. gst_registry_feature_filter()
6169  * to get a list of pluginfeature that match certain criteria.
6170  *
6171  * Params:
6172  *     feature = the pluginfeature to check
6173  *     userData = the user_data that has been passed on e.g.
6174  *         gst_registry_feature_filter()
6175  *
6176  * Return: %TRUE for a positive match, %FALSE otherwise
6177  */
6178 public alias extern(C) int function(GstPluginFeature* feature, void* userData) GstPluginFeatureFilter;
6179 
6180 /**
6181  * A function that can be used with e.g. gst_registry_plugin_filter()
6182  * to get a list of plugins that match certain criteria.
6183  *
6184  * Params:
6185  *     plugin = the plugin to check
6186  *     userData = the user_data that has been passed on e.g. gst_registry_plugin_filter()
6187  *
6188  * Return: %TRUE for a positive match, %FALSE otherwise
6189  */
6190 public alias extern(C) int function(GstPlugin* plugin, void* userData) GstPluginFilter;
6191 
6192 /**
6193  * A plugin should provide a pointer to a function of either #GstPluginInitFunc
6194  * or this type in the plugin_desc struct.
6195  * The function will be called by the loader at startup. One would then
6196  * register each #GstPluginFeature. This version allows
6197  * user data to be passed to init function (useful for bindings).
6198  *
6199  * Params:
6200  *     plugin = The plugin object
6201  *     userData = extra data
6202  *
6203  * Return: %TRUE if plugin initialised successfully
6204  */
6205 public alias extern(C) int function(GstPlugin* plugin, void* userData) GstPluginInitFullFunc;
6206 
6207 /**
6208  * A plugin should provide a pointer to a function of this type in the
6209  * plugin_desc struct.
6210  * This function will be called by the loader at startup. One would then
6211  * register each #GstPluginFeature.
6212  *
6213  * Params:
6214  *     plugin = The plugin object
6215  *
6216  * Return: %TRUE if plugin initialised successfully
6217  */
6218 public alias extern(C) int function(GstPlugin* plugin) GstPluginInitFunc;
6219 
6220 /**
6221  * A function that will be called in gst_structure_filter_and_map_in_place().
6222  * The function may modify @value, and the value will be removed from
6223  * the structure if %FALSE is returned.
6224  *
6225  * Params:
6226  *     fieldId = the #GQuark of the field name
6227  *     value = the #GValue of the field
6228  *     userData = user data
6229  *
6230  * Return: %TRUE if the field should be preserved, %FALSE if it
6231  *     should be removed.
6232  */
6233 public alias extern(C) int function(GQuark fieldId, GValue* value, void* userData) GstStructureFilterMapFunc;
6234 
6235 /**
6236  * A function that will be called in gst_structure_foreach(). The function may
6237  * not modify @value.
6238  *
6239  * Params:
6240  *     fieldId = the #GQuark of the field name
6241  *     value = the #GValue of the field
6242  *     userData = user data
6243  *
6244  * Return: %TRUE if the foreach operation should continue, %FALSE if
6245  *     the foreach operation should stop with %FALSE.
6246  */
6247 public alias extern(C) int function(GQuark fieldId, GValue* value, void* userData) GstStructureForeachFunc;
6248 
6249 /**
6250  * A function that will be called in gst_structure_map_in_place(). The function
6251  * may modify @value.
6252  *
6253  * Params:
6254  *     fieldId = the #GQuark of the field name
6255  *     value = the #GValue of the field
6256  *     userData = user data
6257  *
6258  * Return: %TRUE if the map operation should continue, %FALSE if
6259  *     the map operation should stop with %FALSE.
6260  */
6261 public alias extern(C) int function(GQuark fieldId, GValue* value, void* userData) GstStructureMapFunc;
6262 
6263 /**
6264  * A function that will be called in gst_tag_list_foreach(). The function may
6265  * not modify the tag list.
6266  *
6267  * Params:
6268  *     list = the #GstTagList
6269  *     tag = a name of a tag in @list
6270  *     userData = user data
6271  */
6272 public alias extern(C) void function(GstTagList* list, const(char)* tag, void* userData) GstTagForeachFunc;
6273 
6274 /**
6275  * A function for merging multiple values of a tag used when registering
6276  * tags.
6277  *
6278  * Params:
6279  *     dest = the destination #GValue
6280  *     src = the source #GValue
6281  */
6282 public alias extern(C) void function(GValue* dest, GValue* src) GstTagMergeFunc;
6283 
6284 /**
6285  * A function that will repeatedly be called in the thread created by
6286  * a #GstTask.
6287  *
6288  * Params:
6289  *     userData = user data passed to the function
6290  */
6291 public alias extern(C) void function(void* userData) GstTaskFunction;
6292 
6293 /**
6294  * Task function, see gst_task_pool_push().
6295  *
6296  * Params:
6297  *     userData = user data for the task function
6298  */
6299 public alias extern(C) void function(void* userData) GstTaskPoolFunction;
6300 
6301 /**
6302  * Custom GstTask thread callback functions that can be installed.
6303  *
6304  * Params:
6305  *     task = The #GstTask
6306  *     thread = The #GThread
6307  *     userData = user data
6308  */
6309 public alias extern(C) void function(GstTask* task, GThread* thread, void* userData) GstTaskThreadFunc;
6310 
6311 /**
6312  * A function that will be called by typefinding.
6313  *
6314  * Params:
6315  *     find = A #GstTypeFind structure
6316  *     userData = optional data to pass to the function
6317  */
6318 public alias extern(C) void function(GstTypeFind* find, void* userData) GstTypeFindFunction;
6319 
6320 /**
6321  * Used together with gst_value_compare() to compare #GValue items.
6322  *
6323  * Params:
6324  *     value1 = first value for comparison
6325  *     value2 = second value for comparison
6326  *
6327  * Return: one of GST_VALUE_LESS_THAN, GST_VALUE_EQUAL, GST_VALUE_GREATER_THAN
6328  *     or GST_VALUE_UNORDERED
6329  */
6330 public alias extern(C) int function(GValue* value1, GValue* value2) GstValueCompareFunc;
6331 
6332 /**
6333  * Used by gst_value_deserialize() to parse a non-binary form into the #GValue.
6334  *
6335  * Params:
6336  *     dest = a #GValue
6337  *     s = a string
6338  *
6339  * Return: %TRUE for success
6340  */
6341 public alias extern(C) int function(GValue* dest, const(char)* s) GstValueDeserializeFunc;
6342 
6343 /**
6344  * Used by gst_value_serialize() to obtain a non-binary form of the #GValue.
6345  *
6346  * Free-function: g_free
6347  *
6348  * Params:
6349  *     value1 = a #GValue
6350  *
6351  * Return: the string representation of the value
6352  */
6353 public alias extern(C) char* function(GValue* value1) GstValueSerializeFunc;