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