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