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