master cc825482753f cached
328 files
1.4 MB
353.4k tokens
3911 symbols
1 requests
Download .txt
Showing preview only (1,560K chars total). Download the full file or copy to clipboard to get everything.
Repository: gstreamer-java/gst1-java-core
Branch: master
Commit: cc825482753f
Files: 328
Total size: 1.4 MB

Directory structure:
gitextract_bvcbp9wz/

├── .github/
│   ├── FUNDING.yml
│   └── workflows/
│       └── maven.yml
├── .gitignore
├── .mvn/
│   └── wrapper/
│       └── maven-wrapper.properties
├── LICENSE.md
├── README.md
├── mvnw
├── mvnw.cmd
├── nbactions.xml
├── pom.xml
├── src/
│   └── org/
│       └── freedesktop/
│           └── gstreamer/
│               ├── Bin.java
│               ├── Buffer.java
│               ├── BufferFlags.java
│               ├── BufferPool.java
│               ├── Bus.java
│               ├── BusSyncHandler.java
│               ├── BusSyncReply.java
│               ├── Caps.java
│               ├── Clock.java
│               ├── ClockID.java
│               ├── ClockReturn.java
│               ├── ClockTime.java
│               ├── Context.java
│               ├── ControlBinding.java
│               ├── ControlSource.java
│               ├── DateTime.java
│               ├── Element.java
│               ├── ElementFactory.java
│               ├── FlowReturn.java
│               ├── Format.java
│               ├── Fraction.java
│               ├── GhostPad.java
│               ├── Gst.java
│               ├── GstException.java
│               ├── GstIterator.java
│               ├── GstObject.java
│               ├── Meta.java
│               ├── MetaFlags.java
│               ├── MiniObject.java
│               ├── MiniObjectFlags.java
│               ├── Pad.java
│               ├── PadDirection.java
│               ├── PadLinkException.java
│               ├── PadLinkReturn.java
│               ├── PadMode.java
│               ├── PadPresence.java
│               ├── PadProbeInfo.java
│               ├── PadProbeReturn.java
│               ├── PadProbeType.java
│               ├── PadTemplate.java
│               ├── Pipeline.java
│               ├── Plugin.java
│               ├── PluginFeature.java
│               ├── Promise.java
│               ├── PromiseResult.java
│               ├── Range.java
│               ├── Registry.java
│               ├── SDPMessage.java
│               ├── SDPResult.java
│               ├── Sample.java
│               ├── Segment.java
│               ├── SegmentFlags.java
│               ├── State.java
│               ├── StateChangeReturn.java
│               ├── StaticPadTemplate.java
│               ├── Structure.java
│               ├── Tag.java
│               ├── TagFlag.java
│               ├── TagList.java
│               ├── TagMergeMode.java
│               ├── Version.java
│               ├── controller/
│               │   ├── ARGBControlBinding.java
│               │   ├── Controllers.java
│               │   ├── DirectControlBinding.java
│               │   ├── InterpolationControlSource.java
│               │   ├── InterpolationMode.java
│               │   ├── LFOControlSource.java
│               │   ├── LFOWaveform.java
│               │   ├── ProxyControlBinding.java
│               │   ├── TimedValueControlSource.java
│               │   └── TriggerControlSource.java
│               ├── device/
│               │   ├── Device.java
│               │   ├── DeviceMonitor.java
│               │   ├── DeviceProvider.java
│               │   └── DeviceProviderFactory.java
│               ├── elements/
│               │   ├── AppSink.java
│               │   ├── AppSrc.java
│               │   ├── BaseSink.java
│               │   ├── BaseSrc.java
│               │   ├── BaseTransform.java
│               │   ├── DecodeBin.java
│               │   ├── Elements.java
│               │   ├── PlayBin.java
│               │   ├── PlayFlags.java
│               │   └── URIDecodeBin.java
│               ├── event/
│               │   ├── BufferSizeEvent.java
│               │   ├── CapsEvent.java
│               │   ├── EOSEvent.java
│               │   ├── Event.java
│               │   ├── EventType.java
│               │   ├── FlushStartEvent.java
│               │   ├── FlushStopEvent.java
│               │   ├── LatencyEvent.java
│               │   ├── NavigationEvent.java
│               │   ├── QOSEvent.java
│               │   ├── QOSType.java
│               │   ├── ReconfigureEvent.java
│               │   ├── SeekEvent.java
│               │   ├── SeekFlags.java
│               │   ├── SeekType.java
│               │   ├── SegmentEvent.java
│               │   ├── StepEvent.java
│               │   ├── StreamStartEvent.java
│               │   └── TagEvent.java
│               ├── glib/
│               │   ├── GCancellable.java
│               │   ├── GDate.java
│               │   ├── GError.java
│               │   ├── GInetAddress.java
│               │   ├── GInetSocketAddress.java
│               │   ├── GLib.java
│               │   ├── GLibException.java
│               │   ├── GMainContext.java
│               │   ├── GObject.java
│               │   ├── GQuark.java
│               │   ├── GSocket.java
│               │   ├── GSocketAddress.java
│               │   ├── GSocketFamily.java
│               │   ├── GSocketProtocol.java
│               │   ├── GSocketType.java
│               │   ├── GSource.java
│               │   ├── MainContextExecutorService.java
│               │   ├── NativeEnum.java
│               │   ├── NativeFlags.java
│               │   ├── NativeObject.java
│               │   ├── Natives.java
│               │   └── RefCountedObject.java
│               ├── interfaces/
│               │   ├── ColorBalance.java
│               │   ├── ColorBalanceChannel.java
│               │   ├── GstInterface.java
│               │   ├── Navigation.java
│               │   ├── VideoOrientation.java
│               │   └── VideoOverlay.java
│               ├── lowlevel/
│               │   ├── AppAPI.java
│               │   ├── BaseSinkAPI.java
│               │   ├── BaseSrcAPI.java
│               │   ├── BaseTransformAPI.java
│               │   ├── EnumMapper.java
│               │   ├── GBoolean.java
│               │   ├── GFunctionMapper.java
│               │   ├── GNative.java
│               │   ├── GObjectAPI.java
│               │   ├── GObjectPtr.java
│               │   ├── GPointer.java
│               │   ├── GSignalAPI.java
│               │   ├── GType.java
│               │   ├── GTypeMapper.java
│               │   ├── GTypedPtr.java
│               │   ├── GValueAPI.java
│               │   ├── GValueStruct.java
│               │   ├── GioAPI.java
│               │   ├── GlibAPI.java
│               │   ├── GstAPI.java
│               │   ├── GstARGBControlBindingPtr.java
│               │   ├── GstBinAPI.java
│               │   ├── GstBufferAPI.java
│               │   ├── GstBufferPoolAPI.java
│               │   ├── GstBusAPI.java
│               │   ├── GstBusPtr.java
│               │   ├── GstCapsAPI.java
│               │   ├── GstClockAPI.java
│               │   ├── GstColorBalanceAPI.java
│               │   ├── GstContextAPI.java
│               │   ├── GstContextPtr.java
│               │   ├── GstControlBindingAPI.java
│               │   ├── GstControlBindingPtr.java
│               │   ├── GstControlSourceAPI.java
│               │   ├── GstControlSourcePtr.java
│               │   ├── GstControllerAPI.java
│               │   ├── GstDateTimeAPI.java
│               │   ├── GstDeviceAPI.java
│               │   ├── GstDeviceMonitorAPI.java
│               │   ├── GstDeviceProviderAPI.java
│               │   ├── GstDeviceProviderFactoryAPI.java
│               │   ├── GstDirectControlBindingPtr.java
│               │   ├── GstElementAPI.java
│               │   ├── GstElementFactoryAPI.java
│               │   ├── GstEventAPI.java
│               │   ├── GstGhostPadAPI.java
│               │   ├── GstInterpolationControlSourceAPI.java
│               │   ├── GstInterpolationControlSourcePtr.java
│               │   ├── GstIteratorAPI.java
│               │   ├── GstIteratorPtr.java
│               │   ├── GstLFOControlSourcePtr.java
│               │   ├── GstMessageAPI.java
│               │   ├── GstMessagePtr.java
│               │   ├── GstMetaAPI.java
│               │   ├── GstMetaPtr.java
│               │   ├── GstMiniObjectAPI.java
│               │   ├── GstMiniObjectPtr.java
│               │   ├── GstNative.java
│               │   ├── GstNavigationAPI.java
│               │   ├── GstObjectAPI.java
│               │   ├── GstObjectPtr.java
│               │   ├── GstPadAPI.java
│               │   ├── GstPadProbeInfo.java
│               │   ├── GstPadPtr.java
│               │   ├── GstPadTemplateAPI.java
│               │   ├── GstParseAPI.java
│               │   ├── GstPipelineAPI.java
│               │   ├── GstPluginAPI.java
│               │   ├── GstPluginFeatureAPI.java
│               │   ├── GstPromiseAPI.java
│               │   ├── GstProxyControlBindingPtr.java
│               │   ├── GstQueryAPI.java
│               │   ├── GstRegistryAPI.java
│               │   ├── GstSDPMessageAPI.java
│               │   ├── GstSampleAPI.java
│               │   ├── GstStructureAPI.java
│               │   ├── GstStructurePtr.java
│               │   ├── GstTagAPI.java
│               │   ├── GstTagListAPI.java
│               │   ├── GstTimedValueControlSourcePtr.java
│               │   ├── GstTriggerControlSourcePtr.java
│               │   ├── GstTypes.java
│               │   ├── GstValueAPI.java
│               │   ├── GstVideoAPI.java
│               │   ├── GstVideoOrientationAPI.java
│               │   ├── GstVideoOverlayAPI.java
│               │   ├── GstWebRTCSessionDescriptionAPI.java
│               │   ├── IntPtr.java
│               │   ├── MainLoop.java
│               │   ├── README
│               │   ├── ReferenceManager.java
│               │   └── annotations/
│               │       ├── CallerOwnsReturn.java
│               │       ├── Const.java
│               │       ├── ConstField.java
│               │       ├── ConstReturn.java
│               │       ├── DefaultEnumValue.java
│               │       ├── FreeReturnValue.java
│               │       ├── HasSubtype.java
│               │       ├── IncRef.java
│               │       └── Invalidate.java
│               ├── message/
│               │   ├── BufferingMessage.java
│               │   ├── DurationChangedMessage.java
│               │   ├── EOSMessage.java
│               │   ├── ErrorMessage.java
│               │   ├── GErrorMessage.java
│               │   ├── InfoMessage.java
│               │   ├── LatencyMessage.java
│               │   ├── Message.java
│               │   ├── MessageType.java
│               │   ├── NeedContextMessage.java
│               │   ├── SegmentDoneMessage.java
│               │   ├── StateChangedMessage.java
│               │   ├── TagMessage.java
│               │   └── WarningMessage.java
│               ├── query/
│               │   ├── AllocationQuery.java
│               │   ├── ConvertQuery.java
│               │   ├── DurationQuery.java
│               │   ├── FormatsQuery.java
│               │   ├── LatencyQuery.java
│               │   ├── PositionQuery.java
│               │   ├── Query.java
│               │   ├── QueryType.java
│               │   ├── SeekingQuery.java
│               │   └── SegmentQuery.java
│               ├── video/
│               │   ├── Video.java
│               │   ├── VideoTimeCode.java
│               │   ├── VideoTimeCodeConfig.java
│               │   ├── VideoTimeCodeFlags.java
│               │   └── VideoTimeCodeMeta.java
│               └── webrtc/
│                   ├── WebRTC.java
│                   ├── WebRTCBin.java
│                   ├── WebRTCICEGatheringState.java
│                   ├── WebRTCPeerConnectionState.java
│                   ├── WebRTCSDPType.java
│                   └── WebRTCSessionDescription.java
└── test/
    └── org/
        └── freedesktop/
            └── gstreamer/
                ├── BinTest.java
                ├── BufferFieldsTest.java
                ├── BufferProbeTester.java
                ├── BusTest.java
                ├── CapsTest.java
                ├── ClockTest.java
                ├── ClockTimeTest.java
                ├── ContextTest.java
                ├── ElementFactoryTest.java
                ├── ElementTest.java
                ├── EnumTest.java
                ├── ExecutorServiceTest.java
                ├── GCTracker.java
                ├── GLibTest.java
                ├── GarbageCollectionEDTTest.java
                ├── GarbageCollectionTest.java
                ├── GhostPadTest.java
                ├── GobjectSubclassTest.java
                ├── GstTypesTest.java
                ├── InitTest.java
                ├── MessageTest.java
                ├── PadProbeTypeTest.java
                ├── PadTemplateTest.java
                ├── PadTest.java
                ├── PipelineTest.java
                ├── PluginFeatureTest.java
                ├── PluginTest.java
                ├── ProbeTester.java
                ├── PromiseTest.java
                ├── PropertyTypeTest.java
                ├── QueryTest.java
                ├── RegistryTest.java
                ├── SampleTest.java
                ├── SampleTester.java
                ├── StreamInfoTest.java
                ├── StructureTest.java
                ├── TestPipe.java
                ├── WebRTCBinTest.java
                ├── controller/
                │   ├── InterpolationControlSourceTest.java
                │   └── TriggerControlSourceTest.java
                ├── elements/
                │   └── PlayBinTest.java
                ├── event/
                │   └── EventTest.java
                ├── lowlevel/
                │   ├── GValueTest.java
                │   ├── LowLevelStructureTest.java
                │   └── ReferenceManagerTest.java
                ├── util/
                │   └── TestAssumptions.java
                └── video/
                    ├── VideoCropMetaTest.java
                    ├── VideoTimeCodeConfigTest.java
                    ├── VideoTimeCodeFlagsTest.java
                    ├── VideoTimeCodeMetaTest.java
                    └── VideoTimeCodeTest.java

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/FUNDING.yml
================================================
github: neilcsmith-net



================================================
FILE: .github/workflows/maven.yml
================================================
name: Test on Maven

on:
  [push, pull_request]

jobs:
  test-1-24-jdk25:

    runs-on: ubuntu-24.04

    steps:
      - name: Checkout
        uses: actions/checkout@v5

      - name: Set up JDK 25
        uses: actions/setup-java@v5
        with:
         java-version: '25'
         distribution: 'temurin'

      - name: Install GStreamer
        run: sudo apt-get update && sudo apt-get install gstreamer1.0-plugins-good gstreamer1.0-plugins-bad

      - name: Build with Maven
        run: ./mvnw --batch-mode verify

  test-1-20-jdk8:

    runs-on: ubuntu-22.04

    steps:
      - name: Checkout
        uses: actions/checkout@v5

      - name: Set up JDK 8
        uses: actions/setup-java@v5
        with:
         java-version: '8'
         distribution: 'temurin'

      - name: Install GStreamer
        run: sudo apt-get update && sudo apt-get install gstreamer1.0-plugins-good gstreamer1.0-plugins-bad

      - name: Build with Maven
        run: ./mvnw --batch-mode verify


================================================
FILE: .gitignore
================================================
*.class

# Package Files #
*.jar
*.war
*.ear
/target/

# Eclipse Files #
.classpath
.project
.settings

# NetBeans Files #
/nbproject/
nb-configuration.xml

.idea


================================================
FILE: .mvn/wrapper/maven-wrapper.properties
================================================
wrapperVersion=3.3.4
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.11/apache-maven-3.9.11-bin.zip
distributionSha256Sum=0d7125e8c91097b36edb990ea5934e6c68b4440eef4ea96510a0f6815e7eeadb


================================================
FILE: LICENSE.md
================================================
		   GNU LESSER GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.


  This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.

  0. Additional Definitions. 

  As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.

  "The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.

  An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.

  A "Combined Work" is a work produced by combining or linking an
Application with the Library.  The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".

  The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.

  The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.

  1. Exception to Section 3 of the GNU GPL.

  You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.

  2. Conveying Modified Versions.

  If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:

   a) under this License, provided that you make a good faith effort to
   ensure that, in the event an Application does not supply the
   function or data, the facility still operates, and performs
   whatever part of its purpose remains meaningful, or

   b) under the GNU GPL, with none of the additional permissions of
   this License applicable to that copy.

  3. Object Code Incorporating Material from Library Header Files.

  The object code form of an Application may incorporate material from
a header file that is part of the Library.  You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:

   a) Give prominent notice with each copy of the object code that the
   Library is used in it and that the Library and its use are
   covered by this License.

   b) Accompany the object code with a copy of the GNU GPL and this license
   document.

  4. Combined Works.

  You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:

   a) Give prominent notice with each copy of the Combined Work that
   the Library is used in it and that the Library and its use are
   covered by this License.

   b) Accompany the Combined Work with a copy of the GNU GPL and this license
   document.

   c) For a Combined Work that displays copyright notices during
   execution, include the copyright notice for the Library among
   these notices, as well as a reference directing the user to the
   copies of the GNU GPL and this license document.

   d) Do one of the following:

       0) Convey the Minimal Corresponding Source under the terms of this
       License, and the Corresponding Application Code in a form
       suitable for, and under terms that permit, the user to
       recombine or relink the Application with a modified version of
       the Linked Version to produce a modified Combined Work, in the
       manner specified by section 6 of the GNU GPL for conveying
       Corresponding Source.

       1) Use a suitable shared library mechanism for linking with the
       Library.  A suitable mechanism is one that (a) uses at run time
       a copy of the Library already present on the user's computer
       system, and (b) will operate properly with a modified version
       of the Library that is interface-compatible with the Linked
       Version. 

   e) Provide Installation Information, but only if you would otherwise
   be required to provide such information under section 6 of the
   GNU GPL, and only to the extent that such information is
   necessary to install and execute a modified version of the
   Combined Work produced by recombining or relinking the
   Application with a modified version of the Linked Version. (If
   you use option 4d0, the Installation Information must accompany
   the Minimal Corresponding Source and Corresponding Application
   Code. If you use option 4d1, you must provide the Installation
   Information in the manner specified by section 6 of the GNU GPL
   for conveying Corresponding Source.)

  5. Combined Libraries.

  You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:

   a) Accompany the combined library with a copy of the same work based
   on the Library, uncombined with any other library facilities,
   conveyed under the terms of this License.

   b) Give prominent notice with the combined library that part of it
   is a work based on the Library, and explaining where to find the
   accompanying uncombined form of the same work.

  6. Revised Versions of the GNU Lesser General Public License.

  The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.

  Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.

  If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.


================================================
FILE: README.md
================================================
GStreamer 1.x Java Core (gst1-java-core)
========================================

gst1-java-core is a set of Java bindings for [GStreamer 1.x][gstreamer]. GStreamer
is an open-source, pipeline-based multimedia framework written in C. It allows a
programmer to create a wide variety of media-handling pipelines inside
applications, from simple media playback, to encoding, live-streaming, analysis,
machine learning, WebRTC and more.

GStreamer is designed to be cross-platform, and binaries are provided for a range
of operating systems. gst1-java-core is actively tested on Linux (x86 and Arm),
Windows and macOS, but should work on any OS with Java, JNA and GStreamer support.
The bindings are in use in a wide variety of commercial and open-source projects,
across desktop, server and embedded.

## Usage

See the [examples repository][gst1-examples] for some self-contained projects to
get you started. Use the [Javadoc][gst1-javadoc]! - all classes are documented,
and include links to the relevant native documentation where appropriate. Please use the
[GStreamer-Java mailing list][gstreamer-java-group] to ask questions.

To try the examples you will need [GStreamer installed][gstreamer-download] on your
system. Other options for deployment are possible - see requirements below.

Please note, this is not an easy-to-use multimedia framework for beginners. It currently
requires people to know the Java language and be familiar with the GStreamer framework
(and possibly be prepared to apply things from tutorials on GStreamer programming in
other languages to the Java bindings).

## History and status

Releases are available via Maven Central (under the `org.freedesktop.gstreamer`
group ID), or can be downloaded from the GitHub [release page][gst1-releases].

Since v1.0.0 the bindings are functionally and API stable, but note that the lowlevel
packages are _effectively_ non-public and subject to change at any time.

The lead maintainer of the bindings is Neil C Smith at [Codelerity Ltd.][codelerity].
The project began in 2015 as a fork of the original [GStreamer-Java][gstreamer-java]
bindings for GStreamer 0.10 started by Wayne Meissner. Numerous other people have made
valuable contributions to the original project and the 1.x fork over the years.

## Help and support

Help on getting started, and support for open-source projects, can be obtained
from the [GStreamer-Java mailing list][gstreamer-java-group].

Commercial support and custom development is available, and sponsorship of additional
features is also welcome - please email info@codelerity.com to discuss.

## Requirements

The bindings are tested on Linux, Windows and macOS. Windows and macOS installers
for GStreamer are available from the [GStreamer project itself][gstreamer-download].
Linux users should be able to get GStreamer from their distribution repository if it
isn't already installed.

You will need to have the GStreamer 1.x native libraries available in your system path
in order to use the bindings, and may also need to set up environment variables
depending on how GStreamer is installed. See the `Utils` class in each example project
for one possible way to configure this inside your Java code.

It is possible to ship GStreamer with your application should you want your users not
to have to install it separately. There are various ways to achieve this - see the
[upstream documentation][gstreamer-deploy]. Advice is also available via the support
options above.

The minimum supported version of GStreamer is 1.8.x. If you require access to features
related to later GStreamer versions (eg. WebRTC support), make sure to request the
version you need when calling `Gst.init(..)`

You will also need the [JNA (Java Native Access)][jna] library, minimum version 5.2.0.

The minimum required Java version is Java 8.

## Contributions

Contributions to the library are welcomed, either to fix / enhance current features,
or bring in new ones. There is also ongoing work to rework the lowlevel bindings.

**Before opening a Pull Request** please raise an issue or discuss your contribution on
the mailing list. New features must have tests, selectively applied if targeting
features in versions of GStreamer above 1.8. All Pull Requests will be automatically
tested via CI, and all tests must pass before merging will be considered.

If you are making a large contribution to benefit a commercial project, sponsorship
of integration and support time would be appreciated.


[gstreamer]: https://gstreamer.freedesktop.org/
[gstreamer-download]: https://gstreamer.freedesktop.org/download/
[gstreamer-deploy]: https://gstreamer.freedesktop.org/documentation/deploying/index.html
[gstreamer-java]: https://github.com/gstreamer-java/gstreamer-java
[gst1-examples]: https://github.com/gstreamer-java/gst1-java-examples
[gst1-javadoc]: https://javadoc.io/doc/org.freedesktop.gstreamer/gst1-java-core
[gst1-releases]: https://github.com/gstreamer-java/gst1-java-core/releases
[gstreamer-java-group]: https://groups.google.com/forum/#!forum/gstreamer-java
[jna]: https://github.com/java-native-access/jna
[codelerity]: https://www.codelerity.com


================================================
FILE: mvnw
================================================
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------

# ----------------------------------------------------------------------------
# Apache Maven Wrapper startup batch script, version 3.3.4
#
# Optional ENV vars
# -----------------
#   JAVA_HOME - location of a JDK home dir, required when download maven via java source
#   MVNW_REPOURL - repo url base for downloading maven distribution
#   MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
#   MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output
# ----------------------------------------------------------------------------

set -euf
[ "${MVNW_VERBOSE-}" != debug ] || set -x

# OS specific support.
native_path() { printf %s\\n "$1"; }
case "$(uname)" in
CYGWIN* | MINGW*)
  [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")"
  native_path() { cygpath --path --windows "$1"; }
  ;;
esac

# set JAVACMD and JAVACCMD
set_java_home() {
  # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched
  if [ -n "${JAVA_HOME-}" ]; then
    if [ -x "$JAVA_HOME/jre/sh/java" ]; then
      # IBM's JDK on AIX uses strange locations for the executables
      JAVACMD="$JAVA_HOME/jre/sh/java"
      JAVACCMD="$JAVA_HOME/jre/sh/javac"
    else
      JAVACMD="$JAVA_HOME/bin/java"
      JAVACCMD="$JAVA_HOME/bin/javac"

      if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then
        echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2
        echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2
        return 1
      fi
    fi
  else
    JAVACMD="$(
      'set' +e
      'unset' -f command 2>/dev/null
      'command' -v java
    )" || :
    JAVACCMD="$(
      'set' +e
      'unset' -f command 2>/dev/null
      'command' -v javac
    )" || :

    if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then
      echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2
      return 1
    fi
  fi
}

# hash string like Java String::hashCode
hash_string() {
  str="${1:-}" h=0
  while [ -n "$str" ]; do
    char="${str%"${str#?}"}"
    h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296))
    str="${str#?}"
  done
  printf %x\\n $h
}

verbose() { :; }
[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; }

die() {
  printf %s\\n "$1" >&2
  exit 1
}

trim() {
  # MWRAPPER-139:
  #   Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds.
  #   Needed for removing poorly interpreted newline sequences when running in more
  #   exotic environments such as mingw bash on Windows.
  printf "%s" "${1}" | tr -d '[:space:]'
}

scriptDir="$(dirname "$0")"
scriptName="$(basename "$0")"

# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
while IFS="=" read -r key value; do
  case "${key-}" in
  distributionUrl) distributionUrl=$(trim "${value-}") ;;
  distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;;
  esac
done <"$scriptDir/.mvn/wrapper/maven-wrapper.properties"
[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"

case "${distributionUrl##*/}" in
maven-mvnd-*bin.*)
  MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/
  case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in
  *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;;
  :Darwin*x86_64) distributionPlatform=darwin-amd64 ;;
  :Darwin*arm64) distributionPlatform=darwin-aarch64 ;;
  :Linux*x86_64*) distributionPlatform=linux-amd64 ;;
  *)
    echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2
    distributionPlatform=linux-amd64
    ;;
  esac
  distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip"
  ;;
maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;;
*) MVN_CMD="mvn${scriptName#mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
esac

# apply MVNW_REPOURL and calculate MAVEN_HOME
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}"
distributionUrlName="${distributionUrl##*/}"
distributionUrlNameMain="${distributionUrlName%.*}"
distributionUrlNameMain="${distributionUrlNameMain%-bin}"
MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}"
MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")"

exec_maven() {
  unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || :
  exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD"
}

if [ -d "$MAVEN_HOME" ]; then
  verbose "found existing MAVEN_HOME at $MAVEN_HOME"
  exec_maven "$@"
fi

case "${distributionUrl-}" in
*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;;
*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;;
esac

# prepare tmp dir
if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then
  clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; }
  trap clean HUP INT TERM EXIT
else
  die "cannot create temp dir"
fi

mkdir -p -- "${MAVEN_HOME%/*}"

# Download and Install Apache Maven
verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
verbose "Downloading from: $distributionUrl"
verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"

# select .zip or .tar.gz
if ! command -v unzip >/dev/null; then
  distributionUrl="${distributionUrl%.zip}.tar.gz"
  distributionUrlName="${distributionUrl##*/}"
fi

# verbose opt
__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR=''
[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v

# normalize http auth
case "${MVNW_PASSWORD:+has-password}" in
'') MVNW_USERNAME='' MVNW_PASSWORD='' ;;
has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;;
esac

if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then
  verbose "Found wget ... using wget"
  wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl"
elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then
  verbose "Found curl ... using curl"
  curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl"
elif set_java_home; then
  verbose "Falling back to use Java to download"
  javaSource="$TMP_DOWNLOAD_DIR/Downloader.java"
  targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName"
  cat >"$javaSource" <<-END
	public class Downloader extends java.net.Authenticator
	{
	  protected java.net.PasswordAuthentication getPasswordAuthentication()
	  {
	    return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() );
	  }
	  public static void main( String[] args ) throws Exception
	  {
	    setDefault( new Downloader() );
	    java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() );
	  }
	}
	END
  # For Cygwin/MinGW, switch paths to Windows format before running javac and java
  verbose " - Compiling Downloader.java ..."
  "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java"
  verbose " - Running Downloader.java ..."
  "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")"
fi

# If specified, validate the SHA-256 sum of the Maven distribution zip file
if [ -n "${distributionSha256Sum-}" ]; then
  distributionSha256Result=false
  if [ "$MVN_CMD" = mvnd.sh ]; then
    echo "Checksum validation is not supported for maven-mvnd." >&2
    echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
    exit 1
  elif command -v sha256sum >/dev/null; then
    if echo "$distributionSha256Sum  $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c - >/dev/null 2>&1; then
      distributionSha256Result=true
    fi
  elif command -v shasum >/dev/null; then
    if echo "$distributionSha256Sum  $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then
      distributionSha256Result=true
    fi
  else
    echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2
    echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
    exit 1
  fi
  if [ $distributionSha256Result = false ]; then
    echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2
    echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2
    exit 1
  fi
fi

# unzip and move
if command -v unzip >/dev/null; then
  unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip"
else
  tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar"
fi

# Find the actual extracted directory name (handles snapshots where filename != directory name)
actualDistributionDir=""

# First try the expected directory name (for regular distributions)
if [ -d "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" ]; then
  if [ -f "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/bin/$MVN_CMD" ]; then
    actualDistributionDir="$distributionUrlNameMain"
  fi
fi

# If not found, search for any directory with the Maven executable (for snapshots)
if [ -z "$actualDistributionDir" ]; then
  # enable globbing to iterate over items
  set +f
  for dir in "$TMP_DOWNLOAD_DIR"/*; do
    if [ -d "$dir" ]; then
      if [ -f "$dir/bin/$MVN_CMD" ]; then
        actualDistributionDir="$(basename "$dir")"
        break
      fi
    fi
  done
  set -f
fi

if [ -z "$actualDistributionDir" ]; then
  verbose "Contents of $TMP_DOWNLOAD_DIR:"
  verbose "$(ls -la "$TMP_DOWNLOAD_DIR")"
  die "Could not find Maven distribution directory in extracted archive"
fi

verbose "Found extracted Maven distribution directory: $actualDistributionDir"
printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$actualDistributionDir/mvnw.url"
mv -- "$TMP_DOWNLOAD_DIR/$actualDistributionDir" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"

clean || :
exec_maven "$@"


================================================
FILE: mvnw.cmd
================================================
<# : batch portion
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements.  See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership.  The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License.  You may obtain a copy of the License at
@REM
@REM    http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied.  See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------

@REM ----------------------------------------------------------------------------
@REM Apache Maven Wrapper startup batch script, version 3.3.4
@REM
@REM Optional ENV vars
@REM   MVNW_REPOURL - repo url base for downloading maven distribution
@REM   MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
@REM   MVNW_VERBOSE - true: enable verbose log; others: silence the output
@REM ----------------------------------------------------------------------------

@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0)
@SET __MVNW_CMD__=
@SET __MVNW_ERROR__=
@SET __MVNW_PSMODULEP_SAVE=%PSModulePath%
@SET PSModulePath=
@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @(
  IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B)
)
@SET PSModulePath=%__MVNW_PSMODULEP_SAVE%
@SET __MVNW_PSMODULEP_SAVE=
@SET __MVNW_ARG0_NAME__=
@SET MVNW_USERNAME=
@SET MVNW_PASSWORD=
@IF NOT "%__MVNW_CMD__%"=="" ("%__MVNW_CMD__%" %*)
@echo Cannot start maven from wrapper >&2 && exit /b 1
@GOTO :EOF
: end batch / begin powershell #>

$ErrorActionPreference = "Stop"
if ($env:MVNW_VERBOSE -eq "true") {
  $VerbosePreference = "Continue"
}

# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties
$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl
if (!$distributionUrl) {
  Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
}

switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) {
  "maven-mvnd-*" {
    $USE_MVND = $true
    $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip"
    $MVN_CMD = "mvnd.cmd"
    break
  }
  default {
    $USE_MVND = $false
    $MVN_CMD = $script -replace '^mvnw','mvn'
    break
  }
}

# apply MVNW_REPOURL and calculate MAVEN_HOME
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
if ($env:MVNW_REPOURL) {
  $MVNW_REPO_PATTERN = if ($USE_MVND -eq $False) { "/org/apache/maven/" } else { "/maven/mvnd/" }
  $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace "^.*$MVNW_REPO_PATTERN",'')"
}
$distributionUrlName = $distributionUrl -replace '^.*/',''
$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$',''

$MAVEN_M2_PATH = "$HOME/.m2"
if ($env:MAVEN_USER_HOME) {
  $MAVEN_M2_PATH = "$env:MAVEN_USER_HOME"
}

if (-not (Test-Path -Path $MAVEN_M2_PATH)) {
    New-Item -Path $MAVEN_M2_PATH -ItemType Directory | Out-Null
}

$MAVEN_WRAPPER_DISTS = $null
if ((Get-Item $MAVEN_M2_PATH).Target[0] -eq $null) {
  $MAVEN_WRAPPER_DISTS = "$MAVEN_M2_PATH/wrapper/dists"
} else {
  $MAVEN_WRAPPER_DISTS = (Get-Item $MAVEN_M2_PATH).Target[0] + "/wrapper/dists"
}

$MAVEN_HOME_PARENT = "$MAVEN_WRAPPER_DISTS/$distributionUrlNameMain"
$MAVEN_HOME_NAME = ([System.Security.Cryptography.SHA256]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join ''
$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME"

if (Test-Path -Path "$MAVEN_HOME" -PathType Container) {
  Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME"
  Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
  exit $?
}

if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) {
  Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl"
}

# prepare tmp dir
$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile
$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir"
$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null
trap {
  if ($TMP_DOWNLOAD_DIR.Exists) {
    try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
    catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
  }
}

New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null

# Download and Install Apache Maven
Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
Write-Verbose "Downloading from: $distributionUrl"
Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"

$webclient = New-Object System.Net.WebClient
if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) {
  $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD)
}
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null

# If specified, validate the SHA-256 sum of the Maven distribution zip file
$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum
if ($distributionSha256Sum) {
  if ($USE_MVND) {
    Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties."
  }
  Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash
  if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) {
    Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property."
  }
}

# unzip and move
Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null

# Find the actual extracted directory name (handles snapshots where filename != directory name)
$actualDistributionDir = ""

# First try the expected directory name (for regular distributions)
$expectedPath = Join-Path "$TMP_DOWNLOAD_DIR" "$distributionUrlNameMain"
$expectedMvnPath = Join-Path "$expectedPath" "bin/$MVN_CMD"
if ((Test-Path -Path $expectedPath -PathType Container) -and (Test-Path -Path $expectedMvnPath -PathType Leaf)) {
  $actualDistributionDir = $distributionUrlNameMain
}

# If not found, search for any directory with the Maven executable (for snapshots)
if (!$actualDistributionDir) {
  Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object {
    $testPath = Join-Path $_.FullName "bin/$MVN_CMD"
    if (Test-Path -Path $testPath -PathType Leaf) {
      $actualDistributionDir = $_.Name
    }
  }
}

if (!$actualDistributionDir) {
  Write-Error "Could not find Maven distribution directory in extracted archive"
}

Write-Verbose "Found extracted Maven distribution directory: $actualDistributionDir"
Rename-Item -Path "$TMP_DOWNLOAD_DIR/$actualDistributionDir" -NewName $MAVEN_HOME_NAME | Out-Null
try {
  Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null
} catch {
  if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) {
    Write-Error "fail to move MAVEN_HOME"
  }
} finally {
  try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
  catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
}

Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"


================================================
FILE: nbactions.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<actions>
        <action>
            <actionName>run</actionName>
            <packagings>
                <packaging>jar</packaging>
            </packagings>
            <goals>
                <goal>process-classes</goal>
                <goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:exec</goal>
            </goals>
            <properties>
                <exec.args>-Djna.nosys=true -classpath %classpath ${packageClassName}</exec.args>
                <exec.executable>java</exec.executable>
            </properties>
        </action>
        <action>
            <actionName>debug</actionName>
            <packagings>
                <packaging>jar</packaging>
            </packagings>
            <goals>
                <goal>process-classes</goal>
                <goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:exec</goal>
            </goals>
            <properties>
                <exec.args>-Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address} -Djna.nosys=true -classpath %classpath ${packageClassName}</exec.args>
                <exec.executable>java</exec.executable>
                <jpda.listen>true</jpda.listen>
            </properties>
        </action>
        <action>
            <actionName>profile</actionName>
            <packagings>
                <packaging>jar</packaging>
            </packagings>
            <goals>
                <goal>process-classes</goal>
                <goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:exec</goal>
            </goals>
            <properties>
                <exec.args>-Djna.nosys=true -classpath %classpath ${packageClassName}</exec.args>
                <exec.executable>java</exec.executable>
            </properties>
        </action>
        <action>
            <actionName>run.single.main</actionName>
            <packagings>
                <packaging>*</packaging>
            </packagings>
            <goals>
                <goal>process-classes</goal>
                <goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:exec</goal>
            </goals>
            <properties>
                <exec.args>-Djna.nosys=true -classpath %classpath ${packageClassName}</exec.args>
                <exec.executable>java</exec.executable>
                <exec.classpathScope>${classPathScope}</exec.classpathScope>
            </properties>
        </action>
        <action>
            <actionName>test</actionName>
            <packagings>
                <packaging>*</packaging>
            </packagings>
            <goals>
                <goal>test</goal>
            </goals>
            <properties>
                <exec.args>-Djna.nosys=true</exec.args>
            </properties>
        </action>
        <action>
            <actionName>test.single</actionName>
            <packagings>
                <packaging>*</packaging>
            </packagings>
            <goals>
                <goal>test-compile</goal>
                <goal>surefire:test</goal>
            </goals>
            <properties>
                <exec.args>-Djna.nosys=true</exec.args>
                <test>${packageClassName}</test>
            </properties>
        </action>
    </actions>


================================================
FILE: pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>org.freedesktop.gstreamer</groupId>
  <artifactId>gst1-java-core</artifactId>
  <version>1.5.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>GStreamer 1.x Java Core</name>
  <description>Unofficial Java binding for the GStreamer framework</description>
  <url>https://github.com/gstreamer-java/gst1-java-core</url>

  <organization>
    <name>gstreamer-java</name>
    <url>http://www.github.com/gstreamer-java</url>
  </organization>

  <licenses>
    <license>
      <name>LGPL-3.0-only</name>
      <url>http://www.gnu.org/licenses/lgpl.html</url>
      <distribution>repo</distribution>
    </license>
  </licenses>

  <scm>
    <url>https://github.com/gstreamer-java/gst1-java-core</url>
    <connection>scm:git:https://github.com/gstreamer-java/gst1-java-core.git</connection>
    <developerConnection>scm:git:https://github.com/gstreamer-java/gst1-java-core.git</developerConnection>
  </scm>
  
  <distributionManagement>
    <snapshotRepository>
      <id>sonatype-central</id>
      <url>https://central.sonatype.com/repository/maven-snapshots</url>
    </snapshotRepository>
    <repository>
      <id>sonatype-central</id>
      <url>https://repo.maven.apache.org/maven2</url>
    </repository>
  </distributionManagement>

  <developers>
    <developer>
      <id>neilcsmith-net</id>
      <name>Neil C Smith</name>
      <organization>Codelerity Ltd.</organization>
      <email>neil@codelerity.com</email>
      <roles>
        <role>Lead maintainer</role>
        <role>Developer</role>
      </roles>
      <url>https://www.codelerity.com</url>
    </developer>
    <developer>
      <id>wmeissner</id>
      <name>Wayne Meissner</name>
      <roles>
        <role>Founder of GStreamer 0.10 bindings</role>
      </roles>
    </developer>
  </developers>

  <properties>
    <maven.compiler.release>8</maven.compiler.release>
    <maven.test.jvmargs></maven.test.jvmargs>
    <njord.version>0.8.5</njord.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>net.java.dev.jna</groupId>
      <artifactId>jna</artifactId>
      <version>5.18.1</version>
    </dependency>
  </dependencies>

  <build>
    <sourceDirectory>src</sourceDirectory>
    <resources>
      <resource>
        <directory>src</directory>
        <excludes>
          <exclude>**/*.java</exclude>
        </excludes>
      </resource>
    </resources>
    <testSourceDirectory>test</testSourceDirectory>
    <testResources>
      <testResource>
        <directory>test</directory>
        <excludes>
          <exclude>**/*.java</exclude>
        </excludes>
      </testResource>
    </testResources>
    <extensions>
      <extension>
        <groupId>eu.maveniverse.maven.njord</groupId>
        <artifactId>extension3</artifactId>
        <version>${njord.version}</version>
      </extension>
    </extensions>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>3.5.4</version>
        <configuration>
          <forkCount>1</forkCount>
          <parallel>none</parallel>
          <reuseForks>false</reuseForks>
          <argLine>-XX:+IgnoreUnrecognizedVMOptions --enable-native-access=ALL-UNNAMED -Djna.nosys=true ${maven.test.jvmargs}</argLine>
          <excludes>
            <exclude>**/Test*.java</exclude>
          </excludes>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.14.1</version>
        <configuration>
          <release>8</release>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.4.2</version>
        <configuration>
          <archive>
            <manifestEntries>
              <Automatic-Module-Name>org.freedesktop.gstreamer</Automatic-Module-Name>
            </manifestEntries>
          </archive>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <profile>
      <id>windows-gstreamer-path</id>
      <activation>
        <os>
          <family>windows</family>
        </os>
        <property>
          <name>gstreamer.path</name>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <environmentVariables>
                <PATH>${gstreamer.path};${java.library.path}</PATH>
              </environmentVariables>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>release</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>3.3.1</version>
            <executions>
              <execution>
                <id>attach-sources</id>
                <goals>
                  <goal>jar-no-fork</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>3.12.0</version>
            <configuration>
              <doclint>none</doclint>
              <excludePackageNames>org.freedesktop.gstreamer.lowlevel</excludePackageNames>
              <release>8</release>
            </configuration>
            <executions>
              <execution>
                <id>attach-javadocs</id>
                <goals>
                  <goal>jar</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-gpg-plugin</artifactId>
            <version>3.2.8</version>
            <executions>
              <execution>
                <id>sign-artifacts</id>
                <phase>verify</phase>
                <goals>
                  <goal>sign</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>


================================================
FILE: src/org/freedesktop/gstreamer/Bin.java
================================================
/* 
 * Copyright (c) 2025 Neil C Smith
 * Copyright (c) 2016 Christophe Lafolet
 * Copyright (c) 2009 Levente Farkas
 * Copyright (C) 2007 Wayne Meissner
 * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
 *                    2004 Wim Taymans <wim@fluendo.com>
 * 
 * This file is part of gstreamer-java.
 *
 * This code is free software: you can redistribute it and/or modify it under 
 * the terms of the GNU Lesser General Public License version 3 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT 
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License 
 * version 3 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with this work.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.freedesktop.gstreamer;

import static org.freedesktop.gstreamer.lowlevel.GstBinAPI.GSTBIN_API;

import java.util.EnumSet;
import java.util.List;
import org.freedesktop.gstreamer.glib.NativeFlags;
import org.freedesktop.gstreamer.glib.Natives;
import org.freedesktop.gstreamer.lowlevel.GstAPI.GstCallback;
import org.freedesktop.gstreamer.lowlevel.GstIteratorPtr;
import org.freedesktop.gstreamer.lowlevel.GstObjectPtr;

/**
 * Base class and element that can contain other elements.
 * <p>
 * See upstream documentation at
 * <a href="https://gstreamer.freedesktop.org/data/doc/gstreamer/stable/gstreamer/html/GstBin.html"
 * >https://gstreamer.freedesktop.org/data/doc/gstreamer/stable/gstreamer/html/GstBin.html</a>
 * <p>
 * Bin is an element that can contain other {@link Element}s, allowing them to
 * be managed as a group.
 * <p>
 * Pads from the child elements can be ghosted to the bin, see {@link GhostPad}.
 * This makes the bin look like any other elements and enables creation of
 * higher-level abstraction elements.
 * <p>
 * A new {@link Bin} is created with {@link Bin#Bin(String)}. Use a
 * {@link Pipeline} instead if you want to create a toplevel bin because a
 * normal bin doesn't have a bus or handle clock distribution of its own.
 * <p>
 * After the bin has been created you will typically add elements to it with
 * {@link Bin#add(Element)}. Elements can be removed with
 * {@link Bin#remove(Element)}
 * <p>
 * An element can be retrieved from a bin with
 * {@link Bin#getElementByName(String)}.
 * <p>
 * A list of elements contained in a bin can be retrieved with
 * {@link Bin#getElements}
 *
 * The {@link ELEMENT_ADDED} signal is fired whenever a new element is added to
 * the bin. Likewise the {@link ELEMENT_REMOVED} signal is fired whenever an
 * element is removed from the bin.
 *
 */
public class Bin extends Element {

    public static final String GST_NAME = "bin";
    public static final String GTYPE_NAME = "GstBin";

    protected Bin(Initializer init) {
        super(init);
    }

    Bin(Handle handle, boolean needRef) {
        super(handle, needRef);
    }
    
    /**
     * Creates a new Bin with a unique name.
     */
    public Bin() {
        this(Natives.initializer(GSTBIN_API.ptr_gst_bin_new(null), false, true));
    }

    /**
     * Creates a new Bin with the given name.
     *
     * @param name The Name to assign to the new Bin
     */
    public Bin(String name) {
        this(Natives.initializer(GSTBIN_API.ptr_gst_bin_new(name), false, true));
    }

    /**
     * Adds an Element to this Bin.
     * <p>
     * Sets the element's parent, and thus takes ownership of the element. An
     * element can only be added to one bin.
     * <p>
     * If the element's pads are linked to other pads, the pads will be unlinked
     * before the element is added to the bin.
     *
     * @param element The {@link Element} to add to this Bin.
     * @return true if the element was successfully added, false if the Bin will
     * not accept the element.
     */
    public boolean add(Element element) {
        return GSTBIN_API.gst_bin_add(this, element);
    }

    /**
     * Adds an array of Element objects to this Bin
     *
     * @param elements The array of {@link Element} to add to this Bin
     * @see Bin#add(Element)
     */
    public void addMany(Element... elements) {
        GSTBIN_API.gst_bin_add_many(this, elements);
    }

    /**
     * Removes a Element from this Bin
     * <p>
     * Removes the element from the bin, unparenting it as well.
     *
     * If the element's pads are linked to other pads, the pads will be unlinked
     * before the element is removed from the bin.
     *
     * @param element The {@link Element} to remove
     * @return true if the element was successfully removed
     */
    public boolean remove(Element element) {
        return GSTBIN_API.gst_bin_remove(this, element);
    }

    /**
     * Removes an array of {@link Element} objects from this Bin
     *
     * @param elements The list {@link Element} to remove
     */
    public void removeMany(Element... elements) {
        GSTBIN_API.gst_bin_remove_many(this, elements);
    }

    private List<Element> elementList(GstIteratorPtr iter) {
        return GstIterator.asList(iter, Element.class);
    }

    /**
     * Retrieve a list of the {@link Element}s contained in the Bin.
     *
     * @return The List of {@link Element}s.
     */
    public List<Element> getElements() {
        return elementList(GSTBIN_API.gst_bin_iterate_elements(this));
    }

    /**
     * Gets an a list of the elements in this bin in topologically sorted order.
     * This means that the elements are returned from the most downstream
     * elements (sinks) to the sources.
     *
     * @return The List of {@link Element}s.
     */
    public List<Element> getElementsSorted() {
        return elementList(GSTBIN_API.gst_bin_iterate_sorted(this));
    }

    /**
     * Retrieve a list of the {@link Element}s contained in the Bin and its Bin
     * children.
     *
     * This differs from {@link #getElements()} as it will also return
     * {@link Element}s that are in any Bin elements contained in this Bin, also
     * recursing down those Bins.
     *
     * @return The List of {@link Element}s.
     */
    public List<Element> getElementsRecursive() {
        return elementList(GSTBIN_API.gst_bin_iterate_recurse(this));
    }

    /**
     * Retrieve a list of the sink {@link Element}s contained in the Bin.
     *
     * @return The List of sink {@link Element}s.
     */
    public List<Element> getSinks() {
        return elementList(GSTBIN_API.gst_bin_iterate_sinks(this));
    }

    /**
     * Retrieve a list of the source {@link Element}s contained in the Bin.
     *
     * @return The List of source {@link Element}s.
     */
    public List<Element> getSources() {
        return elementList(GSTBIN_API.gst_bin_iterate_sources(this));
    }

    /**
     * Gets the {@link Element} with the given name from the bin. This function
     * recurses into child bins.
     *
     * @param name The name of the {@link Element} to find.
     * @return The {@link Element} if found, else null.
     */
    public Element getElementByName(String name) {
        return GSTBIN_API.gst_bin_get_by_name(this, name);
    }

    /**
     * Gets the element with the given name from this bin. If the element is not
     * found, a recursion is performed on the parent bin.
     *
     * @param name The name of the {@link Element} to find.
     * @return The {@link Element} if found, else null.
     */
    public Element getElementByNameRecurseUp(String name) {
        return GSTBIN_API.gst_bin_get_by_name_recurse_up(this, name);
    }

//    /**
//     * Looks for an element inside the bin that implements the given interface.
//     * If such an element is found, it returns the element.
//     *
//     * @param iface The class of the {@link Element} to search for.
//     * @return The {@link Element} that implements the interface.
//     */
//    public <T extends Element> T getElementByInterface(Class<T> iface) {
//        return iface.cast(GSTBIN_API.gst_bin_get_by_interface(this, GstTypes.typeFor(iface)));
//    }
    /**
     * To aid debugging applications one can use this method to write out the
     * whole network of gstreamer elements that form the pipeline into a dot
     * file. This file can be processed with graphviz to get an image. e.g. dot
     * -Tpng -oimage.png graph_lowlevel.dot
     * <p>
     * The function is only active if gstreamer is configured with
     * "--gst-enable-gst-debug" and the environment variable
     * GST_DEBUG_DUMP_DOT_DIR is set to a basepath (e.g. /tmp).
     *
     * @param details to show in the graph
     * @param fileName output base filename (e.g. "myplayer")
     */
    public void debugToDotFile(EnumSet<DebugGraphDetails> details, String fileName) {
        GSTBIN_API.gst_debug_bin_to_dot_file(
                this, NativeFlags.toInt(details), fileName);
    }

    /**
     * To aid debugging applications one can use this method to write out the
     * whole network of gstreamer elements that form the pipeline into a dot
     * file. This file can be processed with graphviz to get an image. e.g. dot
     * -Tpng -oimage.png graph_lowlevel.dot
     * <p>
     * The function is only active if gstreamer is configured with
     * "--gst-enable-gst-debug" and the environment variable
     * GST_DEBUG_DUMP_DOT_DIR is set to a basepath (e.g. /tmp).
     * <p>
     * Unlike {@link #debugToDotFile(java.util.EnumSet, java.lang.String)} this
     * method adds the current timestamp to the filename, so that it can be
     * used to take multiple snapshots.
     * 
     * @param details to show in the graph
     * @param fileName output base filename (e.g. "myplayer")
     */
    public void debugToDotFileWithTS(EnumSet<DebugGraphDetails> details, String fileName) {
        GSTBIN_API.gst_debug_bin_to_dot_file_with_ts(
                this, NativeFlags.toInt(details), fileName);
    }

    /**
     * Signal emitted when an {@link Element} is added to this Bin
     *
     * @see #connect(ELEMENT_ADDED)
     * @see #disconnect(ELEMENT_ADDED)
     */
    public static interface ELEMENT_ADDED {

        /**
         * Called when an {@link Element} is added to a {@link Bin}
         *
         * @param bin the Bin the element was added to.
         * @param element the {@link Element} that was added.
         */
        public void elementAdded(Bin bin, Element element);
    }

    /**
     * Add a listener for the <code>element-added</code> signal on this Bin
     *
     * @param listener The listener to be called when an {@link Element} is
     * added.
     */
    public void connect(final ELEMENT_ADDED listener) {
        connect(ELEMENT_ADDED.class, listener, new GstCallback() {
            @SuppressWarnings("unused")
            public void callback(Bin bin, Element elem) {
                listener.elementAdded(bin, elem);
            }
        });
    }

    /**
     * Disconnect the listener for the <code>element-added</code> signal
     *
     * @param listener The listener that was registered to receive the signal.
     */
    public void disconnect(ELEMENT_ADDED listener) {
        disconnect(ELEMENT_ADDED.class, listener);
    }

    /**
     * Signal emitted when an {@link Element} is removed from this Bin
     *
     * @see #connect(ELEMENT_REMOVED)
     * @see #disconnect(ELEMENT_REMOVED)
     */
    public static interface ELEMENT_REMOVED {

        /**
         * Called when an {@link Element} is removed from a {@link Bin}
         *
         * @param bin the Bin the element was removed from.
         * @param element the {@link Element} that was removed.
         */
        public void elementRemoved(Bin bin, Element element);
    }

    /**
     * Add a listener for the <code>element-removed</code> signal on this Bin
     *
     * @param listener The listener to be called when an {@link Element} is
     * removed.
     */
    public void connect(final ELEMENT_REMOVED listener) {
        connect(ELEMENT_REMOVED.class, listener, new GstCallback() {
            @SuppressWarnings("unused")
            public void callback(Bin bin, Element elem) {
                listener.elementRemoved(bin, elem);
            }
        });
    }

    /**
     * Disconnect the listener for the <code>element-removed</code> signal
     *
     * @param listener The listener that was registered to receive the signal.
     */
    public void disconnect(ELEMENT_REMOVED listener) {
        disconnect(ELEMENT_REMOVED.class, listener);
    }

    /**
     * Signal emitted when an {@link Element} is added to sub-bin of this
     * {@link Bin}
     *
     * @see #connect(DEEP_ELEMENT_ADDED)
     * @see #disconnect(DEEP_ELEMENT_ADDED)
     */
    @Gst.Since(minor = 10)
    public static interface DEEP_ELEMENT_ADDED {

        /**
         * Called when an {@link Element} is added to a {@link Bin}
         *
         * Since GStreamer 1.10
         *
         * @param bin the Bin
         * @param sub_bin the Bin the element was added to.
         * @param element the {@link Element} that was added.
         */
        public void elementAdded(Bin bin, Bin sub_bin, Element element);
    }

    /**
     * Add a listener for the <code>deep-element-added</code> signal on this Bin
     *
     * @param listener The listener to be called when an {@link Element} is
     * added.
     */
    @Gst.Since(minor = 10)
    public void connect(final DEEP_ELEMENT_ADDED listener) {
        Gst.checkVersion(1, 10);
        connect(DEEP_ELEMENT_ADDED.class, listener, new GstCallback() {
            @SuppressWarnings("unused")
            public void callback(Bin bin, Bin sub_bin, Element elem) {
                listener.elementAdded(bin, sub_bin, elem);
            }
        });
    }

    /**
     * Disconnect the listener for the <code>deep-element-added</code> signal
     *
     * @param listener The listener that was registered to receive the signal.
     */
    @Gst.Since(minor = 10)
    public void disconnect(DEEP_ELEMENT_ADDED listener) {
        disconnect(DEEP_ELEMENT_ADDED.class, listener);
    }

    /**
     * Signal emitted when an {@link Element} is removed from sub-bin of this
     * {@link Bin}
     *
     * @see #connect(ELEMENT_REMOVED)
     * @see #disconnect(ELEMENT_REMOVED)
     */
    @Gst.Since(minor = 10)
    public static interface DEEP_ELEMENT_REMOVED {

        /**
         * Called when an {@link Element} is removed from a {@link Bin}
         *
         * Since GStreamer 1.10
         *
         * @param bin the Bin
         * @param sub_bin the Bin the element was removed from.
         * @param element the {@link Element} that was removed.
         */
        public void elementRemoved(Bin bin, Bin sub_bin, Element element);
    }

    /**
     * Add a listener for the <code>deep-element-removed</code> signal on this
     * Bin
     *
     * @param listener The listener to be called when an {@link Element} is
     * removed.
     */
    @Gst.Since(minor = 10)
    public void connect(final DEEP_ELEMENT_REMOVED listener) {
        Gst.checkVersion(1, 10);
        connect(DEEP_ELEMENT_REMOVED.class, listener, new GstCallback() {
            @SuppressWarnings("unused")
            public void callback(Bin bin, Bin sub_bin, Element elem) {
                listener.elementRemoved(bin, sub_bin, elem);
            }
        });
    }

    /**
     * Disconnect the listener for the <code>deep-element-removed</code> signal
     *
     * @param listener The listener that was registered to receive the signal.
     */
    @Gst.Since(minor = 10)
    public void disconnect(DEEP_ELEMENT_REMOVED listener) {
        disconnect(DEEP_ELEMENT_REMOVED.class, listener);
    }

    /**
     * Signal emitted when an {@link Element} has latency
     *
     * @see #connect(DO_LATENCY)
     * @see #disconnect(DO_LATENCY)
     */
    public static interface DO_LATENCY {

        /**
         * Called when an {@link Element} is removed from a {@link Bin}
         *
         * @param bin the Bin the element was removed from.
         */
        public void doLatency(Bin bin);
    }

    /**
     * Add a listener for the <code>do-latency</code> signal on this Bin
     *
     * @param listener The listener to be called when an {@link Element} is
     * removed.
     */
    public void connect(final DO_LATENCY listener) {
        connect(DO_LATENCY.class, listener, new GstCallback() {
            @SuppressWarnings("unused")
            public void callback(Bin bin) {
                listener.doLatency(bin);
            }
        });
    }

    /**
     * Disconnect the listener for the <code>do-latency</code> signal
     *
     * @param listener The listener that was registered to receive the signal.
     */
    public void disconnect(DO_LATENCY listener) {
        disconnect(DO_LATENCY.class, listener);
    }

    /**
     * Available details for pipeline graphs produced by
     * {@link #debugToDotFile(java.util.EnumSet, java.lang.String)}
     */
    public static enum DebugGraphDetails implements NativeFlags<DebugGraphDetails> {

        /**
         * Show caps-name on edges.
         */
        SHOW_MEDIA_TYPE(1 << 0),
        /**
         * Show caps-details on edges.
         */
        SHOW_CAPS_DETAILS(1 << 1),
        /**
         * Show modified parameters on elements.
         */
        SHOW_NON_DEFAULT_PARAMS(1 << 2),
        /**
         * Show element states.
         */
        SHOW_STATES(1 << 3);

        /**
         * A convenience EnumSet with all values.
         */
        public final static EnumSet<DebugGraphDetails> SHOW_ALL
                = EnumSet.allOf(DebugGraphDetails.class);
        
        private final int value;

        private DebugGraphDetails(int value) {
            this.value = value;
        }

        @Override
        public int intValue() {
            return value;
        }

    }
    
    static class Handle extends Element.Handle {
        
        public Handle(GstObjectPtr ptr, boolean ownsHandle) {
            super(ptr, ownsHandle);
        }
        
    }

}


================================================
FILE: src/org/freedesktop/gstreamer/Buffer.java
================================================
/*
 * Copyright (c) 2020 Neil C Smith
 * Copyright (c) 2019 Christophe Lafolet
 * Copyright (C) 2014 Tom Greenwood <tgreenwood@cafex.com>
 * Copyright (C) 2007 Wayne Meissner
 * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
 *                    2000 Wim Taymans <wtay@chello.be>
 *
 * This file is part of gstreamer-java.
 *
 * This code is free software: you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License version 3 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
 * version 3 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with this work.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.freedesktop.gstreamer;

import static org.freedesktop.gstreamer.lowlevel.GstBufferAPI.GSTBUFFER_API;

import java.nio.ByteBuffer;

import org.freedesktop.gstreamer.lowlevel.GstBufferAPI;
import org.freedesktop.gstreamer.lowlevel.GstBufferAPI.BufferStruct;
import org.freedesktop.gstreamer.lowlevel.GstBufferAPI.MapInfoStruct;

import com.sun.jna.Pointer;
import com.sun.jna.ptr.PointerByReference;
import java.util.EnumSet;
import java.util.Iterator;
import java.util.NoSuchElementException;
import org.freedesktop.gstreamer.glib.NativeFlags;
import org.freedesktop.gstreamer.glib.Natives;
import org.freedesktop.gstreamer.lowlevel.GType;
import org.freedesktop.gstreamer.lowlevel.GstMetaPtr;

/**
 * Buffers are the basic unit of data transfer in GStreamer. They contain the
 * timing and offset along with other arbitrary metadata that is associated with
 * the GstMemory blocks that the buffer contains.
 * <p>
 * See upstream documentation at
 * <a href="https://gstreamer.freedesktop.org/data/doc/gstreamer/stable/gstreamer/html/GstBuffer.html"
 * >https://gstreamer.freedesktop.org/data/doc/gstreamer/stable/gstreamer/html/GstBuffer.html</a>
 */
public class Buffer extends MiniObject {

    public static final String GTYPE_NAME = "GstBuffer";

    private final MapInfoStruct mapInfo;
    private final BufferStruct struct;

    /**
     * Creates a newly allocated buffer without any data.
     */
    public Buffer() {
        this(Natives.initializer(GSTBUFFER_API.ptr_gst_buffer_new()));
    }

    /**
     * Creates a newly allocated buffer with data of the given size. The buffer
     * memory is not cleared. If the requested amount of memory cannot be
     * allocated, an exception will be thrown.
     * <p>
     * Note that when size == 0, the buffer data pointer will be NULL.
     *
     * @param size
     */
    public Buffer(int size) {
        this(Natives.initializer(allocBuffer(size)));
    }

    Buffer(Initializer init) {
        super(init);
        mapInfo = new MapInfoStruct();
        struct = new BufferStruct(getRawPointer());
    }

    private static Pointer allocBuffer(int size) {
        Pointer ptr = GSTBUFFER_API.ptr_gst_buffer_new_allocate(null, size, null);
        if (ptr == null) {
            throw new OutOfMemoryError("Could not allocate Buffer of size " + size);
        }
        return ptr;
    }

    /**
     * Gets a {@link java.nio.ByteBuffer} that can access the native memory
     * associated with this Buffer, with the option of ensuring the memory is
     * writable.
     * <p>
     * When requesting a writable buffer, if the buffer is writable but the
     * underlying memory isn't, a writable copy will automatically be created
     * and returned. The readonly copy of the buffer memory will then also be
     * replaced with this writable copy.
     * <p>
     * <b>The Buffer should be unmapped with {@link #unmap()} after usage.</b>
     *
     * @param writable
     * @return A {@link java.nio.ByteBuffer} that can access this Buffer's data.
     */
    public ByteBuffer map(boolean writable) {
        final boolean ok = GSTBUFFER_API.gst_buffer_map(this, mapInfo,
                writable ? GstBufferAPI.GST_MAP_WRITE : GstBufferAPI.GST_MAP_READ);
        if (ok && mapInfo.data != null) {
            return mapInfo.data.getByteBuffer(0, mapInfo.size.intValue());
        }
        return null;
    }

    /**
     * Release the memory previously mapped with {@link #map(boolean)}
     */
    public void unmap() {
        GSTBUFFER_API.gst_buffer_unmap(this, mapInfo);
    }

    /**
     * Get the amount of memory blocks that this buffer has. This amount is never
     * larger than what {@code gst_buffer_get_max_memory()} returns.
     *
     * @return the number of memory blocks this buffer is made of.
     */
    public int getMemoryCount() {
        return GSTBUFFER_API.gst_buffer_n_memory(this);
    }

    /**
     * Gets the timestamps of this buffer. The buffer DTS refers to the
     * timestamp when the buffer should be decoded and is usually monotonically
     * increasing.
     *
     * @return a long representing the timestamp or {@link ClockTime#NONE}
     * when the timestamp is not known or relevant.
     */
    public long getDecodeTimestamp() {
        return (long) this.struct.readField("dts");
    }

    /**
     * Set the decode timestamp of the Buffer
     *
     * @param val a long representing the timestamp or
     * {@link ClockTime#NONE} when the timestamp is not known or relevant.
     */
    public void setDecodeTimestamp(long val) {
        this.struct.writeField("dts", val);
    }

    /**
     * Gets the timestamps of this buffer. The buffer PTS refers to the
     * timestamp when the buffer content should be presented to the user and is
     * not always monotonically increasing.
     *
     * @return a long representing the timestamp or {@link ClockTime#NONE}
     * when the timestamp is not known or relevant.
     */
    public long getPresentationTimestamp() {
        return (long) this.struct.readField("pts");
    }

    /**
     * Set the presentation timestamp of the Buffer
     *
     * @param val a long representing the timestamp or
     * {@link ClockTime#NONE} when the timestamp is not known or relevant.
     */
    public void setPresentationTimestamp(long val) {
        this.struct.writeField("pts", val);
    }

    /**
     * Gets the duration of this buffer.
     *
     * @return a ClockTime representing the timestamp or {@link ClockTime#NONE}
     * when the timestamp is not known or relevant.
     */
    public long getDuration() {
        return (long) this.struct.readField("duration");
    }

    /**
     * Set the duration of this buffer.
     *
     * @param val a long representing the duration or
     * {@link ClockTime#NONE} when the timestamp is not known or relevant.
     */
    public void setDuration(long val) {
        this.struct.writeField("duration", val);
    }

    /**
     * Get the offset (media-specific) of this buffer
     *
     * @return a media specific offset for the buffer data. For video frames,
     * this is the frame number of this buffer. For audio samples, this is the
     * offset of the first sample in this buffer. For file data or compressed
     * data this is the byte offset of the first byte in this buffer.
     */
    public long getOffset() {
        return (Long) this.struct.readField("offset");
    }

    /**
     * Set the offset (media-specific) of this buffer
     *
     * @param val a media specific offset for the buffer data. For video frames,
     * this is the frame number of this buffer. For audio samples, this is the
     * offset of the first sample in this buffer. For file data or compressed
     * data this is the byte offset of the first byte in this buffer.
     */
    public void setOffset(long val) {
        this.struct.writeField("offset", val);
    }

    /**
     * Get the offset (media-specific) of this buffer
     *
     * @return a media specific offset for the buffer data. For video frames,
     * this is the frame number of this buffer. For audio samples, this is the
     * offset of the first sample in this buffer. For file data or compressed
     * data this is the byte offset of the first byte in this buffer.
     */
    public long getOffsetEnd() {
        return (Long) this.struct.readField("offset_end");
    }

    /**
     * Set the offset (media-specific) of this buffer
     *
     * @param val a media specific offset for the buffer data. For video frames,
     * this is the frame number of this buffer. For audio samples, this is the
     * offset of the first sample in this buffer. For file data or compressed
     * data this is the byte offset of the first byte in this buffer.
     */
    public void setOffsetEnd(long val) {
        this.struct.writeField("offset_end", val);
    }

    /**
     * Get the GstBufferFlags describing this buffer.
     * <p>
     * Since GStreamer 1.10
     *
     * @return an EnumSet of {@link BufferFlags}
     */
    @Gst.Since(minor = 10)
    public EnumSet<BufferFlags> getFlags() {
        Gst.checkVersion(1, 10);
        int nativeInt = GstBufferAPI.GSTBUFFER_API.gst_buffer_get_flags(this);
        return NativeFlags.fromInt(BufferFlags.class, nativeInt);
    }

    /**
     * Get the metadata for api on buffer. When there is no such metadata, NULL
     * is returned.
     *
     * @param <T> implementation type of metadata
     * @param api api type of metadata
     * @return meta or null
     */
    public <T extends Meta> T getMeta(Meta.API<T> api) {
        GType apiType = api.getAPIGType();
        if (apiType == GType.INVALID) {
            return null;
        }
        GstMetaPtr ptr = GSTBUFFER_API.gst_buffer_get_meta(this, apiType);
        // can not create metadata class from null pointer
        if (ptr == null) {
            return null;
        }
        return Natives.objectFor(ptr, api.getImplClass(), false, false);
    }
    
    /**
     * Iterate all Meta on buffer.
     * 
     * @return iterator of meta
     */
    public Iterator<Meta> iterateMeta() {
        return new MetaIterator(this);
    }

    /**
     * Check if buffer contains metadata for api.
     * <p>
     * Since GStreamer 1.14
     *
     * @param <T> implementation type of metadata
     * @param api type of metadata
     * @return return true only if buffer contains selected type of metadata
     */
    @Gst.Since(minor = 14)
    public <T extends Meta> boolean hasMeta(Meta.API<T> api) {
        return getMetaCount(api) > 0;
    }

    /**
     * Check number of metadata for api. There can be more than one metadata in
     * case of multiple video/audio layer.
     * <p>
     * Since GStreamer 1.14
     *
     * @param <T> implementation type of metadata
     * @param api type of metadata
     * @return count of metadata of provided api type
     */
    @Gst.Since(minor = 14)
    public <T extends Meta> int getMetaCount(Meta.API<T> api) {
        Gst.checkVersion(1, 14);
        GType apiType = api.getAPIGType();
        if (apiType == GType.INVALID) {
            return 0;
        }
        return GSTBUFFER_API.gst_buffer_get_n_meta(this, apiType);
    }


    /**
     * Set some of the GstBufferFlags describing this buffer. This is a union
     * operation and does not clear flags that are not mentioned.
     * <p>
     * Since GStreamer 1.10
     *
     * @param flags an EnumSet of {@link BufferFlags} to be set on the buffer.
     * @return true if flags were successfully set on this buffer
     */
    @Gst.Since(minor = 10)
    public boolean setFlags(EnumSet<BufferFlags> flags) {
        Gst.checkVersion(1, 10);
        return GstBufferAPI.GSTBUFFER_API.gst_buffer_set_flags(this, NativeFlags.toInt(flags));
    }

    /**
     * unset the GstBufferFlags describing this buffer. This is a difference
     * operation and does not clear flags that are not mentioned.
     * <p>
     * Since GStreamer 1.10
     *
     * @param flags an EnumSet of {@link BufferFlags} to be cleared on the buffer.
     * @return true if flags were successfully cleared on this buffer
     *
     */
    @Gst.Since(minor = 10)
    public boolean unsetFlags(EnumSet<BufferFlags> flags) {
        Gst.checkVersion(1, 10);
        return GstBufferAPI.GSTBUFFER_API.gst_buffer_unset_flags(this, NativeFlags.toInt(flags));
    }

    private static class MetaIterator implements Iterator<Meta> {

        private final PointerByReference state;
        private final Buffer buffer;
        private Meta next;

        MetaIterator(final Buffer buffer) {
            state = new PointerByReference();
            this.buffer = buffer;
        }

        @Override
        public boolean hasNext() {
            if (next == null) {
                next = getNext();
            }
            return next != null;
        }
        
        @Override
        public Meta next() {
            if (!hasNext() || next == null) {
                throw new NoSuchElementException();
            }
            Meta m = next;
            next = null;
            return m;
        }

        private Meta getNext() {
            return Natives.objectFor(
                    GSTBUFFER_API.gst_buffer_iterate_meta(this.buffer, this.state),
                    Meta.class,
                    false,
                    false
            );
        }


    }

}


================================================
FILE: src/org/freedesktop/gstreamer/BufferFlags.java
================================================
/* 
 * Copyright (c) 2019 Neil C Smith
 * Copyright (C) 2007 Wayne Meissner
 * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
 *                    2000 Wim Taymans <wtay@chello.be>
 * 
 * This file is part of gstreamer-java.
 *
 * This code is free software: you can redistribute it and/or modify it under 
 * the terms of the GNU Lesser General Public License version 3 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT 
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License 
 * version 3 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with this work.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.freedesktop.gstreamer;

import org.freedesktop.gstreamer.glib.NativeFlags;

/**
 * A set of buffer flags used to describe properties of a {@link Buffer}.
 */
public enum BufferFlags implements NativeFlags<BufferFlags> {

    /**  
     * the {@link Buffer} is live data and should be discarded in the PAUSED state.
     */
    LIVE(MiniObjectFlags.LAST.intValue() << 0),

    /**
     * the {@link Buffer} contains data that should be dropped
     * because it will be clipped against the segment
     * boundaries or because it does not contain data
     * that should be shown to the user.
     */
    DECODE_ONLY(MiniObjectFlags.LAST.intValue() << 1),

    /**
     * The {@link Buffer} marks a discontinuity in the stream.
     * This typically occurs after a seek or a dropped buffer from a live or
     * network source.
     */
    DISCONT(MiniObjectFlags.LAST.intValue() << 2),

    /**
     * The {@link Buffer} timestamps might have a discontinuity and this buffer is a good point to resynchronize.
     */
    RESYNC(MiniObjectFlags.LAST.intValue() << 3),

    /**
     * the {@link Buffer} data is corrupted.
     */
    CORRUPTED(MiniObjectFlags.LAST.intValue() << 4),

    /**
     * the buffer contains a media specific marker. for video this is typically the end of a frame boundary, for audio this is usually the start of a talkspurt.
     */
    MARKER(MiniObjectFlags.LAST.intValue() << 5),

    /**
     * he buffer contains header information that is needed to decode the following data.
     */
    HEADER(MiniObjectFlags.LAST.intValue() << 6),

    /**
     * The {@link Buffer} has been created to fill a gap in the
     * stream and contains media neutral data (elements can switch to optimized code
     * path that ignores the buffer content).
     */
    GAP(MiniObjectFlags.LAST.intValue() << 7),

    /**
     * the {@link Buffer} can be dropped without breaking the stream, for example to reduce bandwidth.
     */
    DROPPABLE(MiniObjectFlags.LAST.intValue() << 8),
    
    /** This unit cannot be decoded independently. */
    DELTA_UNIT(MiniObjectFlags.LAST.intValue() << 9),

    /**
     * this flag is set when memory of the {@link Buffer} is added/removed
     */
    TAG_MEMORY(MiniObjectFlags.LAST.intValue() << 10),

    /**
     * Elements which write to disk or permanent storage should ensure the data is synced after writing the contents of this {@link Buffer}. (Since 1.6)
     */
    SYNC_AFTER(MiniObjectFlags.LAST.intValue() << 11),
    
    /**
     * This buffer is important and should not be dropped. This can be used to
     * mark important buffers, e.g. to flag RTP packets carrying keyframes or
     * codec setup data for RTP Forward Error Correction purposes, or to prevent
     * still video frames from being dropped by elements due to QoS. (Since
     * 1.14)

     */
    @Gst.Since(minor = 14)
    NON_DROPPABLE(MiniObjectFlags.LAST.intValue() << 12),
    
    /* padding */
    LAST(MiniObjectFlags.LAST.intValue() << 16);
    
    private final int value;
    
    private BufferFlags(int value) {
        this.value = value;
    }
    /**
     * Get the integer value of the enum.
     * @return The integer value for this enum.
     */
    public final int intValue() {
        return value;
    }
    
}


================================================
FILE: src/org/freedesktop/gstreamer/BufferPool.java
================================================
/*
 * Copyright (c) 2019 Neil C Smith
 * Copyright (c) 2016 Christophe Lafolet
 *
 * This file is part of gstreamer-java.
 *
 * This code is free software: you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License version 3 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
 * version 3 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with this work.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.freedesktop.gstreamer;

import org.freedesktop.gstreamer.lowlevel.GstBufferPoolAPI;

import com.sun.jna.Pointer;
import org.freedesktop.gstreamer.glib.Natives;

/**
 * A BufferPool is an object that can be used to pre-allocate and recycle
 * buffers of the same size and with the same properties.
 * <p>
 *  See upstream documentation at
 * <a href="https://gstreamer.freedesktop.org/data/doc/gstreamer/stable/gstreamer/html/GstBufferPool.html"
 * >https://gstreamer.freedesktop.org/data/doc/gstreamer/stable/gstreamer/html/GstBufferPool.html</a>
 */
public class BufferPool extends GstObject {

    public static final String GTYPE_NAME = "GstBufferPool";

    /**
     * Creates a new instance of BufferPool
     */
    public BufferPool() {
        this(Natives.initializer(GstBufferPoolAPI.GSTBUFFERPOOL_API.ptr_gst_buffer_pool_new()));
    }
    
    /**
     * This constructor is for internal use only.
     * @param init initialization data.
     */
    BufferPool(final Initializer init) {
        super(init);
    }

    /**
     * Configure the BufferPool with the given parameters.
     * 
     * @param caps the {@link Caps} for the buffers
     * @param size the size of each buffer, not including prefix and padding
     * @param min_buffers the minimum amount of buffers to allocate
     * @param max_buffers the maximum amount of buffers to allocate or 0 for unlimited
     */
    public void setParams(Caps caps, int size, int min_buffers, int max_buffers) {
    	Structure config = GstBufferPoolAPI.GSTBUFFERPOOL_API.gst_buffer_pool_get_config(this);
    	GstBufferPoolAPI.GSTBUFFERPOOL_API.gst_buffer_pool_config_set_params(config, caps, size, min_buffers, max_buffers);
    }

    /**
     * Query the {@link Caps} configured on the BufferPool.
     * 
     * @return Caps configured on the BufferPool
     */
    public Caps getCaps() {
    	Structure config = GstBufferPoolAPI.GSTBUFFERPOOL_API.gst_buffer_pool_get_config(this);
    	Pointer[] ptr = new Pointer[1];
    	GstBufferPoolAPI.GSTBUFFERPOOL_API.gst_buffer_pool_config_get_params(config, ptr, null, null, null);
    	return new Caps(Natives.initializer(ptr[0], false, true));
    }

}


================================================
FILE: src/org/freedesktop/gstreamer/Bus.java
================================================
/* 
 * Copyright (c) 2025 Neil C Smith
 * Copyright (C) 2014 Tom Greenwood <tgreenwood@cafex.com>
 * Copyright (C) 2007 Wayne Meissner
 * Copyright (C) 2004 Wim Taymans <wim@fluendo.com>
 * 
 * This file is part of gstreamer-java.
 *
 * This code is free software: you can redistribute it and/or modify it under 
 * the terms of the GNU Lesser General Public License version 3 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT 
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License 
 * version 3 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with this work.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.freedesktop.gstreamer;

import java.util.List;
import java.util.Locale;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

import com.sun.jna.Callback;
import com.sun.jna.CallbackThreadInitializer;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.LongByReference;
import com.sun.jna.ptr.PointerByReference;
import org.freedesktop.gstreamer.glib.GObject;
import org.freedesktop.gstreamer.glib.NativeEnum;

import org.freedesktop.gstreamer.glib.Natives;
import org.freedesktop.gstreamer.lowlevel.GstAPI.GErrorStruct;
import org.freedesktop.gstreamer.lowlevel.GstBusAPI;
import org.freedesktop.gstreamer.lowlevel.GstBusAPI.BusCallback;
import org.freedesktop.gstreamer.lowlevel.GstBusPtr;
import org.freedesktop.gstreamer.lowlevel.GstMessagePtr;
import org.freedesktop.gstreamer.message.Message;
import org.freedesktop.gstreamer.message.MessageType;

import static org.freedesktop.gstreamer.lowlevel.GlibAPI.GLIB_API;
import static org.freedesktop.gstreamer.lowlevel.GstBusAPI.GSTBUS_API;
import static org.freedesktop.gstreamer.lowlevel.GstMessageAPI.GSTMESSAGE_API;
import static org.freedesktop.gstreamer.lowlevel.GstMiniObjectAPI.GSTMINIOBJECT_API;

/**
 * The {@link Bus} is an object responsible for delivering {@link Message}s in a
 * first-in first-out way from the streaming threads to the application.
 * <p>
 * See upstream documentation at
 * <a href="https://gstreamer.freedesktop.org/documentation/gstreamer/gstbus.html"
 * >https://gstreamer.freedesktop.org/documentation/gstreamer/gstbus.html</a>
 * <p>
 * Since the application typically only wants to deal with delivery of these
 * messages from one thread, the Bus will marshal the messages between different
 * threads. This is important since the actual streaming of media is done in
 * another thread than the application.
 * <p>
 * It is also possible to get messages from the bus without any thread
 * marshalling with the {@link #setSyncHandler} method. This makes it possible
 * to react to a message in the same thread that posted the message on the bus.
 * This should only be used if the application is able to deal with messages
 * from different threads.
 * <p>
 * Every {@link Pipeline} has one bus.
 * <p>
 * Note that a Pipeline will set its bus into flushing state when changing from
 * READY to NULL state.
 */
public class Bus extends GstObject {

    public static final String GTYPE_NAME = "GstBus";

    private static final Logger LOG = Logger.getLogger(Bus.class.getName());
    private static final SyncCallback SYNC_CALLBACK = new SyncCallback();

    private volatile BusSyncHandler syncHandler = null;

    private final Object lock = new Object();
    private final List<MessageProxy<?>> messageProxies = new CopyOnWriteArrayList<>();
    private boolean watchAdded = false;

    /**
     * This constructor is used internally by gstreamer-java
     *
     * @param init internal initialization data
     */
    Bus(Initializer init) {
        super(init);
        GSTBUS_API.gst_bus_set_sync_handler(this, null, null, null);
        GSTBUS_API.gst_bus_set_sync_handler(this, SYNC_CALLBACK, null, null);
    }

    /**
     * Instructs the bus to flush out any queued messages.
     *
     * If flushing, flush out any messages queued in the bus. Will flush future
     * messages until {@link #setFlushing} is called with false.
     *
     * @param flushing true if flushing is desired.
     */
    public void setFlushing(boolean flushing) {
        GSTBUS_API.gst_bus_set_flushing(this, flushing ? 1 : 0);
    }

    /**
     * Add a listener for end-of-stream messages.
     *
     * @param listener The listener to be called when end-of-stream is
     * encountered.
     */
    public void connect(final EOS listener) {
        connect(EOS.class, listener, new BusCallback() {
            public boolean callback(GstBusPtr bus, GstMessagePtr msg, Pointer user_data) {
                listener.endOfStream(Natives.objectFor(msg.getSource(), GstObject.class, true, true));
                return true;
            }
        });
    }

    /**
     * Disconnect the listener for end-of-stream messages.
     *
     * @param listener The listener that was registered to receive the message.
     */
    public void disconnect(EOS listener) {
        disconnect(EOS.class, listener);
    }

    /**
     * Add a listener for error messages.
     *
     * @param listener The listener to be called when an error in the stream is
     * encountered.
     */
    public void connect(final ERROR listener) {
        connect(ERROR.class, listener, new BusCallback() {
            public boolean callback(GstBusPtr bus, GstMessagePtr msg, Pointer user_data) {
                PointerByReference err = new PointerByReference();
                GSTMESSAGE_API.gst_message_parse_error(msg, err, null);
                GErrorStruct error = new GErrorStruct(err.getValue());
                GstObject source = Natives.objectFor(msg.getSource(), GstObject.class, true, true);
                listener.errorMessage(source, error.getCode(), error.getMessage());
                GLIB_API.g_error_free(err.getValue());
                return true;
            }
        });
    }

    /**
     * Disconnect the listener for error messages.
     *
     * @param listener The listener that was registered to receive the message.
     */
    public void disconnect(ERROR listener) {
        disconnect(ERROR.class, listener);
    }

    /**
     * Add a listener for warning messages.
     *
     * @param listener The listener to be called when an {@link Element} emits a
     * warning.
     */
    public void connect(final WARNING listener) {
        connect(WARNING.class, listener, new BusCallback() {
            public boolean callback(GstBusPtr bus, GstMessagePtr msg, Pointer user_data) {
                PointerByReference err = new PointerByReference();
                GSTMESSAGE_API.gst_message_parse_warning(msg, err, null);
                GErrorStruct error = new GErrorStruct(err.getValue());
                GstObject source = Natives.objectFor(msg.getSource(), GstObject.class, true, true);
                listener.warningMessage(source, error.getCode(), error.getMessage());
                GLIB_API.g_error_free(err.getValue());
                return true;
            }
        });
    }

    /**
     * Disconnect the listener for warning messages.
     *
     * @param listener The listener that was registered to receive the message.
     */
    public void disconnect(WARNING listener) {
        disconnect(WARNING.class, listener);
    }

    /**
     * Add a listener for informational messages.
     *
     * @param listener The listener to be called when an {@link Element} emits a
     * an informational message.
     */
    public void connect(final INFO listener) {
        connect(INFO.class, listener, new BusCallback() {
            public boolean callback(GstBusPtr bus, GstMessagePtr msg, Pointer user_data) {
                PointerByReference err = new PointerByReference();
                GSTMESSAGE_API.gst_message_parse_info(msg, err, null);
                GErrorStruct error = new GErrorStruct(err.getValue());
                GstObject source = Natives.objectFor(msg.getSource(), GstObject.class, true, true);
                listener.infoMessage(source, error.getCode(), error.getMessage());
                GLIB_API.g_error_free(err.getValue());
                return true;
            }
        });
    }

    /**
     * Disconnect the listener for informational messages.
     *
     * @param listener The listener that was registered to receive the message.
     */
    public void disconnect(INFO listener) {
        disconnect(INFO.class, listener);
    }

    /**
     * Add a listener for {@link State} changes in the Pipeline.
     *
     * @param listener The listener to be called when the Pipeline changes
     * state.
     */
    public void connect(final STATE_CHANGED listener) {
        connect(STATE_CHANGED.class, listener, new BusCallback() {
            public boolean callback(GstBusPtr bus, GstMessagePtr msg, Pointer user_data) {
                IntByReference oldPtr = new IntByReference();
                IntByReference currentPtr = new IntByReference();
                IntByReference pendingPtr = new IntByReference();
                GSTMESSAGE_API.gst_message_parse_state_changed(msg, oldPtr, currentPtr, pendingPtr);
                State old = NativeEnum.fromInt(State.class, oldPtr.getValue());
                State current = NativeEnum.fromInt(State.class, currentPtr.getValue());
                State pending = NativeEnum.fromInt(State.class, pendingPtr.getValue());
                GstObject source = Natives.objectFor(msg.getSource(), GstObject.class, true, true);
                listener.stateChanged(source, old, current, pending);
                return true;
            }
        });
    }

    /**
     * Disconnect the listener for {@link State} change messages.
     *
     * @param listener The listener that was registered to receive the message.
     */
    public void disconnect(STATE_CHANGED listener) {
        disconnect(STATE_CHANGED.class, listener);
    }

    /**
     * Add a listener for new media tags.
     *
     * @param listener The listener to be called when new media tags are found.
     */
    public void connect(final TAG listener) {
        connect(TAG.class, listener, new BusCallback() {
            public boolean callback(GstBusPtr bus, GstMessagePtr msg, Pointer user_data) {
                PointerByReference list = new PointerByReference();
                GSTMESSAGE_API.gst_message_parse_tag(msg, list);
                TagList tl = new TagList(Natives.initializer(list.getValue()));
                GstObject source = Natives.objectFor(msg.getSource(), GstObject.class, true, true);
                listener.tagsFound(source, tl);
                return true;
            }
        });
    }

    /**
     * Disconnect the listener for tag messages.
     *
     * @param listener The listener that was registered to receive the message.
     */
    public void disconnect(TAG listener) {
        disconnect(TAG.class, listener);
    }

    /**
     * Add a listener for {@link BUFFERING} messages in the Pipeline.
     *
     * @param listener The listener to be called when the Pipeline buffers data.
     */
    public void connect(final BUFFERING listener) {
        connect(BUFFERING.class, listener, new BusCallback() {
            public boolean callback(GstBusPtr bus, GstMessagePtr msg, Pointer user_data) {
                IntByReference percent = new IntByReference();
                GSTMESSAGE_API.gst_message_parse_buffering(msg, percent);
                GstObject source = Natives.objectFor(msg.getSource(), GstObject.class, true, true);
                listener.bufferingData(source, percent.getValue());
                return true;
            }
        });
    }

    /**
     * Disconnect the listener for buffering messages.
     *
     * @param listener The listener that was registered to receive the message.
     */
    public void disconnect(BUFFERING listener) {
        disconnect(BUFFERING.class, listener);
    }

    /**
     * Add a listener for duration changes.
     *
     * @param listener The listener to be called when the duration changes.
     */
    public void connect(final DURATION_CHANGED listener) {
        connect(DURATION_CHANGED.class, listener, new BusCallback() {
            public boolean callback(GstBusPtr bus, GstMessagePtr msg, Pointer user_data) {
                GstObject source = Natives.objectFor(msg.getSource(), GstObject.class, true, true);
                listener.durationChanged(source);
                return true;
            }
        });
    }

    /**
     * Disconnect the listener for duration change messages.
     *
     * @param listener The listener that was registered to receive the message.
     */
    public void disconnect(DURATION_CHANGED listener) {
        disconnect(DURATION_CHANGED.class, listener);
    }

    /**
     * Add a listener for {@link SEGMENT_START} messages in the Pipeline.
     *
     * @param listener The listener to be called when the Pipeline has started a
     * segment.
     */
    public void connect(final SEGMENT_START listener) {
        connect(SEGMENT_START.class, listener, new BusCallback() {
            public boolean callback(GstBusPtr bus, GstMessagePtr msg, Pointer user_data) {
                IntByReference formatPtr = new IntByReference();
                LongByReference positionPtr = new LongByReference();
                GSTMESSAGE_API.gst_message_parse_segment_start(msg, formatPtr, positionPtr);
                Format format = NativeEnum.fromInt(Format.class, formatPtr.getValue());
                GstObject source = Natives.objectFor(msg.getSource(), GstObject.class, true, true);
                listener.segmentStart(source, format, positionPtr.getValue());
                return true;
            }
        });
    }

    /**
     * Disconnect the listener for segment-start messages.
     *
     * @param listener The listener that was registered to receive the message.
     */
    public void disconnect(SEGMENT_START listener) {
        disconnect(SEGMENT_START.class, listener);
    }

    /**
     * Add a listener for {@link SEGMENT_DONE} messages in the Pipeline.
     *
     * @param listener The listener to be called when the Pipeline has finished
     * a segment.
     */
    public void connect(final SEGMENT_DONE listener) {
        connect(SEGMENT_DONE.class, listener, new BusCallback() {
            public boolean callback(GstBusPtr bus, GstMessagePtr msg, Pointer user_data) {
                IntByReference formatPtr = new IntByReference();
                LongByReference positionPtr = new LongByReference();
                GSTMESSAGE_API.gst_message_parse_segment_done(msg, formatPtr, positionPtr);
                Format format = NativeEnum.fromInt(Format.class, formatPtr.getValue());
                GstObject source = Natives.objectFor(msg.getSource(), GstObject.class, true, true);
                listener.segmentDone(source, format, positionPtr.getValue());
                return true;
            }
        });
    }

    /**
     * Disconnect the listener for segment-done messages.
     *
     * @param listener The listener that was registered to receive the message.
     */
    public void disconnect(SEGMENT_DONE listener) {
        disconnect(SEGMENT_DONE.class, listener);
    }

    /**
     * Add a listener for {@link ASYNC_DONE} messages in the Pipeline.
     *
     * @param listener The listener to be called when the an element has
     * finished an async state change.
     */
    public void connect(final ASYNC_DONE listener) {
        connect(ASYNC_DONE.class, listener, new BusCallback() {
            public boolean callback(GstBusPtr bus, GstMessagePtr msg, Pointer user_data) {
                GstObject source = Natives.objectFor(msg.getSource(), GstObject.class, true, true);
                listener.asyncDone(source);
                return true;
            }
        });
    }

    /**
     * Disconnect the listener for async-done messages.
     *
     * @param listener The listener that was registered to receive the message.
     */
    public void disconnect(ASYNC_DONE listener) {
        disconnect(ASYNC_DONE.class, listener);
    }

    /**
     * Add a listener for all messages posted on the Bus.
     *
     * @param listener The listener to be called when a {@link Message} is
     * posted.
     */
    public void connect(final MESSAGE listener) {
        connect(MESSAGE.class, listener, new BusCallback() {
            public boolean callback(GstBusPtr bus, GstMessagePtr msg, Pointer user_data) {
                listener.busMessage(Bus.this, Natives.objectFor(msg, Message.class, true, true));
                return true;
            }
        });
    }

    /**
     * Add a listener for messages of type {@code signal} posted on the Bus.
     *
     * @param signal the signal to connect to.
     * @param listener The listener to be called when a {@link Message} is
     * posted.
     */
    public void connect(String signal, final MESSAGE listener) {
        //
        // Deal with being called as e.g. "message::eos"
        //
        if (signal.contains("::")) {
            signal = signal.substring(signal.lastIndexOf("::") + 2);
        }
        connect(signal, MESSAGE.class, listener, new BusCallback() {
            public boolean callback(GstBusPtr bus, GstMessagePtr msg, Pointer user_data) {
                listener.busMessage(Bus.this, Natives.objectFor(msg, Message.class, true, true));
                return true;
            }
        });
    }

    /**
     * Disconnect the listener for segment-done messages.
     *
     * @param listener The listener that was registered to receive the message.
     */
    public void disconnect(MESSAGE listener) {
        disconnect(MESSAGE.class, listener);
    }

    /**
     * Posts a {@link Message} on this Bus.
     *
     * @param message the message to post.
     * @return <tt>true</tt> if the message could be posted, <tt>false</tt> if
     * the bus is flushing.
     */
    public boolean post(Message message) {
        return GSTBUS_API.gst_bus_post(this, message);
    }

    /**
     * Sets the synchronous handler (message listener) on the bus. The handler
     * will be called every time a new message is posted on the bus. Note that
     * the handler will be called in the same thread context as the posting
     * object. Applications should generally handle messages asynchronously
     * using the other message listeners.
     * <p>
     * Only one handler may be attached to the bus at any one time. An attached
     * sync handler forces creation of {@link Message} objects for all messages
     * on the bus, so the handler should be removed if no longer required.
     * <p>
     * A single native sync handler is used at all times, with synchronous and
     * asynchronous dispatch handled on the Java side, so the bindings do not
     * inherit issues in clearing or replacing the sync handler with versions of
     * GStreamer prior to 1.16.3.
     *
     * @param handler bus sync handler, or null to remove
     */
    public void setSyncHandler(BusSyncHandler handler) {
        syncHandler = handler;
    }

    /**
     * Clear the synchronous handler.
     * <p>
     * This is a convenience method equivalent to {@code setSyncHandler(null)}
     */
    public void clearSyncHandler() {
        setSyncHandler(null);
    }

    /**
     * Get the current synchronous handler.
     *
     * @return current sync handler, or null
     */
    public BusSyncHandler getSyncHandler() {
        return syncHandler;
    }

    /**
     * Connects to a signal.
     *
     * The signal name is deduced from the listenerClass name.
     *
     * @param listenerClass the class of the listener.
     * @param listener the listener to associate with the {@code callback}
     * @param callback The callback to call when the signal is emitted.
     */
    private <T> void connect(Class<T> listenerClass, T listener, BusCallback callback) {
        String className = listenerClass.getSimpleName();
        MessageType type;
        if ("MESSAGE".equals(className)) {
            type = MessageType.ANY;
        } else {
            type = MessageType.valueOf(listenerClass.getSimpleName());
        }
        addMessageProxy(type, listenerClass, listener, callback);
    }

    /**
     * Connects a callback to a signal.
     * <p>
     * This differs to {@link GObject#connect} in that it hooks up Bus signals
     * to the sync callback, not the generic GObject signal mechanism.
     *
     * @param <T> listener type
     * @param signal the name of the signal to connect to.
     * @param listenerClass the class of the {@code listener}
     * @param listener the listener to associate with the {@code callback}
     * @param callback the callback to call when the signal is emitted.
     */
    @Override
    public <T> void connect(String signal, Class<T> listenerClass, T listener,
            final Callback callback) {
        if (listenerClass.getEnclosingClass() != Bus.class) {
            super.connect(signal, listenerClass, listener, callback);
        } else {
            MessageType type;
            if ("message".equals(signal)) {
                type = MessageType.ANY;
            } else {
                type = MessageType.valueOf(signal.toUpperCase(Locale.ROOT).replace('-', '_'));
            }
            addMessageProxy(type, listenerClass, listener, (BusCallback) callback);
        }
    }

    private synchronized <T> void addMessageProxy(MessageType type,
            Class<T> listenerClass,
            T listener,
            BusCallback callback) {
        messageProxies.add(new MessageProxy(type, listenerClass, listener, callback));
        addWatch();
    }

    @Override
    public <T> void disconnect(Class<T> listenerClass, T listener) {
        if (listenerClass.getEnclosingClass() != Bus.class) {
            super.disconnect(listenerClass, listener);
        } else {
            removeMessageProxy(listenerClass, listener);
        }
    }

    private synchronized <T> void removeMessageProxy(Class<T> listenerClass, T listener) {
        messageProxies.removeIf(p -> p.listener == listener);
        if (messageProxies.isEmpty()) {
            removeWatch();
        }
    }

    /**
     * Dispatches a message to all interested listeners.
     * <p>
     * We do this here from a sync callback, because the default gstbus dispatch
     * uses the default main context to signal that there are messages waiting
     * on the bus. Since that is used by the GTK L&F under swing, we never get
     * those notifications, and the messages just queue up.
     *
     */
    private void dispatchMessage(GstBusPtr busPtr, GstMessagePtr msgPtr) {
        messageProxies.forEach(p -> {
            try {
                p.busMessage(busPtr, msgPtr);
            } catch (Throwable t) {
                LOG.log(Level.SEVERE, "Exception thrown by bus message handler", t);
            }
        });
        GSTMINIOBJECT_API.gst_mini_object_unref(msgPtr);
    }

    @Override
    public void dispose() {
        removeWatch();
        super.dispose();
    }

    /**
     * Adds the bus signal watch. This will reference the bus until the signal
     * watch is removed and so will stop the Bus being GC'd and disposed.
     */
    private void addWatch() {
        synchronized (lock) {
            if (!watchAdded) {
                LOG.fine("Add watch");
                GSTBUS_API.gst_bus_add_signal_watch(this);
                watchAdded = true;
            }
        }
    }

    /**
     * Removes the bus signal watch (which will remove the bus reference held by
     * the signal watch).
     */
    private void removeWatch() {
        synchronized (lock) {
            if (watchAdded) {
                LOG.fine("Remove watch");
                GSTBUS_API.gst_bus_remove_signal_watch(this);
                watchAdded = false;
            }
        }
    }

    /**
     * Signal emitted when end-of-stream is reached in a pipeline.
     *
     * The application will only receive this message in the PLAYING state and
     * every time it sets a pipeline to PLAYING that is in the EOS state. The
     * application can perform a flushing seek in the pipeline, which will undo
     * the EOS state again.
     *
     * @see #connect(EOS)
     * @see #disconnect(EOS)
     */
    public static interface EOS {

        /**
         * Called when a {@link Pipeline} element posts a end-of-stream message.
         *
         * @param source the element which posted the message.
         */
        public void endOfStream(GstObject source);
    }

    /**
     * Signal emitted when an error occurs.
     * <p>
     * When the application receives an error message it should stop playback of
     * the pipeline and not assume that more data will be played.
     *
     * @see #connect(ERROR)
     * @see #disconnect(ERROR)
     */
    public static interface ERROR {

        /**
         * Called when a {@link Pipeline} element posts an error message.
         *
         * @param source the element which posted the message.
         * @param code a numeric code representing the error.
         * @param message a string representation of the error.
         */
        public void errorMessage(GstObject source, int code, String message);
    }

    /**
     * Signal emitted when a warning message is delivered.
     *
     * @see #connect(WARNING)
     * @see #disconnect(WARNING)
     */
    public static interface WARNING {

        /**
         * Called when a {@link Pipeline} element posts an warning message.
         *
         * @param source the element which posted the message.
         * @param code a numeric code representing the warning.
         * @param message a string representation of the warning.
         */
        public void warningMessage(GstObject source, int code, String message);
    }

    /**
     * Signal emitted when an informational message is delivered.
     *
     * @see #connect(INFO)
     * @see #disconnect(INFO)
     */
    public static interface INFO {

        /**
         * Called when a {@link Pipeline} element posts an informational
         * message.
         *
         * @param source the element which posted the message.
         * @param code a numeric code representing the informational message.
         * @param message a string representation of the informational message.
         */
        public void infoMessage(GstObject source, int code, String message);
    }

    /**
     * Signal emitted when a new tag is identified on the stream.
     *
     * @see #connect(TAG)
     * @see #disconnect(TAG)
     */
    public static interface TAG {

        /**
         * Called when a {@link Pipeline} element finds media meta-data.
         *
         * @param source the element which posted the message.
         * @param tagList a list of media meta-data.
         */
        public void tagsFound(GstObject source, TagList tagList);
    }

    /**
     * Signal emitted when a state change happens.
     *
     * @see #connect(STATE_CHANGED)
     * @see #disconnect(STATE_CHANGED)
     */
    public static interface STATE_CHANGED {

        /**
         * Called when a {@link Pipeline} element executes a {@link State}
         * change.
         *
         * @param source the element which posted the message.
         * @param old the old state that the element is changing from.
         * @param current the new (current) state the element is changing to.
         * @param pending the pending (target) state.
         */
        public void stateChanged(GstObject source, State old, State current, State pending);
    }

    /**
     * Signal emitted when the pipeline is buffering data.
     *
     * @see #connect(BUFFERING)
     * @see #disconnect(BUFFERING)
     */
    public static interface BUFFERING {

        /**
         * Called when a {@link Pipeline} element needs to buffer data before it
         * can continue processing.
         * <p>
         * {@code percent} is a value between 0 and 100. A value of 100 means
         * that the buffering completed.
         * <p>
         * When {@code percent} is less than 100 the application should PAUSE a
         * PLAYING pipeline. When {@code percent} is 100, the application can
         * set the pipeline (back) to PLAYING.
         * <p>
         * The application must be prepared to receive BUFFERING messages in the
         * PREROLLING state and may only set the pipeline to PLAYING after
         * receiving a message with {@code percent} set to 100, which can happen
         * after the pipeline completed prerolling.
         *
         * @param source the element which posted the message.
         * @param percent the percentage of buffering that has completed.
         */
        public void bufferingData(GstObject source, int percent);
    }

    /**
     * Signal sent when a new duration message is posted by an element that know
     * the duration of a stream in a specific format.
     * <p>
     * This message is received by bins and is used to calculate the total
     * duration of a pipeline.
     * <p>
     * Elements may post a duration message with a duration of
     * {@link ClockTime#NONE} to indicate that the duration has changed and the
     * cached duration should be discarded. The new duration can then be
     * retrieved via a query. The application can get the new duration with a
     * duration query.
     *
     * @see #connect(DURATION)
     * @see #disconnect(DURATION)
     */
    public static interface DURATION_CHANGED {

        /**
         * Called when a new duration message is posted on the Bus.
         *
         * @param source the element which posted the message.
         */
        public void durationChanged(GstObject source);
    }

    /**
     * This message is posted by elements that start playback of a segment as a
     * result of a segment seek.
     * <p>
     * This message is not received by the application but is used for
     * maintenance reasons in container elements.
     */
    public static interface SEGMENT_START {

        public void segmentStart(GstObject source, Format format, long position);
    }

    /**
     * Signal emitted when the pipeline has completed playback of a segment.
     * <p>
     * This message is posted by elements that finish playback of a segment as a
     * result of a segment seek. This message is received by the application
     * after all elements that posted a {@link SEGMENT_START} have posted
     * segment-done.
     *
     * @see #connect(SEGMENT_DONE)
     * @see #disconnect(SEGMENT_DONE)
     */
    public static interface SEGMENT_DONE {

        /**
         * Called when a segment-done message has been posted.
         *
         * @param source the element which posted the message.
         * @param format the format of the position being done.
         * @param position the position of the segment being done.
         */
        public void segmentDone(GstObject source, Format format, long position);
    }

    /**
     * Signal emitted by elements when they complete an ASYNC state change.
     * <p>
     * Applications will only receive this message from the top level pipeline.
     * </p>
     *
     * @see #connect(ASYNC_DONE)
     * @see #disconnect(ASYNC_DONE)
     */
    public static interface ASYNC_DONE {

        /**
         * Called when a segment-done message has been posted.
         *
         * @param source the element which posted the message.
         */
        public void asyncDone(GstObject source);
    }

    /**
     * Catch all signals emitted on the Bus.
     * <p>
     * The signal handler will be called asynchronously from the thread that
     * posted the message on the Bus.
     *
     * @see #connect(MESSAGE)
     * @see #disconnect(MESSAGE)
     */
    public static interface MESSAGE {

        /**
         * Called when a {@link Element} posts a {@link Message} on the Bus.
         *
         * @param bus the Bus the message was posted on.
         * @param message the message that was posted.
         */
        public void busMessage(Bus bus, Message message);
    }

    private static class MessageProxy<T> {

        private final MessageType type;
        private final Class<T> listenerClass;
        private final Object listener;
        private final BusCallback callback;

        MessageProxy(MessageType type, Class<T> listenerClass, T listener, BusCallback callback) {
            this.type = type;
            this.listenerClass = listenerClass;
            this.listener = listener;
            this.callback = callback;
        }

        void busMessage(final GstBusPtr bus, final GstMessagePtr msg) {
            if (type == MessageType.ANY || type.intValue() == msg.getMessageType()) {
                callback.callback(bus, msg, null);
            }
        }
    }

    private static class SyncCallback implements GstBusAPI.BusSyncHandler {

        {
            Native.setCallbackThreadInitializer(this,
                    new CallbackThreadInitializer(true,
                            Boolean.getBoolean("glib.detachCallbackThreads"),
                            "GstBus"));
        }

        @Override
        public BusSyncReply callback(final GstBusPtr busPtr, final GstMessagePtr msgPtr, Pointer userData) {
            Bus bus = Natives.objectFor(busPtr, Bus.class, true, true);
            // volatile - use local reference
            BusSyncHandler syncHandler = bus.syncHandler;
            if (syncHandler != null) {
                Message msg = Natives.objectFor(msgPtr, Message.class, true, true);
                BusSyncReply reply = syncHandler.syncMessage(msg);
                if (reply != BusSyncReply.DROP) {
                    Gst.getExecutor().execute(() -> bus.dispatchMessage(busPtr, msgPtr));
                } else {
                    // not calling dispatch message so unref here
                    GSTMINIOBJECT_API.gst_mini_object_unref(msgPtr);
                }
            } else {
                Gst.getExecutor().execute(() -> bus.dispatchMessage(busPtr, msgPtr));
            }
            return BusSyncReply.DROP;
        }
    }

}


================================================
FILE: src/org/freedesktop/gstreamer/BusSyncHandler.java
================================================
/* 
 * Copyright (c) 2019 Neil C Smith
 * Copyright (c) 2007 Wayne Meissner
 * 
 * This file is part of gstreamer-java.
 *
 * This code is free software: you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License version 3 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
 * version 3 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with this work.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.freedesktop.gstreamer;

import org.freedesktop.gstreamer.message.Message;

/**
 * A BusSyncHandler will be invoked synchronously, when a new message has been
 * injected into a {@link Bus}. This function is mostly used internally. Only
 * one sync handler can be attached to a given bus.
 *
 * @see Bus#setSyncHandler(org.freedesktop.gstreamer.BusSyncHandler)
 */
public interface BusSyncHandler {

    public BusSyncReply syncMessage(Message message);
}


================================================
FILE: src/org/freedesktop/gstreamer/BusSyncReply.java
================================================
/* 
 * Copyright (c) 2025 Neil C Smith
 * Copyright (c) 2007 Wayne Meissner
 * 
 * This file is part of gstreamer-java.
 *
 * This code is free software: you can redistribute it and/or modify it under 
 * the terms of the GNU Lesser General Public License version 3 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT 
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License 
 * version 3 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with this work.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.freedesktop.gstreamer;

import org.freedesktop.gstreamer.glib.NativeEnum;
import org.freedesktop.gstreamer.message.Message;

/**
 * The result values for a GstBusSyncHandler.
 */
public enum BusSyncReply implements NativeEnum<BusSyncReply> {
    
    /** Drop the {@link Message} */
    DROP(0),
    /** Pass the {@link Message} to the async queue */
    PASS(1),
    /** Pass {@link Message} to async queue, continue if message is handled */
    ASYNC(2);
    
    private final int value;
    
    BusSyncReply(int value) {
        this.value = value;
    }
    
    /**
     * Gets the integer value of the enum.
     * @return The integer value for this enum.
     */
    @Override
    public int intValue() {
        return value;
    }
}


================================================
FILE: src/org/freedesktop/gstreamer/Caps.java
================================================
/*
 * Copyright (c) 2025 Neil C Smith
 * Copyright (c) 2009 Levente Farkas
 * Copyright (C) 2007 Wayne Meissner
 * Copyright (C) <2003> David A. Schleef <ds@schleef.org>
 * 
 * This file is part of gstreamer-java.
 *
 * This code is free software: you can redistribute it and/or modify it under 
 * the terms of the GNU Lesser General Public License version 3 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT 
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License 
 * version 3 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with this work.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.freedesktop.gstreamer;


import org.freedesktop.gstreamer.glib.Natives;
import static org.freedesktop.gstreamer.lowlevel.GstCapsAPI.GSTCAPS_API;

/**
 * Structure describing sets of media formats
 * <p>
 * Caps (capabilities) are lightweight objects describing media types. They are
 * composed of an array of {@link Structure}.
 * <p>
 * See upstream documentation at
 * <a href="https://gstreamer.freedesktop.org/data/doc/gstreamer/stable/gstreamer/html/GstCaps.html"
 * >https://gstreamer.freedesktop.org/data/doc/gstreamer/stable/gstreamer/html/GstCaps.html</a>
 * <p>
 * Caps are exposed on {@link PadTemplate} to describe all possible types a
 * given pad can handle. They are also stored in the {@link Registry} along with
 * a description of the {@link Element}.
 * <p>
 * Caps are exposed on the element pads using the {@link Pad#getAllowedCaps() }
 * method. This method describes the possible types that the pad can handle or
 * produce at runtime.
 * <p>
 * Caps are also attached to buffers to describe the content of the data pointed
 * to by the buffer with {@link Sample#setCaps}. Caps attached to a
 * {@link Buffer} allow for format negotiation upstream and downstream.
 * <p>
 * A Caps can be constructed with the following code fragment:
 * <p>
 * <code>
 *  Caps caps = Caps.fromString("video/x-raw-rgb, bpp=32, depth=24, width=640, height=480");
 * </code>
 * <p>
 * A Caps is fixed when it has no properties with ranges or lists. Use
 * {@link #isFixed} to test for fixed caps. Only fixed caps can be set on a
 * {@link Pad} or {@link Buffer}.
 * <p>
 * Various methods exist to work with the media types such as subtracting or
 * intersecting.
 *
 * @see Structure
 */
public class Caps extends MiniObject {

    public static final String GTYPE_NAME = "GstCaps";

    /**
     * Creates a new Caps that is empty. That is, the returned Caps contains no
     * media formats.
     *
     * @see #emptyCaps
     */
    public Caps() {
        this(Natives.initializer(GSTCAPS_API.ptr_gst_caps_new_empty()));
    }

    /**
     * Construct a new Caps from a string representation.
     *
     * @param caps The string representation of the caps.
     * @see #fromString
     */
    public Caps(String caps) {
        this(Natives.initializer(GSTCAPS_API.ptr_gst_caps_from_string(caps)));
    }

    /**
     * Create a caps that is a copy of another caps.
     *
     * @param caps The caps to copy.
     * @see #copy
     */
    public Caps(Caps caps) {
        this(Natives.initializer(GSTCAPS_API.ptr_gst_caps_copy(caps)));
    }

    Caps(Initializer init) {
        super(init);
    }

    /**
     * Append the structures contained in caps to this caps object. The
     * structures in caps are not copied -- they are transferred to this caps.
     * <p>
     * If either caps is ANY, the resulting caps will be ANY.
     *
     * @param caps The Caps to append
     */
    public void append(Caps caps) {
        GSTCAPS_API.gst_caps_append(this, caps);
    }

    /**
     * Append structure to this caps. The structure is not copied; this caps
     * takes ownership, so do not use struct after calling this method.
     *
     * @param struct The structure to append.
     */
    public void append(Structure struct) {
        GSTCAPS_API.gst_caps_append_structure(this, struct);
    }

    /**
     * Create a new Caps as a copy of the this caps.
     *
     * The new Caps will be a copy of this caps, with all the internal
     * structures copied as well.
     *
     * @return The new Caps.
     */
    public Caps copy() {
        return GSTCAPS_API.gst_caps_copy(this);
    }

    @Override
    public boolean equals(Object other) {
        if (other == null || !(other instanceof Caps)) {
            return false;
        }
        return other == this || isEqual((Caps) other);
    }

    /**
     * Get a {@link Structure} contained in this caps.
     *
     * Finds the structure in @caps that has the index @index, and returns it.
     *
     * @param index The index of the structure to get.
     * @return The Structure corresponding to index.
     */
    public Structure getStructure(int index) {
        /*
         * WARNING: This function takes a const GstCaps *, but returns a
         * non-const GstStructure *.  This is for programming convenience --
         * the caller should be aware that structures inside a constant
         * #GstCaps should not be modified.
         */
        // The above means we return a Structure proxy which does not own the pointer.
        // gst_caps_get_structure is not marked as CallerOwnsReturn, so it should work
        return GSTCAPS_API.gst_caps_get_structure(this, index);
    }

    /**
     * Creates a new {@link Caps} that contains all the formats that are common
     * to both this Caps and the other Caps.
     *
     * @param other The {@link Caps} to intersect with this one.
     *
     * @return The new {@link Caps}
     */
    public Caps intersect(Caps other) {
        return GSTCAPS_API.gst_caps_intersect(this, other);
    }

    /**
     * Check if this caps is always compatible with another caps.
     * <p>
     * A given Caps structure is always compatible with another if every media
     * format that is in the first is also contained in the second. That is,
     * this caps1 is a subset of other.
     *
     * @param other The caps to test against.
     * @return true if other is always compatible with this caps.
     */
    public boolean isAlwaysCompatible(Caps other) {
        return GSTCAPS_API.gst_caps_is_always_compatible(this, other);
    }

    /**
     * Determine if this caps represents any media format.
     *
     * @return true if this caps represents any format.
     */
    public boolean isAny() {
        return GSTCAPS_API.gst_caps_is_any(this);
    }

    /**
     * Determine if this caps represents no media formats.
     *
     * @return true if this caps represents no formats.
     */
    public boolean isEmpty() {
        return GSTCAPS_API.gst_caps_is_empty(this);
    }

    /**
     * Checks if the given caps represent the same set of caps.
     * <p>
     * This function does not work reliably if optional properties for caps are
     * included on one caps and omitted on the other.
     *
     * @param other The caps to compare this caps to.
     * @return true if other caps equals this one.
     */
    public boolean isEqual(Caps other) {
        return GSTCAPS_API.gst_caps_is_equal(this, other);
    }

    /**
     * Tests if two Caps are equal. This function only works on fixed Caps.
     *
     * @param other The other caps to test against.
     * @return true if the other caps is equal to this one.
     */
    public boolean isEqualFixed(Caps other) {
        return GSTCAPS_API.gst_caps_is_equal_fixed(this, other);
    }

    /**
     * Determine if this caps is fixed.
     * <p>
     * Fixed Caps describe exactly one format, that is, they have exactly one
     * structure, and each field in the structure describes a fixed type.
     * Examples of non-fixed types are GST_TYPE_INT_RANGE and GST_TYPE_LIST.
     *
     * @return true if this caps is fixed
     */
    public boolean isFixed() {
        return GSTCAPS_API.gst_caps_is_fixed(this);
    }

    /**
     * Checks if all caps represented by this caps are also represented by
     * superset.
     * <p>
     * This function does not work reliably if optional properties for caps are
     * included on one caps and omitted on the other.
     *
     * @param superset The potentially greater Caps
     * @return true if this caps is a subset of superset
     */
    public boolean isSubset(Caps superset) {
        return GSTCAPS_API.gst_caps_is_subset(this, superset);
    }

    /**
     *
     * Returns a writable copy of this caps.
     * <p>
     * This method will invalidate the native side of this caps object, so it
     * should not be used after calling this method, and only the returned Caps
     * object should be used.
     * <p>
     *
     * @return A writable version of this caps object.
     */
    // @TODO should this take a ref ?
    public Caps makeWritable() {
        return GSTCAPS_API.gst_caps_make_writable(this);
    }

    /**
     * Normalize the Caps.
     *
     * Creates a new {@link Caps} that represents the same set of formats as
     * this Caps, but contains no lists. Each list is expanded into separate
     * {@link Structure}s
     *
     * @return The new {@link Caps}
     * @see Structure
     */
    public Caps normalize() {
//        this.ref(); // gst_caps_normalize copies "this" and drops one reference
        Natives.ref(this);
        return GSTCAPS_API.gst_caps_normalize(this);
    }

    /**
     * Remove a structure from the caps. Removes the structure with the given
     * index from the list of structures contained in this caps.
     *
     * @param index Index of the structure to remove.
     */
    public void removeStructure(int index) {
        GSTCAPS_API.gst_caps_remove_structure(this, index);
    }

    public void setInteger(String field, Integer value) {
        GSTCAPS_API.gst_caps_set_simple(this, field, value, null);
    }

    /**
     * Modifies this caps inplace into a representation that represents the same
     * set of formats, but in a simpler form. Component structures that are
     * identical are merged. Component structures that have values that can be
     * merged are also merged.
     *
     * @return The new {@link Caps}
     */
    public Caps simplify() {
//        this.ref(); // gst_caps_simplify copies "this" and drops one reference
        Natives.ref(this);
        return GSTCAPS_API.gst_caps_simplify(this);
    }

    /**
     * Get the number of structures contained in this caps.
     *
     * @return the number of structures that this caps contains
     */
    public int size() {
        return GSTCAPS_API.gst_caps_get_size(this);
    }

    /**
     * Subtracts the subtrahend Caps from this Caps.
     *
     * <note>This function does not work reliably if optional properties for
     * caps are included on one caps and omitted on the other.</note>
     *
     * @param subtrahend The {@link Caps} to subtract.
     * @return The resulting caps.
     */
    public Caps subtract(Caps subtrahend) {
        return GSTCAPS_API.gst_caps_subtract(this, subtrahend);
    }

    @Override
    public String toString() {
        return GSTCAPS_API.gst_caps_to_string(this);
    }

    /**
     * Destructively discard all but the first structure from this caps.
     *
     * Useful when fixating. This caps must be writable.
     *
     * @return truncated copy of the Caps
     */
    public Caps truncate() {
//        this.ref();
        Natives.ref(this);
        return GSTCAPS_API.gst_caps_truncate(this);
    }

    /**
     * Creates a new Caps that indicates that it is compatible with any media
     * format.
     *
     * @return The new Caps.
     */
    public static Caps anyCaps() {
        return new Caps(Natives.initializer(GSTCAPS_API.ptr_gst_caps_new_any()));
    }

    /**
     * Creates a new Caps that is empty. That is, the returned Caps contains no
     * media formats.
     *
     * @return The new Caps.
     */
    public static Caps emptyCaps() {
        return new Caps(Natives.initializer(GSTCAPS_API.ptr_gst_caps_new_empty()));
    }

    /**
     * Construct a new Caps from a string representation. Example:
     * <p>
     * <code>
     *  Caps caps = Caps.fromString("video/x-raw, format=RGB, bpp=32, depth=24, width=640, height=480");
     * </code>
     *
     * @param caps The string representation of the caps.
     * @return The new Caps.
     */
    public static Caps fromString(String caps) {
        return new Caps(Natives.initializer(GSTCAPS_API.ptr_gst_caps_from_string(caps)));
    }

    /**
     * Merge two {@link Caps} together.
     * <p>
     * Appends the structures contained in caps2 to caps1 if they are not yet
     * expressed by caps1 . The structures in caps2 are not copied -- they are
     * transferred to a writable copy of caps1 , and then caps2 is freed. If
     * either caps is ANY, the resulting caps will be ANY.
     * </p>
     *
     * @param caps1 the {@link Caps} that will take the new entries.
     * @param caps2 the {@link Caps} to merge in
     * @return merged Caps
     */
    public static Caps merge(Caps caps1, Caps caps2) {
        return GSTCAPS_API.gst_caps_merge(caps1, caps2);
    }

}


================================================
FILE: src/org/freedesktop/gstreamer/Clock.java
================================================
/* 
 * Copyright (c) 2020 Neil C Smith
 * Copyright (c) 2009 Levente Farkas
 * Copyright (c) 2007 Wayne Meissner
 * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
 *                    2000 Wim Taymans <wtay@chello.be>
 *                    2004 Wim Taymans <wim@fluendo.com>
 * 
 * This code is free software: you can redistribute it and/or modify it under 
 * the terms of the GNU Lesser General Public License version 3 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT 
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License 
 * version 3 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with this work.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.freedesktop.gstreamer;

import static org.freedesktop.gstreamer.lowlevel.GstClockAPI.GSTCLOCK_API;

/**
 * Abstract class for global clocks.
 * <p>
 * GStreamer uses a global clock to synchronize the plugins in a pipeline.
 * Different clock implementations are possible by implementing this abstract
 * base class.
 * <p>
 * The {@link Clock} returns a monotonically increasing time with the method
 * gst_clock_get_time(). Its accuracy and base time depend on the specific
 * clock implementation but time is always expressed in nanoseconds. Since the
 * baseline of the clock is undefined, the clock time returned is not
 * meaningful in itself, what matters are the deltas between two clock times.
 * The time returned by a clock is called the absolute time.
 * <p>
 * The pipeline uses the clock to calculate the stream time. Usually all
 * renderers synchronize to the global clock using the buffer timestamps, the
 * newsegment events and the element's base time, see #GstPipeline.
 * <p>
 * A clock implementation can support periodic and single shot clock
 * notifications both synchronous and asynchronous.
 * <p>
 * One first needs to create a {@link ClockID} for the periodic or single shot
 * notification using {@link #newSingleShotID} or {@link #newPeriodicID}.
 * <p>
 * To perform a blocking wait for the specific time of the {@link ClockID} use the
 * gst_clock_id_wait(). To receive a callback when the specific time is reached
 * in the clock use gst_clock_id_wait_async(). Both these calls can be
 * interrupted with the gst_clock_id_unschedule() call. If the blocking wait is
 * unscheduled a return value of GST_CLOCK_UNSCHEDULED is returned.
 * <p>
 * Periodic callbacks scheduled async will be repeatedly called automatically
 * until it is unscheduled. To schedule a sync periodic callback,
 * gst_clock_id_wait() should be called repeatedly.
 * <p>
 * The async callbacks can happen from any thread, either provided by the core
 * or from a streaming thread. The application should be prepared for this.
 * <p>
 * A {@link ClockID} that has been unscheduled cannot be used again for any wait
 * operation, a new ClockID should be created.
 * <p>
 * It is possible to perform a blocking wait on the same ClockID from
 * multiple threads. However, registering the same ClockID for multiple
 * async notifications is not possible, the callback will only be called for
 * the thread registering the entry last.
 * <p>
 * These clock operations do not operate on the stream time, so the callbacks
 * will also occur when not in {@link State#PLAYING} state as if the clock just keeps on
 * running. Some clocks however do not progress when the element that provided
 * the clock is not {@link State#PLAYING}.
 * <p>
 * When a clock has the GST_CLOCK_FLAG_CAN_SET_MASTER flag set, it can be
 * slaved to another #GstClock with the gst_clock_set_master(). The clock will
 * then automatically be synchronized to this master clock by repeatedly
 * sampling the master clock and the slave clock and recalibrating the slave
 * clock with {@link #setCalibration}. This feature is mostly useful for
 * plugins that have an internal clock but must operate with another clock
 * selected by the {@link Pipeline}.  They can track the offset and rate difference
 * of their internal clock relative to the master clock by using the
 * gst_clock_get_calibration() function. 
 * <p>
 * The master/slave synchronisation can be tuned with the "timeout", "window-size"
 * and "window-threshold" properties. The "timeout" property defines the interval
 * to sample the master clock and run the calibration functions. 
 * "window-size" defines the number of samples to use when calibrating and
 * "window-threshold" defines the minimum number of samples before the 
 * calibration is performed.
 */
public class Clock extends GstObject {
    public static final String GTYPE_NAME = "GstClock";

    @Deprecated // should be package private
    public Clock(Initializer init) {
        super(init); 
    }
    
    /**
     * Sets the accuracy of the clock. 
     * <p>
     * Some clocks have the possibility to operate with different accuracy at 
     * the expense of more resource usage. There is normally no need to change 
     * the default resolution of a clock. The resolution of a clock can only be 
     * changed if the clock has the GST_CLOCK_FLAG_CAN_SET_RESOLUTION flag set.
     *
     * @param resolution the new resolution of the clock.
     * @return the new resolution of the clock.
     */
    public long setResolution(long resolution) {
        return GSTCLOCK_API.gst_clock_set_resolution(this, resolution);
    }
    
    /**
     * Gets the accuracy of the clock. The accuracy of the clock is the granularity
     * of the values returned by {@link #getTime}.
     *
     * @return the resolution of the clock in nanoseconds.
     */
    public long getResolution() {
        return GSTCLOCK_API.gst_clock_get_resolution(this);
    }
    
    /**
     * Gets the current time of the given clock. The time is always
     * monotonically increasing and adjusted according to the current
     * offset and rate.
     *
     * Returns: the time of the clock. Or GST_CLOCK_TIME_NONE when
     * giving wrong input.
     * @return the time of the clock. Or {@link ClockTime#NONE} when
     * given incorrect input.
     */
    public long getTime() {
        return GSTCLOCK_API.gst_clock_get_time(this);
    }
    /**
     * Gets the current internal time of this clock. The time is returned
     * unadjusted for the offset and the rate.
     *
     * Thread safe.
     * 
     * @return the internal time of the clock. Or {@link ClockTime#NONE} when given wrong input.
     */
    public long getInternalTime() {
        return GSTCLOCK_API.gst_clock_get_internal_time(this);
    }
    
    /**
     * Gets the master clock that this clock is slaved to or null when the clock is
     * not slaved to any master clock.
     *
     * @return A master Clock or null when this clock is not slaved to a master
     * clock.
     */
    public Clock getMaster() {
        return GSTCLOCK_API.gst_clock_get_master(this);
    }
    
    /**
     * Set master as the master clock for this clock. This clock will be automatically
     * calibrated so that {@link #getTime} reports the same time as the
     * master clock.  
     * 
     * A clock provider that slaves its clock to a master can get the current
     * calibration values with {@link #getCalibration}.
     *
     * master can be null in which case clock will not be slaved anymore. It will
     * however keep reporting its time adjusted with the last configured rate 
     * and time offsets.
     *
     * @param master a master Clock 
     * @return true if the clock is capable of being slaved to a master clock. 
     * Trying to set a master on a clock without the CAN_SET_MASTER flag will make 
     * this function return false.
     */
    public boolean setMaster(Clock master) {
        return GSTCLOCK_API.gst_clock_set_master(this, master);
    }
    
    /**
     * Gets the internal rate and reference time of clock. See {@link #setCalibration} for more information.
     * <p>
     * internal, external, rate_num, and rate_denom can be left NULL if the caller is not interested in the values.
     *
     * Thread safe.
     * @param internal a reference internal time
     * @param external a reference external time
     * @param rateNumerator the numerator of the rate of the clock relative to its internal time
     * @param rateDenominator the denominator of the rate of the clock
     */
    @Deprecated
    public void getCalibration(long internal, long external, long rateNumerator, long rateDenominator) {
        GSTCLOCK_API.gst_clock_set_calibration(this, internal, external, rateNumerator, rateDenominator);
    }
    
    /**
     * Gets the internal rate and reference time of clock. See
     * {@link #setCalibration} for more information.
     *
     * @return calibration
     */
    public Calibration getCalibration() {
        long[] internalPtr = new long[1];
        long[] externalPtr = new long[1];
        long[] rateNumPtr = new long[1];
        long[] rateDenomPtr = new long[1];
        GSTCLOCK_API.gst_clock_get_calibration(this, internalPtr,
                externalPtr, rateNumPtr, rateDenomPtr);
        return new Calibration(internalPtr[0], externalPtr[0],
                rateNumPtr[0], rateDenomPtr[0]);
    }
    
    /**
     *  Adjusts the rate and time of this clock. A rate of 1/1 is the normal speed of
     * the clock. Values bigger than 1/1 make the clock go faster.
     * <p>
     * internal and external are calibration parameters that arrange that
     * {@link #getTime} should have been external at internal time internal.
     * This internal time should not be in the future; that is, it should be less
     * than the value of {@link #getInternalTime} when this function is called.
     * <p>
     * Subsequent calls to gst_clock_get_time() will return clock times computed as
     * follows:
     * <p>
     * <code>
     *   time = (internal_time - internal) * rateNumerator/ rateDenominator + external
     * </code>
     * <p>
     * This formula is implemented in gst_clock_adjust_unlocked(). Of course, it
     * tries to do the integer arithmetic as precisely as possible.
     * <p>
     * Note that {@link #getTime} always returns increasing values so when you
     * move the clock backwards, getTime() will report the previous value
     * until the clock catches up.
     *
     * Thread safe.
     * @param internal a reference internal time
     * @param external a reference external time
     * @param rateNumerator the numerator of the rate of the clock relative to its internal time
     * @param rateDenominator the denominator of the rate of the clock
     */
    public void setCalibration(long internal, long external, long rateNumerator, long rateDenominator) {
        GSTCLOCK_API.gst_clock_set_calibration(this, internal, external, rateNumerator, rateDenominator);
    }
    
    /**
     * Gets a {@link ClockID} from this clock to trigger a single shot
     * notification at the requested time.
     * <p>
     * Thread safe.
     * 
     * @param time The requested time
     * @return A {@link ClockID} that can be used to request the time notification.
     */
    public ClockID newSingleShotID(long time) {
        return GSTCLOCK_API.gst_clock_new_single_shot_id(this, time);
    }
    
    /**
     * Gets an ID from this clock to trigger a periodic notification.
     * The periodeic notifications will be start at time start_time and
     * will then be fired with the given interval.
     * <p>
     * Thread safe.
     * 
     * @param startTime The requested start time.
     * @param interval The requested interval.
     * @return A {@link ClockID} that can be used to request the time notification.
     */
    public ClockID newPeriodicID(long startTime, long interval) {
        return GSTCLOCK_API.gst_clock_new_periodic_id(this, startTime, interval);
    }
    
    /**
     * Data storage for clock calibration.
     */
    public static final class Calibration {
        
        private final long internal;
        private final long external;
        private final long rateNum;
        private final long rateDenom;

        private Calibration(long internal, long external, long rateNum, long rateDenom) {
            this.internal = internal;
            this.external = external;
            this.rateNum = rateNum;
            this.rateDenom = rateDenom;
        }

        /**
         * The internal time.
         * 
         * @return internal time
         */
        public long internal() {
            return internal;
        }

        /**
         * The external time.
         * 
         * @return external time
         */
        public long external() {
            return external;
        }

        /**
         * The rate numerator.
         * 
         * @return rate numerator
         */
        public long rateNum() {
            return rateNum;
        }

        /**
         * The rate denominator.
         * 
         * @return rate denominator
         */
        public long rateDenom() {
            return rateDenom;
        }

        @Override
        public int hashCode() {
            int hash = 7;
            hash = 59 * hash + (int) (this.internal ^ (this.internal >>> 32));
            hash = 59 * hash + (int) (this.external ^ (this.external >>> 32));
            hash = 59 * hash + (int) (this.rateNum ^ (this.rateNum >>> 32));
            hash = 59 * hash + (int) (this.rateDenom ^ (this.rateDenom >>> 32));
            return hash;
        }

        @Override
        public boolean equals(Object obj) {
            if (this == obj) {
                return true;
            }
            if (obj == null) {
                return false;
            }
            if (getClass() != obj.getClass()) {
                return false;
            }
            final Calibration other = (Calibration) obj;
            if (this.internal != other.internal) {
                return false;
            }
            if (this.external != other.external) {
                return false;
            }
            if (this.rateNum != other.rateNum) {
                return false;
            }
            if (this.rateDenom != other.rateDenom) {
                return false;
            }
            return true;
        }

        @Override
        public String toString() {
            return "Calibration{" + "internal=" + internal + ", external=" + external
                    + ", rateNum=" + rateNum + ", rateDenom=" + rateDenom + '}';
        }
        
        
    }
    
    
}


================================================
FILE: src/org/freedesktop/gstreamer/ClockID.java
================================================
/* 
 * Copyright (c) 2025 Neil C Smith
 * Copyright (c) 2007 Wayne Meissner
 * 
 * This file is part of gstreamer-java.
 *
 * This code is free software: you can redistribute it and/or modify it under 
 * the terms of the GNU Lesser General Public License version 3 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT 
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License 
 * version 3 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with this work.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.freedesktop.gstreamer;

import org.freedesktop.gstreamer.glib.RefCountedObject;
import org.freedesktop.gstreamer.lowlevel.GPointer;

import static org.freedesktop.gstreamer.lowlevel.GstClockAPI.GSTCLOCK_API;

/**
 * A datatype to hold the handle to an outstanding sync or async clock callback.
 */
public class ClockID extends RefCountedObject implements Comparable<ClockID> {

    ClockID(Initializer init) {
        super(new Handle(init.ptr, init.ownsHandle), init.needRef);
    }

    /**
     * Cancel an outstanding request. This can either be an outstanding async
     * notification or a pending sync notification. After this call, @id cannot
     * be used anymore to receive sync or async notifications, you need to
     * create a new #GstClockID.
     */
    public void unschedule() {
        GSTCLOCK_API.gst_clock_id_unschedule(this);
    }

    /**
     * Gets the time of the clock ID
     * <p>
     * Thread safe.
     *
     * @return The time of this clock id.
     */
    public long getTime() {
        return GSTCLOCK_API.gst_clock_id_get_time(this);
    }

    /**
     * Compares this ClockID to another.
     *
     * @param other The other ClockID to compare to
     * @return negative value if
     * {@code a < b; zero if a = b; positive value if a > b}
     */
    @Override
    public int compareTo(ClockID other) {
        return GSTCLOCK_API.gst_clock_id_compare_func(this, other);
    }

    private static final class Handle extends RefCountedObject.Handle {

        public Handle(GPointer ptr, boolean ownsHandle) {
            super(ptr, ownsHandle);
        }

        @Override
        protected void disposeNativeHandle(GPointer ptr) {
            GSTCLOCK_API.gst_clock_id_unref(ptr);
        }

        @Override
        protected void ref() {
            GSTCLOCK_API.gst_clock_id_ref(getPointer());
        }

        @Override
        protected void unref() {
            GSTCLOCK_API.gst_clock_id_unref(getPointer());
        }

    }

}


================================================
FILE: src/org/freedesktop/gstreamer/ClockReturn.java
================================================
/* 
 * Copyright (C) 2019 Neil C Smith
 * Copyright (C) 2008 Wayne Meissner
 * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
 *                    2000 Wim Taymans <wtay@chello.be>
 *                    2005 Wim Taymans <wim@fluendo.com>
 * 
 * This file is part of gstreamer-java.
 *
 * This code is free software: you can redistribute it and/or modify it under 
 * the terms of the GNU Lesser General Public License version 3 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT 
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License 
 * version 3 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with this work.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.freedesktop.gstreamer;

import org.freedesktop.gstreamer.lowlevel.annotations.DefaultEnumValue;

/**
 * The return value of a clock operation.
 */
public enum ClockReturn {
    /** The operation succeeded. */
    OK,
    /** The operation was scheduled too late. */
    EARLY,
    /** The clockID was unscheduled */
    UNSCHEDULED,
    /** The ClockID is busy */
    BUSY,
    /** A bad time was provided to a function. */
    BADTIME,
    /** An error occured */
    ERROR,
    /** Operation is not supported */
    @DefaultEnumValue
    UNSUPPORTED,
    /** The ClockID is done waiting */
    DONE
}


================================================
FILE: src/org/freedesktop/gstreamer/ClockTime.java
================================================
/* 
 * Copyright (c) 2019 Neil C Smith
 * Copyright (c) 2007 Wayne Meissner
 * 
 * This file is part of gstreamer-java.
 *
 * This code is free software: you can redistribute it and/or modify it under 
 * the terms of the GNU Lesser General Public License version 3 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT 
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License 
 * version 3 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with this work.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.freedesktop.gstreamer;

import java.util.concurrent.TimeUnit;

/**
 * Utility methods for working with clock time (ns) in GStreamer.
 */
public final class ClockTime {

    public final static long NONE = -1;
    public final static long ZERO = 0;

    
    private ClockTime() {}
    
    /**
     * Convert time in microseconds to GStreamer clocktime (nanoseconds)
     *
     * @param microseconds the microsecond value to represent.
     * @return time in nanoseconds
     */
    public static long fromMicros(long microseconds) {
        return TimeUnit.MICROSECONDS.toNanos(microseconds);
    }

    /**
     * Convert GStreamer clocktime (nanoseconds) to microseconds.
     *
     * @param clocktime nanosecond time
     * @return time in microseconds
     */
    public static long toMicros(long clocktime) {
        return TimeUnit.NANOSECONDS.toMicros(clocktime);
    }
    
    /**
     * Convert time in milliseconds to GStreamer clocktime (nanoseconds)
     *
     * @param milliseconds the millisecond value to represent.
     * @return time in nanoseconds
     */
    public static long fromMillis(long milliseconds) {
        return TimeUnit.MILLISECONDS.toNanos(milliseconds);
    }

    /**
     * Convert GStreamer clocktime (nanoseconds) to milliseconds.
     *
     * @param clocktime nanosecond time
     * @return time in milliseconds
     */
    public static long toMillis(long clocktime) {
        return TimeUnit.NANOSECONDS.toMillis(clocktime);
    }

    /**
     * Convert time in milliseconds to GStreamer clocktime (nanoseconds)
     *
     * @param seconds the seconds value to represent.
     * @return time in nanoseconds
     */
    public static long fromSeconds(long seconds) {
        return TimeUnit.SECONDS.toNanos(seconds);
    }

    /**
     * Convert GStreamer clocktime (nanoseconds) to seconds.
     *
     * @param clocktime nanosecond time
     * @return time in milliseconds
     */
    public static long toSeconds(long clocktime) {
        return TimeUnit.NANOSECONDS.toSeconds(clocktime);
    }

    /**
     * Get the hours component of the total time.
     *
     * @param clocktime GStreamer time in nanoseconds
     * @return The hours component of the total time.
     */
    public static long getHoursComponent(long clocktime) {
        return (toSeconds(clocktime) / 3600) % 24;
    }

    /**
     * Get the minutes component of the total time.
     *
     * @param clocktime GStreamer time in nanoseconds
     * @return The minutes component of the total time.
     */
    public static long getMinutesComponent(long clocktime) {
        return (toSeconds(clocktime) / 60) % 60;
    }

    /**
     * Get the seconds component of the total time.
     *
     * @param clocktime GStreamer time in nanoseconds
     * @return The seconds component of the total time.
     */
    public static long getSecondsComponent(long clocktime) {
        return toSeconds(clocktime) % 60;
    }

    /**
     * Determines if this ClockTime represents a valid time value.
     *
     * @param clocktime GStreamer time in nanoseconds
     * @return true if valid, else false
     */
    public static boolean isValid(long clocktime) {
        return clocktime != NONE;
    }

    /**
     * Returns a {@code String} representation of this {@code ClockTime}.
     *
     * @param clocktime GStreamer time in nanoseconds
     * @return a string representation of this {@code ClockTime}
     */
    public static String toString(long clocktime) {
        return String.format("%02d:%02d:%02d",
                getHoursComponent(clocktime),
                getMinutesComponent(clocktime),
                getSecondsComponent(clocktime));
    }

}


================================================
FILE: src/org/freedesktop/gstreamer/Context.java
================================================
/*
 * Copyright (c) 2025 Neil C Smith
 * Copyright (c) 2019 Christophe Lafolet
 * 
 * This file is part of gstreamer-java.
 *
 * This code is free software: you can redistribute it and/or modify it under 
 * the terms of the GNU Lesser General Public License version 3 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT 
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License 
 * version 3 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with this work.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.freedesktop.gstreamer;

import org.freedesktop.gstreamer.lowlevel.GstContextAPI;
import org.freedesktop.gstreamer.lowlevel.GstContextPtr;

/**
 * Lightweight objects to represent element contexts.
 * <p>
 * See upstream documentation at <a href=
 * "https://gstreamer.freedesktop.org/documentation/gstreamer/gstcontext.html"
 * >https://gstreamer.freedesktop.org/documentation/gstreamer/gstcontext.html</a>
 * <p>
 * Context is a container object used to store contexts like a device context, a
 * display server connection and similar concepts that should be shared between
 * multiple elements.
 * <p>
 * Applications can set a context on a complete pipeline by using
 * {@link Element#setContext(Context)}, which will then be propagated to all
 * child elements. Elements can handle these in
 * {@link Element#setContext(Context)} and merge them with the context
 * information they already have.
 * <p>
 * When an element needs a context it will do the following actions in this
 * order until one step succeeds:
 * <ol>
 * <li>Check if the element already has a context</li>
 * <li>Query downstream with GST_QUERY_CONTEXT for the context</li>
 * <li>Query upstream* with GST_QUERY_CONTEXT for the context</li>
 * <li>Post a GST_MESSAGE_NEED_CONTEXT message on the bus with the required
 * context types and afterwards check if a usable context was set now</li>
 * <li>Create a context by itself and post a GST_MESSAGE_HAVE_CONTEXT message on
 * the bus.</li>
 * </ol>
 * <p>
 * Bins will catch GST_MESSAGE_NEED_CONTEXT messages and will set any previously
 * known context on the element that asks for it if possible. Otherwise the
 * application should provide one if it can.
 * <p>
 * Contexts can be persistent. A persistent context is kept in elements when
 * they reach {@link State#NULL}, non-persistent ones will be removed. Also, a
 * non-persistent context won't override a previous persistent context set to an
 * element.
 */
public class Context extends MiniObject {

    public static final String GTYPE_NAME = "GstContext";

    private final Handle handle;

    public Context(String contextType) {
        this(contextType, true);
    }

    /**
     * Create a new context.
     */
    public Context(String context_type, boolean persistent) {
        this(new Handle(GstContextAPI.GSTCONTEXT_API.gst_context_new(context_type, persistent), true), false);
    }

    Context(Handle handle, boolean needRef) {
        super(handle, needRef);
        this.handle = handle;
    }

    Context(Initializer init) {
        this(new Handle(init.ptr.as(GstContextPtr.class, GstContextPtr::new), init.ownsHandle), init.needRef);
    }

    /**
     * Access the structure of the context.
     *
     * @return The structure of this context. The structure is still owned by this
     *         context, which means that you should not modify it and not dispose of
     *         it.
     */
    public Structure getStructure() {
        return GstContextAPI.GSTCONTEXT_API.gst_context_get_structure(handle.getPointer());
    }

    /**
     * Get a writable version of the structure.
     *
     * @return The structure of this context. The structure is still owned by the
     *         context, which means that you should not dispose of it.
     */
    public Structure getWritableStructure() {
        return GstContextAPI.GSTCONTEXT_API.gst_context_writable_structure(handle.getPointer());
    }

    /**
     * Get the type of this context.
     *
     * @return The type of this context.
     */
    public String getContextType() {
        return GstContextAPI.GSTCONTEXT_API.gst_context_get_context_type(handle.getPointer());
    }

    protected static class Handle extends MiniObject.Handle {

        public Handle(GstContextPtr ptr, boolean ownsHandle) {
            super(ptr, ownsHandle);
        }

        @Override
        protected GstContextPtr getPointer() {
            return (GstContextPtr) super.getPointer();
        }

    }

}


================================================
FILE: src/org/freedesktop/gstreamer/ControlBinding.java
================================================
/* 
 * Copyright (c) 2019 Neil C Smith
 * 
 * This file is part of gstreamer-java.
 *
 * This code is free software: you can redistribute it and/or modify it under 
 * the terms of the GNU Lesser General Public License version 3 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT 
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License 
 * version 3 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with this work.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.freedesktop.gstreamer;

import org.freedesktop.gstreamer.lowlevel.GValueAPI;
import org.freedesktop.gstreamer.lowlevel.GstControlBindingPtr;

import static org.freedesktop.gstreamer.lowlevel.GstControlBindingAPI.GSTCONTROLBINDING_API;

/**
 * Attachment for control source sources.
 * <p>
 * See upstream documentation at
 * <a href="https://gstreamer.freedesktop.org/data/doc/gstreamer/stable/gstreamer/html/GstControlBinding.html"
 * >https://gstreamer.freedesktop.org/data/doc/gstreamer/stable/gstreamer/html/GstControlBinding.html</a>
 * <p>
 */
public class ControlBinding extends GstObject {

    public static final String GTYPE_NAME = "GstControlBinding";
    
    private final Handle handle;

    protected ControlBinding(Handle handle, boolean needRef) {
        super(handle, needRef);
        this.handle = handle;
    }

    ControlBinding(Initializer init) {
        this(new Handle(
                init.ptr.as(GstControlBindingPtr.class, GstControlBindingPtr::new),
                init.ownsHandle),
                init.needRef);
    }

    /**
     * Gets the value for the given controlled property at the requested time.
     *
     * @param timestamp the time the control-change should be read from
     * @return the value of the property at the given time, or NULL if the
     * property isn't controlled
     */
    public Object getValue(long timestamp) {
        GValueAPI.GValue gValue = GSTCONTROLBINDING_API.gst_control_binding_get_value(
                handle.getPointer(), timestamp);
        return gValue == null ? null : gValue.getValue();
    }

    /**
     * Gets a number of values for the given controlled property starting at
     * the requested time.
     * <p>
     * This function is useful if one wants to e.g. draw a graph of the control
     * curve or apply a control curve sample by sample.
     * 
     * @param timestamp the time that should be processed
     * @param interval the time spacing between subsequent values
     * @param values array to fill with control values
     * @return false if the given array could not be filled
     */
    public boolean getValueArray(long timestamp, long interval, Object[] values) {
        GValueAPI.GValue[] gValues = new GValueAPI.GValue[values.length];
        boolean ok = GSTCONTROLBINDING_API.gst_control_binding_get_g_value_array(
                handle.getPointer(),
                timestamp,
                interval,
                gValues.length,
                gValues);
        if (ok) {
            for (int i = 0; i < values.length; i++) {
                values[i] = gValues[i].getValue();
            }
        }
        return ok;
    }
    
    /**
     * This function is used to disable a control binding for some time, i.e.
     * GstObject.syncValues() will do nothing.
     * 
     * @param disabled whether to disable the controller or not
     */
    public void setDisabled(boolean disabled) {
        GSTCONTROLBINDING_API.gst_control_binding_set_disabled(handle.getPointer(), disabled);
    }
    
    /**
     * Check if the control binding is disabled.
     * 
     * @return TRUE if the binding is inactive
     */
    public boolean isDisabled() {
        return GSTCONTROLBINDING_API.gst_control_binding_is_disabled(handle.getPointer());
        
    }
    

    protected static class Handle extends GstObject.Handle {

        public Handle(GstControlBindingPtr ptr, boolean ownsHandle) {
            super(ptr, ownsHandle);
        }

        @Override
        protected GstControlBindingPtr getPointer() {
            return (GstControlBindingPtr) super.getPointer();
        }

    }

}


================================================
FILE: src/org/freedesktop/gstreamer/ControlSource.java
================================================
/* 
 * Copyright (c) 2019 Neil C Smith
 * 
 * This file is part of gstreamer-java.
 *
 * This code is free software: you can redistribute it and/or modify it under 
 * the terms of the GNU Lesser General Public License version 3 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT 
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License 
 * version 3 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with this work.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.freedesktop.gstreamer;

import org.freedesktop.gstreamer.lowlevel.GstControlSourcePtr;

import static org.freedesktop.gstreamer.lowlevel.GstControlSourceAPI.GSTCONTROLSOURCE_API;

/**
 * Base class for control source sources.
 * <p>
 * See upstream documentation at
 * <a href="https://gstreamer.freedesktop.org/data/doc/gstreamer/stable/gstreamer/html/GstControlSource.html"
 * >https://gstreamer.freedesktop.org/data/doc/gstreamer/stable/gstreamer/html/GstControlSource.html</a>
 * <p>
 */
public class ControlSource extends GstObject {
    
    public static final String GTYPE_NAME = "GstControlSource";

    private final Handle handle;

    protected ControlSource(Handle handle, boolean needRef) {
        super(handle, needRef);
        this.handle = handle;
    }

    ControlSource(Initializer init) {
        this(new Handle(
                init.ptr.as(GstControlSourcePtr.class, GstControlSourcePtr::new),
                init.ownsHandle),
                init.needRef);
    }

    /**
     * Gets the value for this ControlSource at a given timestamp.
     *
     * @param timestamp the time for which the value should be returned
     * @return value
     * @throws IllegalStateException if the value could not be calculated
     */
    public double getValue(long timestamp) {
        double[] out = new double[1];
        boolean ok = GSTCONTROLSOURCE_API.gst_control_source_get_value(handle.getPointer(), timestamp, out);
        if (ok) {
            return out[0];
        } else {
            throw new IllegalStateException();
        }
    }

    /**
     * Gets an array of values for for this ControlSource. Values that are
     * undefined contain NANs.
     *
     * @param timestamp the first timestamp
     * @param interval the time steps
     * @param values array to put control-values in
     * @return true if the values were successfully calculated
     */
    public boolean getValueArray(long timestamp, long interval, double[] values) {
        return GSTCONTROLSOURCE_API.gst_control_source_get_value_array(
                handle.getPointer(),
                timestamp,
                interval,
                values.length,
                values);
    }

    /**
     * A simple structure for saving a timestamp and a value.
     * <p>
     * Equivalent to GstTimedValue.
     * <p>
     * <a href="https://gstreamer.freedesktop.org/data/doc/gstreamer/stable/gstreamer/html/GstControlSource.html#GstTimedValue"
     * >https://gstreamer.freedesktop.org/data/doc/gstreamer/stable/gstreamer/html/GstControlSource.html#GstTimedValue</a>
     *
     */
    public static final class TimedValue {

        public final long timestamp;
        public final double value;

        /**
         * Create a TimedValue wrapping the timestamp (see {@link ClockTime})
         * and corresponding value.
         *
         * @param timestamp the timestamp (GstClockTime) of the value change
         * @param value the corresponding value
         */
        public TimedValue(long timestamp, double value) {
            this.timestamp = timestamp;
            this.value = value;
        }

        @Override
        public int hashCode() {
            int hash = 7;
            hash = 37 * hash + (int) (this.timestamp ^ (this.timestamp >>> 32));
            hash = 37 * hash + (int) (Double.doubleToLongBits(this.value) ^ (Double.doubleToLongBits(this.value) >>> 32));
            return hash;
        }

        @Override
        public boolean equals(Object obj) {
            if (this == obj) {
                return true;
            }
            if (obj == null) {
                return false;
            }
            if (getClass() != obj.getClass()) {
                return false;
            }
            final TimedValue other = (TimedValue) obj;
            if (this.timestamp != other.timestamp) {
                return false;
            }
            if (Double.doubleToLongBits(this.value) != Double.doubleToLongBits(other.value)) {
                return false;
            }
            return true;
        }

        @Override
        public String toString() {
            return "TimedValue{" + "timestamp=" + timestamp + ", value=" + value + '}';
        }

    }

    protected static class Handle extends GstObject.Handle {

        public Handle(GstControlSourcePtr ptr, boolean ownsHandle) {
            super(ptr, ownsHandle);
        }

        @Override
        protected GstControlSourcePtr getPointer() {
            return (GstControlSourcePtr) super.getPointer();
        }

    }

}


================================================
FILE: src/org/freedesktop/gstreamer/DateTime.java
================================================
/* 
 * Copyright (c) 2019 Neil C Smith
 * Copyright (c) 2016 Christophe Lafolet
 * Copyright (c) 2010 Levente Farkas
 * 
 * This code is free software: you can redistribute it and/or modify it under 
 * the terms of the GNU Lesser General Public License version 3 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT 
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License 
 * version 3 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with this work.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.freedesktop.gstreamer;

import static org.freedesktop.gstreamer.lowlevel.GstDateTimeAPI.GSTDATETIME_API;

import org.freedesktop.gstreamer.glib.NativeObject;

import com.sun.jna.Pointer;
import org.freedesktop.gstreamer.lowlevel.GPointer;

/**
 */
public class DateTime extends NativeObject {

    public static final String GTYPE_NAME = "GstDateTime";

    public static DateTime createInstanceLocalEpoch(long secs) {
        return new DateTime(GSTDATETIME_API.gst_date_time_new_from_unix_epoch_local_time(secs), false, true);
    }

    DateTime(Initializer init) {
        this(new Handle(init.ptr, init.ownsHandle));
    }

    DateTime(Pointer ptr, boolean needRef, boolean ownsHandle) {
        this(new Handle(new GPointer(ptr), ownsHandle));
    }
    
    DateTime(Handle handle) {
        super(handle);
    }

    public int getYear() {
        return GSTDATETIME_API.gst_date_time_get_year(getRawPointer());
    }

    public int getMonth() {
        return GSTDATETIME_API.gst_date_time_get_month(getRawPointer());
    }

    public int getDay() {
        return GSTDATETIME_API.gst_date_time_get_day(getRawPointer());
    }

    public int getHour() {
        return GSTDATETIME_API.gst_date_time_get_hour(getRawPointer());
    }

    public int getMinute() {
        return GSTDATETIME_API.gst_date_time_get_minute(getRawPointer());
    }

    public int getSecond() {
        return GSTDATETIME_API.gst_date_time_get_second(getRawPointer());
    }

    public int getMicrosecond() {
        return GSTDATETIME_API.gst_date_time_get_microsecond(getRawPointer());
    }

    @Override
    public String toString() {
        return "" + getYear() + "-" + getMonth() + "-" + getDay() + " " + getHour() + ":" + getMinute() + ":" + getSecond() + "." + getMicrosecond();
    }

    private static final class Handle extends NativeObject.Handle {

        public Handle(GPointer ptr, boolean ownsHandle) {
            super(ptr, ownsHandle);
        }

        @Override
        protected void disposeNativeHandle(GPointer ptr) {
            GSTDATETIME_API.gst_date_time_unref(ptr.getPointer());
        }

    }

}


================================================
FILE: src/org/freedesktop/gstreamer/Element.java
================================================
/* 
 * Copyright (c) 2025 Neil C Smith
 * Copyright (c) 2019 Christophe Lafolet
 * Copyright (c) 2009 Levente Farkas
 * Copyright (C) 2007 Wayne Meissner
 * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
 *                    2004 Wim Taymans <wim@fluendo.com>
 * 
 * This file is part of gstreamer-java.
 *
 * This code is free software: you can redistribute it and/or modify it under 
 * the terms of the GNU Lesser General Public License version 3 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT 
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License 
 * version 3 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with this work.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.freedesktop.gstreamer;

import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.freedesktop.gstreamer.event.Event;
import org.freedesktop.gstreamer.event.SeekEvent;
import org.freedesktop.gstreamer.event.SeekFlags;
import org.freedesktop.gstreamer.event.SeekType;
import org.freedesktop.gstreamer.glib.NativeFlags;
import org.freedesktop.gstreamer.glib.Natives;
import org.freedesktop.gstreamer.lowlevel.GstAPI.GstCallback;
import org.freedesktop.gstreamer.lowlevel.GstContextPtr;
import org.freedesktop.gstreamer.lowlevel.GstIteratorPtr;
import org.freedesktop.gstreamer.lowlevel.GstObjectPtr;
import org.freedesktop.gstreamer.message.Message;
import org.freedesktop.gstreamer.query.Query;

import static org.freedesktop.gstreamer.lowlevel.GstElementAPI.GSTELEMENT_API;
import static org.freedesktop.gstreamer.lowlevel.GObjectAPI.GOBJECT_API;

/**
 * Abstract base class for all pipeline elements.
 * <p>
 * See upstream documentation at
 * <a href="https://gstreamer.freedesktop.org/documentation/gstreamer/gstelement.html"
 * >https://gstreamer.freedesktop.org/documentation/gstreamer/gstelement.html</a>
 * <p>
 * Element is the abstract base class needed to construct an element that can be
 * used in a GStreamer pipeline. Please refer to the plugin writers guide for
 * more information on creating Element subclasses.
 * <p>
 * The name of a Element can be retrieved with {@link #getName} and set with
 * {@link #setName}.
 * <p>
 * All elements have pads (of the type {@link Pad}). These pads link to pads on
 * other elements. {@link Buffer}s flow between these linked pads. An Element
 * has a list of {@link Pad} structures for all their input (or sink) and output
 * (or source) pads. Core and plug-in writers can add and remove pads with
 * {@link #addPad} and {@link #removePad}.
 * <p>
 * Elements can be linked through their pads. If the link is straightforward,
 * use the {@link #link} convenience function to link two elements, or
 * {@link #linkMany} for more elements in a row.
 * <p>
 * For finer control, use {@link #linkPads} and {@link #linkPadsFiltered} to
 * specify the pads to link on each element by name.
 * <p>
 * Each element has a state (see {@link State}). You can get and set the state
 * of an element with {@link #getState} and {@link #setState}.
 *
 */
public class Element extends GstObject {

    public static final String GTYPE_NAME = "GstElement";

    /**
     * Creates a new instance of Element. This constructor is used internally.
     *
     * @param init internal initialization data.
     */
    protected Element(Initializer init) {
        super(init);
    }

    Element(Handle handle, boolean needRef) {
        super(handle, needRef);
    }

    /**
     * Creates an instance of the required element type, but does not wrap it in
     * a proxy.
     *
     * @param factoryName The name of the factory to use to produce the Element
     * @param elementName The name to assign to the created Element
     * @return a raw element.
     */
    protected static Initializer makeRawElement(String factoryName, String elementName) {
        return Natives.initializer(ElementFactory.makeRawElement(factoryName, elementName));
    }

    /**
     * Links this element to another element. The link must be from source to
     * destination; the other direction will not be tried.
     * <p>
     * The function looks for existing pads that aren't linked yet. It will
     * request new pads if necessary. Such pads need to be released manually
     * when unlinking. If multiple links are possible, only one is established.
     * <p>
     * Make sure you have added your elements to a bin or pipeline with
     * {@link Bin#add} or {@link Bin#addMany} before trying to link them.
     * <p>
     * See {@link #linkPadsFiltered} if you need more control about which pads
     * are selected for linking.
     *
     * @param dest The element containing the destination pad.
     * @return true if the elements could be linked, false otherwise.
     */
    public boolean link(Element dest) {
        return GSTELEMENT_API.gst_element_link(this, dest);
    }

    /**
     * Links this element to another element using the given caps as filtercaps.
     * The link must be from source to destination; the other direction will not
     * be tried.
     * <p>
     * The function looks for existing pads that aren't linked yet. It will
     * request new pads if necessary. Such pads need to be released manually
     * when unlinking. If multiple links are possible, only one is established.
     * <p>
     * Make sure you have added your elements to a bin or pipeline with
     * {@link Bin#add} or {@link Bin#addMany} before trying to link them.
     * <p>
     * See {@link #linkPadsFiltered} if you need more control about which pads
     * are selected for linking.
     *
     * @param dest The element containing the destination pad.
     * @param filter The {@link Caps} to filter the link, or Null for no filter.
     * @return true if the elements could be linked, false otherwise.
     */
    public boolean linkFiltered(Element dest, Caps filter) {
        return GSTELEMENT_API.gst_element_link_filtered(this, dest, filter);
    }

    /**
     * Unlinks all source pads of this source element with all sink pads of the
     * sink element to which they are linked.
     * <p>
     * If the link has been made using {@link #link}, it could have created an
     * requestpad, which has to be released using
     * gst_element_release_request_pad().
     *
     * @param dest The sink Element to unlink.
     */
    public void unlink(Element dest) {
        GSTELEMENT_API.gst_element_unlink(this, dest);
    }

    /**
     * Tests if the Element is currently playing.
     *
     * @return true if the Element is currently playing
     */
    public boolean isPlaying() {
        return getState() == State.PLAYING;
    }

    /**
     * Tells the Element to start playing the media stream. Equivalent to
     * calling {@link #setState(org.freedesktop.gstreamer.State)} with
     * {@link State#PLAYING}.
     *
     * @return the status of the element's state change.
     */
    public StateChangeReturn play() {
        return setState(State.PLAYING);
    }

    /**
     * Tells the Element to set ready the media stream. Equivalent to calling
     * {@link #setState(org.freedesktop.gstreamer.State)} with
     * {@link State#READY}.
     *
     * @return the status of the element's state change.
     */
    public StateChangeReturn ready() {
        return setState(State.READY);
    }

    /**
     * Tells the Element to pause playing the media stream. Equivalent to
     * calling {@link #setState(org.freedesktop.gstreamer.State)} with
     * {@link State#PAUSED}.
     *
     * @return the status of the element's state change.
     */
    public StateChangeReturn pause() {
        return setState(State.PAUSED);
    }

    /**
     * Tells the Element to stop playing the media stream. Equivalent to calling
     * {@link #setState(org.freedesktop.gstreamer.State)} with
     * {@link State#NULL}.
     *
     * @return the status of the element's state change.
     */
    public StateChangeReturn stop() {
        return setState(State.NULL);
    }

    /**
     * Sets the state of the element.
     * <p>
     * This method will try to set the requested state by going through all the
     * intermediary states.
     * <p>
     * This function can return {@link StateChangeReturn#ASYNC}, in which case
     * the element will perform the remainder of the state change asynchronously
     * in another thread.
     * <p>
     * An application can use {@link #getState} to wait for the completion of
     * the state change or it can wait for a state change message on the bus.
     *
     * @param state the element's new {@link State}.
     * @return the status of the element's state change.
     */
    public StateChangeReturn setState(State state) {
        return GSTELEMENT_API.gst_element_set_state(this, state);
    }

    /**
     * Locks the state of an element, so state changes of the parent don't
     * affect this element anymore.
     *
     * @param locked_state true to lock the element's {@link State}.
     * @return true if the state was changed, false if bad parameters were given
     * or the elements state-locking needed no change.
     */
    public boolean setLockedState(boolean locked_state) {
        return GSTELEMENT_API.gst_element_set_locked_state(this, locked_state);
    }

    /**
     * Gets the state of the element.
     * <p>
     * This method will wait until any async state change has completed.
     *
     * @return The {@link State} the Element is currently in.
     */
    public State getState() {
        return getState(-1);
    }

    /**
     * Gets the state of the element.
     * <p>
     * For elements that performed an ASYNC state change, as reported by
     * {@link #setState(org.freedesktop.gstreamer.State)}, this function will
     * block up to the specified timeout value for the state change to complete.
     *
     * @param timeout the amount of time to wait.
     * @param units the units of the <tt>timeout</tt>.
     * @return The {@link State} the Element is currently in.
     *
     */
    public State getState(long timeout, TimeUnit units) {
        State[] state = new State[1];
        GSTELEMENT_API.gst_element_get_state(this, state, null, units.toNanos(timeout));
        return state[0];
    }

    /**
     * Gets the state of the element.
     * <p>
     * For elements that performed an ASYNC state change, as reported by
     * {@link #setState(org.freedesktop.gstreamer.State)}, this function will
     * block up to the specified timeout value for the state change to complete.
     *
     * @param timeout The amount of time in nanoseconds to wait.
     * @return The {@link State} the Element is currently in.
     *
     */
    public State getState(long timeout) {
        State[] state = new State[1];
        GSTELEMENT_API.gst_element_get_state(this, state, null, timeout);
        return state[0];
    }

    /**
     * Gets the state of the element.
     * <p>
     * For elements that performed an ASYNC state change, as reported by
     * {@link #setState(org.freedesktop.gstreamer.State)}, this function will
     * block up to the specified timeout value for the state change to complete.
     *
     * @param timeout The amount of time in nanoseconds to wait.
     * @param states an array to store the states in. Must be of sufficient size
     * to hold two elements.
     */
    public void getState(long timeout, State[] states) {
        State[] state = new State[1];
        State[] pending = new State[1];
        GSTELEMENT_API.gst_element_get_state(this, state, pending, timeout);
        states[0] = state[0];
        states[1] = pending[0];
    }

    /**
     * Tries to change the state of the element to the same as its parent. If
     * this function returns false, the state of element is undefined.
     *
     * @return true, if the element's state could be synced to the parent's
     * state. MT safe.
     */
    public boolean syncStateWithParent() {
        return GSTELEMENT_API.gst_element_sync_state_with_parent(this);
    }

    /**
     * Sets the {@link Caps} on this Element.
     *
     * @param caps the new Caps to set.
     */
    public void setCaps(Caps caps) {
        GOBJECT_API.g_object_set(this, "caps", caps);
    }

    /**
     * Retrieves a pad from the element by name. This version only retrieves
     * already-existing (i.e. 'static') pads.
     *
     * @param padname The name of the {@link Pad} to get.
     * @return The requested {@link Pad} if found, otherwise null.
     */
    public Pad getStaticPad(String padname) {
        return GSTELEMENT_API.gst_element_get_static_pad(this, padname);
    }

    /**
     * Retrieves a list of the element's pads.
     *
     * @return the List of {@link Pad}s.
     */
    public List<Pad> getPads() {
        return padList(GSTELEMENT_API.gst_element_iterate_pads(this));
    }

    /**
     * Retrieves a list of the element's source pads.
     *
     * @return the List of {@link Pad}s.
     */
    public List<Pad> getSrcPads() {
        return padList(GSTELEMENT_API.gst_element_iterate_src_pads(this));
    }

    /**
     * Retrieves a list of the element's sink pads.
     *
     * @return the List of {@link Pad}s.
     */
    public List<Pad> getSinkPads() {
        return padList(GSTELEMENT_API.gst_element_iterate_sink_pads(this));
    }

    private List<Pad> padList(GstIteratorPtr iter) {
        return GstIterator.asList(iter, Pad.class);
    }

    /**
     * Adds a {@link Pad} (link point) to the Element. The Pad's parent will be
     * set to this element.
     * <p>
     * Pads are not automatically activated so elements should perform the
     * needed steps to activate the pad in case this pad is added in the PAUSED
     * or PLAYING state. See {@link Pad#setActive} for more information about
     * activating pads.
     * <p>
     * This function will emit the {@link PAD_ADDED} signal on the element.
     *
     * @param pad The {@link Pad} to add.
     * @return true if the pad could be added. This function can fail when a pad
     * with the same name already existed or the pad already had another parent.
     */
    public boolean addPad(Pad pad) {
        return GSTELEMENT_API.gst_element_add_pad(this, pad);
    }

    /**
     * Retrieves a pad from the element by name. This version only retrieves
     * request pads. The pad must be released with {@link #releaseRequestPad}.
     *
     * @param name the name of the request {@link Pad} to retrieve.
     * @return the requested Pad if found, otherwise <tt>null</tt>. Release
     * using {@link #releaseRequestPad} after usage.
     */
    public Pad getRequestPad(String name) {
        return GSTELEMENT_API.gst_element_get_request_pad(this, name);
    }

    /**
     * Frees the previously requested pad obtained via {@link #getRequestPad}.
     *
     * @param pad the pad to release.
     */
    public void releaseRequestPad(Pad pad) {
        GSTELEMENT_API.gst_element_release_request_pad(this, pad);
    }

    /**
     * Remove a {@link Pad} from the element.
     * <p>
     * This method is used by plugin developers and should not be used by
     * applications. Pads that were dynamically requested from elements with
     * {@link #getRequestPad} should be released with the
     * {@link #releaseRequestPad} function instead.
     * <p>
     * Pads are not automatically deactivated so elements should perform the
     * needed steps to deactivate the pad in case this pad is removed in the
     * PAUSED or PLAYING state. See {@link Pad#setActive} for more information
     * about deactivating pads.
     * <p>
     * This function will emit the {@link PAD_REMOVED} signal on the element.
     *
     * @param pad The {@link Pad} to remove.
     * @return true if the pad could be removed. Can return false if the pad
     * does not belong to the provided element.
     */
    public boolean removePad(Pad pad) {
        return GSTELEMENT_API.gst_element_remove_pad(this, pad);
    }

    /**
     * Retrieves the factory that was used to create this element.
     *
     * @return the {@link ElementFactory} used for creating this element.
     */
    public ElementFactory getFactory() {
        return GSTELEMENT_API.gst_element_get_factory(this);
    }

    /**
     * Get the bus of the element. Note that only a {@link Pipeline} will
     * provide a bus for the application.
     *
     * @return the element's {@link Bus}
     */
    public Bus getBus() {
        return GSTELEMENT_API.gst_element_get_bus(this);
    }

    /**
     * Sends an event to an element.
     * <p>
     * If the element doesn't implement an event handler, the event will be
     * pushed on a random linked sink pad for upstream events or a random linked
     * source pad for downstream events.
     *
     * @param ev The {@link Event} to send.
     * @return true if the event was handled.
     */
    public boolean sendEvent(Event ev) {
        return GSTELEMENT_API.gst_element_send_event(this, ev);
    }

    /**
     * Signal emitted when an {@link Pad} is added to this element.
     *
     * @see #connect(PAD_ADDED)
     * @see #disconnect(PAD_ADDED)
     */
    public static interface PAD_ADDED {

        /**
         * Called when a new {@link Pad} is added to an Element.
         *
         * @param element the element the pad was added to.
         * @param pad the pad which was added.
         */
        public void padAdded(Element element, Pad pad);
    }

    /**
     * Signal emitted when an {@link Pad} is removed from this element.
     *
     * @see #connect(PAD_REMOVED)
     * @see #disconnect(PAD_REMOVED)
     */
    public static interface PAD_REMOVED {

        /**
         * Called when a new {@link Pad} is removed from an Element.
         *
         * @param element the element the pad was removed from.
         * @param pad the pad which was removed.
         */
        public void padRemoved(Element element, Pad pad);
    }

    /**
     * Signal emitted when this element ceases to generated dynamic pads.
     *
     * @see #connect(NO_MORE_PADS)
     * @see #disconnect(NO_MORE_PADS)
     */
    public static interface NO_MORE_PADS {

        /**
         * Called when an element ceases to generated dynamic pads.
         *
         * @param element the element which posted this message.
         */
        public void noMorePads(Element element);
    }

    /**
     * Add a listener for the <code>pad-added</code> signal
     *
     * @param listener Listener to be called when a {@link Pad} is added to the
     * element.
     */
    public void connect(final PAD_ADDED listener) {
        connect(PAD_ADDED.class, listener, new GstCallback() {
            @SuppressWarnings("unused")
            public void callback(Element elem, Pad pad) {
                listener.padAdded(elem, pad);
            }
        });
    }

    /**
     * Remove a listener for the <code>pad-added</code> signal
     *
     * @param listener The listener that was previously added.
     */
    public void disconnect(PAD_ADDED listener) {
        disconnect(PAD_ADDED.class, listener);
    }

    /**
     * Add a listener for the <code>pad-added</code> signal
     *
     * @param listener Listener to be called when a {@link Pad} is removed from
     * the element.
     */
    public void connect(final PAD_REMOVED listener) {
        connect(PAD_REMOVED.class, listener, new GstCallback() {
            @SuppressWarnings("unused")
            public void callback(Element elem, Pad pad) {
                listener.padRemoved(elem, pad);
            }
        });
    }

    /**
     * Remove a listener for the <code>pad-removed</code> signal
     *
     * @param listener The listener that was previously added.
     */
    public void disconnect(PAD_REMOVED listener) {
        disconnect(PAD_REMOVED.class, listener);
    }

    /**
     * Add a listener for the <code>no-more-pads</code> signal
     *
     * @param listener Listener to be called when the element has finished
     * generating dynamic pads.
     */
    public void connect(final NO_MORE_PADS listener) {
        connect(NO_MORE_PADS.class, listener, new GstCallback() {
            @SuppressWarnings("unused")
            public void callback(Element elem) {
                listener.noMorePads(elem);
            }
        });
    }

    /**
     * Remove a listener for the <code>no-more-pads</code> signal
     *
     * @param listener The listener that was previously added.
     */
    public void disconnect(NO_MORE_PADS listener) {
        disconnect(NO_MORE_PADS.class, listener);
    }

    /**
     * Link together a list of elements.
     * <p>
     * Make sure you have added your elements to a bin or pipeline with
     * {@link Bin#add} or {@link Bin#addMany} before trying to link them.
     *
     * @param elements The list of elements to link together.
     * @return true if all elements successfully linked.
     */
    public static boolean linkMany(Element... elements) {
        return GSTELEMENT_API.gst_element_link_many(elements);
    }

    /**
     * Unlink a list of elements.
     *
     * @param elements The list of elements to link together
     *
     */
    public static void unlinkMany(Element... elements) {
        GSTELEMENT_API.gst_element_unlink_many(elements);
    }

    /**
     * Link together source and destination pads of two elements.
     *
     * A side effect is that if one of the pads has no parent, it becomes a
     * child of the parent of the other element. If they have different parent
Download .txt
gitextract_bvcbp9wz/

├── .github/
│   ├── FUNDING.yml
│   └── workflows/
│       └── maven.yml
├── .gitignore
├── .mvn/
│   └── wrapper/
│       └── maven-wrapper.properties
├── LICENSE.md
├── README.md
├── mvnw
├── mvnw.cmd
├── nbactions.xml
├── pom.xml
├── src/
│   └── org/
│       └── freedesktop/
│           └── gstreamer/
│               ├── Bin.java
│               ├── Buffer.java
│               ├── BufferFlags.java
│               ├── BufferPool.java
│               ├── Bus.java
│               ├── BusSyncHandler.java
│               ├── BusSyncReply.java
│               ├── Caps.java
│               ├── Clock.java
│               ├── ClockID.java
│               ├── ClockReturn.java
│               ├── ClockTime.java
│               ├── Context.java
│               ├── ControlBinding.java
│               ├── ControlSource.java
│               ├── DateTime.java
│               ├── Element.java
│               ├── ElementFactory.java
│               ├── FlowReturn.java
│               ├── Format.java
│               ├── Fraction.java
│               ├── GhostPad.java
│               ├── Gst.java
│               ├── GstException.java
│               ├── GstIterator.java
│               ├── GstObject.java
│               ├── Meta.java
│               ├── MetaFlags.java
│               ├── MiniObject.java
│               ├── MiniObjectFlags.java
│               ├── Pad.java
│               ├── PadDirection.java
│               ├── PadLinkException.java
│               ├── PadLinkReturn.java
│               ├── PadMode.java
│               ├── PadPresence.java
│               ├── PadProbeInfo.java
│               ├── PadProbeReturn.java
│               ├── PadProbeType.java
│               ├── PadTemplate.java
│               ├── Pipeline.java
│               ├── Plugin.java
│               ├── PluginFeature.java
│               ├── Promise.java
│               ├── PromiseResult.java
│               ├── Range.java
│               ├── Registry.java
│               ├── SDPMessage.java
│               ├── SDPResult.java
│               ├── Sample.java
│               ├── Segment.java
│               ├── SegmentFlags.java
│               ├── State.java
│               ├── StateChangeReturn.java
│               ├── StaticPadTemplate.java
│               ├── Structure.java
│               ├── Tag.java
│               ├── TagFlag.java
│               ├── TagList.java
│               ├── TagMergeMode.java
│               ├── Version.java
│               ├── controller/
│               │   ├── ARGBControlBinding.java
│               │   ├── Controllers.java
│               │   ├── DirectControlBinding.java
│               │   ├── InterpolationControlSource.java
│               │   ├── InterpolationMode.java
│               │   ├── LFOControlSource.java
│               │   ├── LFOWaveform.java
│               │   ├── ProxyControlBinding.java
│               │   ├── TimedValueControlSource.java
│               │   └── TriggerControlSource.java
│               ├── device/
│               │   ├── Device.java
│               │   ├── DeviceMonitor.java
│               │   ├── DeviceProvider.java
│               │   └── DeviceProviderFactory.java
│               ├── elements/
│               │   ├── AppSink.java
│               │   ├── AppSrc.java
│               │   ├── BaseSink.java
│               │   ├── BaseSrc.java
│               │   ├── BaseTransform.java
│               │   ├── DecodeBin.java
│               │   ├── Elements.java
│               │   ├── PlayBin.java
│               │   ├── PlayFlags.java
│               │   └── URIDecodeBin.java
│               ├── event/
│               │   ├── BufferSizeEvent.java
│               │   ├── CapsEvent.java
│               │   ├── EOSEvent.java
│               │   ├── Event.java
│               │   ├── EventType.java
│               │   ├── FlushStartEvent.java
│               │   ├── FlushStopEvent.java
│               │   ├── LatencyEvent.java
│               │   ├── NavigationEvent.java
│               │   ├── QOSEvent.java
│               │   ├── QOSType.java
│               │   ├── ReconfigureEvent.java
│               │   ├── SeekEvent.java
│               │   ├── SeekFlags.java
│               │   ├── SeekType.java
│               │   ├── SegmentEvent.java
│               │   ├── StepEvent.java
│               │   ├── StreamStartEvent.java
│               │   └── TagEvent.java
│               ├── glib/
│               │   ├── GCancellable.java
│               │   ├── GDate.java
│               │   ├── GError.java
│               │   ├── GInetAddress.java
│               │   ├── GInetSocketAddress.java
│               │   ├── GLib.java
│               │   ├── GLibException.java
│               │   ├── GMainContext.java
│               │   ├── GObject.java
│               │   ├── GQuark.java
│               │   ├── GSocket.java
│               │   ├── GSocketAddress.java
│               │   ├── GSocketFamily.java
│               │   ├── GSocketProtocol.java
│               │   ├── GSocketType.java
│               │   ├── GSource.java
│               │   ├── MainContextExecutorService.java
│               │   ├── NativeEnum.java
│               │   ├── NativeFlags.java
│               │   ├── NativeObject.java
│               │   ├── Natives.java
│               │   └── RefCountedObject.java
│               ├── interfaces/
│               │   ├── ColorBalance.java
│               │   ├── ColorBalanceChannel.java
│               │   ├── GstInterface.java
│               │   ├── Navigation.java
│               │   ├── VideoOrientation.java
│               │   └── VideoOverlay.java
│               ├── lowlevel/
│               │   ├── AppAPI.java
│               │   ├── BaseSinkAPI.java
│               │   ├── BaseSrcAPI.java
│               │   ├── BaseTransformAPI.java
│               │   ├── EnumMapper.java
│               │   ├── GBoolean.java
│               │   ├── GFunctionMapper.java
│               │   ├── GNative.java
│               │   ├── GObjectAPI.java
│               │   ├── GObjectPtr.java
│               │   ├── GPointer.java
│               │   ├── GSignalAPI.java
│               │   ├── GType.java
│               │   ├── GTypeMapper.java
│               │   ├── GTypedPtr.java
│               │   ├── GValueAPI.java
│               │   ├── GValueStruct.java
│               │   ├── GioAPI.java
│               │   ├── GlibAPI.java
│               │   ├── GstAPI.java
│               │   ├── GstARGBControlBindingPtr.java
│               │   ├── GstBinAPI.java
│               │   ├── GstBufferAPI.java
│               │   ├── GstBufferPoolAPI.java
│               │   ├── GstBusAPI.java
│               │   ├── GstBusPtr.java
│               │   ├── GstCapsAPI.java
│               │   ├── GstClockAPI.java
│               │   ├── GstColorBalanceAPI.java
│               │   ├── GstContextAPI.java
│               │   ├── GstContextPtr.java
│               │   ├── GstControlBindingAPI.java
│               │   ├── GstControlBindingPtr.java
│               │   ├── GstControlSourceAPI.java
│               │   ├── GstControlSourcePtr.java
│               │   ├── GstControllerAPI.java
│               │   ├── GstDateTimeAPI.java
│               │   ├── GstDeviceAPI.java
│               │   ├── GstDeviceMonitorAPI.java
│               │   ├── GstDeviceProviderAPI.java
│               │   ├── GstDeviceProviderFactoryAPI.java
│               │   ├── GstDirectControlBindingPtr.java
│               │   ├── GstElementAPI.java
│               │   ├── GstElementFactoryAPI.java
│               │   ├── GstEventAPI.java
│               │   ├── GstGhostPadAPI.java
│               │   ├── GstInterpolationControlSourceAPI.java
│               │   ├── GstInterpolationControlSourcePtr.java
│               │   ├── GstIteratorAPI.java
│               │   ├── GstIteratorPtr.java
│               │   ├── GstLFOControlSourcePtr.java
│               │   ├── GstMessageAPI.java
│               │   ├── GstMessagePtr.java
│               │   ├── GstMetaAPI.java
│               │   ├── GstMetaPtr.java
│               │   ├── GstMiniObjectAPI.java
│               │   ├── GstMiniObjectPtr.java
│               │   ├── GstNative.java
│               │   ├── GstNavigationAPI.java
│               │   ├── GstObjectAPI.java
│               │   ├── GstObjectPtr.java
│               │   ├── GstPadAPI.java
│               │   ├── GstPadProbeInfo.java
│               │   ├── GstPadPtr.java
│               │   ├── GstPadTemplateAPI.java
│               │   ├── GstParseAPI.java
│               │   ├── GstPipelineAPI.java
│               │   ├── GstPluginAPI.java
│               │   ├── GstPluginFeatureAPI.java
│               │   ├── GstPromiseAPI.java
│               │   ├── GstProxyControlBindingPtr.java
│               │   ├── GstQueryAPI.java
│               │   ├── GstRegistryAPI.java
│               │   ├── GstSDPMessageAPI.java
│               │   ├── GstSampleAPI.java
│               │   ├── GstStructureAPI.java
│               │   ├── GstStructurePtr.java
│               │   ├── GstTagAPI.java
│               │   ├── GstTagListAPI.java
│               │   ├── GstTimedValueControlSourcePtr.java
│               │   ├── GstTriggerControlSourcePtr.java
│               │   ├── GstTypes.java
│               │   ├── GstValueAPI.java
│               │   ├── GstVideoAPI.java
│               │   ├── GstVideoOrientationAPI.java
│               │   ├── GstVideoOverlayAPI.java
│               │   ├── GstWebRTCSessionDescriptionAPI.java
│               │   ├── IntPtr.java
│               │   ├── MainLoop.java
│               │   ├── README
│               │   ├── ReferenceManager.java
│               │   └── annotations/
│               │       ├── CallerOwnsReturn.java
│               │       ├── Const.java
│               │       ├── ConstField.java
│               │       ├── ConstReturn.java
│               │       ├── DefaultEnumValue.java
│               │       ├── FreeReturnValue.java
│               │       ├── HasSubtype.java
│               │       ├── IncRef.java
│               │       └── Invalidate.java
│               ├── message/
│               │   ├── BufferingMessage.java
│               │   ├── DurationChangedMessage.java
│               │   ├── EOSMessage.java
│               │   ├── ErrorMessage.java
│               │   ├── GErrorMessage.java
│               │   ├── InfoMessage.java
│               │   ├── LatencyMessage.java
│               │   ├── Message.java
│               │   ├── MessageType.java
│               │   ├── NeedContextMessage.java
│               │   ├── SegmentDoneMessage.java
│               │   ├── StateChangedMessage.java
│               │   ├── TagMessage.java
│               │   └── WarningMessage.java
│               ├── query/
│               │   ├── AllocationQuery.java
│               │   ├── ConvertQuery.java
│               │   ├── DurationQuery.java
│               │   ├── FormatsQuery.java
│               │   ├── LatencyQuery.java
│               │   ├── PositionQuery.java
│               │   ├── Query.java
│               │   ├── QueryType.java
│               │   ├── SeekingQuery.java
│               │   └── SegmentQuery.java
│               ├── video/
│               │   ├── Video.java
│               │   ├── VideoTimeCode.java
│               │   ├── VideoTimeCodeConfig.java
│               │   ├── VideoTimeCodeFlags.java
│               │   └── VideoTimeCodeMeta.java
│               └── webrtc/
│                   ├── WebRTC.java
│                   ├── WebRTCBin.java
│                   ├── WebRTCICEGatheringState.java
│                   ├── WebRTCPeerConnectionState.java
│                   ├── WebRTCSDPType.java
│                   └── WebRTCSessionDescription.java
└── test/
    └── org/
        └── freedesktop/
            └── gstreamer/
                ├── BinTest.java
                ├── BufferFieldsTest.java
                ├── BufferProbeTester.java
                ├── BusTest.java
                ├── CapsTest.java
                ├── ClockTest.java
                ├── ClockTimeTest.java
                ├── ContextTest.java
                ├── ElementFactoryTest.java
                ├── ElementTest.java
                ├── EnumTest.java
                ├── ExecutorServiceTest.java
                ├── GCTracker.java
                ├── GLibTest.java
                ├── GarbageCollectionEDTTest.java
                ├── GarbageCollectionTest.java
                ├── GhostPadTest.java
                ├── GobjectSubclassTest.java
                ├── GstTypesTest.java
                ├── InitTest.java
                ├── MessageTest.java
                ├── PadProbeTypeTest.java
                ├── PadTemplateTest.java
                ├── PadTest.java
                ├── PipelineTest.java
                ├── PluginFeatureTest.java
                ├── PluginTest.java
                ├── ProbeTester.java
                ├── PromiseTest.java
                ├── PropertyTypeTest.java
                ├── QueryTest.java
                ├── RegistryTest.java
                ├── SampleTest.java
                ├── SampleTester.java
                ├── StreamInfoTest.java
                ├── StructureTest.java
                ├── TestPipe.java
                ├── WebRTCBinTest.java
                ├── controller/
                │   ├── InterpolationControlSourceTest.java
                │   └── TriggerControlSourceTest.java
                ├── elements/
                │   └── PlayBinTest.java
                ├── event/
                │   └── EventTest.java
                ├── lowlevel/
                │   ├── GValueTest.java
                │   ├── LowLevelStructureTest.java
                │   └── ReferenceManagerTest.java
                ├── util/
                │   └── TestAssumptions.java
                └── video/
                    ├── VideoCropMetaTest.java
                    ├── VideoTimeCodeConfigTest.java
                    ├── VideoTimeCodeFlagsTest.java
                    ├── VideoTimeCodeMetaTest.java
                    └── VideoTimeCodeTest.java
Download .txt
Showing preview only (339K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3911 symbols across 307 files)

FILE: src/org/freedesktop/gstreamer/Bin.java
  class Bin (line 68) | public class Bin extends Element {
    method Bin (line 73) | protected Bin(Initializer init) {
    method Bin (line 77) | Bin(Handle handle, boolean needRef) {
    method Bin (line 84) | public Bin() {
    method Bin (line 93) | public Bin(String name) {
    method add (line 110) | public boolean add(Element element) {
    method addMany (line 120) | public void addMany(Element... elements) {
    method remove (line 135) | public boolean remove(Element element) {
    method removeMany (line 144) | public void removeMany(Element... elements) {
    method elementList (line 148) | private List<Element> elementList(GstIteratorPtr iter) {
    method getElements (line 157) | public List<Element> getElements() {
    method getElementsSorted (line 168) | public List<Element> getElementsSorted() {
    method getElementsRecursive (line 182) | public List<Element> getElementsRecursive() {
    method getSinks (line 191) | public List<Element> getSinks() {
    method getSources (line 200) | public List<Element> getSources() {
    method getElementByName (line 211) | public Element getElementByName(String name) {
    method getElementByNameRecurseUp (line 222) | public Element getElementByNameRecurseUp(String name) {
    method debugToDotFile (line 249) | public void debugToDotFile(EnumSet<DebugGraphDetails> details, String ...
    method debugToDotFileWithTS (line 271) | public void debugToDotFileWithTS(EnumSet<DebugGraphDetails> details, S...
    type ELEMENT_ADDED (line 282) | public static interface ELEMENT_ADDED {
      method elementAdded (line 290) | public void elementAdded(Bin bin, Element element);
    method connect (line 299) | public void connect(final ELEMENT_ADDED listener) {
    method disconnect (line 313) | public void disconnect(ELEMENT_ADDED listener) {
    type ELEMENT_REMOVED (line 323) | public static interface ELEMENT_REMOVED {
      method elementRemoved (line 331) | public void elementRemoved(Bin bin, Element element);
    method connect (line 340) | public void connect(final ELEMENT_REMOVED listener) {
    method disconnect (line 354) | public void disconnect(ELEMENT_REMOVED listener) {
    type DEEP_ELEMENT_ADDED (line 365) | @Gst.Since(minor = 10)
      method elementAdded (line 377) | public void elementAdded(Bin bin, Bin sub_bin, Element element);
    method connect (line 386) | @Gst.Since(minor = 10)
    method disconnect (line 402) | @Gst.Since(minor = 10)
    type DEEP_ELEMENT_REMOVED (line 414) | @Gst.Since(minor = 10)
      method elementRemoved (line 426) | public void elementRemoved(Bin bin, Bin sub_bin, Element element);
    method connect (line 436) | @Gst.Since(minor = 10)
    method disconnect (line 452) | @Gst.Since(minor = 10)
    type DO_LATENCY (line 463) | public static interface DO_LATENCY {
      method doLatency (line 470) | public void doLatency(Bin bin);
    method connect (line 479) | public void connect(final DO_LATENCY listener) {
    method disconnect (line 493) | public void disconnect(DO_LATENCY listener) {
    type DebugGraphDetails (line 501) | public static enum DebugGraphDetails implements NativeFlags<DebugGraph...
      method DebugGraphDetails (line 528) | private DebugGraphDetails(int value) {
      method intValue (line 532) | @Override
    class Handle (line 539) | static class Handle extends Element.Handle {
      method Handle (line 541) | public Handle(GstObjectPtr ptr, boolean ownsHandle) {

FILE: src/org/freedesktop/gstreamer/Buffer.java
  class Buffer (line 52) | public class Buffer extends MiniObject {
    method Buffer (line 62) | public Buffer() {
    method Buffer (line 75) | public Buffer(int size) {
    method Buffer (line 79) | Buffer(Initializer init) {
    method allocBuffer (line 85) | private static Pointer allocBuffer(int size) {
    method map (line 108) | public ByteBuffer map(boolean writable) {
    method unmap (line 120) | public void unmap() {
    method getMemoryCount (line 130) | public int getMemoryCount() {
    method getDecodeTimestamp (line 142) | public long getDecodeTimestamp() {
    method setDecodeTimestamp (line 152) | public void setDecodeTimestamp(long val) {
    method getPresentationTimestamp (line 164) | public long getPresentationTimestamp() {
    method setPresentationTimestamp (line 174) | public void setPresentationTimestamp(long val) {
    method getDuration (line 184) | public long getDuration() {
    method setDuration (line 194) | public void setDuration(long val) {
    method getOffset (line 206) | public long getOffset() {
    method setOffset (line 218) | public void setOffset(long val) {
    method getOffsetEnd (line 230) | public long getOffsetEnd() {
    method setOffsetEnd (line 242) | public void setOffsetEnd(long val) {
    method getFlags (line 253) | @Gst.Since(minor = 10)
    method getMeta (line 268) | public <T extends Meta> T getMeta(Meta.API<T> api) {
    method iterateMeta (line 286) | public Iterator<Meta> iterateMeta() {
    method hasMeta (line 299) | @Gst.Since(minor = 14)
    method getMetaCount (line 314) | @Gst.Since(minor = 14)
    method setFlags (line 334) | @Gst.Since(minor = 10)
    method unsetFlags (line 350) | @Gst.Since(minor = 10)
    class MetaIterator (line 356) | private static class MetaIterator implements Iterator<Meta> {
      method MetaIterator (line 362) | MetaIterator(final Buffer buffer) {
      method hasNext (line 367) | @Override
      method next (line 375) | @Override
      method getNext (line 385) | private Meta getNext() {

FILE: src/org/freedesktop/gstreamer/BufferFlags.java
  type BufferFlags (line 29) | public enum BufferFlags implements NativeFlags<BufferFlags> {
    method BufferFlags (line 112) | private BufferFlags(int value) {
    method intValue (line 119) | public final int intValue() {

FILE: src/org/freedesktop/gstreamer/BufferPool.java
  class BufferPool (line 34) | public class BufferPool extends GstObject {
    method BufferPool (line 41) | public BufferPool() {
    method BufferPool (line 49) | BufferPool(final Initializer init) {
    method setParams (line 61) | public void setParams(Caps caps, int size, int min_buffers, int max_bu...
    method getCaps (line 71) | public Caps getCaps() {

FILE: src/org/freedesktop/gstreamer/Bus.java
  class Bus (line 77) | public class Bus extends GstObject {
    method Bus (line 95) | Bus(Initializer init) {
    method setFlushing (line 109) | public void setFlushing(boolean flushing) {
    method connect (line 119) | public void connect(final EOS listener) {
    method disconnect (line 133) | public void disconnect(EOS listener) {
    method connect (line 143) | public void connect(final ERROR listener) {
    method disconnect (line 162) | public void disconnect(ERROR listener) {
    method connect (line 172) | public void connect(final WARNING listener) {
    method disconnect (line 191) | public void disconnect(WARNING listener) {
    method connect (line 201) | public void connect(final INFO listener) {
    method disconnect (line 220) | public void disconnect(INFO listener) {
    method connect (line 230) | public void connect(final STATE_CHANGED listener) {
    method disconnect (line 252) | public void disconnect(STATE_CHANGED listener) {
    method connect (line 261) | public void connect(final TAG listener) {
    method disconnect (line 279) | public void disconnect(TAG listener) {
    method connect (line 288) | public void connect(final BUFFERING listener) {
    method disconnect (line 305) | public void disconnect(BUFFERING listener) {
    method connect (line 314) | public void connect(final DURATION_CHANGED listener) {
    method disconnect (line 329) | public void disconnect(DURATION_CHANGED listener) {
    method connect (line 339) | public void connect(final SEGMENT_START listener) {
    method disconnect (line 358) | public void disconnect(SEGMENT_START listener) {
    method connect (line 368) | public void connect(final SEGMENT_DONE listener) {
    method disconnect (line 387) | public void disconnect(SEGMENT_DONE listener) {
    method connect (line 397) | public void connect(final ASYNC_DONE listener) {
    method disconnect (line 412) | public void disconnect(ASYNC_DONE listener) {
    method connect (line 422) | public void connect(final MESSAGE listener) {
    method connect (line 438) | public void connect(String signal, final MESSAGE listener) {
    method disconnect (line 458) | public void disconnect(MESSAGE listener) {
    method post (line 469) | public boolean post(Message message) {
    method setSyncHandler (line 491) | public void setSyncHandler(BusSyncHandler handler) {
    method clearSyncHandler (line 500) | public void clearSyncHandler() {
    method getSyncHandler (line 509) | public BusSyncHandler getSyncHandler() {
    method connect (line 522) | private <T> void connect(Class<T> listenerClass, T listener, BusCallba...
    method connect (line 545) | @Override
    method addMessageProxy (line 561) | private synchronized <T> void addMessageProxy(MessageType type,
    method disconnect (line 569) | @Override
    method removeMessageProxy (line 578) | private synchronized <T> void removeMessageProxy(Class<T> listenerClas...
    method dispatchMessage (line 594) | private void dispatchMessage(GstBusPtr busPtr, GstMessagePtr msgPtr) {
    method dispose (line 605) | @Override
    method addWatch (line 615) | private void addWatch() {
    method removeWatch (line 629) | private void removeWatch() {
    type EOS (line 650) | public static interface EOS {
      method endOfStream (line 657) | public void endOfStream(GstObject source);
    type ERROR (line 669) | public static interface ERROR {
      method errorMessage (line 678) | public void errorMessage(GstObject source, int code, String message);
    type WARNING (line 687) | public static interface WARNING {
      method warningMessage (line 696) | public void warningMessage(GstObject source, int code, String message);
    type INFO (line 705) | public static interface INFO {
      method infoMessage (line 715) | public void infoMessage(GstObject source, int code, String message);
    type TAG (line 724) | public static interface TAG {
      method tagsFound (line 732) | public void tagsFound(GstObject source, TagList tagList);
    type STATE_CHANGED (line 741) | public static interface STATE_CHANGED {
      method stateChanged (line 752) | public void stateChanged(GstObject source, State old, State current,...
    type BUFFERING (line 761) | public static interface BUFFERING {
      method bufferingData (line 782) | public void bufferingData(GstObject source, int percent);
    type DURATION_CHANGED (line 801) | public static interface DURATION_CHANGED {
      method durationChanged (line 808) | public void durationChanged(GstObject source);
    type SEGMENT_START (line 818) | public static interface SEGMENT_START {
      method segmentStart (line 820) | public void segmentStart(GstObject source, Format format, long posit...
    type SEGMENT_DONE (line 834) | public static interface SEGMENT_DONE {
      method segmentDone (line 843) | public void segmentDone(GstObject source, Format format, long positi...
    type ASYNC_DONE (line 855) | public static interface ASYNC_DONE {
      method asyncDone (line 862) | public void asyncDone(GstObject source);
    type MESSAGE (line 874) | public static interface MESSAGE {
      method busMessage (line 882) | public void busMessage(Bus bus, Message message);
    class MessageProxy (line 885) | private static class MessageProxy<T> {
      method MessageProxy (line 892) | MessageProxy(MessageType type, Class<T> listenerClass, T listener, B...
      method busMessage (line 899) | void busMessage(final GstBusPtr bus, final GstMessagePtr msg) {
    class SyncCallback (line 906) | private static class SyncCallback implements GstBusAPI.BusSyncHandler {
      method callback (line 915) | @Override

FILE: src/org/freedesktop/gstreamer/BusSyncHandler.java
  type BusSyncHandler (line 30) | public interface BusSyncHandler {
    method syncMessage (line 32) | public BusSyncReply syncMessage(Message message);

FILE: src/org/freedesktop/gstreamer/BusSyncReply.java
  type BusSyncReply (line 28) | public enum BusSyncReply implements NativeEnum<BusSyncReply> {
    method BusSyncReply (line 39) | BusSyncReply(int value) {
    method intValue (line 47) | @Override

FILE: src/org/freedesktop/gstreamer/Caps.java
  class Caps (line 64) | public class Caps extends MiniObject {
    method Caps (line 74) | public Caps() {
    method Caps (line 84) | public Caps(String caps) {
    method Caps (line 94) | public Caps(Caps caps) {
    method Caps (line 98) | Caps(Initializer init) {
    method append (line 110) | public void append(Caps caps) {
    method append (line 120) | public void append(Structure struct) {
    method copy (line 132) | public Caps copy() {
    method equals (line 136) | @Override
    method getStructure (line 152) | public Structure getStructure(int index) {
    method intersect (line 172) | public Caps intersect(Caps other) {
    method isAlwaysCompatible (line 186) | public boolean isAlwaysCompatible(Caps other) {
    method isAny (line 195) | public boolean isAny() {
    method isEmpty (line 204) | public boolean isEmpty() {
    method isEqual (line 217) | public boolean isEqual(Caps other) {
    method isEqualFixed (line 227) | public boolean isEqualFixed(Caps other) {
    method isFixed (line 240) | public boolean isFixed() {
    method isSubset (line 254) | public boolean isSubset(Caps superset) {
    method makeWritable (line 270) | public Caps makeWritable() {
    method normalize (line 284) | public Caps normalize() {
    method removeStructure (line 296) | public void removeStructure(int index) {
    method setInteger (line 300) | public void setInteger(String field, Integer value) {
    method simplify (line 312) | public Caps simplify() {
    method size (line 323) | public int size() {
    method subtract (line 336) | public Caps subtract(Caps subtrahend) {
    method toString (line 340) | @Override
    method truncate (line 352) | public Caps truncate() {
    method anyCaps (line 364) | public static Caps anyCaps() {
    method emptyCaps (line 374) | public static Caps emptyCaps() {
    method fromString (line 388) | public static Caps fromString(String caps) {
    method merge (line 405) | public static Caps merge(Caps caps1, Caps caps2) {

FILE: src/org/freedesktop/gstreamer/Clock.java
  class Clock (line 93) | public class Clock extends GstObject {
    method Clock (line 96) | @Deprecated // should be package private
    method setResolution (line 112) | public long setResolution(long resolution) {
    method getResolution (line 122) | public long getResolution() {
    method getTime (line 136) | public long getTime() {
    method getInternalTime (line 147) | public long getInternalTime() {
    method getMaster (line 158) | public Clock getMaster() {
    method setMaster (line 179) | public boolean setMaster(Clock master) {
    method getCalibration (line 194) | @Deprecated
    method getCalibration (line 205) | public Calibration getCalibration() {
    method setCalibration (line 245) | public void setCalibration(long internal, long external, long rateNume...
    method newSingleShotID (line 258) | public ClockID newSingleShotID(long time) {
    method newPeriodicID (line 273) | public ClockID newPeriodicID(long startTime, long interval) {
    class Calibration (line 280) | public static final class Calibration {
      method Calibration (line 287) | private Calibration(long internal, long external, long rateNum, long...
      method internal (line 299) | public long internal() {
      method external (line 308) | public long external() {
      method rateNum (line 317) | public long rateNum() {
      method rateDenom (line 326) | public long rateDenom() {
      method hashCode (line 330) | @Override
      method equals (line 340) | @Override
      method toString (line 367) | @Override

FILE: src/org/freedesktop/gstreamer/ClockID.java
  class ClockID (line 29) | public class ClockID extends RefCountedObject implements Comparable<Cloc...
    method ClockID (line 31) | ClockID(Initializer init) {
    method unschedule (line 41) | public void unschedule() {
    method getTime (line 52) | public long getTime() {
    method compareTo (line 63) | @Override
    class Handle (line 68) | private static final class Handle extends RefCountedObject.Handle {
      method Handle (line 70) | public Handle(GPointer ptr, boolean ownsHandle) {
      method disposeNativeHandle (line 74) | @Override
      method ref (line 79) | @Override
      method unref (line 84) | @Override

FILE: src/org/freedesktop/gstreamer/ClockReturn.java
  type ClockReturn (line 30) | public enum ClockReturn {

FILE: src/org/freedesktop/gstreamer/ClockTime.java
  class ClockTime (line 26) | public final class ClockTime {
    method ClockTime (line 32) | private ClockTime() {}
    method fromMicros (line 40) | public static long fromMicros(long microseconds) {
    method toMicros (line 50) | public static long toMicros(long clocktime) {
    method fromMillis (line 60) | public static long fromMillis(long milliseconds) {
    method toMillis (line 70) | public static long toMillis(long clocktime) {
    method fromSeconds (line 80) | public static long fromSeconds(long seconds) {
    method toSeconds (line 90) | public static long toSeconds(long clocktime) {
    method getHoursComponent (line 100) | public static long getHoursComponent(long clocktime) {
    method getMinutesComponent (line 110) | public static long getMinutesComponent(long clocktime) {
    method getSecondsComponent (line 120) | public static long getSecondsComponent(long clocktime) {
    method isValid (line 130) | public static boolean isValid(long clocktime) {
    method toString (line 140) | public static String toString(long clocktime) {

FILE: src/org/freedesktop/gstreamer/Context.java
  class Context (line 62) | public class Context extends MiniObject {
    method Context (line 68) | public Context(String contextType) {
    method Context (line 75) | public Context(String context_type, boolean persistent) {
    method Context (line 79) | Context(Handle handle, boolean needRef) {
    method Context (line 84) | Context(Initializer init) {
    method getStructure (line 95) | public Structure getStructure() {
    method getWritableStructure (line 105) | public Structure getWritableStructure() {
    method getContextType (line 114) | public String getContextType() {
    class Handle (line 118) | protected static class Handle extends MiniObject.Handle {
      method Handle (line 120) | public Handle(GstContextPtr ptr, boolean ownsHandle) {
      method getPointer (line 124) | @Override

FILE: src/org/freedesktop/gstreamer/ControlBinding.java
  class ControlBinding (line 33) | public class ControlBinding extends GstObject {
    method ControlBinding (line 39) | protected ControlBinding(Handle handle, boolean needRef) {
    method ControlBinding (line 44) | ControlBinding(Initializer init) {
    method getValue (line 58) | public Object getValue(long timestamp) {
    method getValueArray (line 76) | public boolean getValueArray(long timestamp, long interval, Object[] v...
    method setDisabled (line 98) | public void setDisabled(boolean disabled) {
    method isDisabled (line 107) | public boolean isDisabled() {
    class Handle (line 113) | protected static class Handle extends GstObject.Handle {
      method Handle (line 115) | public Handle(GstControlBindingPtr ptr, boolean ownsHandle) {
      method getPointer (line 119) | @Override

FILE: src/org/freedesktop/gstreamer/ControlSource.java
  class ControlSource (line 32) | public class ControlSource extends GstObject {
    method ControlSource (line 38) | protected ControlSource(Handle handle, boolean needRef) {
    method ControlSource (line 43) | ControlSource(Initializer init) {
    method getValue (line 57) | public double getValue(long timestamp) {
    method getValueArray (line 76) | public boolean getValueArray(long timestamp, long interval, double[] v...
    class TimedValue (line 94) | public static final class TimedValue {
      method TimedValue (line 106) | public TimedValue(long timestamp, double value) {
      method hashCode (line 111) | @Override
      method equals (line 119) | @Override
      method toString (line 140) | @Override
    class Handle (line 147) | protected static class Handle extends GstObject.Handle {
      method Handle (line 149) | public Handle(GstControlSourcePtr ptr, boolean ownsHandle) {
      method getPointer (line 153) | @Override

FILE: src/org/freedesktop/gstreamer/DateTime.java
  class DateTime (line 29) | public class DateTime extends NativeObject {
    method createInstanceLocalEpoch (line 33) | public static DateTime createInstanceLocalEpoch(long secs) {
    method DateTime (line 37) | DateTime(Initializer init) {
    method DateTime (line 41) | DateTime(Pointer ptr, boolean needRef, boolean ownsHandle) {
    method DateTime (line 45) | DateTime(Handle handle) {
    method getYear (line 49) | public int getYear() {
    method getMonth (line 53) | public int getMonth() {
    method getDay (line 57) | public int getDay() {
    method getHour (line 61) | public int getHour() {
    method getMinute (line 65) | public int getMinute() {
    method getSecond (line 69) | public int getSecond() {
    method getMicrosecond (line 73) | public int getMicrosecond() {
    method toString (line 77) | @Override
    class Handle (line 82) | private static final class Handle extends NativeObject.Handle {
      method Handle (line 84) | public Handle(GPointer ptr, boolean ownsHandle) {
      method disposeNativeHandle (line 88) | @Override

FILE: src/org/freedesktop/gstreamer/Element.java
  class Element (line 75) | public class Element extends GstObject {
    method Element (line 84) | protected Element(Initializer init) {
    method Element (line 88) | Element(Handle handle, boolean needRef) {
    method makeRawElement (line 100) | protected static Initializer makeRawElement(String factoryName, String...
    method link (line 121) | public boolean link(Element dest) {
    method linkFiltered (line 144) | public boolean linkFiltered(Element dest, Caps filter) {
    method unlink (line 158) | public void unlink(Element dest) {
    method isPlaying (line 167) | public boolean isPlaying() {
    method play (line 178) | public StateChangeReturn play() {
    method ready (line 189) | public StateChangeReturn ready() {
    method pause (line 200) | public StateChangeReturn pause() {
    method stop (line 211) | public StateChangeReturn stop() {
    method setState (line 231) | public StateChangeReturn setState(State state) {
    method setLockedState (line 243) | public boolean setLockedState(boolean locked_state) {
    method getState (line 254) | public State getState() {
    method getState (line 270) | public State getState(long timeout, TimeUnit units) {
    method getState (line 287) | public State getState(long timeout) {
    method getState (line 304) | public void getState(long timeout, State[] states) {
    method syncStateWithParent (line 319) | public boolean syncStateWithParent() {
    method setCaps (line 328) | public void setCaps(Caps caps) {
    method getStaticPad (line 339) | public Pad getStaticPad(String padname) {
    method getPads (line 348) | public List<Pad> getPads() {
    method getSrcPads (line 357) | public List<Pad> getSrcPads() {
    method getSinkPads (line 366) | public List<Pad> getSinkPads() {
    method padList (line 370) | private List<Pad> padList(GstIteratorPtr iter) {
    method addPad (line 389) | public boolean addPad(Pad pad) {
    method getRequestPad (line 401) | public Pad getRequestPad(String name) {
    method releaseRequestPad (line 410) | public void releaseRequestPad(Pad pad) {
    method removePad (line 433) | public boolean removePad(Pad pad) {
    method getFactory (line 442) | public ElementFactory getFactory() {
    method getBus (line 452) | public Bus getBus() {
    method sendEvent (line 466) | public boolean sendEvent(Event ev) {
    type PAD_ADDED (line 476) | public static interface PAD_ADDED {
      method padAdded (line 484) | public void padAdded(Element element, Pad pad);
    type PAD_REMOVED (line 493) | public static interface PAD_REMOVED {
      method padRemoved (line 501) | public void padRemoved(Element element, Pad pad);
    type NO_MORE_PADS (line 510) | public static interface NO_MORE_PADS {
      method noMorePads (line 517) | public void noMorePads(Element element);
    method connect (line 526) | public void connect(final PAD_ADDED listener) {
    method disconnect (line 540) | public void disconnect(PAD_ADDED listener) {
    method connect (line 550) | public void connect(final PAD_REMOVED listener) {
    method disconnect (line 564) | public void disconnect(PAD_REMOVED listener) {
    method connect (line 574) | public void connect(final NO_MORE_PADS listener) {
    method disconnect (line 588) | public void disconnect(NO_MORE_PADS listener) {
    method linkMany (line 601) | public static boolean linkMany(Element... elements) {
    method unlinkMany (line 611) | public static void unlinkMany(Element... elements) {
    method linkPads (line 631) | public static boolean linkPads(Element src, String srcPadName, Element...
    method linkPadsFiltered (line 652) | public static boolean linkPadsFiltered(Element src, String srcPadName,
    method unlinkPads (line 666) | public static void unlinkPads(Element src, String srcPadName, Element ...
    method postMessage (line 677) | public boolean postMessage(Message message) {
    method getClock (line 686) | public Clock getClock() {
    method getBaseTime (line 697) | public long getBaseTime() {
    method setBaseTime (line 707) | public void setBaseTime(long time) {
    method getStartTime (line 722) | public long getStartTime() {
    method setStartTime (line 744) | public void setStartTime(long time) {
    method query (line 760) | public boolean query(Query query) {
    method setContext (line 769) | public void setContext(Context context) {
    method getContext (line 780) | public Context getContext(String context_type) {
    method queryDuration (line 800) | public long queryDuration(Format format) {
    method queryPosition (line 816) | public long queryPosition(Format format) {
    method seek (line 836) | public boolean seek(double rate, Format format, Set<SeekFlags> seekFlags,
    method seekSimple (line 868) | public boolean seekSimple(Format format, Set<SeekFlags> seekFlags, lon...
    class Handle (line 873) | static class Handle extends GstObject.Handle {
      method Handle (line 875) | public Handle(GstObjectPtr ptr, boolean ownsHandle) {

FILE: src/org/freedesktop/gstreamer/ElementFactory.java
  class ElementFactory (line 49) | public class ElementFactory extends PluginFeature {
    method ElementFactory (line 61) | ElementFactory(Initializer init) {
    method create (line 74) | public Element create(String name) {
    method getAuthor (line 91) | public String getAuthor() {
    method getDescription (line 103) | public String getDescription() {
    method getKlass (line 116) | public String getKlass() {
    method getLongName (line 128) | public String getLongName() {
    method getStaticPadTemplates (line 140) | public List<StaticPadTemplate> getStaticPadTemplates() {
    method find (line 166) | public static ElementFactory find(String name) {
    method listGetElements (line 228) | public static List<ElementFactory> listGetElements(ListType type, Rank...
    method listGetElementsFilter (line 263) | public static List<ElementFactory> listGetElementsFilter(ListType type...
    method make (line 293) | public static Element make(String factoryName, String name) {
    method makeRawElement (line 300) | static Pointer makeRawElement(String factoryName, String name) {
    method elementFor (line 313) | private static Element elementFor(Pointer ptr, String factoryName) {
    type ListType (line 320) | public enum ListType {
      method ListType (line 373) | private ListType(long value) {
      method getValue (line 377) | public long getValue() {

FILE: src/org/freedesktop/gstreamer/FlowReturn.java
  type FlowReturn (line 35) | public enum FlowReturn implements NativeEnum<FlowReturn> {
    method FlowReturn (line 62) | FlowReturn(int value) {
    method intValue (line 70) | @Override

FILE: src/org/freedesktop/gstreamer/Format.java
  type Format (line 34) | public enum Format implements NativeEnum<Format> {
    method Format (line 57) | Format(int value) {
    method intValue (line 61) | @Override

FILE: src/org/freedesktop/gstreamer/Fraction.java
  class Fraction (line 25) | public class Fraction {
    method Fraction (line 35) | public Fraction(int numerator, int denominator) {
    method getNumerator (line 45) | public int getNumerator() {
    method getDenominator (line 54) | public int getDenominator() {
    method toDouble (line 62) | public double toDouble() {

FILE: src/org/freedesktop/gstreamer/GhostPad.java
  class GhostPad (line 53) | public class GhostPad extends Pad {
    method GhostPad (line 60) | GhostPad(Initializer init) {
    method GhostPad (line 71) | public GhostPad(String name, Pad target) {
    method GhostPad (line 84) | public GhostPad(String name, Pad target, PadTemplate template) {
    method GhostPad (line 97) | public GhostPad(String name, PadDirection direction) {
    method GhostPad (line 108) | public GhostPad(String name, PadTemplate template) {
    method getTarget (line 118) | public Pad getTarget() {
    method setTarget (line 130) | public boolean setTarget(Pad pad) {

FILE: src/org/freedesktop/gstreamer/Gst.java
  class Gst (line 71) | public final class Gst {
    class NativeArgs (line 86) | private static class NativeArgs {
      method NativeArgs (line 93) | public NativeArgs(String progname, String[] args) {
      method toStringArray (line 117) | String[] toStringArray() {
    method Gst (line 133) | private Gst() {
    method getVersion (line 142) | public static Version getVersion() {
    method getVersionString (line 153) | public static String getVersionString() {
    method isSegTrapEnabled (line 169) | public static boolean isSegTrapEnabled() {
    method setSegTrap (line 179) | public static void setSegTrap(boolean enabled) {
    method isInitialized (line 188) | public static synchronized final boolean isInitialized() {
    method getExecutor (line 198) | public static ScheduledExecutorService getExecutor() {
    method quit (line 205) | public static void quit() {
    method parseLaunch (line 223) | public static Element parseLaunch(String pipelineDescription, List<GEr...
    method parseLaunch (line 255) | public static Element parseLaunch(String pipelineDescription) {
    method parseLaunch (line 272) | public static Element parseLaunch(String[] pipelineDescription, List<G...
    method parseLaunch (line 303) | public static Element parseLaunch(String[] pipelineDescription) {
    method parseBinFromDescription (line 320) | public static Bin parseBinFromDescription(String binDescription, boole...
    method parseBinFromDescription (line 353) | public static Bin parseBinFromDescription(String binDescription, boole...
    method extractError (line 357) | private static GError extractError(Pointer errorPtr) {
    method main (line 372) | public static void main() {
    method invokeLater (line 390) | public static void invokeLater(final Runnable task) {
    method getMainContext (line 401) | public static GMainContext getMainContext() {
    method init (line 418) | public static final void init() throws GstException {
    method init (line 430) | public static final void init(Version requiredVersion) throws GstExcep...
    method init (line 452) | public static synchronized final String[] init(String progname, String...
    method init (line 469) | public static synchronized final String[] init(Version requestedVersion,
    method deinit (line 543) | public static synchronized final void deinit() {
    method addStaticShutdownTask (line 582) | static void addStaticShutdownTask(Runnable task) {
    method setUseDefaultContext (line 599) | public static void setUseDefaultContext(boolean useDefault) {
    method checkVersion (line 611) | public static void checkVersion(int major, int minor) {
    method testVersion (line 625) | public static boolean testVersion(int major, int minor) {
    method newThread (line 637) | @Override
    method loadAllClasses (line 647) | private static synchronized void loadAllClasses() {
    class Types (line 671) | public static class Types implements NativeObject.TypeProvider {
      method types (line 673) | @Override

FILE: src/org/freedesktop/gstreamer/GstException.java
  class GstException (line 29) | public class GstException extends GLibException {
    method GstException (line 36) | public GstException() {
    method GstException (line 45) | public GstException(String msg) {
    method GstException (line 49) | public GstException(GError error) {

FILE: src/org/freedesktop/gstreamer/GstIterator.java
  class GstIterator (line 34) | class GstIterator {
    method asList (line 36) | static <T extends NativeObject> List<T> asList(GstIteratorPtr iter, Cl...

FILE: src/org/freedesktop/gstreamer/GstObject.java
  class GstObject (line 53) | public class GstObject extends GObject {
    method GstObject (line 64) | protected GstObject(Initializer init) {
    method GstObject (line 68) | protected GstObject(Handle handle, boolean needRef) {
    method setAsString (line 83) | public void setAsString(String property, String data) {
    method getAsString (line 119) | public String getAsString(String property) {
    method findProperty (line 134) | private GObjectAPI.GParamSpec findProperty(String propertyName) {
    method setName (line 156) | public boolean setName(String name) {
    method getName (line 168) | public String getName() {
    method getParent (line 178) | public GstObject getParent() {
    method suggestNextSync (line 189) | public long suggestNextSync() {
    method syncValues (line 204) | public boolean syncValues(long timestamp) {
    method hasActiveControlBindings (line 213) | public boolean hasActiveControlBindings() {
    method setControlBindingsDisabled (line 223) | public void setControlBindingsDisabled(boolean disabled) {
    method setControlBindingDisabled (line 235) | public void setControlBindingDisabled(String propertyName, boolean dis...
    method addControlBinding (line 247) | public void addControlBinding(ControlBinding binding) {
    method getControlBinding (line 263) | public ControlBinding getControlBinding(String propertyName) {
    method removeControlBinding (line 275) | public boolean removeControlBinding(ControlBinding binding) {
    method toString (line 281) | @Override
    class Handle (line 293) | protected static class Handle extends GObject.Handle {
      method Handle (line 295) | public Handle(GstObjectPtr ptr, boolean ownsHandle) {
      method ref (line 299) | @Override
      method sink (line 304) | @Override
      method unref (line 309) | @Override
      method getPointer (line 314) | @Override

FILE: src/org/freedesktop/gstreamer/Meta.java
  class Meta (line 34) | public class Meta extends NativeObject {
    method Meta (line 41) | protected Meta(Initializer init) {
    method Meta (line 51) | protected Meta(Handle handle) {
    method toString (line 55) | @Override
    class Handle (line 64) | protected static class Handle extends NativeObject.Handle {
      method Handle (line 72) | public Handle(GstMetaPtr ptr, boolean ownsHandle) {
      method disposeNativeHandle (line 76) | @Override
    class API (line 98) | public static final class API<T extends Meta> {
      method API (line 112) | public API(Class<T> impl, String api) {
      method getImplClass (line 118) | Class<T> getImplClass() {
      method getAPIGType (line 122) | GType getAPIGType() {

FILE: src/org/freedesktop/gstreamer/MetaFlags.java
  type MetaFlags (line 28) | enum MetaFlags implements NativeFlags<MetaFlags> {
    method MetaFlags (line 55) | MetaFlags(int value) {
    method intValue (line 64) | @Override

FILE: src/org/freedesktop/gstreamer/MiniObject.java
  class MiniObject (line 41) | public abstract class MiniObject extends RefCountedObject {
    method MiniObject (line 46) | protected MiniObject(Initializer init) {
    method MiniObject (line 51) | protected MiniObject(Handle handle, boolean needRef) {
    method isWritable (line 71) | public boolean isWritable() {
    method makeWritable (line 82) | protected <T extends MiniObject> T makeWritable() {
    method copy (line 95) | public <T extends MiniObject> T copy() {
    method getRefCount (line 103) | public int getRefCount() {
    class Handle (line 108) | protected static class Handle extends RefCountedObject.Handle {
      method Handle (line 110) | public Handle(GstMiniObjectPtr ptr, boolean ownsHandle) {
      method disposeNativeHandle (line 114) | @Override
      method ref (line 120) | @Override
      method unref (line 125) | @Override
      method getPointer (line 130) | @Override

FILE: src/org/freedesktop/gstreamer/MiniObjectFlags.java
  type MiniObjectFlags (line 26) | public enum MiniObjectFlags implements NativeFlags<MiniObjectFlags> {
    method MiniObjectFlags (line 50) | private MiniObjectFlags(int value) {
    method intValue (line 54) | public int intValue() {

FILE: src/org/freedesktop/gstreamer/Pad.java
  class Pad (line 81) | public class Pad extends GstObject {
    method Pad (line 91) | Pad(Initializer init) {
    method Pad (line 95) | private Pad(Handle handle, boolean needRef) {
    method Pad (line 107) | public Pad(String name, PadDirection direction) {
    method Pad (line 120) | public Pad(PadTemplate template, String name) {
    method queryCaps (line 143) | public Caps queryCaps(Caps filter) {
    method getAllowedCaps (line 159) | public Caps getAllowedCaps() {
    method getCurrentCaps (line 171) | public Caps getCurrentCaps() {
    method getPeer (line 182) | public Pad getPeer() {
    method peerQueryCaps (line 199) | public Caps peerQueryCaps(Caps filter) {
    method queryAcceptCaps (line 209) | public boolean queryAcceptCaps(Caps caps) {
    method peerQueryAcceptCaps (line 220) | public boolean peerQueryAcceptCaps(Caps caps) {
    method link (line 232) | public void link(Pad sink) throws PadLinkException {
    method unlink (line 250) | public boolean unlink(Pad pad) {
    method isLinked (line 259) | public boolean isLinked() {
    method getDirection (line 269) | public PadDirection getDirection() {
    method getParentElement (line 279) | public Element getParentElement() {
    method setActive (line 298) | public boolean setActive(boolean active) {
    method isBlocked (line 309) | public boolean isBlocked() {
    method block (line 318) | public void block(final Runnable callback) {
    method isBlocking (line 335) | public boolean isBlocking() {
    method connect (line 345) | public void connect(final LINKED listener) {
    method disconnect (line 360) | public void disconnect(LINKED listener) {
    method connect (line 370) | public void connect(final UNLINKED listener) {
    method disconnect (line 386) | public void disconnect(UNLINKED listener) {
    method addProbe (line 405) | public void addProbe(final Set<PadProbeType> mask, PROBE callback) {
    method addProbe (line 423) | public void addProbe(PadProbeType mask, PROBE callback) {
    method addProbe (line 427) | synchronized void addProbe(int mask, PROBE callback) {
    method removeProbe (line 465) | public synchronized void removeProbe(PROBE callback) {
    method addEventProbe (line 469) | public void addEventProbe(final EVENT_PROBE listener) {
    method addEventProbe (line 474) | synchronized void addEventProbe(final EVENT_PROBE listener, final int ...
    method removeEventProbe (line 511) | public void removeEventProbe(EVENT_PROBE listener) {
    method addDataProbe (line 515) | public synchronized void addDataProbe(final DATA_PROBE listener) {
    method removeDataProbe (line 544) | public void removeDataProbe(DATA_PROBE listener) {
    method sendEvent (line 570) | public boolean sendEvent(Event event) {
    method pushEvent (line 584) | public boolean pushEvent(Event event) {
    method chain (line 612) | public FlowReturn chain(Buffer buffer) {
    method getRange (line 633) | public FlowReturn getRange(long offset, int size, Buffer[] buffer) {
    method pullRange (line 658) | public FlowReturn pullRange(long offset, int size, Buffer[] buffer) {
    method push (line 679) | public FlowReturn push(final Buffer buffer) {
    method getTemplate (line 689) | public PadTemplate getTemplate() {
    method hasCurrentCaps (line 698) | public boolean hasCurrentCaps() {
    type LINKED (line 708) | public static interface LINKED {
      method linked (line 716) | public void linked(Pad pad, Pad peer);
    type UNLINKED (line 726) | public static interface UNLINKED {
      method unlinked (line 734) | public void unlinked(Pad pad, Pad peer);
    type PROBE (line 741) | public static interface PROBE {
      method probeCallback (line 755) | public PadProbeReturn probeCallback(Pad pad, PadProbeInfo info);
    type EVENT_PROBE (line 765) | public static interface EVENT_PROBE {
      method eventReceived (line 767) | public PadProbeReturn eventReceived(Pad pad, Event event);
    type DATA_PROBE (line 777) | public static interface DATA_PROBE {
      method dataReceived (line 779) | public PadProbeReturn dataReceived(Pad pad, Buffer buffer);
    class Handle (line 783) | private static class Handle extends GstObject.Handle {
      method Handle (line 787) | private Handle(GstPadPtr ptr, boolean ownsHandle) {
      method getPointer (line 792) | @Override
      method addProbe (line 797) | private synchronized NativeLong addProbe(int mask, GstPadAPI.PadProb...
      method removeProbe (line 805) | private synchronized void removeProbe(NativeLong id) {
      method clearProbes (line 811) | private synchronized void clearProbes() {
      method invalidate (line 816) | @Override
      method dispose (line 822) | @Override

FILE: src/org/freedesktop/gstreamer/PadDirection.java
  type PadDirection (line 27) | public enum PadDirection implements NativeEnum<PadDirection> {
    method PadDirection (line 37) | private PadDirection(int value) {
    method intValue (line 41) | @Override

FILE: src/org/freedesktop/gstreamer/PadLinkException.java
  class PadLinkException (line 24) | public class PadLinkException extends GstException {
    method PadLinkException (line 28) | PadLinkException(PadLinkReturn result) {
    method PadLinkException (line 32) | PadLinkException(String message, PadLinkReturn result) {
    method getLinkResult (line 41) | public PadLinkReturn getLinkResult() {

FILE: src/org/freedesktop/gstreamer/PadLinkReturn.java
  type PadLinkReturn (line 28) | public enum PadLinkReturn implements NativeEnum<PadLinkReturn> {
    method PadLinkReturn (line 47) | PadLinkReturn(int value) {
    method intValue (line 54) | @Override

FILE: src/org/freedesktop/gstreamer/PadMode.java
  type PadMode (line 29) | public enum PadMode {

FILE: src/org/freedesktop/gstreamer/PadPresence.java
  type PadPresence (line 25) | public enum PadPresence {

FILE: src/org/freedesktop/gstreamer/PadProbeInfo.java
  class PadProbeInfo (line 31) | public final class PadProbeInfo {
    method PadProbeInfo (line 35) | PadProbeInfo(GstPadProbeInfo info) {
    method getType (line 44) | public Set<PadProbeType> getType() {
    method getBuffer (line 53) | public Buffer getBuffer() {
    method getEvent (line 62) | public Event getEvent() {
    method getQuery (line 71) | public Query getQuery() {
    method invalidate (line 75) | void invalidate() {

FILE: src/org/freedesktop/gstreamer/PadProbeReturn.java
  type PadProbeReturn (line 24) | public enum PadProbeReturn {

FILE: src/org/freedesktop/gstreamer/PadProbeType.java
  type PadProbeType (line 36) | public enum PadProbeType implements NativeFlags<PadProbeType> {
    method PadProbeType (line 160) | private PadProbeType(int value) {
    method intValue (line 164) | @Override

FILE: src/org/freedesktop/gstreamer/PadTemplate.java
  class PadTemplate (line 42) | public class PadTemplate extends GstObject {
    method PadTemplate (line 53) | PadTemplate(Initializer init) {
    method PadTemplate (line 65) | public PadTemplate(String nameTemplate, PadDirection direction, Caps c...
    method PadTemplate (line 78) | public PadTemplate(String nameTemplate, PadDirection direction, PadPre...
    method getCaps (line 87) | public Caps getCaps() {
    method getTemplateName (line 96) | public String getTemplateName() {
    method getDirection (line 105) | public PadDirection getDirection() {
    method getPresence (line 118) | public PadPresence getPresence() {

FILE: src/org/freedesktop/gstreamer/Pipeline.java
  class Pipeline (line 91) | public class Pipeline extends Bin {
    method Pipeline (line 100) | protected Pipeline(Initializer init) {
    method Pipeline (line 104) | Pipeline(Handle handle, boolean needRef) {
    method Pipeline (line 113) | public Pipeline() {
    method Pipeline (line 122) | public Pipeline(String name) {
    method initializer (line 126) | private static Initializer initializer(String name) {
    method setAutoFlushBus (line 150) | public void setAutoFlushBus(boolean flush) {
    method getAutoFlushBus (line 162) | public boolean getAutoFlushBus() {
    method setClock (line 177) | public boolean setClock(Clock clock) {
    method getClock (line 186) | @Override
    method useClock (line 202) | public void useClock(Clock clock) {
    method getBus (line 211) | @Override
    method seek (line 226) | public boolean seek(long time) {
    method seek (line 240) | public boolean seek(long time, TimeUnit unit) {
    method seek (line 288) | public boolean seek(double rate, Format format, EnumSet<SeekFlags> see...
    method seek (line 293) | @Override
    method queryPosition (line 305) | public long queryPosition(TimeUnit unit) {
    method queryPosition (line 309) | @Override
    method queryDuration (line 320) | public long queryDuration(TimeUnit unit) {
    method queryDuration (line 324) | @Override
    method querySegment (line 334) | public Segment querySegment() {
    method querySegment (line 345) | public Segment querySegment(Format format) {
    class Handle (line 356) | static class Handle extends Bin.Handle {
      method Handle (line 360) | public Handle(GstObjectPtr ptr, boolean ownsHandle) {
      method invalidate (line 365) | @Override
      method dispose (line 371) | @Override
      method disposeBus (line 377) | private void disposeBus() {

FILE: src/org/freedesktop/gstreamer/Plugin.java
  class Plugin (line 58) | public class Plugin extends GstObject {
    method Plugin (line 67) | Plugin(Initializer init) {
    method loadByName (line 77) | public static Plugin loadByName(String pluginName) {
    method getName (line 86) | @Override
    method getDescription (line 96) | public String getDescription() {
    method getFilename (line 105) | public String getFilename() {
    method getVersion (line 114) | public String getVersion() {
    method getLicense (line 123) | public String getLicense() {
    method getSource (line 132) | public String getSource() {
    method getPackage (line 141) | public String getPackage() {
    method getOrigin (line 150) | public String getOrigin() {
    method getReleaseDateString (line 164) | public String getReleaseDateString() {
    method isLoaded (line 173) | public boolean isLoaded() {

FILE: src/org/freedesktop/gstreamer/PluginFeature.java
  class PluginFeature (line 38) | public class PluginFeature extends GstObject {
    type Rank (line 52) | public enum Rank implements NativeEnum<Rank> {
      method Rank (line 76) | private Rank(int value) {
      method intValue (line 80) | @Override
    method PluginFeature (line 89) | PluginFeature(Initializer init) {
    method toString (line 93) | @Override
    method getName (line 103) | @Override
    method setName (line 114) | @Override
    method setRank (line 126) | public void setRank(int rank) {
    method setRank (line 136) | public void setRank(Rank rank) {
    method getRank (line 145) | public int getRank() {
    method checkVersion (line 158) | public boolean checkVersion(int major, int minor, int micro) {
    method getPluginName (line 168) | public String getPluginName() {
    method getPlugin (line 177) | public Plugin getPlugin() {

FILE: src/org/freedesktop/gstreamer/Promise.java
  class Promise (line 36) | @Gst.Since(minor = 14)
    method Promise (line 48) | Promise(final Initializer init) {
    method Promise (line 55) | public Promise() {
    method Promise (line 66) | public Promise(final PROMISE_CHANGE listener) {
    method Promise (line 74) | private Promise(GstCallback callback) {
    method waitResult (line 86) | public PromiseResult waitResult() {
    method reply (line 101) | public void reply(final Structure structure) {
    method interrupt (line 111) | public void interrupt() {
    method expire (line 121) | public void expire() {
    method getReply (line 134) | public Structure getReply() {
    type PROMISE_CHANGE (line 142) | public static interface PROMISE_CHANGE {
      method onChange (line 150) | public void onChange(Promise promise);

FILE: src/org/freedesktop/gstreamer/PromiseResult.java
  type PromiseResult (line 26) | @Gst.Since(minor = 14)

FILE: src/org/freedesktop/gstreamer/Range.java
  class Range (line 30) | public class Range {
    method Range (line 36) | Range(GValueAPI.GValue value) {
    method getMinFraction (line 44) | public Fraction getMinFraction() {
    method getMaxFraction (line 55) | public Fraction getMaxFraction() {
    method getMinDouble (line 66) | public double getMinDouble() {
    method getMaxDouble (line 74) | public double getMaxDouble() {
    method getMinInt (line 82) | public int getMinInt() {
    method getMaxInt (line 90) | public int getMaxInt() {

FILE: src/org/freedesktop/gstreamer/Registry.java
  class Registry (line 102) | public class Registry extends GstObject {
    method Registry (line 106) | Registry(Initializer init) {
    method findPlugin (line 116) | public Plugin findPlugin(String name) {
    method addPlugin (line 125) | public boolean addPlugin(Plugin plugin) {
    method removePlugin (line 134) | public void removePlugin(Plugin plugin) {
    method lookupFeature (line 156) | public PluginFeature lookupFeature(String name) {
    method getPluginList (line 165) | public List<Plugin> getPluginList() {
    method getPluginList (line 179) | public List<Plugin> getPluginList(final PluginFilter filter) {
    method getPluginFeatureListByPlugin (line 202) | public List<PluginFeature> getPluginFeatureListByPlugin(String name) {
    method scanPath (line 217) | public boolean scanPath(String path) {
    method objectList (line 227) | private <T extends GstObject> List<T> objectList(GList glist, Class<T>...
    type PluginFilter (line 239) | public static interface PluginFilter {
      method accept (line 240) | public boolean accept(Plugin plugin);
    method get (line 252) | public static Registry get() {

FILE: src/org/freedesktop/gstreamer/SDPMessage.java
  class SDPMessage (line 36) | public class SDPMessage extends NativeObject {
    method SDPMessage (line 44) | SDPMessage(Initializer init) {
    method SDPMessage (line 48) | SDPMessage(Handle handle) {
    method SDPMessage (line 55) | public SDPMessage() {
    method toString (line 66) | public String toString() {
    method parseBuffer (line 77) | public void parseBuffer(String sdpString) {
    method initHandle (line 97) | private static Handle initHandle() {
    class Handle (line 103) | private static final class Handle extends NativeObject.Handle {
      method Handle (line 105) | public Handle(GPointer ptr, boolean ownsHandle) {
      method disposeNativeHandle (line 109) | @Override

FILE: src/org/freedesktop/gstreamer/SDPResult.java
  type SDPResult (line 32) | public enum SDPResult implements NativeEnum<SDPResult> {
    method SDPResult (line 41) | SDPResult(int value) {
    method intValue (line 49) | @Override

FILE: src/org/freedesktop/gstreamer/Sample.java
  class Sample (line 35) | public class Sample extends MiniObject {
    method Sample (line 39) | Sample(Initializer init) {
    method getCaps (line 50) | public Caps getCaps() {
    method setCaps (line 62) | @Gst.Since(minor = 16)
    method getBuffer (line 76) | public Buffer getBuffer() {
    method setBuffer (line 88) | @Gst.Since(minor = 16)

FILE: src/org/freedesktop/gstreamer/Segment.java
  class Segment (line 26) | public final class Segment {
    method Segment (line 43) | Segment(double rate, Format format, long startValue, long stopValue) {
    method getRate (line 55) | public double getRate() {
    method getFormat (line 64) | public Format getFormat() {
    method getStartValue (line 73) | public long getStartValue() {
    method getStopValue (line 82) | public long getStopValue() {

FILE: src/org/freedesktop/gstreamer/SegmentFlags.java
  type SegmentFlags (line 27) | enum SegmentFlags implements NativeFlags<SegmentFlags> {
    method SegmentFlags (line 57) | private SegmentFlags(SeekFlags seekFlags) {
    method intValue (line 61) | @Override

FILE: src/org/freedesktop/gstreamer/State.java
  type State (line 32) | public enum State implements NativeEnum<State> {
    method State (line 56) | private State(int value) {
    method intValue (line 65) | @Override

FILE: src/org/freedesktop/gstreamer/StateChangeReturn.java
  type StateChangeReturn (line 34) | public enum StateChangeReturn implements NativeEnum<StateChangeReturn> {
    method StateChangeReturn (line 49) | private StateChangeReturn(int value) {
    method intValue (line 53) | @Override

FILE: src/org/freedesktop/gstreamer/StaticPadTemplate.java
  class StaticPadTemplate (line 21) | public class StaticPadTemplate {
    method StaticPadTemplate (line 28) | StaticPadTemplate(String templateName, PadDirection direction, PadPres...
    method getName (line 41) | public String getName() {
    method getDirection (line 50) | public PadDirection getDirection() {
    method getPresence (line 59) | public PadPresence getPresence() {
    method getCaps (line 68) | public Caps getCaps() {

FILE: src/org/freedesktop/gstreamer/Structure.java
  class Structure (line 70) | public class Structure extends NativeObject {
    method Structure (line 79) | public Structure(String name) {
    method Structure (line 92) | public Structure(String name, String firstFieldName, Object... data) {
    method Structure (line 98) | Structure(Initializer init) {
    method Structure (line 102) | private Structure(Handle handle) {
    method copy (line 106) | public Structure copy() {
    method fixateNearestInteger (line 110) | public boolean fixateNearestInteger(String field, Integer value) {
    method getBoolean (line 121) | public boolean getBoolean(String fieldName) {
    method getDouble (line 137) | public double getDouble(String fieldName) {
    method getDoubles (line 165) | public double[] getDoubles(String fieldName) {
    method getDoubles (line 189) | public double[] getDoubles(String fieldName, double[] array) {
    method getFields (line 222) | public int getFields() {
    method getFourcc (line 233) | public int getFourcc(String fieldName) {
    method getFourccString (line 247) | public String getFourccString(String fieldName) {
    method getFraction (line 262) | public Fraction getFraction(String fieldName) {
    method getInteger (line 278) | public int getInteger(String fieldName) {
    method getIntegers (line 306) | public int[] getIntegers(String fieldName) {
    method getIntegers (line 329) | public int[] getIntegers(String fieldName, int[] array) {
    method setName (line 365) | public void setName(String name) {
    method getName (line 374) | public String getName() {
    method getName (line 384) | public String getName(int i) {
    method getRange (line 396) | public Range getRange(String fieldName) {
    method getString (line 409) | public String getString(String fieldName) {
    method getValue (line 420) | public Object getValue(String fieldName) {
    method getValues (line 449) | public <T> List<T> getValues(Class<T> type, String fieldName) {
    method hasDoubleField (line 500) | public boolean hasDoubleField(String fieldName) {
    method hasField (line 510) | public boolean hasField(String fieldName) {
    method hasField (line 523) | boolean hasField(String fieldName, GType fieldType) {
    method hasField (line 535) | public boolean hasField(String fieldName, Class<?> fieldType) {
    method hasIntField (line 545) | public boolean hasIntField(String fieldName) {
    method hasName (line 554) | public boolean hasName(String name) {
    method isEqual (line 563) | public boolean isEqual(Structure structure) {
    method removeField (line 573) | public void removeField(String fieldName) {
    method removeFields (line 583) | public void removeFields(String... fieldNames) {
    method setDouble (line 587) | public void setDouble(String field, Double value) {
    method setDoubleRange (line 591) | public void setDoubleRange(String field, Double min, Double max) {
    method setFraction (line 596) | public void setFraction(String field, Integer numerator, Integer denom...
    method setInteger (line 606) | public void setInteger(String field, Integer value) {
    method setIntegerRange (line 610) | public void setIntegerRange(String field, Integer min, Integer max) {
    method setObject (line 622) | public void setObject(String field, String typeName, GObject object) {
    method setPointer (line 643) | void setPointer(String field, Pointer value) {
    method setValue (line 646) | void setValue(String field, GType type, Object value) {
    method toString (line 650) | @Override
    method fromString (line 661) | public static Structure fromString(String data) {
    method objectFor (line 668) | static Structure objectFor(Pointer ptr, boolean needRef, boolean ownsH...
    class InvalidFieldException (line 672) | public class InvalidFieldException extends RuntimeException {
      method InvalidFieldException (line 676) | public InvalidFieldException(String type, String fieldName) {
    class Handle (line 681) | private static final class Handle extends NativeObject.Handle {
      method Handle (line 683) | public Handle(GPointer ptr, boolean ownsHandle) {
      method disposeNativeHandle (line 687) | @Override

FILE: src/org/freedesktop/gstreamer/Tag.java
  type Tag (line 25) | enum Tag {
    method Tag (line 122) | Tag(String id) {
    method getId (line 125) | public String getId() {

FILE: src/org/freedesktop/gstreamer/TagFlag.java
  type TagFlag (line 34) | public enum TagFlag implements NativeEnum<TagFlag> {
    method TagFlag (line 49) | private TagFlag(int value) {
    method intValue (line 53) | @Override

FILE: src/org/freedesktop/gstreamer/TagList.java
  class TagList (line 52) | public class TagList extends MiniObject {
    method TagList (line 61) | TagList(Initializer init) {
    method TagList (line 68) | public TagList() {
    method initializer (line 72) | private static Initializer initializer() {
    method getValueCount (line 83) | public int getValueCount(String tag) {
    method getValues (line 93) | public List<Object> getValues(final String tag) {
    method getValue (line 124) | public Object getValue(String tag, int index) {
    method getString (line 147) | public String getString(String tag, int index) {
    method getNumber (line 169) | public Number getNumber(String tag, int index) {
    method getTagNames (line 193) | public List<String> getTagNames() {
    method merge (line 211) | public TagList merge(TagList list2, TagMergeMode mode) {
    method getTagType (line 221) | private static GType getTagType(String tag) {
    type TagGetter (line 231) | private static interface TagGetter {
      method get (line 233) | Object get(TagList tl, String tag, int index);
    class MapHolder (line 240) | private static final class MapHolder {
      method get (line 245) | public Object get(TagList tl, String tag, int index) {
      method get (line 252) | public Object get(TagList tl, String tag, int index) {
      method get (line 259) | public Object get(TagList tl, String tag, int index) {
      method get (line 266) | public Object get(TagList tl, String tag, int index) {
      method get (line 273) | public Object get(TagList tl, String tag, int index) {
      method get (line 285) | public Object get(TagList tl, String tag, int index) {
      method get (line 295) | public Object get(TagList tl, String tag, int index) {

FILE: src/org/freedesktop/gstreamer/TagMergeMode.java
  type TagMergeMode (line 40) | public enum TagMergeMode implements NativeEnum<TagMergeMode> {
    method TagMergeMode (line 59) | private TagMergeMode(int value) {
    method intValue (line 63) | @Override

FILE: src/org/freedesktop/gstreamer/Version.java
  class Version (line 29) | public class Version {
    method Version (line 49) | public Version(int major, int minor) {
    method Version (line 65) | public Version(int major, int minor, int micro, int nano) {
    method toString (line 77) | @Override
    method getMajor (line 89) | public int getMajor() {
    method getMinor (line 98) | public int getMinor() {
    method getMicro (line 107) | public int getMicro() {
    method getNano (line 117) | public int getNano() {
    method checkSatisfies (line 128) | public boolean checkSatisfies(Version required) {
    method of (line 149) | public static Version of(int major, int minor) {

FILE: src/org/freedesktop/gstreamer/controller/ARGBControlBinding.java
  class ARGBControlBinding (line 44) | public class ARGBControlBinding extends ControlBinding {
    method ARGBControlBinding (line 48) | ARGBControlBinding(Initializer init) {
    method ARGBControlBinding (line 55) | private ARGBControlBinding(Handle handle, boolean needRef) {
    method create (line 71) | public static ARGBControlBinding create(GstObject object,
    method controlSourcePtr (line 87) | private static GstControlSourcePtr controlSourcePtr(ControlSource cs) {

FILE: src/org/freedesktop/gstreamer/controller/Controllers.java
  class Controllers (line 27) | public class Controllers implements NativeObject.TypeProvider {
    method types (line 29) | @Override

FILE: src/org/freedesktop/gstreamer/controller/DirectControlBinding.java
  class DirectControlBinding (line 39) | public class DirectControlBinding extends ControlBinding {
    method DirectControlBinding (line 43) | DirectControlBinding(Initializer init) {
    method DirectControlBinding (line 50) | private DirectControlBinding(Handle handle, boolean needRef) {
    method create (line 65) | public static DirectControlBinding create(GstObject object, String pro...
    method createAbsolute (line 83) | public static DirectControlBinding createAbsolute(GstObject object,

FILE: src/org/freedesktop/gstreamer/controller/InterpolationControlSource.java
  class InterpolationControlSource (line 43) | public class InterpolationControlSource extends TimedValueControlSource {
    method InterpolationControlSource (line 50) | public InterpolationControlSource() {
    method InterpolationControlSource (line 54) | InterpolationControlSource(Initializer init) {
    method InterpolationControlSource (line 62) | private InterpolationControlSource(Handle handle, boolean needRef) {
    method setMode (line 72) | public InterpolationControlSource setMode(InterpolationMode mode) {
    method getMode (line 82) | public InterpolationMode getMode() {
    class Handle (line 92) | private static class Handle extends TimedValueControlSource.Handle {
      method Handle (line 94) | public Handle(GstInterpolationControlSourcePtr ptr, boolean ownsHand...

FILE: src/org/freedesktop/gstreamer/controller/InterpolationMode.java
  type InterpolationMode (line 27) | public enum InterpolationMode implements NativeEnum<InterpolationMode> {
    method InterpolationMode (line 50) | private InterpolationMode(int value) {
    method intValue (line 54) | @Override

FILE: src/org/freedesktop/gstreamer/controller/LFOControlSource.java
  class LFOControlSource (line 40) | public class LFOControlSource extends ControlSource {
    method LFOControlSource (line 47) | public LFOControlSource() {
    method LFOControlSource (line 51) | LFOControlSource(Initializer init) {
    method LFOControlSource (line 59) | private LFOControlSource(Handle handle, boolean needRef) {
    method setAmplitude (line 73) | public LFOControlSource setAmplitude(double value) {
    method getAmplitude (line 83) | public double getAmplitude() {
    method setFrequency (line 103) | public LFOControlSource setFrequency(double value) {
    method getFrequency (line 113) | public double getFrequency() {
    method setOffset (line 131) | public LFOControlSource setOffset(double value) {
    method getOffset (line 141) | public double getOffset() {
    method setTimeshift (line 158) | public LFOControlSource setTimeshift(long value) {
    method getTimeshift (line 168) | public long getTimeshift() {
    method setWaveform (line 184) | public LFOControlSource setWaveform(LFOWaveform value) {
    method getWaveform (line 194) | public LFOWaveform getWaveform() {
    class Handle (line 203) | private static class Handle extends ControlSource.Handle {
      method Handle (line 205) | public Handle(GstLFOControlSourcePtr ptr, boolean ownsHandle) {

FILE: src/org/freedesktop/gstreamer/controller/LFOWaveform.java
  type LFOWaveform (line 26) | public enum LFOWaveform implements NativeEnum<LFOWaveform> {
    method LFOWaveform (line 57) | private LFOWaveform(int value) {
    method intValue (line 61) | @Override

FILE: src/org/freedesktop/gstreamer/controller/ProxyControlBinding.java
  class ProxyControlBinding (line 37) | @Gst.Since(minor = 12)
    method ProxyControlBinding (line 42) | ProxyControlBinding(Initializer init) {
    method ProxyControlBinding (line 49) | private ProxyControlBinding(Handle handle, boolean needRef) {
    method create (line 64) | @Gst.Since(minor = 12)

FILE: src/org/freedesktop/gstreamer/controller/TimedValueControlSource.java
  class TimedValueControlSource (line 41) | public class TimedValueControlSource extends ControlSource {
    method TimedValueControlSource (line 47) | protected TimedValueControlSource(Handle handle, boolean needRef) {
    method TimedValueControlSource (line 52) | TimedValueControlSource(Initializer init) {
    method set (line 67) | public boolean set(long timestamp, double value) {
    method setFromList (line 78) | public boolean setFromList(List<TimedValue> timedValues) {
    method getAll (line 93) | public List<TimedValue> getAll() {
    method unset (line 113) | public boolean unset(long timestamp) {
    method unsetAll (line 122) | public void unsetAll() {
    method getCount (line 131) | public int getCount() {
    method invalidateCache (line 138) | public void invalidateCache() {
    class Handle (line 143) | protected static class Handle extends ControlSource.Handle {
      method Handle (line 145) | public Handle(GstTimedValueControlSourcePtr ptr, boolean ownsHandle) {
      method getPointer (line 149) | @Override

FILE: src/org/freedesktop/gstreamer/controller/TriggerControlSource.java
  class TriggerControlSource (line 43) | public class TriggerControlSource extends TimedValueControlSource {
    method TriggerControlSource (line 50) | public TriggerControlSource() {
    method TriggerControlSource (line 54) | TriggerControlSource(Initializer init) {
    method TriggerControlSource (line 62) | private TriggerControlSource(Handle handle, boolean needRef) {
    method setTolerance (line 76) | public TriggerControlSource setTolerance(long tolerance) {
    method getTolerance (line 86) | public long getTolerance() {
    class Handle (line 94) | private static class Handle extends TimedValueControlSource.Handle {
      method Handle (line 96) | public Handle(GstTriggerControlSourcePtr ptr, boolean ownsHandle) {

FILE: src/org/freedesktop/gstreamer/device/Device.java
  class Device (line 44) | public class Device extends GstObject {
    method Device (line 48) | Device(Initializer init) {
    method createElement (line 60) | public Element createElement(String name) {
    method getCaps (line 69) | public Caps getCaps() {
    method getDeviceClass (line 80) | public String getDeviceClass() {
    method getDisplayName (line 92) | public String getDisplayName() {
    method hasClasses (line 106) | public boolean hasClasses(String classes) {
    method hasClasses (line 117) | public boolean hasClasses(String[] classes) {
    method reconfigureElement (line 132) | public boolean reconfigureElement(Element element) {
    method getProperties (line 141) | public Structure getProperties() {

FILE: src/org/freedesktop/gstreamer/device/DeviceMonitor.java
  class DeviceMonitor (line 48) | public class DeviceMonitor extends GstObject {
    method DeviceMonitor (line 52) | public DeviceMonitor() {
    method DeviceMonitor (line 56) | DeviceMonitor(Initializer init) {
    method getBus (line 65) | public Bus getBus() {
    method addFilter (line 87) | public int addFilter(String classes, Caps caps) {
    method removeFilter (line 99) | public boolean removeFilter(int filterId) {
    method start (line 110) | public boolean start() {
    method stop (line 117) | public void stop() {
    method getDevices (line 127) | public List<Device> getDevices() {

FILE: src/org/freedesktop/gstreamer/device/DeviceProvider.java
  class DeviceProvider (line 51) | public class DeviceProvider extends GstObject {
    method DeviceProvider (line 55) | DeviceProvider(Initializer init) {
    method canMonitor (line 64) | public boolean canMonitor() {
    method getBus (line 106) | public Bus getBus() {
    method getDevices (line 116) | public List<Device> getDevices() {
    method getFactory (line 139) | public DeviceProviderFactory getFactory() {
    method start (line 169) | public boolean start() {
    method stop (line 178) | public void stop() {

FILE: src/org/freedesktop/gstreamer/device/DeviceProviderFactory.java
  class DeviceProviderFactory (line 47) | public class DeviceProviderFactory extends GstObject {
    method DeviceProviderFactory (line 51) | DeviceProviderFactory(Initializer init) {
    method get (line 62) | public DeviceProvider get() {
    method getMetadata (line 74) | public String getMetadata(String key) {
    method hasClasses (line 90) | public boolean hasClasses(String classes) {
    method find (line 103) | public static DeviceProviderFactory find(String name) {
    method getByName (line 115) | public static DeviceProvider getByName(String factoryName) {
    method getDeviceProviders (line 125) | public static List<DeviceProviderFactory> getDeviceProviders(Rank minR...

FILE: src/org/freedesktop/gstreamer/elements/AppSink.java
  class AppSink (line 76) | public class AppSink extends BaseSink {
    method AppSink (line 81) | AppSink(Initializer init) {
    method AppSink (line 85) | public AppSink(String name) {
    method setCaps (line 98) | @Override
    method getCaps (line 108) | public Caps getCaps() {
    method isEOS (line 121) | public boolean isEOS() {
    method pullPreroll (line 147) | public Sample pullPreroll() {
    method pullSample (line 166) | public Sample pullSample() {
    type EOS (line 173) | public static interface EOS {
      method eos (line 180) | public void eos(AppSink elem);
    method connect (line 188) | public void connect(final EOS listener) {
    method disconnect (line 202) | public void disconnect(EOS listener) {
    type NEW_SAMPLE (line 209) | public static interface NEW_SAMPLE {
      method newSample (line 217) | public FlowReturn newSample(AppSink elem);
    method connect (line 228) | public void connect(final NEW_SAMPLE listener) {
    method disconnect (line 242) | public void disconnect(NEW_SAMPLE listener) {
    type NEW_PREROLL (line 249) | public static interface NEW_PREROLL {
      method newPreroll (line 257) | public FlowReturn newPreroll(AppSink elem);
    method connect (line 268) | public void connect(final NEW_PREROLL listener) {
    method disconnect (line 282) | public void disconnect(NEW_PREROLL listener) {

FILE: src/org/freedesktop/gstreamer/elements/AppSrc.java
  class AppSrc (line 102) | public class AppSrc extends BaseSrc {
    method AppSrc (line 107) | AppSrc(Initializer init) {
    method AppSrc (line 111) | public AppSrc(String name) {
    method setCaps (line 121) | @Override
    method getCaps (line 131) | public Caps getCaps() {
    method setSize (line 141) | public void setSize(long size) {
    method getSize (line 151) | public long getSize() {
    method setStreamType (line 161) | public void setStreamType(AppSrc.StreamType type) {
    method getStreamType (line 170) | public AppSrc.StreamType getStreamType() {
    method setMaxBytes (line 181) | public void setMaxBytes(long max) {
    method getMaxBytes (line 190) | public long getMaxBytes() {
    method setLatency (line 201) | public void setLatency(long min, long max) {
    method getLatency (line 211) | public long[] getLatency() {
    method pushBuffer (line 230) | public FlowReturn pushBuffer(Buffer buffer) {
    method endOfStream (line 241) | public FlowReturn endOfStream() {
    type ENOUGH_DATA (line 250) | public static interface ENOUGH_DATA {
      method enoughData (line 257) | public void enoughData(AppSrc elem);
    method connect (line 265) | public void connect(final ENOUGH_DATA listener) {
    method disconnect (line 279) | public void disconnect(ENOUGH_DATA listener) {
    type NEED_DATA (line 293) | public static interface NEED_DATA {
      method needData (line 301) | public void needData(AppSrc elem, int size);
    method connect (line 309) | public void connect(final NEED_DATA listener) {
    method disconnect (line 323) | public void disconnect(NEED_DATA listener) {
    type SEEK_DATA (line 332) | public static interface SEEK_DATA {
      method seekData (line 342) | public boolean seekData(AppSrc elem, long position);
    method connect (line 350) | public void connect(final SEEK_DATA listener) {
    method disconnect (line 364) | public void disconnect(SEEK_DATA listener) {
    type StreamType (line 376) | public enum StreamType implements NativeEnum<StreamType> {
      method StreamType (line 393) | private StreamType(int value) {
      method intValue (line 397) | @Override

FILE: src/org/freedesktop/gstreamer/elements/BaseSink.java
  class BaseSink (line 31) | public class BaseSink extends Element {
    method BaseSink (line 35) | protected BaseSink(Initializer init) {

FILE: src/org/freedesktop/gstreamer/elements/BaseSrc.java
  class BaseSrc (line 32) | public class BaseSrc extends Element {
    method BaseSrc (line 36) | protected BaseSrc(Initializer init) {

FILE: src/org/freedesktop/gstreamer/elements/BaseTransform.java
  class BaseTransform (line 31) | public class BaseTransform extends Element {
    method BaseTransform (line 35) | protected BaseTransform(Initializer init) {

FILE: src/org/freedesktop/gstreamer/elements/DecodeBin.java
  class DecodeBin (line 49) | public class DecodeBin extends Bin {
    method DecodeBin (line 59) | public DecodeBin(String name) {
    method DecodeBin (line 63) | DecodeBin(Initializer init) {
    type UNKNOWN_TYPE (line 71) | public static interface UNKNOWN_TYPE {
      method unknownType (line 78) | public void unknownType(DecodeBin element, Pad pad, Caps caps);
    method connect (line 86) | public void connect(final UNKNOWN_TYPE listener) {
    method disconnect (line 100) | public void disconnect(UNKNOWN_TYPE listener) {
    type AUTOPLUG_CONTINUE (line 108) | public static interface AUTOPLUG_CONTINUE {
      method autoplugContinue (line 121) | public boolean autoplugContinue(DecodeBin element, Pad pad, Caps caps);
    method connect (line 129) | public void connect(final AUTOPLUG_CONTINUE listener) {
    method disconnect (line 143) | public void disconnect(AUTOPLUG_CONTINUE listener) {
    type AUTOPLUG_FACTORIES (line 158) | public static interface AUTOPLUG_FACTORIES {
      method autoplugFactories (line 166) | public Optional<List<ElementFactory>> autoplugFactories(DecodeBin el...
    method connect (line 174) | public void connect(final AUTOPLUG_FACTORIES listener) {
    method disconnect (line 194) | public void disconnect(AUTOPLUG_FACTORIES listener) {
    type AUTOPLUG_SORT (line 206) | public static interface AUTOPLUG_SORT {
      method autoplugSort (line 217) | public Optional<List<ElementFactory>> autoplugSort(
    method connect (line 226) | public void connect(final AUTOPLUG_SORT listener) {
    method disconnect (line 254) | public void disconnect(AUTOPLUG_SORT listener) {
    type AutoplugSelectResult (line 258) | public enum AutoplugSelectResult implements NativeEnum<AutoplugSelectR...
      method AutoplugSelectResult (line 263) | AutoplugSelectResult(final int value) {
      method intValue (line 272) | @Override
    type AUTOPLUG_SELECT (line 297) | public static interface AUTOPLUG_SELECT {
      method autoplugSelect (line 308) | public AutoplugSelectResult autoplugSelect(final DecodeBin element, ...
    method connect (line 316) | public void connect(final AUTOPLUG_SELECT listener) {
    method disconnect (line 330) | public void disconnect(final AUTOPLUG_SELECT listener) {
    type AUTOPLUG_QUERY (line 339) | public static interface AUTOPLUG_QUERY {
      method autoplugQuery (line 347) | public boolean autoplugQuery(DecodeBin element, Pad pad, Element chi...
    method connect (line 355) | public void connect(final AUTOPLUG_QUERY listener) {
    method disconnect (line 369) | public void disconnect(AUTOPLUG_QUERY listener) {
    type DRAINED (line 377) | public static interface DRAINED {
      method drained (line 382) | public void drained(DecodeBin element);
    method connect (line 390) | public void connect(final DRAINED listener) {
    method disconnect (line 404) | public void disconnect(DRAINED listener) {

FILE: src/org/freedesktop/gstreamer/elements/Elements.java
  class Elements (line 28) | public class Elements implements NativeObject.TypeProvider {
    method types (line 30) | @Override

FILE: src/org/freedesktop/gstreamer/elements/PlayBin.java
  class PlayBin (line 107) | public class PlayBin extends Pipeline {
    method PlayBin (line 117) | public PlayBin(String name) {
    method PlayBin (line 127) | public PlayBin(String name, URI uri) {
    method PlayBin (line 138) | PlayBin(Initializer init) {
    method setInputFile (line 147) | public void setInputFile(File file) {
    method setURI (line 156) | public void setURI(URI uri) {
    method setAudioSink (line 167) | public void setAudioSink(Element element) {
    method setVideoSink (line 178) | public void setVideoSink(Element element) {
    method setTextSink (line 189) | public void setTextSink(Element element) {
    method setVisualization (line 198) | public void setVisualization(Element element) {
    method setElement (line 208) | private void setElement(String key, Element element) {
    method setFlags (line 222) | public void setFlags(Set<PlayFlags> flags) {
    method getFlags (line 233) | public Set<PlayFlags> getFlags() {
    method setVolume (line 248) | public void setVolume(double volume) {
    method getVolume (line 258) | public double getVolume() {
    method getCurrentAudio (line 268) | public int getCurrentAudio() {
    method setCurrentAudio (line 278) | public void setCurrentAudio(int n) {
    method getNAudio (line 287) | public int getNAudio() {
    method getAudioPad (line 299) | public Pad getAudioPad(int audioStreamIndex) {
    method getAudioTags (line 311) | public TagList getAudioTags(int audioStreamIndex) {
    method getCurrentText (line 321) | public int getCurrentText() {
    method setCurrentText (line 331) | public void setCurrentText(int n) {
    method getNText (line 340) | public int getNText() {
    method getTextPad (line 352) | public Pad getTextPad(int textStreamIndex) {
    method getTextTags (line 364) | public TagList getTextTags(int textStreamIndex) {
    method connect (line 371) | public void connect(final ABOUT_TO_FINISH listener) {
    method disconnect (line 385) | public void disconnect(ABOUT_TO_FINISH listener) {
    method connect (line 392) | public void connect(final VIDEO_CHANGED listener) {
    method disconnect (line 406) | public void disconnect(VIDEO_CHANGED listener) {
    method connect (line 413) | public void connect(final AUDIO_CHANGED listener) {
    method disconnect (line 427) | public void disconnect(AUDIO_CHANGED listener) {
    method connect (line 434) | public void connect(final TEXT_CHANGED listener) {
    method disconnect (line 448) | public void disconnect(TEXT_CHANGED listener) {
    method connect (line 455) | public void connect(final VIDEO_TAGS_CHANGED listener) {
    method disconnect (line 469) | public void disconnect(VIDEO_TAGS_CHANGED listener) {
    method connect (line 476) | public void connect(final AUDIO_TAGS_CHANGED listener) {
    method disconnect (line 490) | public void disconnect(AUDIO_TAGS_CHANGED listener) {
    method connect (line 497) | public void connect(final TEXT_TAGS_CHANGED listener) {
    method disconnect (line 511) | public void disconnect(TEXT_TAGS_CHANGED listener) {
    method connect (line 520) | @Gst.Since(minor = 10)
    method disconnect (line 536) | @Gst.Since(minor = 10)
    method connect (line 546) | public void connect(final SOURCE_SETUP listener) {
    method disconnect (line 560) | public void disconnect(SOURCE_SETUP listener) {
    type ABOUT_TO_FINISH (line 568) | public static interface ABOUT_TO_FINISH {
      method aboutToFinish (line 572) | public void aboutToFinish(PlayBin element);
    type VIDEO_CHANGED (line 580) | public static interface VIDEO_CHANGED {
      method videoChanged (line 584) | public void videoChanged(PlayBin element);
    type AUDIO_CHANGED (line 592) | public static interface AUDIO_CHANGED {
      method audioChanged (line 596) | public void audioChanged(PlayBin element);
    type TEXT_CHANGED (line 604) | public static interface TEXT_CHANGED {
      method textChanged (line 608) | public void textChanged(PlayBin element);
    type VIDEO_TAGS_CHANGED (line 615) | public static interface VIDEO_TAGS_CHANGED {
      method videoTagsChanged (line 620) | public void videoTagsChanged(PlayBin element, int stream);
    type AUDIO_TAGS_CHANGED (line 627) | public static interface AUDIO_TAGS_CHANGED {
      method audioTagsChanged (line 632) | public void audioTagsChanged(PlayBin element, int stream);
    type TEXT_TAGS_CHANGED (line 639) | public static interface TEXT_TAGS_CHANGED {
      method textTagsChanged (line 644) | public void textTagsChanged(PlayBin element, int stream);
    type ELEMENT_SETUP (line 657) | @Gst.Since(minor = 10)
      method elementSetup (line 666) | public void elementSetup(PlayBin playbin, Element element);
    type SOURCE_SETUP (line 679) | public static interface SOURCE_SETUP {
      method sourceSetup (line 687) | public void sourceSetup(PlayBin playbin, Element element);

FILE: src/org/freedesktop/gstreamer/elements/PlayFlags.java
  type PlayFlags (line 25) | public enum PlayFlags implements NativeFlags<PlayFlags> {
    method PlayFlags (line 85) | private PlayFlags(int value) {
    method intValue (line 89) | @Override

FILE: src/org/freedesktop/gstreamer/elements/URIDecodeBin.java
  class URIDecodeBin (line 46) | public class URIDecodeBin extends Bin {
    method URIDecodeBin (line 51) | public URIDecodeBin(final String name) {
    method URIDecodeBin (line 55) | URIDecodeBin(final Initializer init) {
    type UNKNOWN_TYPE (line 63) | public static interface UNKNOWN_TYPE {
      method unknownType (line 70) | public void unknownType(URIDecodeBin element, Pad pad, Caps caps);
    method connect (line 78) | public void connect(final UNKNOWN_TYPE listener) {
    method disconnect (line 92) | public void disconnect(UNKNOWN_TYPE listener) {
    type AUTOPLUG_CONTINUE (line 100) | public static interface AUTOPLUG_CONTINUE {
      method autoplugContinue (line 113) | public boolean autoplugContinue(URIDecodeBin element, Pad pad, Caps ...
    method connect (line 121) | public void connect(final AUTOPLUG_CONTINUE listener) {
    method disconnect (line 135) | public void disconnect(AUTOPLUG_CONTINUE listener) {
    type AUTOPLUG_FACTORIES (line 150) | public static interface AUTOPLUG_FACTORIES {
      method autoplugFactories (line 158) | public Optional<List<ElementFactory>> autoplugFactories(URIDecodeBin...
    method connect (line 166) | public void connect(final AUTOPLUG_FACTORIES listener) {
    method disconnect (line 186) | public void disconnect(AUTOPLUG_FACTORIES listener) {
    type AUTOPLUG_SORT (line 198) | public static interface AUTOPLUG_SORT {
      method autoplugSort (line 209) | public Optional<List<ElementFactory>> autoplugSort(
    method connect (line 218) | public void connect(final AUTOPLUG_SORT listener) {
    method disconnect (line 246) | public void disconnect(AUTOPLUG_SORT listener) {
    type AutoplugSelectResult (line 250) | public enum AutoplugSelectResult implements NativeEnum<AutoplugSelectR...
      method AutoplugSelectResult (line 255) | AutoplugSelectResult(final int value) {
      method intValue (line 264) | @Override
    type AUTOPLUG_SELECT (line 289) | public static interface AUTOPLUG_SELECT {
      method autoplugSelect (line 300) | public AutoplugSelectResult autoplugSelect(final URIDecodeBin elemen...
    method connect (line 308) | public void connect(final AUTOPLUG_SELECT listener) {
    method disconnect (line 322) | public void disconnect(final AUTOPLUG_SELECT listener) {
    type AUTOPLUG_QUERY (line 331) | public static interface AUTOPLUG_QUERY {
      method autoplugQuery (line 339) | public boolean autoplugQuery(URIDecodeBin element, Pad pad, Element ...
    method connect (line 347) | public void connect(final AUTOPLUG_QUERY listener) {
    method disconnect (line 361) | public void disconnect(AUTOPLUG_QUERY listener) {
    type DRAINED (line 369) | public static interface DRAINED {
      method drained (line 374) | public void drained(URIDecodeBin element);
    method connect (line 382) | public void connect(final DRAINED listener) {
    method disconnect (line 396) | public void disconnect(DRAINED listener) {
    type SOURCE_SETUP (line 404) | public static interface SOURCE_SETUP {
      method sourceSetup (line 411) | public void sourceSetup(URIDecodeBin bin, Element elem);
    method connect (line 419) | public void connect(final SOURCE_SETUP listener) {
    method disconnect (line 433) | public void disconnect(final SOURCE_SETUP listener) {

FILE: src/org/freedesktop/gstreamer/event/BufferSizeEvent.java
  class BufferSizeEvent (line 39) | public class BufferSizeEvent extends Event {
    method BufferSizeEvent (line 46) | BufferSizeEvent(Initializer init) {
    method BufferSizeEvent (line 63) | public BufferSizeEvent(Format format, long minsize, long maxsize, bool...
    method getFormat (line 72) | public Format getFormat() {
    method getMinimumSize (line 83) | public long getMinimumSize() {
    method getMaximumSize (line 94) | public long getMaximumSize() {
    method isAsync (line 105) | public boolean isAsync() {

FILE: src/org/freedesktop/gstreamer/event/CapsEvent.java
  class CapsEvent (line 35) | public class CapsEvent extends Event {
    method CapsEvent (line 42) | CapsEvent(Initializer init) {
    method CapsEvent (line 49) | public CapsEvent(final Caps caps) {

FILE: src/org/freedesktop/gstreamer/event/EOSEvent.java
  class EOSEvent (line 49) | public class EOSEvent extends Event {
    method EOSEvent (line 56) | EOSEvent(Initializer init) {
    method EOSEvent (line 63) | public EOSEvent() {

FILE: src/org/freedesktop/gstreamer/event/Event.java
  class Event (line 56) | @HasSubtype
    method Event (line 86) | Event(Initializer init) {
    method getStructure (line 95) | public Structure getStructure() {
    method create (line 99) | private static Event create(Initializer init) {
    class Types (line 105) | public static class Types implements TypeProvider {
      method types (line 107) | @Override

FILE: src/org/freedesktop/gstreamer/event/EventType.java
  type EventType (line 40) | public enum EventType implements NativeEnum<EventType> {
    method EventType (line 193) | private EventType(int num, int flags) {
    method intValue (line 197) | @Override
    class Flags (line 202) | private static final class Flags {

FILE: src/org/freedesktop/gstreamer/event/FlushStartEvent.java
  class FlushStartEvent (line 52) | public class FlushStartEvent extends Event {
    method FlushStartEvent (line 60) | FlushStartEvent(Initializer init) {
    method FlushStartEvent (line 67) | public FlushStartEvent() {

FILE: src/org/freedesktop/gstreamer/event/FlushStopEvent.java
  class FlushStopEvent (line 43) | public class FlushStopEvent extends Event {
    method FlushStopEvent (line 50) | FlushStopEvent(Initializer init) {
    method FlushStopEvent (line 57) | public FlushStopEvent() {

FILE: src/org/freedesktop/gstreamer/event/LatencyEvent.java
  class LatencyEvent (line 41) | public class LatencyEvent extends Event {
    method LatencyEvent (line 48) | LatencyEvent(Initializer init) {
    method LatencyEvent (line 57) | public LatencyEvent(long latency) {
    method getLatency (line 66) | public long getLatency() {

FILE: src/org/freedesktop/gstreamer/event/NavigationEvent.java
  class NavigationEvent (line 34) | public class NavigationEvent extends Event {
    method NavigationEvent (line 41) | NavigationEvent(Initializer init) {
    method NavigationEvent (line 53) | public NavigationEvent(Structure structure) {
    method toString (line 62) | @Override
    method createMouseEvent (line 89) | public static NavigationEvent createMouseEvent(String event, double x,...
    method createMouseMoveEvent (line 101) | public static NavigationEvent createMouseMoveEvent(double x, double y,...
    method createMouseButtonPressEvent (line 113) | public static NavigationEvent createMouseButtonPressEvent(double x, do...
    method createMouseButtonReleaseEvent (line 125) | public static NavigationEvent createMouseButtonReleaseEvent(double x, ...
    method createKeyEvent (line 136) | public static NavigationEvent createKeyEvent(String event, String key) {
    method createKeyPressEvent (line 146) | public static NavigationEvent createKeyPressEvent(String key) {
    method createKeyReleaseEvent (line 156) | public static NavigationEvent createKeyReleaseEvent(String key) {
    class MouseEvent (line 160) | private static final class MouseEvent extends NavigationEvent {
      method MouseEvent (line 162) | public MouseEvent(String event, double x, double y, int button) {
      method toString (line 175) | @Override
    class KeyEvent (line 185) | private static final class KeyEvent extends NavigationEvent {
      method KeyEvent (line 187) | public KeyEvent(String event, String key) {
      method toString (line 198) | @Override

FILE: src/org/freedesktop/gstreamer/event/QOSEvent.java
  class QOSEvent (line 64) | public class QOSEvent extends Event {
    method QOSEvent (line 71) | QOSEvent(Initializer init) {
    method QOSEvent (line 83) | public QOSEvent(QOSType type, double proportion, long difference, long...
    method getType (line 90) | public QOSType getType() {
    method getProportion (line 106) | public double getProportion() {
    method getDifference (line 122) | public long getDifference() {
    method getTimestamp (line 137) | public long getTimestamp() {

FILE: src/org/freedesktop/gstreamer/event/QOSType.java
  type QOSType (line 27) | public enum QOSType implements NativeEnum<QOSType> {
    method QOSType (line 48) | private QOSType(int value) {
    method intValue (line 52) | @Override

FILE: src/org/freedesktop/gstreamer/event/ReconfigureEvent.java
  class ReconfigureEvent (line 35) | public class ReconfigureEvent extends Event {
    method ReconfigureEvent (line 42) | ReconfigureEvent(Initializer init) {
    method ReconfigureEvent (line 49) | public ReconfigureEvent() {

FILE: src/org/freedesktop/gstreamer/event/SeekEvent.java
  class SeekEvent (line 69) | public class SeekEvent extends Event {
    method SeekEvent (line 75) | SeekEvent(Initializer init) {
    method SeekEvent (line 90) | public SeekEvent(double rate, Format format, EnumSet<SeekFlags> flags,
    method sanitizeRate (line 96) | private static double sanitizeRate(double rate) {
    method getRate (line 112) | public double getRate() {
    method getFormat (line 123) | public Format getFormat() {
    method getFlags (line 134) | public EnumSet<SeekFlags> getFlags() {
    method getStartType (line 145) | public SeekType getStartType() {
    method getStart (line 156) | public long getStart() {
    method getStopType (line 167) | public SeekType getStopType() {
    method getStop (line 178) | public long getStop() {

FILE: src/org/freedesktop/gstreamer/event/SeekFlags.java
  type SeekFlags (line 47) | public enum SeekFlags implements NativeFlags<SeekFlags> {
    method SeekFlags (line 107) | private SeekFlags(int value) {
    method intValue (line 111) | @Override

FILE: src/org/freedesktop/gstreamer/event/SeekType.java
  type SeekType (line 32) | public enum SeekType implements NativeEnum<SeekType>{
    method SeekType (line 42) | private SeekType(int value) {
    method intValue (line 46) | @Override

FILE: src/org/freedesktop/gstreamer/event/SegmentEvent.java
  class SegmentEvent (line 66) | public class SegmentEvent extends Event {
    method SegmentEvent (line 73) | SegmentEvent(Initializer init) {
    method SegmentEvent (line 80) | SegmentEvent(GstSegmentStruct segment) {
    method getSegment (line 92) | GstAPI.GstSegmentStruct getSegment() {

FILE: src/org/freedesktop/gstreamer/event/StepEvent.java
  class StepEvent (line 45) | public class StepEvent extends Event {
    method StepEvent (line 52) | StepEvent(Initializer init) {
    method StepEvent (line 65) | public StepEvent(Format format, long amount, double rate, boolean flus...

FILE: src/org/freedesktop/gstreamer/event/StreamStartEvent.java
  class StreamStartEvent (line 34) | public class StreamStartEvent extends Event {
    method StreamStartEvent (line 40) | StreamStartEvent(Initializer init) {
    method StreamStartEvent (line 48) | public StreamStartEvent(final String stream_id) {

FILE: src/org/freedesktop/gstreamer/event/TagEvent.java
  class TagEvent (line 44) | public class TagEvent extends Event {
    method TagEvent (line 51) | TagEvent(Initializer init) {
    method TagEvent (line 64) | public TagEvent(TagList taglist) {
    method getTagList (line 76) | public TagList getTagList() {

FILE: src/org/freedesktop/gstreamer/glib/GCancellable.java
  class GCancellable (line 24) | public class GCancellable extends GObject{
    method GCancellable (line 28) | public GCancellable() {
    method GCancellable (line 32) | private GCancellable(Initializer init) {

FILE: src/org/freedesktop/gstreamer/glib/GDate.java
  class GDate (line 34) | public class GDate extends NativeObject {
    method GDate (line 38) | GDate(Initializer init) {
    method GDate (line 42) | GDate(Handle handle) {
    method getDay (line 46) | public int getDay() {
    method getMonth (line 50) | public int getMonth() {
    method getYear (line 53) | public int getYear() {
    method toString (line 57) | @Override
    method createInstance (line 62) | public static GDate createInstance(int day, int month, int year) {
    method createInstance (line 67) | public static GDate createInstance(int julian_day) {
    class Handle (line 72) | private static final class Handle extends NativeObject.Handle {
      method Handle (line 74) | public Handle(GPointer ptr, boolean ownsHandle) {
      method disposeNativeHandle (line 78) | @Override

FILE: src/org/freedesktop/gstreamer/glib/GError.java
  class GError (line 27) | public class GError {
    method GError (line 38) | public GError(int code, String message) {
    method getCode (line 48) | public final int getCode() {
    method getMessage (line 56) | public String getMessage() {

FILE: src/org/freedesktop/gstreamer/glib/GInetAddress.java
  class GInetAddress (line 24) | public class GInetAddress extends GObject{
    method GInetAddress (line 28) | GInetAddress(Initializer init) {
    method getAddress (line 32) | public String getAddress() {

FILE: src/org/freedesktop/gstreamer/glib/GInetSocketAddress.java
  class GInetSocketAddress (line 26) | public class GInetSocketAddress extends GSocketAddress {
    method GInetSocketAddress (line 30) | public GInetSocketAddress(String address, int port)  {
    method GInetSocketAddress (line 34) | GInetSocketAddress(Initializer init) {
    method getAddress (line 38) | public GInetAddress getAddress() {
    method getPort (line 42) | public int getPort() {
    method createRawAddress (line 46) | private static Initializer createRawAddress(String address, int port) {

FILE: src/org/freedesktop/gstreamer/glib/GLib.java
  class GLib (line 32) | public class GLib {
    method setEnv (line 55) | public static boolean setEnv(String variable, final String value, bool...
    method getEnv (line 71) | public static String getEnv(String variable) {
    method unsetEnv (line 91) | public static void unsetEnv(String variable) {
    class Types (line 95) | public static class Types implements NativeObject.TypeProvider {
      method types (line 97) | @Override

FILE: src/org/freedesktop/gstreamer/glib/GLibException.java
  class GLibException (line 24) | public class GLibException extends RuntimeException {
    method GLibException (line 29) | public GLibException() {
    method GLibException (line 37) | public GLibException(String msg) {
    method GLibException (line 40) | public GLibException(GError error) {

FILE: src/org/freedesktop/gstreamer/glib/GMainContext.java
  class GMainContext (line 29) | public class GMainContext extends RefCountedObject {
    method GMainContext (line 31) | public GMainContext() {
    method GMainContext (line 34) | private GMainContext(Initializer init) {
    method attach (line 38) | public int attach(GSource source) {
    method getDefaultContext (line 41) | public static GMainContext getDefaultContext() {
    class Handle (line 45) | private static final class Handle extends RefCountedObject.Handle {
      method Handle (line 47) | public Handle(GPointer ptr, boolean ownsHandle) {
      method disposeNativeHandle (line 51) | @Override
      method ref (line 56) | @Override
      method unref (line 61) | @Override

FILE: src/org/freedesktop/gstreamer/glib/GObject.java
  class GObject (line 68) | public abstract class GObject extends RefCountedObject {
    method GObject (line 83) | protected GObject(Initializer init) {
    method GObject (line 87) | protected GObject(Handle handle, boolean needRef) {
    method connect (line 119) | public <T> void connect(Class<T> listenerClass, T listener, Callback c...
    method connect (line 124) | public synchronized <T> void connect(String signal, Class<T> listenerC...
    method disconnect (line 129) | public synchronized <T> void disconnect(Class<T> listenerClass, T list...
    method emit (line 133) | public synchronized void emit(String signal, Object... arguments) {
    method emit (line 137) | public synchronized <T extends NativeObject> T emit(Class<T> resultTyp...
    method get (line 157) | public Object get(String property) {
    method getPropertyDefaultValue (line 217) | public Object getPropertyDefaultValue(String property) {
    method getPropertyMaximumValue (line 233) | public Object getPropertyMaximumValue(String property) {
    method getPropertyMinimumValue (line 249) | public Object getPropertyMinimumValue(String property) {
    method getRefCount (line 264) | public int getRefCount() {
    method getTypeName (line 285) | public String getTypeName() {
    method listPropertyNames (line 289) | public List<String> listPropertyNames() {
    method set (line 306) | public void set(String property, Object data) {
    method addCallback (line 381) | protected synchronized <T> void addCallback(Class<T> listenerClass, T ...
    method dispose (line 391) | @Override
    method invalidate (line 397) | @Override
    method removeCallback (line 414) | protected synchronized <T> void removeCallback(Class<T> listenerClass,...
    method findProperty (line 434) | private GObjectAPI.GParamSpec findProperty(String propertyName) {
    method findProperty (line 442) | private GObjectAPI.GParamSpecTypeSpecific findProperty(String property...
    method getCallbackMap (line 472) | private synchronized final Map<Class<?>, Map<Object, GCallback>> getCa...
    method listProperties (line 479) | private GObjectAPI.GParamSpec[] listProperties() {
    method booleanValue (line 495) | private static boolean booleanValue(Object value) {
    method doubleValue (line 506) | private static double doubleValue(Object value) {
    method floatValue (line 515) | private static float floatValue(Object value) {
    method intValue (line 524) | private static int intValue(Object value) {
    method longValue (line 533) | private static long longValue(Object value) {
    method setGValue (line 542) | private static boolean setGValue(GValue value, GType type, Object data) {
    method transform (line 571) | private static GValue transform(GValue src, GType dstType) {
    method transform (line 578) | private static void transform(Object data, GType type, GValue dst) {
    class GCallback (line 585) | protected abstract class GCallback {
      method GCallback (line 591) | protected GCallback(NativeLong id, Callback cb) {
      method remove (line 597) | void remove() {
      method disconnect (line 604) | abstract protected void disconnect();
    type GInterface (line 611) | public static interface GInterface {
      method getGObject (line 618) | public GObject getGObject();
    class SignalCallback (line 622) | private final class SignalCallback extends GCallback {
      method SignalCallback (line 624) | protected SignalCallback(String signal, Callback cb) {
      method disconnect (line 631) | @Override
    class Handle (line 637) | protected static class Handle extends RefCountedObject.Handle {
      method Handle (line 642) | public Handle(GObjectPtr ptr, boolean ownsHandle) {
      method connectSignal (line 648) | private synchronized NativeLong connectSignal(String signal, Callbac...
      method disconnectSignal (line 656) | private synchronized void disconnectSignal(NativeLong id) {
      method clearSignals (line 662) | private synchronized void clearSignals() {
      method invalidate (line 667) | @Override
      method dispose (line 673) | @Override
      method disposeNativeHandle (line 679) | @Override
      method ref (line 684) | @Override
      method sink (line 693) | protected void sink() {
      method unref (line 697) | @Override
      method getPointer (line 702) | @Override
      method toString (line 707) | @Override
    class ToggleNotify (line 719) | private static final class ToggleNotify implements GObjectAPI.GToggleN...
      method callback (line 721) | @Override

FILE: src/org/freedesktop/gstreamer/glib/GQuark.java
  class GQuark (line 32) | public class GQuark {
    method GQuark (line 36) | public GQuark(int value) {
    method intValue (line 40) | public int intValue() {
    method toString (line 44) | @Override
    method valueOf (line 49) | public static GQuark valueOf(String quark) {

FILE: src/org/freedesktop/gstreamer/glib/GSocket.java
  class GSocket (line 27) | public class GSocket extends GObject {
    method GSocket (line 31) | public GSocket(GSocketFamily family, GSocketType type, GSocketProtocol...
    method GSocket (line 35) | GSocket(Initializer init) {
    method bind (line 39) | public GSocket bind(String address, int port) {
    method connect (line 52) | public void connect(String address, int port) {
    method getFD (line 64) | public int getFD() {
    method getLocalAddress (line 68) | public GInetSocketAddress getLocalAddress() {
    method getRemoteAddress (line 72) | public GInetSocketAddress getRemoteAddress() {
    method getSocketFamily (line 76) | public GSocketFamily getSocketFamily() {
    method getSocketProtocol (line 80) | public GSocketProtocol getSocketProtocol() {
    method getSocketType (line 84) | public GSocketType getSocketType() {
    method isBlocking (line 88) | public boolean isBlocking() {
    method extractAndClearError (line 92) | private static String extractAndClearError(GErrorStruct struct) {
    method makeRawSocket (line 99) | private static Initializer makeRawSocket(GSocketFamily family, GSocket...

FILE: src/org/freedesktop/gstreamer/glib/GSocketAddress.java
  class GSocketAddress (line 22) | public class GSocketAddress extends GObject{
    method GSocketAddress (line 26) | public GSocketAddress(Initializer init) {
    method getFamily (line 30) | public GSocketFamily getFamily() {

FILE: src/org/freedesktop/gstreamer/glib/GSocketFamily.java
  type GSocketFamily (line 28) | public enum GSocketFamily {
    method GSocketFamily (line 44) | private GSocketFamily(int gioValue) {
    method toGioValue (line 48) | public int toGioValue() {
    method fromGioValue (line 52) | public static GSocketFamily fromGioValue(int gioValue) {

FILE: src/org/freedesktop/gstreamer/glib/GSocketProtocol.java
  type GSocketProtocol (line 26) | public enum GSocketProtocol {
    method GSocketProtocol (line 42) | private GSocketProtocol(int gioValue) {
    method toGioValue (line 46) | public int toGioValue() {
    method fromGioValue (line 50) | public static GSocketProtocol fromGioValue(int gioValue) {

FILE: src/org/freedesktop/gstreamer/glib/GSocketType.java
  type GSocketType (line 26) | public enum GSocketType {
    method GSocketType (line 41) | private GSocketType(int gioValue) {
    method toGioValue (line 45) | public int toGioValue() {
    method fromGioValue (line 49) | public static GSocketType fromGioValue(int gioValue) {

FILE: src/org/freedesktop/gstreamer/glib/GSource.java
  class GSource (line 31) | public class GSource extends RefCountedObject {
    method GSource (line 33) | GSource(Initializer init) {
    method attach (line 37) | public int attach(GMainContext context) {
    method setCallback (line 41) | public void setCallback(final Callable<Boolean> call) {
    class Handle (line 59) | private static final class Handle extends RefCountedObject.Handle {
      method Handle (line 61) | Handle(GPointer ptr, boolean ownsHandle) {
      method disposeNativeHandle (line 65) | @Override
      method ref (line 71) | @Override
      method unref (line 76) | @Override

FILE: src/org/freedesktop/gstreamer/glib/MainContextExecutorService.java
  class MainContextExecutorService (line 39) | public class MainContextExecutorService extends AbstractExecutorService ...
    method call (line 44) | public Boolean call() throws Exception {
    method MainContextExecutorService (line 60) | public MainContextExecutorService(GMainContext context) {
    method awaitTermination (line 63) | public boolean awaitTermination(long timeout, TimeUnit units) throws I...
    method execute (line 66) | public void execute(Runnable runnable) {
    method isShutdown (line 71) | public boolean isShutdown() {
    method isTerminated (line 75) | public boolean isTerminated() {
    method schedule (line 81) | public ScheduledFuture<?> schedule(Runnable runnable, long delay, Time...
    method schedule (line 85) | public <V> ScheduledFuture<V> schedule(Callable<V> callable, long dela...
    method scheduleAtFixedRate (line 89) | public ScheduledFuture<?> scheduleAtFixedRate(Runnable runnable, long ...
    method scheduleWithFixedDelay (line 93) | public ScheduledFuture<?> scheduleWithFixedDelay(Runnable runnable, lo...
    method shutdown (line 96) | public void shutdown() {
    method shutdownNow (line 99) | public List<Runnable> shutdownNow() {
    method invokeLater (line 107) | private void invokeLater(final Runnable r) {
    class ScheduledTimeout (line 121) | private class ScheduledTimeout<V> extends FutureTask<V> implements Sch...
      method call (line 124) | public Boolean call() {
      method call (line 139) | public Boolean call() {
      method ScheduledTimeout (line 147) | public ScheduledTimeout(Callable<V> call, long delay, TimeUnit units) {
      method ScheduledTimeout (line 150) | public ScheduledTimeout(Callable<V> call, long delay, long period, T...
      method getMilliseconds (line 158) | private final int getMilliseconds(long time) {
      method start (line 162) | private void start(long timeout, Callable<Boolean> callback) {
      method getDelay (line 180) | public long getDelay(TimeUnit units) {
      method compareTo (line 184) | public int compareTo(Delayed delayed) {

FILE: src/org/freedesktop/gstreamer/glib/NativeEnum.java
  type NativeEnum (line 25) | public interface NativeEnum<T extends Enum<T>> {
    method intValue (line 27) | public int intValue();
    method fromInt (line 39) | public static <T extends Enum<T> & NativeEnum<T>> T fromInt(Class<T> t...
    method fromInt (line 61) | public static <T extends Enum<T> & NativeEnum<T>> T fromInt(Class<T> t...

FILE: src/org/freedesktop/gstreamer/glib/NativeFlags.java
  type NativeFlags (line 27) | public interface NativeFlags<T extends Enum<T>> extends NativeEnum<T> {
    method toInt (line 29) | public static <FLAG extends Enum<FLAG> & NativeFlags<FLAG>> int toInt(...
    method toInt (line 37) | public static <FLAG extends Enum<FLAG> & NativeFlags<FLAG>> int toInt(...
    method fromInt (line 45) | public static <FLAG extends Enum<FLAG> & NativeFlags<FLAG>> EnumSet<FLAG>

FILE: src/org/freedesktop/gstreamer/glib/NativeObject.java
  class NativeObject (line 48) | public abstract class NativeObject implements AutoCloseable {
    method NativeObject (line 60) | protected NativeObject(Handle handle) {
    method disown (line 75) | public void disown() {
    method close (line 87) | @Override
    method dispose (line 98) | public void dispose() {
    method equals (line 103) | @Override
    method getPointer (line 108) | protected GPointer getPointer() {
    method getRawPointer (line 116) | protected Pointer getRawPointer() {
    method hashCode (line 124) | @Override
    method invalidate (line 135) | public void invalidate() {
    method toString (line 140) | @Override
    method objectFor (line 145) | static <T extends NativeObject> T objectFor(GPointer gptr, Class<T> cl...
    method instanceFor (line 204) | static NativeObject instanceFor(Pointer ptr) {
    class Initializer (line 222) | public static final class Initializer {
      method Initializer (line 227) | Initializer(GPointer ptr, boolean needRef, boolean ownsHandle) {
    class NativeRef (line 235) | private static final class NativeRef extends WeakReference<NativeObjec...
      method NativeRef (line 267) | private NativeRef(NativeObject obj, Handle handle) {
    class Handle (line 278) | protected static abstract class Handle {
      method Handle (line 290) | public Handle(GPointer ptr, boolean ownsReference) {
      method disown (line 299) | public void disown() {
      method invalidate (line 311) | public void invalidate() {
      method dispose (line 326) | public void dispose() {
      method isCacheable (line 349) | public boolean isCacheable() {
      method disposeNativeHandle (line 361) | protected abstract void disposeNativeHandle(GPointer ptr);
      method getPointer (line 369) | protected GPointer getPointer() {
      method ownsReference (line 379) | protected boolean ownsReference() {
    class TypeRegistration (line 391) | public static class TypeRegistration<T extends NativeObject> {
      method TypeRegistration (line 397) | TypeRegistration(Class<T> javaType, String gTypeName, Function<Initi...
      method getJavaType (line 403) | public Class<T> getJavaType() {
      method getGTypeName (line 407) | public String getGTypeName() {
      method getFactory (line 411) | public Function<Initializer, ? extends T> getFactory() {
    type TypeProvider (line 421) | public static interface TypeProvider {
      method types (line 428) | public Stream<TypeRegistration<?>> types();

FILE: src/org/freedesktop/gstreamer/glib/Natives.java
  class Natives (line 37) | public final class Natives {
    method Natives (line 39) | private Natives() {
    method initializer (line 53) | public static final NativeObject.Initializer initializer(Pointer ptr) {
    method initializer (line 68) | public static final NativeObject.Initializer initializer(Pointer ptr, ...
    method initializer (line 83) | public static final NativeObject.Initializer initializer(Pointer ptr, ...
    method objectFor (line 104) | public static <T extends NativeObject> T objectFor(Pointer ptr, Class<...
    method objectFor (line 121) | public static <T extends NativeObject> T objectFor(GPointer ptr, Class...
    method callerOwnsReturn (line 139) | public static <T extends NativeObject> T callerOwnsReturn(Pointer ptr,...
    method callerOwnsReturn (line 157) | public static <T extends NativeObject> T callerOwnsReturn(GPointer ptr...
    method objectFor (line 161) | private static <T extends NativeObject> T objectFor(Pointer ptr, Class...
    method getRawPointer (line 177) | public static Pointer getRawPointer(NativeObject obj) {
    method getPointer (line 189) | public static GPointer getPointer(NativeObject obj) {
    method ownsReference (line 199) | public static boolean ownsReference(NativeObject obj) {
    method validReference (line 209) | public static boolean validReference(NativeObject obj) {
    method ref (line 220) | public static <T extends RefCountedObject> T ref(T obj) {
    method unref (line 232) | public static <T extends RefCountedObject> T unref(T obj) {
    method registration (line 259) | public static <T extends NativeObject> NativeObject.TypeRegistration<T>

FILE: src/org/freedesktop/gstreamer/glib/RefCountedObject.java
  class RefCountedObject (line 26) | public abstract class RefCountedObject extends NativeObject {
    method RefCountedObject (line 38) | protected RefCountedObject(Handle handle) {
    method RefCountedObject (line 43) | protected RefCountedObject(Handle handle, boolean needRef) {
    class Handle (line 57) | protected static abstract class Handle extends NativeObject.Handle {
      method Handle (line 59) | public Handle(GPointer ptr, boolean ownsHandle) {
      method ref (line 63) | protected abstract void ref();
      method unref (line 65) | protected abstract void unref();

FILE: src/org/freedesktop/gstreamer/interfaces/ColorBalance.java
  class ColorBalance (line 32) | public class ColorBalance extends GstInterface {
    method wrap (line 40) | public static final ColorBalance wrap(Element element) {
    method ColorBalance (line 49) | private ColorBalance(Element element) {
    method getChannelList (line 58) | public List<ColorBalanceChannel> getChannelList() {
    method channelFor (line 79) | private final ColorBalanceChannel channelFor(Pointer pointer,
    type VALUE_CHANGED (line 90) | public static interface VALUE_CHANGED {
      method colorBalanceValueChanged (line 95) | public void colorBalanceValueChanged(ColorBalance colorBalance,
    method connect (line 104) | public void connect(final VALUE_CHANGED listener) {
    method disconnect (line 119) | public void disconnect(VALUE_CHANGED listener) {

FILE: src/org/freedesktop/gstreamer/interfaces/ColorBalanceChannel.java
  class ColorBalanceChannel (line 31) | public class ColorBalanceChannel extends GObject {
    method ColorBalanceChannel (line 42) | ColorBalanceChannel(Initializer init) {
    method ColorBalanceChannel (line 47) | ColorBalanceChannel(ColorBalance colorBalance, Pointer ptr,
    method getName (line 54) | public String getName() {
    method getMinValue (line 58) | public int getMinValue() {
    method getMaxValue (line 62) | public int getMaxValue() {
    method setValue (line 66) | public void setValue(int value) {
    method getValue (line 70) | public int getValue(int value) {

FILE: src/org/freedesktop/gstreamer/interfaces/GstInterface.java
  class GstInterface (line 32) | class GstInterface implements GObject.GInterface {
    method GstInterface (line 34) | protected GstInterface(Element element, GType type) {
    method getGObject (line 38) | @Override

FILE: src/org/freedesktop/gstreamer/interfaces/Navigation.java
  class Navigation (line 28) | public class Navigation extends GstInterface {
    method wrap (line 36) | public static final Navigation wrap(Element element) {
    method Navigation (line 46) | private Navigation(Element element) {
    method sendEvent (line 50) | public void sendEvent(Structure structure) {
    method sendKeyEvent (line 54) | public void sendKeyEvent(String event, String key) {
    method sendMouseEvent (line 58) | public void sendMouseEvent(String event, int button, double x, double ...

FILE: src/org/freedesktop/gstreamer/interfaces/VideoOrientation.java
  class VideoOrientation (line 27) | public class VideoOrientation extends GstInterface {
    method wrap (line 35) | public static final VideoOrientation wrap(Element element) {
    method VideoOrientation (line 45) | private VideoOrientation(Element element) {
    method setHflip (line 65) | public boolean setHflip(boolean flip) {
    method setVflip (line 69) | public boolean setVflip(boolean flip) {
    method setHcenter (line 73) | public boolean setHcenter(int center) {
    method setVcenter (line 77) | public boolean setVcenter(int center) {

FILE: src/org/freedesktop/gstreamer/interfaces/VideoOverlay.java
  class VideoOverlay (line 38) | public class VideoOverlay extends GstInterface {
    method wrap (line 45) | public static VideoOverlay wrap(Element element) {
    method isPrepareWindowHandleMessage (line 56) | public static boolean isPrepareWindowHandleMessage(Message message) {
    method VideoOverlay (line 65) | private VideoOverlay(Element element) {
    method setWindowHandle (line 74) | public void setWindowHandle(long handle) {
    method expose (line 82) | public void expose() {
    method handleEvent (line 93) | public void handleEvent(boolean handle_events) {
    method setRenderRectangle (line 114) | public boolean setRenderRectangle(int x, int y, int width, int height) {

FILE: src/org/freedesktop/gstreamer/lowlevel/AppAPI.java
  type AppAPI (line 38) | public interface AppAPI extends com.sun.jna.Library {
    method gst_app_src_get_type (line 43) | GType gst_app_src_get_type();
    method gst_app_src_set_caps (line 45) | void gst_app_src_set_caps(AppSrc appsrc, Caps caps);
    method gst_app_src_get_caps (line 46) | @CallerOwnsReturn Caps gst_app_src_get_caps(AppSrc appsrc);
    method gst_app_src_set_size (line 48) | void gst_app_src_set_size(AppSrc appsrc, long size);
    method gst_app_src_get_size (line 49) | long gst_app_src_get_size(AppSrc appsrc);
    method gst_app_src_set_stream_type (line 51) | void gst_app_src_set_stream_type(AppSrc appsrc, AppSrc.StreamType type);
    method gst_app_src_get_stream_type (line 52) | AppSrc.StreamType gst_app_src_get_stream_type(AppSrc appsrc);
    method gst_app_src_set_max_bytes (line 54) | void gst_app_src_set_max_bytes(AppSrc appsrc, long max);
    method gst_app_src_get_max_bytes (line 55) | long gst_app_src_get_max_bytes(AppSrc appsrc);
    method gst_app_src_set_latency (line 57) | void gst_app_src_set_latency(AppSrc appsrc, long min, long max);
    method gst_app_src_get_latency (line 58) | void gst_app_src_get_latency(AppSrc appsrc, LongByReference min, LongB...
    method gst_app_src_flush_queued (line 60) | void gst_app_src_flush_queued(AppSrc appsrc);
    method gst_app_src_push_buffer (line 62) | FlowReturn gst_app_src_push_buffer(AppSrc appsrc, @Invalidate Buffer b...
    method gst_app_src_end_of_stream (line 63) | FlowReturn gst_app_src_end_of_stream(AppSrc appsrc);
    method gst_app_sink_get_type (line 66) | GType gst_app_sink_get_type();
    method gst_app_sink_set_caps (line 68) | void gst_app_sink_set_caps(AppSink appsink, Caps caps);
    method gst_app_sink_get_caps (line 69) | @CallerOwnsReturn Caps gst_app_sink_get_caps(AppSink appsink);
    method gst_app_sink_is_eos (line 71) | boolean gst_app_sink_is_eos(AppSink appsink);
    method gst_app_sink_pull_preroll (line 73) | @CallerOwnsReturn Sample gst_app_sink_pull_preroll(AppSink appsink);
    method gst_app_sink_pull_sample (line 74) | @CallerOwnsReturn Sample gst_app_sink_pull_sample(AppSink appsink);

FILE: src/org/freedesktop/gstreamer/lowlevel/BaseSinkAPI.java
  type BaseSinkAPI (line 50) | public interface BaseSinkAPI extends Library {
    class GstBaseSinkStruct (line 57) | public static final class GstBaseSinkStruct extends com.sun.jna.Struct...
      method GstBaseSinkStruct (line 95) | public GstBaseSinkStruct(Pointer handle) {
      method getFieldOrder (line 99) | @Override
    type GetCaps (line 115) | public static interface GetCaps extends Callback {
      method callback (line 116) | public Caps callback(BaseSink sink, Caps caps);
    type SetCaps (line 118) | public static interface SetCaps extends Callback {
      method callback (line 119) | public boolean callback(BaseSink sink, Caps caps);
    type Fixate (line 121) | public static interface Fixate extends Callback {
      method callback (line 122) | public Caps callback(BaseSink sink, Caps caps);
    type ActivatePull (line 124) | public static interface ActivatePull extends Callback {
      method callback (line 125) | public boolean callback(BaseSink sink, boolean active);
    type GetTimes (line 127) | public static interface GetTimes extends Callback {
      method callback (line 128) | public void callback(BaseSink sink, Buffer buffer,
    type ProposeAllocation (line 131) | public static interface ProposeAllocation extends Callback {
      method callback (line 132) | public boolean callback(BaseSink sink, AllocationQuery query);
    type BooleanFunc1 (line 134) | public static interface BooleanFunc1 extends Callback {
      method callback (line 135) | public boolean callback(BaseSink sink);
    type QueryNotify (line 137) | public static interface QueryNotify extends Callback {
      method callback (line 138) | public boolean callback(BaseSink sink, Query query);
    type EventNotify (line 140) | public static interface EventNotify extends Callback {
      method callback (line 141) | public boolean callback(BaseSink sink, Event event);
    type WaitEventNotify (line 143) | public static interface WaitEventNotify extends Callback {
      method callback (line 144) | public FlowReturn callback(BaseSink sink, Event event);
    type Render (line 146) | public static interface Render extends Callback {
      method callback (line 147) | public FlowReturn callback(BaseSink sink, Buffer buffer);
    type RenderList (line 149) | public static interface RenderList extends Callback {
      method callback (line 150) | public FlowReturn callback(BaseSink sink, GList bufferList);
    class GstBaseSinkClass (line 153) | public static final class GstBaseSinkClass extends com.sun.jna.Structu...
      method GstBaseSinkClass (line 154) | public GstBaseSinkClass() {}
      method GstBaseSinkClass (line 155) | public GstBaseSinkClass(Pointer ptr) {
      method getFieldOrder (line 221) | @Override
    method gst_base_sink_get_type (line 234) | GType gst_base_sink_get_type();
    method gst_base_sink_do_preroll (line 236) | FlowReturn gst_base_sink_do_preroll(BaseSink sink, MiniObject obj);
    method gst_base_sink_wait_preroll (line 237) | FlowReturn gst_base_sink_wait_preroll(BaseSink sink);
    method gst_base_sink_set_sync (line 240) | void gst_base_sink_set_sync(BaseSink sink, boolean sync);
    method gst_base_sink_get_sync (line 241) | boolean gst_base_sink_get_sync(BaseSink sink);
    method gst_base_sink_set_max_lateness (line 244) | void gst_base_sink_set_max_lateness (BaseSink sink, long max_lateness);
    method gst_base_sink_get_max_lateness (line 245) | long gst_base_sink_get_max_lateness(BaseSink sink);
    method gst_base_sink_set_qos_enabled (line 248) | void gst_base_sink_set_qos_enabled(BaseSink sink, boolean enabled);
    method gst_base_sink_is_qos_enabled (line 249) | boolean gst_base_sink_is_qos_enabled(BaseSink sink);
    method gst_base_sink_set_async_enabled (line 252) | void gst_base_sink_set_async_enabled(BaseSink sink, boolean enabled);
    method gst_base_sink_is_async_enabled (line 253) | boolean gst_base_sink_is_async_enabled(BaseSink sink);
    method gst_base_sink_set_ts_offset (line 256) | void gst_base_sink_set_ts_offset(BaseSink sink, long offset);
    method gst_base_sink_get_ts_offset (line 257) | long gst_base_sink_get_ts_offset(BaseSink sink);
    method gst_base_sink_get_last_buffer (line 260) | @CallerOwnsReturn Buffer gst_base_sink_get_last_buffer(BaseSink sink);
    method gst_base_sink_set_last_buffer_enabled (line 261) | void gst_base_sink_set_last_buffer_enabled(BaseSink sink, boolean enab...
    method gst_base_sink_is_last_buffer_enabled (line 262) | boolean gst_base_sink_is_last_buffer_enabled(BaseSink sink);
    method gst_base_sink_query_latency (line 265) | boolean gst_base_sink_query_latency(BaseSink sink, boolean live, boole...
    method gst_base_sink_get_latency (line 266) | long gst_base_sink_get_latency(BaseSink sink);
    method gst_base_sink_set_render_delay (line 269) | void gst_base_sink_set_render_delay(BaseSink sink, long delay);
    method gst_base_sink_get_render_delay (line 270) | long gst_base_sink_get_render_delay(BaseSink sink);
    method gst_base_sink_set_blocksize (line 273) | void gst_base_sink_set_blocksize(BaseSink sink, int blocksize);
    method gst_base_sink_get_blocksize (line 274) | int gst_base_sink_get_blocksize(BaseSink sink);
    method gst_base_sink_wait_clock (line 276) | ClockReturn gst_base_sink_wait_clock(BaseSink sink, long time, /* Gstl...
    method gst_base_sink_wait_eos (line 277) | FlowReturn gst_base_sink_wait_eos(BaseSink sink, long time, /* Gstlong...

FILE: src/org/freedesktop/gstreamer/lowlevel/BaseSrcAPI.java
  type BaseSrcAPI (line 46) | public interface BaseSrcAPI extends Library {
    class GstBaseSrcStruct (line 53) | public static final class GstBaseSrcStruct extends com.sun.jna.Structu...
      method getFieldOrder (line 90) | @Override
    class GstBaseSrcAbiData (line 104) | public static final class GstBaseSrcAbiData extends Union {
    class GstBaseSrcAbi (line 109) | public static final class GstBaseSrcAbi extends com.sun.jna.Structure {
      method getFieldOrder (line 114) | @Override
    type GetCaps (line 123) | public static interface GetCaps extends Callback {
      method callback (line 124) | public Caps callback(BaseSrc src, Caps filter);
    type SetCaps (line 126) | public static interface SetCaps extends Callback {
      method callback (line 127) | public boolean callback(BaseSrc src, Caps caps);
    type BooleanFunc1 (line 129) | public static interface BooleanFunc1 extends Callback {
      method callback (line 130) | public boolean callback(BaseSrc src);
    type DecideAllocation (line 132) | public static interface DecideAllocation extends Callback {
      method callback (line 133) | public boolean callback(BaseSrc src, Query query);
    type GetTimes (line 137) | public static interface GetTimes extends Callback {
      method callback (line 138) | public void callback(BaseSrc src, Buffer buffer,
    type GetSize (line 141) | public static interface GetSize extends Callback {
      method callback (line 142) | boolean callback(BaseSrc src, LongByReference size);
    type EventNotify (line 144) | public static interface EventNotify extends Callback {
      method callback (line 145) | boolean callback(BaseSrc src, Event event);
    type Create (line 147) | public static interface Create extends Callback {
      method callback (line 148) | public FlowReturn callback(BaseSrc src, long offset, int size,
    type Fill (line 151) | public static interface Fill extends Callback {
      method callback (line 152) | public FlowReturn callback(BaseSrc src, long offset, int size,
    type Seek (line 155) | public static interface Seek extends Callback {
      method callback (line 156) | boolean callback(BaseSrc src, GstSegmentStruct segment);
    type QueryFunc (line 158) | public static interface QueryFunc extends Callback {
      method callback (line 159) | boolean callback(BaseSrc src, Query query);
    type Fixate (line 161) | public static interface Fixate extends Callback {
      method callback (line 162) | public Caps callback(BaseSrc src, Caps caps);
    type PrepareSeek (line 164) | public static interface PrepareSeek extends Callback {
      method callback (line 165) | boolean callback(BaseSrc src, Event seek, GstSegmentStruct segment);
    class GstBaseSrcClass (line 168) | public static final class GstBaseSrcClass extends com.sun.jna.Structure {
      method GstBaseSrcClass (line 169) | public GstBaseSrcClass() {}
      method GstBaseSrcClass (line 170) | public GstBaseSrcClass(Pointer ptr) {
      method getFieldOrder (line 243) | @Override
    method gst_base_src_get_type (line 261) | GType gst_base_src_get_type();
    method gst_base_src_wait_playing (line 263) | FlowReturn gst_base_src_wait_playing(BaseSrc src);
    method gst_base_src_set_live (line 265) | void gst_base_src_set_live(BaseSrc src, boolean live);
    method gst_base_src_is_live (line 266) | boolean gst_base_src_is_live(BaseSrc src);
    method gst_base_src_set_format (line 268) | void gst_base_src_set_format(BaseSrc src, Format format);
    method gst_base_src_query_latency (line 270) | boolean gst_base_src_query_latency(BaseSrc src, boolean[] live, long[]...
    method gst_base_src_set_blocksize (line 272) | void gst_base_src_set_blocksize(BaseSrc src, long blocksize);
    method gst_base_src_get_blocksize (line 273) | long gst_base_src_get_blocksize(BaseSrc src);
    method gst_base_src_set_do_timestamp (line 275) | void gst_base_src_set_do_timestamp(BaseSrc src, boolean timestamp);
    method gst_base_src_get_do_timestamp (line 276) | boolean gst_base_src_get_do_timestamp(BaseSrc src);
    method gst_base_src_new_seamless_segment (line 278) | boolean gst_base_src_new_seamless_segment(BaseSrc src, long start, lon...

FILE: src/org/freedesktop/gstreamer/lowlevel/BaseTransformAPI.java
  type BaseTransformAPI (line 45) | public interface BaseTransformAPI extends Library {
    class GstBaseTransformStruct (line 52) | public static final class GstBaseTransformStruct extends com.sun.jna.S...
      method getFieldOrder (line 72) | @Override
    type TransformCaps (line 83) | public static interface TransformCaps extends Callback {
      method callback (line 84) | public Caps callback(BaseTransform trans, PadDirection direction, Ca...
    type FixateCaps (line 86) | public static interface FixateCaps extends Callback {
      method callback (line 87) | public Caps callback(BaseTransform trans, PadDirection direction, Ca...
    type AcceptCaps (line 89) | public static interface AcceptCaps extends Callback {
      method callback (line 90) | public boolean callback(BaseTransform trans, PadDirection direction,...
    type SetCaps (line 92) | public static interface SetCaps extends Callback {
      method callback (line 93) | public boolean callback(BaseTransform trans, Caps incaps, Caps outca...
    type QueryFunc (line 95) | public static interface QueryFunc extends Callback {
      method callback (line 96) | public boolean callback(BaseTransform trans, PadDirection direction,...
    type DecideAllocation (line 98) | public static interface DecideAllocation extends Callback {
      method callback (line 99) | public boolean callback(BaseTransform trans, Query query);
    type FilterMeta (line 101) | public static interface FilterMeta extends Callback {
      method callback (line 102) | public boolean callback(BaseTransform trans, Query query, GType api,...
    type ProposeAllocation (line 104) | public static interface ProposeAllocation extends Callback {
      method callback (line 105) | public boolean callback(BaseTransform trans, Query decide_query, Que...
    type TransformSize (line 107) | public static interface TransformSize extends Callback {
      method callback (line 108) | public boolean callback(BaseTransform trans, PadDirection direction,...
    type GetUnitSize (line 111) | public static interface GetUnitSize extends Callback {
      method callback (line 112) | public boolean callback(BaseTransform trans, Caps caps, IntByReferen...
    type BooleanFunc1 (line 114) | public static interface BooleanFunc1 extends Callback {
      method callback (line 115) | public boolean callback(BaseTransform sink);
    type EventNotify (line 117) | public static interface EventNotify extends Callback {
      method callback (line 118) | public boolean callback(BaseTransform trans, Event event);
    type PrepareOutput (line 120) | public static interface PrepareOutput extends Callback {
      method callback (line 121) | public FlowReturn callback(BaseTransform trans, Buffer input, Pointe...
    type CopyMetadata (line 123) | public static interface CopyMetadata extends Callback {
      method callback (line 124) | public boolean callback(BaseTransform trans, Buffer input, Buffer ou...
    type TransformMeta (line 126) | public static interface TransformMeta extends Callback {
      method callback (line 127) | public boolean callback(BaseTransform trans, Buffer outbuf, Pointer ...
    type BeforeTransform (line 129) | public static interface BeforeTransform extends Callback {
      method callback (line 130) | public void callback(BaseTransform trans, Buffer inbuf);
    type Transform (line 132) | public static interface Transform extends Callback {
      method callback (line 133) | public FlowReturn callback(BaseTransform trans, Buffer inbuf, Buffer...
    type TransformIp (line 135) | public static interface TransformIp extends Callback {
      method callback (line 136) | public FlowReturn callback(BaseTransform trans, Buffer buf);
    type SubmitInputBuffer (line 138) | public static interface SubmitInputBuffer extends Callback {
      method callback (line 139) | public FlowReturn callback(BaseTransform trans, boolean is_discont, ...
    type GenerateOutput (line 141) | public static interface GenerateOutput extends Callback {
      method callback (line 142) | public FlowReturn callback(BaseTransform trans, Pointer /* GstBuffer...
    class GstBaseTransformClass (line 148) | public static final class GstBaseTransformClass extends com.sun.jna.St...
      method GstBaseTransformClass (line 149) | public GstBaseTransformClass() {}
      method GstBaseTransformClass (line 150) | public GstBaseTransformClass(Pointer ptr) {
      method getFieldOrder (line 211) | @Override
    method gst_base_transform_get_type (line 226) | GType gst_base_transform_get_type();
    method gst_base_transform_set_passthrough (line 228) | void gst_base_transform_set_passthrough(BaseTransform trans, boolean p...
    method gst_base_transform_is_passthrough (line 229) | boolean gst_base_transform_is_passthrough(BaseTransform trans);
    method gst_base_transform_set_in_place (line 231) | void gst_base_transform_set_in_place(BaseTransform trans, boolean in_p...
    method gst_base_transform_is_in_place (line 232) | boolean gst_base_transform_is_in_place(BaseTransform trans);
    method gst_base_transform_update_qos (line 234) | void gst_base_transform_update_qos(BaseTransform trans, double proport...
    method gst_base_transform_set_qos_enabled (line 235) | void gst_base_transform_set_qos_enabled(BaseTransform trans, boolean e...
    method gst_base_transform_is_qos_enabled (line 236) | boolean gst_base_transform_is_qos_enabled(BaseTransform trans);
    method gst_base_transform_set_gap_aware (line 238) | void gst_base_transform_set_gap_aware(BaseTransform trans, boolean gap...
    method gst_base_transform_suggest (line 240) | void gst_base_transform_suggest(BaseTransform trans, Caps caps, int si...
    method gst_base_transform_reconfigure (line 241) | void gst_base_transform_reconfigure(BaseTransform trans);

FILE: src/org/freedesktop/gstreamer/lowlevel/EnumMapper.java
  class EnumMapper (line 31) | public class EnumMapper {
    method getInstance (line 33) | public static EnumMapper getInstance() {
    method intValue (line 37) | public int intValue(Enum<?> value) {
    method valueOf (line 40) | public <E extends Enum<E>> E valueOf(int value, Class<E> enumClass) {

FILE: src/org/freedesktop/gstreamer/lowlevel/GBoolean.java
  class GBoolean (line 24) | public class GBoolean {
    method valueOf (line 27) | public static int valueOf(boolean value) {
    method valueOf (line 30) | public static int valueOf(Boolean value) {

FILE: src/org/freedesktop/gstreamer/lowlevel/GFunctionMapper.java
  class GFunctionMapper (line 31) | public class GFunctionMapper implements com.sun.jna.FunctionMapper {
    method getFunctionName (line 34) | public String getFunctionName(NativeLibrary library, Method method) {

FILE: src/org/freedesktop/gstreamer/lowlevel/GNative.java
  class GNative (line 35) | public final class GNative {
    method GNative (line 49) | private GNative() {}
    method loadLibrary (line 51) | public static synchronized <T extends Library> T loadLibrary(String na...
    method loadNativeLibrary (line 61) | private static <T extends Library> T loadNativeLibrary(String name, Cl...
    method getNativeLibrary (line 80) | public static synchronized NativeLibrary getNativeLibrary(String name) {
    type Converter (line 90) | private static interface Converter {
      method nativeType (line 91) | Class<?> nativeType();
      method toNative (line 92) | Object toNative(Object value);
      method fromNative (line 93) | Object fromNative(Object value, Class<?> javaType);
    method nativeType (line 97) | public Class<?> nativeType() {
    method toNative (line 101) | public Object toNative(Object value) {
    method fromNative (line 105) | @SuppressWarnings({"unchecked","rawtypes"})
    method nativeType (line 112) | public Class<?> nativeType() {
    method toNative (line 116) | public Object toNative(Object value) {
    method fromNative (line 120) | @SuppressWarnings("rawtypes")
    method getConverter (line 127) | private static Converter getConverter(Class<?> javaType) {
    class Handler (line 135) | private static class Handler<T> implements InvocationHandler {
      method Handler (line 140) | public Handler(T library, Map<String, ?> options) {
      method invoke (line 145) | @SuppressWarnings("null")
      method getNativeClass (line 185) | @SuppressWarnings("unused")
      type ArrayIO (line 194) | private static interface ArrayIO {
        method set (line 195) | public void set(Object array, int index, Object data);
        method get (line 196) | public Object get(Object array, int index);
      method set (line 200) | public void set(Object array, int index, Object data) {
      method get (line 203) | public Object get(Object array, int index) {
      method set (line 209) | public void set(Object array, int index, Object data) {
      method get (line 212) | public Object get(Object array, int index) {
      method getArrayIO (line 217) | private static ArrayIO getArrayIO(final Class<?> cls) {

FILE: src/org/freedesktop/gstreamer/lowlevel/GObjectAPI.java
  type GObjectAPI (line 43) | @SuppressWarnings("serial")
    method g_object_get_type (line 50) | GType g_object_get_type();
    method g_param_value_validate (line 51) | void g_param_value_validate(GParamSpec spec, GValue data);
    method g_object_set_property (line 52) | void g_object_set_property(GObject obj, String property, GValue data);
    method g_object_get_property (line 53) | void g_object_get_property(GObject obj, String property, GValue data);
    method g_object_set (line 54) | void g_object_set(GObject obj, String propertyName, Object... data);
    method g_object_get (line 55) | void g_object_get(GObject obj, String propertyName, Object... data);
    method g_object_class_list_properties (line 56) | Pointer g_object_class_list_properties(Pointer oclass, IntByReference ...
    method g_object_new (line 58) | Pointer g_object_new(GType object_type, Object... args);
    type GClosureNotify (line 60) | interface GClosureNotify extends Callback {
      method callback (line 61) | void callback(Pointer data, Pointer closure);
    method g_signal_connect_data (line 66) | NativeLong g_signal_connect_data(GObjectPtr obj, String signal, Callba...
    method g_signal_handler_disconnect (line 68) | void g_signal_handler_disconnect(GObjectPtr obj, NativeLong id);
    method g_object_is_floating (line 69) | boolean g_object_is_floating(GObjectPtr obj);
    method g_object_ref_sink (line 73) | Pointer g_object_ref_sink(Pointer ptr);
    method g_object_ref_sink (line 74) | GObjectPtr g_object_ref_sink(GObjectPtr ptr);
    type GToggleNotify (line 75) | interface GToggleNotify extends Callback {
      method callback (line 76) | void callback(Pointer data, Pointer obj, boolean is_last_ref);
    method g_object_add_toggle_ref (line 78) | void g_object_add_toggle_ref(Pointer object, GToggleNotify notify, Poi...
    method g_object_remove_toggle_ref (line 79) | void g_object_remove_toggle_ref(Pointer object, GToggleNotify notify, ...
    method g_object_add_toggle_ref (line 80) | void g_object_add_toggle_ref(GObjectPtr object, GToggleNotify notify, ...
    method g_object_remove_toggle_ref (line 81) | void g_object_remove_toggle_ref(GObjectPtr object, GToggleNotify notif...
    type GWeakNotify (line 82) | interface GWeakNotify extends Callback {
      method callback (line 83) | void callback(IntPtr data, Pointer obj);
    method g_object_weak_ref (line 85) | void g_object_weak_ref(GObject object, GWeakNotify notify, IntPtr data);
    method g_object_weak_unref (line 86) | void g_object_weak_unref(GObject object, GWeakNotify notify, IntPtr da...
    method g_object_ref (line 87) | Pointer g_object_ref(GObjectPtr object);
    method g_object_unref (line 88) | void g_object_unref(GObjectPtr object);
    method g_object_class_find_property (line 90) | GParamSpec g_object_class_find_property(GObjectClass oclass, String pr...
    method g_object_class_find_property (line 91) | Pointer g_object_class_find_property(Pointer oclass, String property_n...
    method g_quark_try_string (line 92) | GQuark g_quark_try_string(String string);
    method g_quark_from_static_string (line 93) | GQuark g_quark_from_static_string(String string);
    method g_quark_from_string (line 94) | GQuark g_quark_from_string(String string);
    method g_quark_to_string (line 95) | String g_quark_to_string(GQuark quark);
    method g_intern_string (line 97) | String g_intern_string(String string);
    method g_intern_static_string (line 98) | String g_intern_static_string(String string);
    method g_type_init (line 100) | void g_type_init();
    method g_type_init_with_debug_flags (line 101) | void g_type_init_with_debug_flags(int flags);
    method g_type_name (line 102) | String g_type_name(GType type);
    method g_type_from_name (line 104) | GType g_type_from_name(String name);
    method g_type_parent (line 105) | GType g_type_parent(GType type);
    method g_type_depth (line 106) | int g_type_depth(GType type);
    method g_type_create_instance (line 107) | Pointer g_type_create_instance(GType type);
    method g_type_free_instance (line 108) | void g_type_free_instance(Pointer instance);
    method g_type_is_a (line 109) | boolean g_type_is_a(GType type, GType is_a_type);
    method g_type_register_static (line 111) | GType g_type_register_static(GType parent_type, String type_name,
    method g_type_register_static (line 113) | GType g_type_register_static(GType parent_type, Pointer type_name,
    method g_type_register_static_simple (line 115) | GType g_type_register_static_simple(GType parent_type, String type_name,
    method g_type_register_static_simple (line 118) | GType g_type_register_static_simple(GType parent_type, Pointer type_name,
    class GTypeClass (line 124) | public static class GTypeClass extends com.sun.jna.Structure {
      method getFieldOrder (line 129) | @Override
    class GTypeClassByReference (line 135) | public static final class GTypeClassByReference extends GTypeClass imp...
    class GTypeInstance (line 140) | public static final class GTypeInstance extends com.sun.jna.Structure {
      method getFieldOrder (line 145) | @Override
    class GObjectStruct (line 151) | public static final class GObjectStruct extends com.sun.jna.Structure {
      method GObjectStruct (line 155) | public GObjectStruct() {}
      method GObjectStruct (line 156) | public GObjectStruct(GObjectPtr ptr) {
      method getFieldOrder (line 162) | @Override
    class GObjectConstructParam (line 170) | public static final class GObjectConstructParam {
    class GObjectClass (line 174) | public static final class GObjectClass extends com.sun.jna.Structure {
      type Constructor (line 186) | public static interface Constructor extends Callback {
        method callback (line 187) | public Pointer callback(GType type, int n_construct_properties,
      type SetProperty (line 190) | public static interface SetProperty extends Callback {
        method callback (line 191) | public void callback(GObject object, int property_id, Pointer valu...
      type GetProperty (line 193) | public static interface GetProperty extends Callback {
        method callback (line 194) | public void callback(GObject object, int property_id, Pointer valu...
      type Dispose (line 196) | public static interface Dispose extends Callback {
        method callback (line 197) | public void callback(GObject object);
      type Finalize (line 199) | public static interface Finalize extends Callback {
        method callback (line 200) | public void callback(GObject object);
      type Notify (line 202) | public static interface Notify extends Callback {
        method callback (line 203) | public void callback(GObject object, Pointer spec);
      method GObjectClass (line 206) | public GObjectClass() {}
      method GObjectClass (line 207) | public GObjectClass(Pointer ptr) {
      method getFieldOrder (line 212) | @Override
    type GBaseInitFunc (line 225) | public static interface GBaseInitFunc extends Callback {
      method callback (line 226) | public void callback(Pointer g_class);
    type GBaseFinalizeFunc (line 229) | public static interface GBaseFinalizeFunc extends Callback {
      method callback (line 230) | public void callback(Pointer g_class);
    type GClassInitFunc (line 233) | public static interface GClassInitFunc extends Callback {
      method callback (line 234) | public void callback(Pointer g_class, Pointer class_data);
    type GClassFinalizeFunc (line 237) | public static interface GClassFinalizeFunc extends Callback {
      method callback (line 238) | public void callback(Pointer g_class, Pointer class_data);
    type GInstanceInitFunc (line 240) | public static interface GInstanceInitFunc extends Callback {
      method callback (line 241) | void callback(GTypeInstance instance, Pointer g_class);
    class GTypeInfo (line 243) | public static final class GTypeInfo extends com.sun.jna.Structure {
      method GTypeInfo (line 244) | public GTypeInfo() {
      method GTypeInfo (line 247) | public GTypeInfo(Pointer ptr) {
      method getFieldOrder (line 268) | @Override
    class GParamSpecTypeSpecific (line 279) | public static abstract class GParamSpecTypeSpecific extends com.sun.jn...
      method getMinimum (line 280) | public abstract Object getMinimum();
      method getMaximum (line 281) | public abstract Object getMaximum();
      method getDefault (line 282) | public abstract Object getDefault();
      method GParamSpecTypeSpecific (line 284) | public GParamSpecTypeSpecific() {
      method GParamSpecTypeSpecific (line 287) | public GParamSpecTypeSpecific(Pointer ptr) {
    class GParamSpecBoolean (line 291) | public static final class GParamSpecBoolean extends GParamSpecTypeSpec...
      method getMinimum (line 295) | public Object getMinimum() { return null; }
      method getMaximum (line 296) | public Object getMaximum() { return null; }
      method getDefault (line 297) | public Object getDefault() { return default_value; }
      method GParamSpecBoolean (line 299) | public GParamSpecBoolean(Pointer ptr) {
      method getFieldOrder (line 304) | @Override
    class GParamSpecInt (line 311) | public static final class GParamSpecInt extends GParamSpecTypeSpecific {
      method getMinimum (line 317) | public Object getMinimum() { return minimum; }
      method getMaximum (line 318) | public Object getMaximum() { return maximum; }
      method getDefault (line 319) | public Object getDefault() { return default_value; }
      method GParamSpecInt (line 321) | public GParamSpecInt(Pointer ptr) {
      method getFieldOrder (line 326) | @Override
    class GParamSpecUInt (line 335) | public static final class GParamSpecUInt extends GParamSpecTypeSpecific {
      method getMinimum (line 341) | public Object getMinimum() { return ((long)minimum)&0xffffff; }
      method getMaximum (line 342) | public Object getMaximum() { return ((long)maximum)&0xffffff; }
      method getDefault (line 343) | public Object getDefault() { return ((long)default_value)&0xffffff; }
      method GParamSpecUInt (line 345) | public GParamSpecUInt(Pointer ptr) {
      method getFieldOrder (line 350) | @Override
    class GParamSpecChar (line 358) | public static final class GParamSpecChar extends GParamSpecTypeSpecific {
      method getMinimum (line 364) | public Object getMinimum() { return minimum; }
      method getMaximum (line 365) | public Object getMaximum() { return maximum; }
      method getDefault (line 366) | public Object getDefault() { return default_value; }
      method GParamSpecChar (line 368) | public GParamSpecChar(Pointer ptr) {
      method getFieldOrder (line 373) | @Override
    class GParamSpecUChar (line 381) | public static final class GParamSpecUChar extends GParamSpecTypeSpecif...
      method getMinimum (line 387) | public Object getMinimum() { return ((short)minimum)&0xff; }
      method getMaximum (line 388) | public Object getMaximum() { return ((short)maximum)&0xff; }
      method getDefault (line 389) | public Object getDefault() { return ((short)default_value)&0xff; }
      method GParamSpecUChar (line 391) | public GParamSpecUChar(Pointer ptr) {
      method getFieldOrder (line 396) | @Override
    class GParamSpecLong (line 404) | public static final class GParamSpecLong extends GParamSpecTypeSpecific {
      method getMinimum (line 410) | public Object getMinimum() { return minimum; }
      method getMaximum (line 411) | public Object getMaximum() { return maximum; }
      method getDefault (line 412) | public Object getDefault() { return default_value; }
      method GParamSpecLong (line 414) | public GParamSpecLong(Pointer ptr) {
      method getFieldOrder (line 419) | @Override
    class GParamSpecInt64 (line 427) | public static final class GParamSpecInt64 extends GParamSpecTypeSpecif...
      method getMinimum (line 433) | public Object getMinimum() { return minimum; }
      method getMaximum (line 434) | public Object getMaximum() { return maximum; }
      method getDefault (line 435) | public Object getDefault() { return default_value; }
      method GParamSpecInt64 (line 437) | public GParamSpecInt64(Pointer ptr) {
      method getFieldOrder (line 442) | @Override
    class GParamSpecFloat (line 450) | public static final class GParamSpecFloat extends GParamSpecTypeSpecif...
      method getMinimum (line 457) | public Object getMinimum() { return minimum; }
      method getMaximum (line 458) | public Object getMaximum() { return maximum; }
      method getDefault (line 459) | public Object getDefault() { return default_value; }
      method GParamSpecFloat (line 461) | public GParamSpecFloat(Pointer ptr) {
      method getFieldOrder (line 466) | @Override
    class GParamSpecDouble (line 474) | public static final class GParamSpecDouble extends GParamSpecTypeSpeci...
      method getMinimum (line 481) | public Object getMinimum() { return minimum; }
      method getMaximum (line 482) | public Object getMaximum() { return maximum; }
      method getDefault (line 483) | public Object getDefault() { return default_value; }
      method GParamSpecDouble (line 485) | public GParamSpecDouble(Pointer ptr) {
      method getFieldOrder (line 490) | @Override
    class GParamSpecString (line 498) | public static final class GParamSpecString extends GParamSpecTypeSpeci...
      method getMinimum (line 507) | public Object getMinimum() { return null; }
      method getMaximum (line 508) | public Object getMaximum() { return null; }
      method getDefault (line 509) | public Object getDefault() { return default_value; }
      method GParamSpecString (line 511) | public GParamSpecString(Pointer ptr) {
      method getFieldOrder (line 516) | @Override
    class GParamSpec (line 525) | public static final class GParamSpec extends com.sun.jna.Structure {
      method GParamSpec (line 538) | public GParamSpec() {
      method GParamSpec (line 541) | public GParamSpec(Pointer ptr) {
      method getFieldOrder (line 546) | @Override

FILE: src/org/freedesktop/gstreamer/lowlevel/GObjectPtr.java
  class GObjectPtr (line 24) | public class GObjectPtr extends GTypedPtr {
    method GObjectPtr (line 26) | public GObjectPtr() {
    method GObjectPtr (line 29) | public GObjectPtr(Pointer ptr) {
    method getGType (line 33) | @Override

FILE: src/org/freedesktop/gstreamer/lowlevel/GPointer.java
  class GPointer (line 25) | public class GPointer extends PointerType {
    method GPointer (line 27) | public GPointer() {
    method GPointer (line 30) | public GPointer(Pointer ptr) {
    method as (line 34) | public <T extends GPointer> T as(Class<T> cls, Function<Pointer, T> co...

FILE: src/org/freedesktop/gstreamer/lowlevel/GSignalAPI.java
  type GSignalAPI (line 39) | @SuppressWarnings("serial")
    class GSignalQuery (line 49) | public static final class GSignalQuery extends com.sun.jna.Structure {
      method getFieldOrder (line 58) | @Override
    method g_signal_connect_data (line 68) | NativeLong g_signal_connect_data(GObject obj, String signal, Callback ...
    method g_signal_handler_disconnect (line 70) | void g_signal_handler_disconnect(GObject obj, NativeLong id);
    method g_signal_lookup (line 72) | int g_signal_lookup(String name, GType itype);
    method g_signal_name (line 73) | String g_signal_name(int signal_id);
    method g_signal_query (line 74) | void g_signal_query(int signal_id, GSignalQuery query);
    method g_signal_list_ids (line 75) | int g_signal_list_ids(GType itype, int[] n_ids);
    method g_signal_emit (line 77) | void g_signal_emit(GObject obj, int signal_id, GQuark detail, Object.....
    method g_signal_emit_by_name (line 78) | void g_signal_emit_by_name(GObject obj, String signal, Object... argum...
    type GSignalCallbackProxy (line 81) | public static interface GSignalCallbackProxy extends com.sun.jna.Callb...

FILE: src/org/freedesktop/gstreamer/lowlevel/GType.java
  class GType (line 34) | @SuppressWarnings("serial")
    method init (line 74) | private static GType init(int value) {
    method GType (line 78) | protected GType(long t) {
    method GType (line 85) | public GType() {
    method valueOf (line 89) | public static GType valueOf(long value) {
    method valueOf (line 93) | public static GType valueOf(String typeName) {
    method valueOf (line 108) | public static GType valueOf(Class<?> javaType) {
    method fromNative (line 124) | @Override
    method getParentType (line 133) | public GType getParentType() {
    method getTypeName (line 139) | public String getTypeName() {
    method toString (line 147) | @Override

FILE: src/org/freedesktop/gstreamer/lowlevel/GTypeMapper.java
  class GTypeMapper (line 52) | public class GTypeMapper extends com.sun.jna.DefaultTypeMapper {
    method GTypeMapper (line 54) | public GTypeMapper() {
    method toNative (line 59) | public Object toNative(Object arg, ToNativeContext context) {
    method nativeType (line 63) | public Class<?> nativeType() {
    method toNative (line 69) | public Object toNative(Object arg, ToNativeContext context) {
    method fromNative (line 99) | @SuppressWarnings(value = "unchecked")
    method nativeType (line 131) | public Class<?> nativeType() {
    method fromNative (line 137) | @SuppressWarnings(value = "unchecked")
    method nativeType (line 142) | public Class<?> nativeType() {
    method toNative (line 146) | @SuppressWarnings("rawtypes")
    method fromNative (line 157) | public Object fromNative(Object result, FromNativeContext context) {
    method nativeType (line 176) | public Class<?> nativeType() {
    method toNative (line 180) | public Object toNative(Object arg, ToNativeContext context) {
    method toNative (line 187) | public Object toNative(Object arg, ToNativeContext context) {
    method fromNative (line 191) | public Object fromNative(Object arg0, FromNativeContext arg1) {
    method nativeType (line 195) | public Class<?> nativeType() {
    method fromNative (line 201) | public Object fromNative(Object arg0, FromNativeContext arg1) {
    method nativeType (line 205) | public Class<?> nativeType() {
    method toNative (line 209) | public Object toNative(Object arg0, ToNativeContext arg1) {
    method toNative (line 216) | public Object toNative(Object arg, ToNativeContext context) {
    method fromNative (line 220) | public Object fromNative(Object arg0, FromNativeContext arg1) {
    method nativeType (line 224) | public Class<?> nativeType() {
    method toNative (line 244) | public Object toNative(Object arg0, ToNativeContext arg1) {
    method nativeType (line 259) | public Class<?> nativeType() {
    method getFromNativeConverter (line 263) | @SuppressWarnings("rawtypes")
    method getToNativeConverter (line 281) | @SuppressWarnings("rawtypes")

FILE: src/org/freedesktop/gstreamer/lowlevel/GTypedPtr.java
  class GTypedPtr (line 23) | public abstract class GTypedPtr extends GPointer {
    method GTypedPtr (line 25) | public GTypedPtr() {
    method GTypedPtr (line 28) | public GTypedPtr(Pointer ptr) {
    method getGType (line 32) | public abstract GType getGType();

FILE: src/org/freedesktop/gstreamer/lowlevel/GValueAPI.java
  type GValueAPI (line 42) | @SuppressWarnings("serial")
    type NoMapperAPI (line 45) | public interface NoMapperAPI extends Library {
      method g_value_get_object (line 47) | Pointer g_value_get_object(GValue value);
      method g_value_dup_object (line 49) | Pointer g_value_dup_object(GValue value);
    class GValue (line 60) | public static final class GValue extends com.sun.jna.Structure {
      method getFieldOrder (line 66) | @Override
      class GValueData (line 74) | public static final class GValueData extends com.sun.jna.Union {
      method GValue (line 84) | public GValue(GType type) {
      method GValue (line 89) | public GValue(GType type, Object val) {
      method GValue (line 94) | public GValue() {}
      method GValue (line 96) | public GValue(Pointer ptr) {
      method reset (line 101) | public void reset() {
      method validateVal (line 105) | private <T> T validateVal(Object val, Class<T> clazz) {
      method validateVal (line 109) | private <T> T validateVal(Object val, Class<T> clazz, boolean allowN...
      method setValue (line 123) | public void setValue(Object val) {
      method checkHolds (line 144) | public boolean checkHolds(GType type) {
      method getType (line 148) | public GType getType() {
      method getValue (line 152) | public Object getValue() {
      method toInt (line 181) | public Integer toInt() {
      method toUInt (line 185) | public Integer toUInt() {
      method toChar (line 189) | public Byte toChar() {
      method toUChar (line 193) | public Byte toUChar() {
      method toLong (line 197) | public Long toLong() {
      method toULong (line 201) | public Long toULong() {
      method toInt64 (line 205) | public Long toInt64() {
      method toUInt64 (line 209) | public Long toUInt64() {
      method toBoolean (line 213) | public Boolean toBoolean() {
      method toFloat (line 217) | public Float toFloat() {
      method toDouble (line 221) | public Double toDouble() {
      method toJavaString (line 225) | public String toJavaString() {
      method toObject (line 229) | public Object toObject() {
      method toPointer (line 233) | public Pointer toPointer() {
      method toString (line 237) | public String toString() {
    class GValueArray (line 242) | public static final class GValueArray extends com.sun.jna.Structure {
      method GValueArray (line 254) | public GValueArray() {
      method GValueArray (line 258) | public GValueArray(int n_prealloced) {
      method GValueArray (line 262) | public GValueArray(int n_prealloced, boolean ownsMemory) {
      method GValueArray (line 267) | public GValueArray(Pointer pointer) {
      method valueOf (line 273) | @SuppressWarnings("unused")
      method getNValues (line 278) | public int getNValues() {
      method prepend (line 282) | public GValueArray prepend(GValue value) {
      method append (line 287) | public GValueArray append(GValue value) {
      method insert (line 292) | public GValueArray insert(int index, GValue value) {
      method remove (line 297) | public GValueArray remove(int index) {
      method nth (line 302) | public GValue nth(int i) {
      method getValue (line 306) | public Object getValue(int i) {
      method free (line 311) | public void free() {
      method getFieldOrder (line 318) | @Override
    method g_value_init (line 326) | GValue g_value_init(GValue value, GType g_type);
    method g_value_reset (line 327) | GValue g_value_reset(GValue value);
    method g_value_unset (line 328) | void g_value_unset(GValue value);
    method g_value_set_char (line 329) | void g_value_set_char(GValue value, byte v_char);
    method g_value_get_char (line 330) | byte g_value_get_char(GValue value);
    method g_value_set_uchar (line 331) | void g_value_set_uchar(GValue value, byte v_uchar);
    method g_value_get_uchar (line 332) | byte g_value_get_uchar(GValue value);
    method g_value_set_boolean (line 333) | void g_value_set_boolean(GValue value, boolean v_boolean);
    method g_value_get_boolean (line 334) | boolean g_value_get_boolean(GValue value);
    method g_value_set_int (line 335) | void g_value_set_int(GValue value, int v_int);
    method g_value_get_int (line 336) | int g_value_get_int(GValue value);
    method g_value_set_uint (line 337) | void g_value_set_uint(GValue value, int v_int);
    method g_value_get_uint (line 338) | int g_value_get_uint(GValue value);
    method g_value_set_long (line 339) | void g_value_set_long(GValue value, NativeLong v_long);
    method g_value_get_long (line 340) | NativeLong g_value_get_long(GValue value);
    method g_value_set_ulong (line 341) | void g_value_set_ulong(GValue value, NativeLong v_long);
    method g_value_get_ulong (line 342) | NativeLong g_value_get_ulong(GValue value);
    method g_value_set_int64 (line 343) | void g_value_set_int64(GValue value, long v_int64);
    method g_value_get_int64 (line 344) | long g_value_get_int64(GValue value);
    method g_value_set_uint64 (line 345) | void g_value_set_uint64(GValue value, long v_uint64);
    method g_value_get_uint64 (line 346) | long g_value_get_uint64(GValue value);
    method g_value_set_float (line 347) | void g_value_set_float(GValue value, float v_float);
    method g_value_get_float (line 348) | float g_value_get_float(GValue value);
    method g_value_set_double (line 349) | void g_value_set_double(GValue value, double v_double);
    method g_value_get_double (line 350) | double g_value_get_double(GValue value);
    method g_value_set_enum (line 351) | void g_value_set_enum(GValue value, int v_enum);
    method g_value_get_enum (line 352) | int g_value_get_enum(GValue value);
    method g_value_set_string (line 353) | void g_value_set_string(GValue value, String v_string);
    method g_value_set_static_string (line 354) | void g_value_set_static_string (GValue value, String v_string);
    method g_value_get_string (line 355) | String g_value_get_string(GValue value);
    method g_value_get_pointer (line 356) | Pointer g_value_get_pointer(GValue value);
    method g_value_set_pointer (line 357) | void g_value_set_pointer(GValue value, Pointer pointer);
    method g_value_type_compatible (line 358) | boolean g_value_type_compatible(GType src_type, GType dest_type);
    method g_value_type_transformable (line 359) | boolean g_value_type_transformable(GType src_type, GType dest_type);
    method g_value_transform (line 360) | boolean g_value_transform(GValue src_value, GValue dest_value);
    method g_strdup_value_contents (line 362) | @CallerOwnsReturn String g_strdup_value_contents(GValue value);
    method g_value_set_object (line 364) | void g_value_set_object(GValue value, GObject v_object);
    method g_value_take_object (line 365) | void g_value_take_object(GValue value, @Invalidate GObject v_object);
    method g_value_get_object (line 366) | GObject g_value_get_object(GValue value);
    method g_value_dup_object (line 367) | @CallerOwnsReturn GObject g_value_dup_object(GValue value);
    method g_value_get_boxed (line 369) | Pointer g_value_get_boxed(GValue value);
    method g_value_array_get_nth (line 371) | GValue g_value_array_get_nth(GValueArray value_array, int index);
    method g_value_array_new (line 372) | Pointer g_value_array_new(int n_prealloced);
    method g_value_array_free (line 373) | void g_value_array_free (GValueArray value_array);
    method g_value_array_copy (line 375) | Pointer g_value_array_copy(GValueArray value_array);
    method g_value_array_prepend (line 376) | Pointer g_value_array_prepend(GValueArray value_array, GValue value);
    method g_value_array_append (line 377) | Pointer g_value_array_append(GValueArray value_array, GValue value);
    method g_value_array_insert (line 378) | Pointer g_value_array_insert(GValueArray value_array, int index_, GVal...
    method g_value_array_remove (line 379) | Pointer g_value_array_remove(GValueArray value_array, int index);
    method g_type_check_value_holds (line 381) | boolean g_type_check_value_holds(GValue value, GType type);

FILE: src/org/freedesktop/gstreamer/lowlevel/GValueStruct.java
  class GValueStruct (line 28) | public class GValueStruct extends Structure {
    method GValueStruct (line 31) | public GValueStruct() {
    method getFieldOrder (line 34) | @Override

FILE: src/org/freedesktop/gstreamer/lowlevel/GioAPI.java
  type GioAPI (line 26) | public interface GioAPI extends Library {
    method g_inet_address_to_string (line 32) | public String g_inet_address_to_string(Pointer gInetAddress);
    method g_inet_socket_address_new_from_string (line 35) | public Pointer g_inet_socket_address_new_from_string(String address, i...
    method g_socket_new (line 38) | public Pointer g_socket_new(int gSocketFamilyEnumValue, int gSocketTyp...
    method g_socket_bind (line 39) | public boolean g_socket_bind(Pointer gSocketPointer, Pointer gSocketAd...
    method g_socket_connect (line 40) | public boolean g_socket_connect(Pointer gSocketPointer, Pointer gSocke...
    method g_cancellable_new (line 43) | public Pointer g_cancellable_new();

FILE: src/org/freedesktop/gstreamer/lowlevel/GlibAPI.java
  type GlibAPI (line 39) | @SuppressWarnings("serial")
    method g_main_loop_new (line 50) | Pointer g_main_loop_new(GMainContext context, boolean running);
    method g_main_loop_run (line 51) | void g_main_loop_run(MainLoop loop);
    method g_main_loop_is_running (line 52) | boolean g_main_loop_is_running(MainLoop loop);
    method g_main_loop_get_context (line 53) | @CallerOwnsReturn GMainContext g_main_loop_get_context(MainLoop loop);
    method g_main_loop_quit (line 54) | void g_main_loop_quit(MainLoop loop);
    method g_main_loop_ref (line 55) | void g_main_loop_ref(GPointer ptr);
    method g_main_loop_unref (line 56) | void g_main_loop_unref(GPointer ptr);
    method g_main_context_new (line 62) | Pointer g_main_context_new();
    method g_main_context_ref (line 63) | void g_main_context_ref(GPointer context);
    method g_main_context_unref (line 64) | void g_main_context_unref(GPointer context);
    method g_main_context_default (line 65) | Pointer g_main_context_default();
    method g_main_context_pending (line 66) | boolean g_main_context_pending(GMainContext ctx);
    method g_main_context_acquire (line 67) | boolean g_main_context_acquire(GMainContext ctx);
    method g_main_context_release (line 68) | void g_main_context_release(GMainContext ctx);
    method g_main_context_is_owner (line 69) | boolean g_main_context_is_owner(GMainContext ctx);
    method g_main_context_wait (line 70) | boolean g_main_context_wait(GMainContext ctx);
    method g_idle_source_new (line 72) | @CallerOwnsReturn GSource g_idle_source_new();
    method g_timeout_source_new (line 73) | @CallerOwnsReturn GSource g_timeout_source_new(int interval);
    method g_timeout_source_new_seconds (line 74) | @CallerOwnsReturn GSource g_timeout_source_new_seconds(int interval);
    method g_source_attach (line 75) | int g_source_attach(GSource source, GMainContext context);
    method g_source_destroy (line 76) | void g_source_destroy(Pointer source);
    method g_source_destroy (line 77) | void g_source_destroy(GSource source);
    method g_source_ref (line 78) | Pointer g_source_ref(Pointer source);
    method g_source_unref (line 79) | void g_source_unref(Pointer source);
    method g_source_set_callback (line 80) | void g_source_set_callback(GSource source, GSourceFunc callback, Objec...
    method g_source_is_destroyed (line 81) | boolean g_source_is_destroyed(Pointer source);
    method g_source_is_destroyed (line 82) | boolean g_source_is_destroyed(GSource source);
    type GThreadFunc (line 86) | interface GThreadFunc extends Callback {
      method callback (line 87) | Pointer callback(Pointer data);
    method g_thread_create (line 89) | Pointer g_thread_create(GThreadFunc func, Pointer data, boolean joinab...
    method g_thread_self (line 90) | Pointer g_thread_self();
    method g_thread_join (line 91) | Pointer g_thread_join(Pointer thread);
    method g_thread_yield (line 92) | void g_thread_yield();
    method g_thread_set_priority (line 93) | void g_thread_set_priority(Pointer thread, int priority);
    method g_thread_exit (line 94) | void g_thread_exit(Pointer retval);
    type GSourceFunc (line 98) | interface GSourceFunc extends Callback {
      method callback (line 99) | boolean callback(Pointer data);
    method g_idle_add (line 101) | NativeLong g_idle_add(GSourceFunc function, Pointer data);
    type GDestroyNotify (line 102) | interface GDestroyNotify extends Callback {
      method callback (line 103) | void callback(Pointer data);
    method g_timeout_add (line 106) | int g_timeout_add(int interval, GSourceFunc function, Pointer data);
    method g_timeout_add_full (line 107) | int g_timeout_add_full(int priority, int interval, GSourceFunc function,
    method g_timeout_add_seconds (line 109) | int g_timeout_add_seconds(int interval, GSourceFunc function, Pointer ...
    method g_error_new (line 110) | GstAPI.GErrorStruct g_error_new(int quark, int code, String message);
    method g_error_free (line 111) | void g_error_free(Pointer error);
    method g_source_remove (line 113) | void g_source_remove(int id);
    method g_free (line 114) | void g_free(Pointer ptr);
    method g_date_new (line 117) | Pointer g_date_new();
    method g_date_new_dmy (line 118) | Pointer g_date_new_dmy(int day, int month, int year);
    method g_date_new_julian (line 119) | Pointer g_date_new_julian(int julian_day);
    method g_date_get_year (line 120) | int g_date_get_year(Pointer date);
    method g_date_get_month (line 121) | int g_date_get_month(Pointer date);
    method g_date_get_day (line 122) | int g_date_get_day(Pointer date);
    method g_date_free (line 123) | void g_date_free(Pointer date);
    method g_list_append (line 125) | GList g_list_append(GList list, Pointer data);
    class GList (line 127) | public static final class GList extends com.sun.jna.Structure {
      method GList (line 131) | public GList() {
      method GList (line 134) | public GList(Pointer ptr) {
      method valueOf (line 138) | public static GList valueOf(Pointer ptr) {
      method next (line 142) | public GList next() {
      method prev (line 145) | public GList prev() {
      method getFieldOrder (line 149) | @Override
    class GSList (line 156) | public static final class GSList extends com.sun.jna.Structure {
      method GSList (line 159) | public GSList() {
      method GSList (line 162) | public GSList(Pointer ptr) {
      method valueOf (line 166) | public static GSList valueOf(Pointer ptr) {
      method next (line 170) | public GSList next() {
      method getFieldOrder (line 174) | @Override
    method g_getenv (line 198) | String g_getenv(String variable);
    method g_setenv (line 213) | boolean g_setenv(String variable, String value, boolean overwrite);
    method g_unsetenv (line 221) | void g_unsetenv(String variable);

FILE: src/org/freedesktop/gstreamer/lowlevel/GstAPI.java
  type GstAPI (line 35) | public interface GstAPI extends Library {
    method gst_type_find_get_type (line 42) | GType gst_type_find_get_type();
    method gst_version_string (line 43) | @CallerOwnsReturn String gst_version_string();
    method gst_version (line 44) | void gst_version(long[] major, long[] minor, long[] micro, long[] nano);
    method gst_init (line 45) | boolean gst_init(IntByReference argc, PointerByReference argv);
    method gst_init_check (line 46) | boolean gst_init_check(IntByReference argc, PointerByReference argv, P...
    method gst_init_check (line 47) | boolean gst_init_check(IntByReference argc, PointerByReference argv, G...
    method gst_segtrap_is_enabled (line 48) | boolean gst_segtrap_is_enabled();
    method gst_segtrap_set_enabled (line 49) | void gst_segtrap_set_enabled(boolean enabled);
    method gst_deinit (line 50) | void gst_deinit();
    class GstSegmentStruct (line 73) | public static final class GstSegmentStruct extends com.sun.jna.Structu...
      method GstSegmentStruct (line 75) | public GstSegmentStruct() {
      method GstSegmentStruct (line 78) | public GstSegmentStruct(Pointer p) {
      method GstSegmentStruct (line 82) | public GstSegmentStruct(int flags, double rate, double applied_rate,...
      method getFieldOrder (line 115) | @Override
    class GErrorStruct (line 126) | public static final class GErrorStruct extends com.sun.jna.Structure {
      method GErrorStruct (line 132) | public GErrorStruct() { clear(); }
      method GErrorStruct (line 133) | public GErrorStruct(Pointer ptr) {
      method getCode (line 136) | public int getCode() {
      method getMessage (line 139) | public String getMessage() {
      method getFieldOrder (line 143) | @Override
    type GstCallback (line 151) | public static interface GstCallback extends com.sun.jna.Callback {

FILE: src/org/freedesktop/gstreamer/lowlevel/GstARGBControlBindingPtr.java
  class GstARGBControlBindingPtr (line 23) | public class GstARGBControlBindingPtr extends GstControlBindingPtr {
    method GstARGBControlBindingPtr (line 25) | public GstARGBControlBindingPtr() {
    method GstARGBControlBindingPtr (line 28) | public GstARGBControlBindingPtr(Pointer ptr) {

FILE: src/org/freedesktop/gstreamer/lowlevel/GstBinAPI.java
  type GstBinAPI (line 32) | public interface GstBinAPI extends com.sun.jna.Library {
    method ptr_gst_bin_new (line 35) | @CallerOwnsReturn Pointer ptr_gst_bin_new(String name);
    method ptr_gst_pipeline_new (line 36) | @CallerOwnsReturn Pointer ptr_gst_pipeline_new(String name);
    method gst_bin_new (line 37) | @CallerOwnsReturn Bin gst_bin_new(String name);
    method gst_bin_get_type (line 38) | GType gst_bin_get_type();
    method gst_bin_add (line 40) | boolean gst_bin_add(Bin bin, Element element);
    method gst_bin_add_many (line 41) | void gst_bin_add_many(Bin bin, Element... elements);
    method gst_bin_remove (line 42) | boolean gst_bin_remove(Bin bin, Element element);
    method gst_bin_remove_many (line 43) | void gst_bin_remove_many(Bin bin, Element... elements);
    method gst_bin_get_by_name (line 44) | @CallerOwnsReturn Element gst_bin_get_by_name(Bin bin, String name);
    method gst_bin_get_by_name_recurse_up (line 45) | @CallerOwnsReturn Element gst_bin_get_by_name_recurse_up(Bin bin, Stri...
    method gst_bin_get_by_interface (line 46) | @CallerOwnsReturn Element gst_bin_get_by_interface(Bin bin, GType iface);
    method gst_bin_iterate_elements (line 47) | GstIteratorPtr gst_bin_iterate_elements(Bin bin);
    method gst_bin_iterate_sorted (line 48) | GstIteratorPtr gst_bin_iterate_sorted(Bin bin);
    method gst_bin_iterate_recurse (line 49) | GstIteratorPtr gst_bin_iterate_recurse(Bin bin);
    method gst_bin_iterate_sinks (line 50) | GstIteratorPtr gst_bin_iterate_sinks(Bin bin);
    method gst_bin_iterate_sources (line 51) | GstIteratorPtr gst_bin_iterate_sources(Bin bin);
    method gst_bin_iterate_all_by_interface (line 52) | GstIteratorPtr gst_bin_iterate_all_by_interface(Bin bin, GType iface);
    method gst_debug_bin_to_dot_file (line 55) | void gst_debug_bin_to_dot_file (Bin bin, int details, String file_name);
    method gst_debug_bin_to_dot_file_with_ts (line 56) | void gst_debug_bin_to_dot_file_with_ts (Bin bin, int details, String f...

FILE: src/org/freedesktop/gstreamer/lowlevel/GstBufferAPI.java
  type GstBufferAPI (line 40) | public interface GstBufferAPI extends com.sun.jna.Library {
    class MapInfoStruct (line 64) | public static final class MapInfoStruct extends com.sun.jna.Structure {
      method MapInfoStruct (line 80) | public MapInfoStruct() {
      method MapInfoStruct (line 82) | public MapInfoStruct(Pointer ptr) {
      method getFieldOrder (line 86) | @Override
    method gst_buffer_get_type (line 95) | GType gst_buffer_get_type();
    method gst_buffer_new (line 98) | @CallerOwnsReturn Buffer gst_buffer_new();
    method gst_buffer_new_allocate (line 99) | @CallerOwnsReturn Buffer gst_buffer_new_allocate(Pointer allocator, in...
    method ptr_gst_buffer_new (line 100) | @CallerOwnsReturn Pointer ptr_gst_buffer_new();
    method ptr_gst_buffer_new_allocate (line 101) | @CallerOwnsReturn Pointer ptr_gst_buffer_new_allocate(Pointer allocato...
    method gst_buffer_get_size (line 104) | NativeLong gst_buffer_get_size(Buffer buffer);
    method gst_buffer_map (line 105) | boolean gst_buffer_map(Buffer buffer, MapInfoStruct info, int flags);
    method gst_buffer_unmap (line 106) | void gst_buffer_unmap(Buffer buffer, MapInfoStruct info);
    method gst_buffer_n_memory (line 107) | int gst_buffer_n_memory(Buffer buffer);
    method gst_buffer_map_range (line 108) | boolean gst_buffer_map_range(Buffer buffer, int idx, int length, MapIn...
    method gst_buffer_get_meta (line 109) | GstMetaPtr gst_buffer_get_meta(Buffer buffer, GType gType);
    method gst_buffer_get_n_meta (line 110) | int gst_buffer_get_n_meta(Buffer buffer,GType gType);
    method gst_buffer_iterate_meta (line 111) | GstMetaPtr gst_buffer_iterate_meta(Buffer buffer, PointerByReference s...
    method gst_buffer_get_flags (line 113) | int gst_buffer_get_flags(Buffer buffer);
    method gst_buffer_set_flags (line 114) | boolean gst_buffer_set_flags(Buffer buffer, int flags);
    method gst_buffer_unset_flags (line 115) | boolean gst_buffer_unset_flags(Buffer buffer, int flags);
    class BufferStruct (line 154) | public static final class BufferStruct extends com.sun.jna.Structure {
      method BufferStruct (line 169) | public BufferStruct(Pointer ptr) {
      method getFieldOrder (line 173) | @Override
      method toString (line 182) | @Override

FILE: src/org/freedesktop/gstreamer/lowlevel/GstBufferPoolAPI.java
  type GstBufferPoolAPI (line 31) | public interface GstBufferPoolAPI extends com.sun.jna.Library {
    method gst_buffer_pool_get_type (line 34) | GType gst_buffer_pool_get_type();
    method gst_buffer_pool_new (line 37) | @CallerOwnsReturn BufferPool gst_buffer_pool_new();
    method ptr_gst_buffer_pool_new (line 38) | Pointer ptr_gst_buffer_pool_new();
    method gst_buffer_pool_get_config (line 41) | Structure gst_buffer_pool_get_config(BufferPool pool);
    method gst_buffer_pool_config_get_params (line 44) | boolean gst_buffer_pool_config_get_params(Structure config, /* Caps **...
    method gst_buffer_pool_config_set_params (line 45) | void gst_buffer_pool_config_set_params(Structure config, Caps caps, in...

FILE: src/org/freedesktop/gstreamer/lowlevel/GstBusAPI.java
  type GstBusAPI (line 39) | public interface GstBusAPI extends com.sun.jna.Library {
    method gst_bus_new (line 43) | Bus gst_bus_new();
    method gst_bus_post (line 44) | boolean gst_bus_post(Bus bus, @IncRef Message message);
    method gst_bus_have_pending (line 46) | boolean gst_bus_have_pending(Bus bus);
    method gst_bus_peek (line 47) | @CallerOwnsReturn Message gst_bus_peek(Bus bus);
    method gst_bus_pop (line 48) | @CallerOwnsReturn Message gst_bus_pop(Bus bus);
    method gst_bus_pop_filtered (line 49) | @CallerOwnsReturn Message gst_bus_pop_filtered(Bus bus, MessageType ty...
    method gst_bus_timed_pop (line 50) | @CallerOwnsReturn Message gst_bus_timed_pop(Bus bus, long timeout);
    method gst_bus_timed_pop_filtered (line 51) | @CallerOwnsReturn Message gst_bus_timed_pop_filtered(Bus bus, long tim...
    method gst_bus_poll (line 53) | @CallerOwnsReturn Message gst_bus_poll(Bus bus, MessageType events, /*...
    method gst_bus_set_flushing (line 56) | void gst_bus_set_flushing(Bus ptr, int flushing);
    type BusCallback (line 57) | interface BusCallback extends GstCallback {
      method callback (line 58) | boolean callback(GstBusPtr bus, GstMessagePtr msg, Pointer data);
    type BusSyncHandler (line 60) | public interface BusSyncHandler extends GstCallback {
      method callback (line 61) | BusSyncReply callback(GstBusPtr bus, GstMessagePtr msg, Pointer user...
    method gst_bus_add_watch (line 63) | NativeLong gst_bus_add_watch(Bus bus, BusCallback function, Pointer da...
    method gst_bus_set_sync_handler (line 64) | void gst_bus_set_sync_handler(Bus bus, BusSyncHandler function, Pointe...
    method gst_bus_enable_sync_message_emission (line 65) | void gst_bus_enable_sync_message_emission(Bus bus);
    method gst_bus_disable_sync_message_emission (line 66) | void gst_bus_disable_sync_message_emission(Bus bus);
    method gst_bus_add_signal_watch (line 68) | void gst_bus_add_signal_watch(Bus bus);
    method gst_bus_remove_signal_watch (line 69) | void gst_bus_remove_signal_watch(Bus bus);

FILE: src/org/freedesktop/gstreamer/lowlevel/GstBusPtr.java
  class GstBusPtr (line 23) | public class GstBusPtr extends GstObjectPtr {
    method GstBusPtr (line 25) | public GstBusPtr() {
    method GstBusPtr (line 28) | public GstBusPtr(Pointer ptr) {

FILE: src/org/freedesktop/gstreamer/lowlevel/GstCapsAPI.java
  type GstCapsAPI (line 34) | public interface GstCapsAPI extends com.sun.jna.Library {
    method gst_caps_get_type (line 37) | GType gst_caps_get_type();
    method ptr_gst_caps_new_empty (line 38) | @CallerOwnsReturn Pointer ptr_gst_caps_new_empty();
    method ptr_gst_caps_new_any (line 39) | @CallerOwnsReturn Pointer ptr_gst_caps_new_any();
    method ptr_gst_caps_new_simple (line 40) | @CallerOwnsReturn Pointer ptr_gst_caps_new_simple(String media_type, S...
    method ptr_gst_caps_new_full (line 41) | @CallerOwnsReturn Pointer ptr_gst_caps_new_full(Structure... data);
    method gst_caps_new_empty (line 42) | @CallerOwnsReturn Caps gst_caps_new_empty();
    method gst_caps_new_any (line 43) | @CallerOwnsReturn Caps gst_caps_new_any();
    method gst_caps_new_simple (line 44) | @CallerOwnsReturn Caps gst_caps_new_simple(String media_type, String f...
    method gst_caps_new_full (line 45) | @CallerOwnsReturn Caps gst_caps_new_full(Structure... data);
    method ptr_gst_caps_copy (line 47) | @CallerOwnsReturn Pointer ptr_gst_caps_copy(Caps caps);
    method ptr_gst_caps_from_string (line 48) | @CallerOwnsReturn Pointer ptr_gst_caps_from_string(String string);
    method gst_caps_copy (line 49) | @CallerOwnsReturn Caps gst_caps_copy(Caps caps);
    method gst_caps_from_string (line 50) | @CallerOwnsReturn Caps gst_caps_from_string(String string);
    method gst_caps_make_writable (line 52) | @CallerOwnsReturn Caps gst_caps_make_writable(@Invalidate Caps caps);
    method gst_caps_append (line 55) | void gst_caps_append(Caps caps1, @Invalidate Caps caps2);
    method gst_caps_merge (line 56) | @CallerOwnsReturn Caps gst_caps_merge(@Invalidate Caps caps1, @Invalid...
    method gst_caps_append_structure (line 57) | void gst_caps_append_structure(Caps caps, @Invalidate Structure struct...
    method gst_caps_remove_structure (line 58) | void gst_caps_remove_structure(Caps caps, int idx);
    method gst_caps_merge_structure (line 59) | void gst_caps_merge_structure(Caps caps, @Invalidate Structure structu...
    method gst_caps_get_size (line 60) | int gst_caps_get_size(Caps caps);
    method gst_caps_get_structure (line 61) | Structure gst_caps_get_structure(Caps caps, int index);
    method gst_caps_steal_structure (line 62) | @CallerOwnsReturn Structure gst_caps_steal_structure(Caps caps, int in...
    method gst_caps_copy_nth (line 63) | @CallerOwnsReturn Caps gst_caps_copy_nth(Caps caps, int nth);
    method gst_caps_truncate (line 64) | @CallerOwnsReturn Caps gst_caps_truncate(Caps caps);
    method gst_caps_set_simple (line 65) | void gst_caps_set_simple(Caps caps, String field, Object... values);
    method gst_caps_intersect (line 67) | @CallerOwnsReturn Caps gst_caps_intersect( Caps caps1,  Caps caps2);
    method gst_caps_subtract (line 68) | @CallerOwnsReturn Caps gst_caps_subtract( Caps minuend,  Caps subtrahe...
    method gst_caps_normalize (line 69) | @CallerOwnsReturn Caps gst_caps_normalize( Caps caps);
    method gst_caps_simplify (line 70) | @CallerOwnsReturn Caps gst_caps_simplify(Caps caps);
    method gst_caps_to_string (line 71) | @FreeReturnValue String gst_caps_to_string(Caps caps);
    method gst_caps_is_any (line 74) | boolean gst_caps_is_any(Caps caps);
    method gst_caps_is_empty (line 75) | boolean gst_caps_is_empty(Caps caps);
    method gst_caps_is_fixed (line 76) | boolean gst_caps_is_fixed(Caps caps);
    method gst_caps_is_always_compatible (line 77) | boolean gst_caps_is_always_compatible(Caps caps1,  Caps caps2);
    method gst_caps_is_subset (line 78) | boolean gst_caps_is_subset(Caps subset,  Caps superset);
    method gst_caps_is_equal (line 79) | boolean gst_caps_is_equal(Caps caps1,  Caps caps2);
    method gst_caps_is_equal_fixed (line 80) | boolean gst_caps_is_equal_fixed(Caps caps1,  Caps caps2);
    method gst_caps_can_intersect (line 81) | boolean gst_caps_can_intersect(Caps caps1, Caps caps2);
    method gst_static_caps_get_type (line 83) | GType gst_static_caps_get_type();

FILE: src/org/freedesktop/gstreamer/lowlevel/GstClockAPI.java
  type GstClockAPI (line 33) | public interface GstClockAPI extends com.sun.jna.Library {
    method gst_clock_get_type (line 36) | GType gst_clock_get_type();
    method gst_clock_set_resolution (line 37) | long gst_clock_set_resolution(Clock clock, long resolution);
    method gst_clock_get_resolution (line 38) | long gst_clock_get_resolution(Clock clock);
    method gst_clock_get_time (line 39) | long gst_clock_get_time(Clock clock);
    method gst_clock_set_calibration (line 40) | void gst_clock_set_calibration(Clock clock, long internal, long extern...
    method gst_clock_get_calibration (line 41) | void gst_clock_get_calibration(Clock clock, long[] internal, long[] ex...
    method gst_clock_set_master (line 44) | boolean gst_clock_set_master(Clock clock, Clock master);
    method gst_clock_get_master (line 45) | @CallerOwnsReturn Clock gst_clock_get_master(Clock clock);
    method gst_clock_add_observation (line 46) | boolean gst_clock_add_observation(Clock clock, long slave, long Master...
    method gst_clock_get_internal_time (line 49) | long gst_clock_get_internal_time(Clock clock);
    method gst_clock_adjust_unlocked (line 50) | long gst_clock_adjust_unlocked(Clock clock, long internal);
    method gst_clock_unadjust_unlocked (line 51) | long gst_clock_unadjust_unlocked(Clock clock, long external);
    method gst_clock_new_single_shot_id (line 55) | @CallerOwnsReturn ClockID gst_clock_new_single_shot_id(Clock clock, lo...
    method gst_clock_new_periodic_id (line 56) | @CallerOwnsReturn ClockID gst_clock_new_periodic_id(Clock clock, long ...
    method gst_clock_id_ref (line 60) | void gst_clock_id_ref(ClockID id);
    method gst_clock_id_ref (line 61) | void gst_clock_id_ref(GPointer id);
    method gst_clock_id_unref (line 62) | void gst_clock_id_unref(ClockID id);
    method gst_clock_id_unref (line 63) | void gst_clock_id_unref(GPointer id);
    method gst_clock_id_compare_func (line 66) | int gst_clock_id_compare_func(ClockID id1, ClockID id2);
    method gst_clock_id_get_time (line 68) | long gst_clock_id_get_time(ClockID id);
    method gst_clock_id_wait (line 69) | ClockReturn gst_clock_id_wait(ClockID id, /* GstlongDiff * */ long[] j...
    type GstClockCallback (line 70) | public static interface GstClockCallback {
      method callback (line 77) | boolean callback(Clock clock, long time, ClockID id, Pointer user_da...
    method gst_clock_id_wait_async (line 80) | ClockReturn gst_clock_id_wait_async(ClockID id, GstClockCallback func,...
    method gst_clock_id_unschedule (line 81) | void gst_clock_id_unschedule(ClockID id);

FILE: src/org/freedesktop/gstreamer/lowlevel/GstColorBalanceAPI.java
  type GstColorBalanceAPI (line 32) | public interface GstColorBalanceAPI extends Library {
    method gst_color_balance_channel_get_type (line 35) | GType gst_color_balance_channel_get_type();
    method gst_color_balance_get_type (line 36) | GType gst_color_balance_get_type();
    method gst_color_balance_list_channels (line 39) | GList gst_color_balance_list_channels(ColorBalance balance);
    method gst_color_balance_set_value (line 41) | void gst_color_balance_set_value(ColorBalance balance, ColorBalanceCha...
    method gst_color_balance_get_value (line 43) | int gst_color_balance_get_value(ColorBalance balance, ColorBalanceChan...
    class ColorBalanceChannelStruct (line 45) | public static final class ColorBalanceChannelStruct extends com.sun.jn...
      method getLabel (line 51) | public String getLabel() {
      method getMinValue (line 54) | public int getMinValue() {
      method getMaxValue (line 57) | public int getMaxValue() {
      method read (line 60) | public void read() {}
      method write (line 61) | public void write() {}
      method ColorBalanceChannelStruct (line 62) | public ColorBalanceChannelStruct(Pointer ptr) {
      method getFieldOrder (line 66) | @Override

FILE: src/org/freedesktop/gstreamer/lowlevel/GstContextAPI.java
  type GstContextAPI (line 13) | public interface GstContextAPI extends com.sun.jna.Library {
    method gst_context_new (line 17) | GstContextPtr gst_context_new(String context_type, boolean persistent);
    method gst_context_get_context_type (line 19) | String gst_context_get_context_type(GstContextPtr context);
    method gst_context_has_context_type (line 21) | boolean gst_context_has_context_type(GstContextPtr context, String con...
    method gst_context_get_structure (line 23) | Structure gst_context_get_structure(GstContextPtr context);
    method gst_context_writable_structure (line 25) | Structure gst_context_writable_structure(GstContextPtr context);
    method gst_context_is_persistent (line 27) | boolean gst_context_is_persistent(GstContextPtr context);

FILE: src/org/freedesktop/gstreamer/lowlevel/GstContextPtr.java
  class GstContextPtr (line 5) | public class GstContextPtr extends GstMiniObjectPtr {
    method GstContextPtr (line 7) | public GstContextPtr() {
    method GstContextPtr (line 10) | public GstContextPtr(Pointer ptr) {

FILE: src/org/freedesktop/gstreamer/lowlevel/GstControlBindingAPI.java
  type GstControlBindingAPI (line 30) | public interface GstControlBindingAPI extends Library {
    method gst_control_binding_sync_values (line 35) | boolean gst_control_binding_sync_values(GstControlBindingPtr binding,
    method gst_control_binding_get_value (line 40) | GValueAPI.GValue gst_control_binding_get_value(GstControlBindingPtr bi...
    method gst_control_binding_get_g_value_array (line 43) | boolean gst_control_binding_get_g_value_array(GstControlBindingPtr bin...
    method gst_control_binding_set_disabled (line 49) | void gst_control_binding_set_disabled(GstControlBindingPtr binding,
    method gst_control_binding_is_disabled (line 52) | boolean gst_control_binding_is_disabled(GstControlBindingPtr binding);

FILE: src/org/freedesktop/gstreamer/lowlevel/GstControlBindingPtr.java
  class GstControlBindingPtr (line 23) | public class GstControlBindingPtr extends GstObjectPtr {
    method GstControlBindingPtr (line 25) | public GstControlBindingPtr() {
    method GstControlBindingPtr (line 28) | public GstControlBindingPtr(Pointer ptr) {

FILE: src/org/freedesktop/gstreamer/lowlevel/GstControlSourceAPI.java
  type GstControlSourceAPI (line 32) | public interface GstControlSourceAPI extends Library {
    method gst_control_source_get_value (line 37) | boolean gst_control_source_get_value(GstControlSourcePtr self, long ti...
    method gst_control_source_get_value_array (line 38) | boolean gst_control_source_get_value_array(GstControlSourcePtr self, l...
    class GstTimedValue (line 50) | @Structure.FieldOrder({"timestamp", "value"})
      method GstTimedValue (line 56) | public GstTimedValue() {
      method GstTimedValue (line 60) | public GstTimedValue(Pointer ptr) {

FILE: src/org/freedesktop/gstreamer/lowlevel/GstControlSourcePtr.java
  class GstControlSourcePtr (line 23) | public class GstControlSourcePtr extends GstObjectPtr {
    method GstControlSourcePtr (line 25) | public GstControlSourcePtr() {
    method GstControlSourcePtr (line 28) | public GstControlSourcePtr(Pointer ptr) {

FILE: src/org/freedesktop/gstreamer/lowlevel/GstControllerAPI.java
  type GstControllerAPI (line 33) | public interface GstControllerAPI extends Library {
    method gst_trigger_control_source_new (line 37) | @CallerOwnsReturn GstTriggerControlSourcePtr gst_trigger_control_sourc...
    method gst_interpolation_control_source_new (line 39) | @CallerOwnsReturn GstInterpolationControlSourcePtr gst_interpolation_c...
    method gst_lfo_control_source_new (line 41) | @CallerOwnsReturn GstLFOControlSourcePtr gst_lfo_control_source_new();
    method gst_direct_control_binding_new (line 43) | @CallerOwnsReturn GstDirectControlBindingPtr gst_direct_control_bindin...
    method gst_direct_control_binding_new_absolute (line 48) | @CallerOwnsReturn GstDirectControlBindingPtr gst_direct_control_bindin...
    method gst_argb_control_binding_new (line 53) | @CallerOwnsReturn GstARGBControlBindingPtr gst_argb_control_binding_new(
    method gst_proxy_control_binding_new (line 62) | @CallerOwnsReturn GstProxyControlBindingPtr gst_proxy_control_binding_...
    method gst_timed_value_control_source_set (line 73) | boolean gst_timed_value_control_source_set(GstTimedValueControlSourceP...
    method gst_timed_value_control_source_set_from_list (line 77) | boolean gst_timed_value_control_source_set_from_list(
    method gst_timed_value_control_source_get_all (line 83) | @CallerOwnsReturn GlibAPI.GList gst_timed_value_control_source_get_all(
    method gst_timed_value_control_source_unset (line 86) | boolean gst_timed_value_control_source_unset(GstTimedValueControlSourc...
    method gst_timed_value_control_source_unset_all (line 89) | void gst_timed_value_control_source_unset_all(GstTimedValueControlSour...
    method gst_timed_value_control_source_get_count (line 91) | int gst_timed_value_control_source_get_count(GstTimedValueControlSourc...
    method gst_timed_value_control_invalidate_cache (line 93) | void gst_timed_value_control_invalidate_cache(GstTimedValueControlSour...

FILE: src/org/freedesktop/gstreamer/lowlevel/GstDateTimeAPI.java
  type GstDateTimeAPI (line 38) | public interface GstDateTimeAPI extends com.sun.jna.Library {
    method gst_date_time_get_type (line 41) | GType	gst_date_time_get_type();
    method gst_date_time_get_year (line 42) | int	gst_date_time_get_year(Pointer datetime);
    method gst_date_time_get_month (line 43) | int	gst_date_time_get_month(Pointer datetime);
    method gst_date_time_get_day (line 44) | int	gst_date_time_get_day(Pointer datetime);
    method gst_date_time_get_hour (line 45) | int	gst_date_time_get_hour(Pointer datetime);
    method gst_date_time_get_minute (line 46) | int	gst_date_time_get_minute(Pointer datetime);
    method gst_date_time_get_second (line 47) | int	gst_date_time_get_second(Pointer datetime);
    method gst_date_time_get_microsecond (line 48) | int	gst_date_time_get_microsecond(Pointer datetime);
    method gst_date_time_get_time_zone_offset (line 49) | float gst_date_time_get_time_zone_offset(Pointer datetime);
    method gst_date_time_new_from_unix_epoch_local_time (line 51) | @CallerOwnsReturn Pointer gst_date_time_new_from_unix_epoch_local_time...
    method gst_date_time_new_from_unix_epoch_utc (line 52) | @CallerOwnsReturn Pointer gst_date_time_new_from_unix_epoch_utc(long s...
    method gst_date_time_new_local_time (line 53) | @CallerOwnsReturn Pointer gst_date_time_new_local_time(int year,
    method gst_date_time_new (line 55) | @CallerOwnsReturn Pointer gst_date_time_new(float tzoffset, int year,
    method gst_date_time_new_now_local_time (line 57) | @CallerOwnsReturn Pointer gst_date_time_new_now_local_time();
    method gst_date_time_new_now_utc (line 58) | @CallerOwnsReturn Pointer gst_date_time_new_now_utc();
    method gst_date_time_ref (line 60) | Pointer gst_date_time_ref(Pointer datetime);
    method gst_date_time_unref (line 61) | void gst_date_time_unref(Pointer datetime);

FILE: src/org/freedesktop/gstreamer/lowlevel/GstDeviceAPI.java
  type GstDeviceAPI (line 33) | public interface GstDeviceAPI extends com.sun.jna.Library {
    method gst_device_create_element (line 36) | @CallerOwnsReturn Element gst_device_create_element(Device device, Str...
    method gst_device_get_caps (line 37) | @CallerOwnsReturn Caps gst_device_get_caps(Device device);
    method gst_device_get_device_class (line 38) | Pointer gst_device_get_device_class(Device device);
    method gst_device_get_display_name (line 39) | Pointer gst_device_get_display_name(Device device);
    method gst_device_has_classes (line 40) | boolean gst_device_has_classes(Device device, String classes);
    method gst_device_has_classesv (line 41) | boolean gst_device_has_classesv(Device device, String[] classes);
    method gst_device_reconfigure_element (line 42) | boolean gst_device_reconfigure_element(Device device, Element element);
    method gst_device_get_properties (line 43) | Structure gst_device_get_properties(Device device);

FILE: src/org/freedesktop/gstreamer/lowlevel/GstDeviceMonitorAPI.java
  type GstDeviceMonitorAPI (line 32
Condensed preview — 328 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,565K chars).
[
  {
    "path": ".github/FUNDING.yml",
    "chars": 24,
    "preview": "github: neilcsmith-net\n\n"
  },
  {
    "path": ".github/workflows/maven.yml",
    "chars": 989,
    "preview": "name: Test on Maven\n\non:\n  [push, pull_request]\n\njobs:\n  test-1-24-jdk25:\n\n    runs-on: ubuntu-24.04\n\n    steps:\n      -"
  },
  {
    "path": ".gitignore",
    "chars": 163,
    "preview": "*.class\n\n# Package Files #\n*.jar\n*.war\n*.ear\n/target/\n\n# Eclipse Files #\n.classpath\n.project\n.settings\n\n# NetBeans Files"
  },
  {
    "path": ".mvn/wrapper/maven-wrapper.properties",
    "chars": 255,
    "preview": "wrapperVersion=3.3.4\ndistributionType=only-script\ndistributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/"
  },
  {
    "path": "LICENSE.md",
    "chars": 7639,
    "preview": "\t\t   GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software"
  },
  {
    "path": "README.md",
    "chars": 5148,
    "preview": "GStreamer 1.x Java Core (gst1-java-core)\n========================================\n\ngst1-java-core is a set of Java bindi"
  },
  {
    "path": "mvnw",
    "chars": 11790,
    "preview": "#!/bin/sh\n# ----------------------------------------------------------------------------\n# Licensed to the Apache Softwa"
  },
  {
    "path": "mvnw.cmd",
    "chars": 8481,
    "preview": "<# : batch portion\r\n@REM ----------------------------------------------------------------------------\r\n@REM Licensed to "
  },
  {
    "path": "nbactions.xml",
    "chars": 3233,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<actions>\n        <action>\n            <actionName>run</actionName>\n            <"
  },
  {
    "path": "pom.xml",
    "chars": 6953,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
  },
  {
    "path": "src/org/freedesktop/gstreamer/Bin.java",
    "chars": 18178,
    "preview": "/* \n * Copyright (c) 2025 Neil C Smith\n * Copyright (c) 2016 Christophe Lafolet\n * Copyright (c) 2009 Levente Farkas\n * "
  },
  {
    "path": "src/org/freedesktop/gstreamer/Buffer.java",
    "chars": 13368,
    "preview": "/*\n * Copyright (c) 2020 Neil C Smith\n * Copyright (c) 2019 Christophe Lafolet\n * Copyright (C) 2014 Tom Greenwood <tgre"
  },
  {
    "path": "src/org/freedesktop/gstreamer/BufferFlags.java",
    "chars": 4157,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (C) 2007 Wayne Meissner\n * Copyright (C) 1999,2000 Erik Walthinsen <"
  },
  {
    "path": "src/org/freedesktop/gstreamer/BufferPool.java",
    "chars": 2928,
    "preview": "/*\n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2016 Christophe Lafolet\n *\n * This file is part of gstreamer-java"
  },
  {
    "path": "src/org/freedesktop/gstreamer/Bus.java",
    "chars": 34467,
    "preview": "/* \n * Copyright (c) 2025 Neil C Smith\n * Copyright (C) 2014 Tom Greenwood <tgreenwood@cafex.com>\n * Copyright (C) 2007 "
  },
  {
    "path": "src/org/freedesktop/gstreamer/BusSyncHandler.java",
    "chars": 1213,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/BusSyncReply.java",
    "chars": 1507,
    "preview": "/* \n * Copyright (c) 2025 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/Caps.java",
    "chars": 13309,
    "preview": "/*\n * Copyright (c) 2025 Neil C Smith\n * Copyright (c) 2009 Levente Farkas\n * Copyright (C) 2007 Wayne Meissner\n * Copyr"
  },
  {
    "path": "src/org/freedesktop/gstreamer/Clock.java",
    "chars": 14675,
    "preview": "/* \n * Copyright (c) 2020 Neil C Smith\n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2007 Wayne Meissner\n * Copy"
  },
  {
    "path": "src/org/freedesktop/gstreamer/ClockID.java",
    "chars": 2748,
    "preview": "/* \n * Copyright (c) 2025 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/ClockReturn.java",
    "chars": 1542,
    "preview": "/* \n * Copyright (C) 2019 Neil C Smith\n * Copyright (C) 2008 Wayne Meissner\n * Copyright (C) 1999,2000 Erik Walthinsen <"
  },
  {
    "path": "src/org/freedesktop/gstreamer/ClockTime.java",
    "chars": 4451,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/Context.java",
    "chars": 4732,
    "preview": "/*\n * Copyright (c) 2025 Neil C Smith\n * Copyright (c) 2019 Christophe Lafolet\n * \n * This file is part of gstreamer-jav"
  },
  {
    "path": "src/org/freedesktop/gstreamer/ControlBinding.java",
    "chars": 4352,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you"
  },
  {
    "path": "src/org/freedesktop/gstreamer/ControlSource.java",
    "chars": 5286,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you"
  },
  {
    "path": "src/org/freedesktop/gstreamer/DateTime.java",
    "chars": 2886,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2016 Christophe Lafolet\n * Copyright (c) 2010 Levente Farkas\n * "
  },
  {
    "path": "src/org/freedesktop/gstreamer/Element.java",
    "chars": 32653,
    "preview": "/* \n * Copyright (c) 2025 Neil C Smith\n * Copyright (c) 2019 Christophe Lafolet\n * Copyright (c) 2009 Levente Farkas\n * "
  },
  {
    "path": "src/org/freedesktop/gstreamer/ElementFactory.java",
    "chars": 14388,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/FlowReturn.java",
    "chars": 2317,
    "preview": "/* \n * Copyright (C) 2019 Neil C Smith\n * Copyright (C) 2007 Wayne Meissner\n * Copyright (C) 1999,2000 Erik Walthinsen <"
  },
  {
    "path": "src/org/freedesktop/gstreamer/Format.java",
    "chars": 2161,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/Fraction.java",
    "chars": 1942,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007,2008 Wayne Meissner\n * \n * This file is part of gstreamer-j"
  },
  {
    "path": "src/org/freedesktop/gstreamer/GhostPad.java",
    "chars": 5278,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2009 Levente Farkas\n * Copyright (C) 2007 Wayne Meissner\n * Copy"
  },
  {
    "path": "src/org/freedesktop/gstreamer/Gst.java",
    "chars": 26934,
    "preview": "/* \n * Copyright (c) 2025 Neil C Smith\n * Copyright (c) 2018 Antonio Morales\n * Copyright (c) 2007 Wayne Meissner\n * \n *"
  },
  {
    "path": "src/org/freedesktop/gstreamer/GstException.java",
    "chars": 1541,
    "preview": "/* \n * Copyright (C) 2019 Neil C Smith\n * Copyright (C) 2008 Wayne Meissner\n * Copyright (C) 2004 Wim Taymans <wim@fluen"
  },
  {
    "path": "src/org/freedesktop/gstreamer/GstIterator.java",
    "chars": 1713,
    "preview": "/* \n * Copyright (c) 2021 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you"
  },
  {
    "path": "src/org/freedesktop/gstreamer/GstObject.java",
    "chars": 11643,
    "preview": "/* \n * Copyright (c) 2020 Neil C Smith\n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2007, 2008 Wayne Meissner\n "
  },
  {
    "path": "src/org/freedesktop/gstreamer/Meta.java",
    "chars": 3961,
    "preview": "/*\n * Copyright (c) 2020 Neil C Smith\n *\n * This file is part of gstreamer-java.\n *\n * This code is free software: you c"
  },
  {
    "path": "src/org/freedesktop/gstreamer/MetaFlags.java",
    "chars": 1876,
    "preview": "/*\n * Copyright (c) 2020 Neil C Smith\n * Copyright (c) 2020 Petr Lastovka\n *\n * This file is part of gstreamer-java.\n *\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/MiniObject.java",
    "chars": 4746,
    "preview": "/*\n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2016 Christophe Lafolet\n * Copyright (c) 2014 Tom Greenwood <tgre"
  },
  {
    "path": "src/org/freedesktop/gstreamer/MiniObjectFlags.java",
    "chars": 1697,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/Pad.java",
    "chars": 29432,
    "preview": "/* \n * Copyright (C) 2020 Neil C Smith\n * Copyright (C) 2018 Antonio Morales\n * Copyright (C) 2014 Tom Greenwood <tgreen"
  },
  {
    "path": "src/org/freedesktop/gstreamer/PadDirection.java",
    "chars": 1292,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/PadLinkException.java",
    "chars": 1358,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you"
  },
  {
    "path": "src/org/freedesktop/gstreamer/PadLinkReturn.java",
    "chars": 1753,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/PadMode.java",
    "chars": 1366,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/PadPresence.java",
    "chars": 1199,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/PadProbeInfo.java",
    "chars": 2146,
    "preview": "/* \n * Copyright (C) 2020 Neil C Smith\n *\n * This file is part of gstreamer-java.\n *\n * This code is free software: you "
  },
  {
    "path": "src/org/freedesktop/gstreamer/PadProbeReturn.java",
    "chars": 2218,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/PadProbeType.java",
    "chars": 5754,
    "preview": "/* \n * Copyright (c) 2020 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you"
  },
  {
    "path": "src/org/freedesktop/gstreamer/PadTemplate.java",
    "chars": 4440,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2009 Levente Farkas\n * Copyright (C) 2007, 2008 Wayne Meissner\n "
  },
  {
    "path": "src/org/freedesktop/gstreamer/Pipeline.java",
    "chars": 14771,
    "preview": "/* \n * Copyright (c) 2021 Neil C Smith\n * Copyright (c) 2008 Wayne Meissner\n * Copyright (C) 2000 Erik Walthinsen <omega"
  },
  {
    "path": "src/org/freedesktop/gstreamer/Plugin.java",
    "chars": 5761,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2009 Levente Farkas\n * Copyright (C) 2007 Wayne Meissner\n * Copy"
  },
  {
    "path": "src/org/freedesktop/gstreamer/PluginFeature.java",
    "chars": 5348,
    "preview": "/* \n * Copyright (C) 2019 Neil C Smith\n * Copyright (C) 2007 Wayne Meissner\n * Copyright (C) 1999,2000 Erik Walthinsen <"
  },
  {
    "path": "src/org/freedesktop/gstreamer/Promise.java",
    "chars": 5010,
    "preview": "/*\n * Copyright (c) 2020 Neil C Smith\n * Copyright (c) 2018 Vinicius Tona\n * Copyright (c) 2018 Antonio Morales\n * \n * T"
  },
  {
    "path": "src/org/freedesktop/gstreamer/PromiseResult.java",
    "chars": 1354,
    "preview": "/*\n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2018 Antonio Morales\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/Range.java",
    "chars": 2775,
    "preview": "/* \n * Copyright (c) 2009 Levente Farkas\n * Copyright (C) 2009 Tamas Korodi <kotyo@zamba.fm>\n *\n * This file is part of "
  },
  {
    "path": "src/org/freedesktop/gstreamer/Registry.java",
    "chars": 10066,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * Copyright (C) 1999,2000 Erik Walthinsen <"
  },
  {
    "path": "src/org/freedesktop/gstreamer/SDPMessage.java",
    "chars": 3700,
    "preview": "/*\n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2018 Antonio Morales\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/SDPResult.java",
    "chars": 1790,
    "preview": "/*\n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2018 Antonio Morales\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/Sample.java",
    "chars": 3045,
    "preview": "/* \n * Copyright (c) 2020 Christophe Lafolet\n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2014 Tom Greenwood <tgr"
  },
  {
    "path": "src/org/freedesktop/gstreamer/Segment.java",
    "chars": 2366,
    "preview": "/*\n * Copyright (c) 2010 David Hoyt <dhoyt@hoytsoft.org>\n * Copyright (c) 2010 David Hoyt <dhoyt@hoytsoft.org>\n *\n * Thi"
  },
  {
    "path": "src/org/freedesktop/gstreamer/SegmentFlags.java",
    "chars": 1819,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/State.java",
    "chars": 2343,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/StateChangeReturn.java",
    "chars": 1894,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/StaticPadTemplate.java",
    "chars": 2002,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/Structure.java",
    "chars": 26099,
    "preview": "/*\n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2009 Levente Farkas\n * Copyright (C) 2009 Tamas Korodi <kotyo@zam"
  },
  {
    "path": "src/org/freedesktop/gstreamer/Tag.java",
    "chars": 4536,
    "preview": "/* \n * Copyright (C) 2007 Wayne Meissner\n * Copyright (C) 2003 Benjamin Otte\n * \n * This file is part of gstreamer-java."
  },
  {
    "path": "src/org/freedesktop/gstreamer/TagFlag.java",
    "chars": 1746,
    "preview": "/* \n * Copyright (C) 2019 Neil C Smith\n * Copyright (C) 2007 Wayne Meissner\n * Copyright (C) 2003 Benjamin Otte\n * \n * T"
  },
  {
    "path": "src/org/freedesktop/gstreamer/TagList.java",
    "chars": 10956,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2016 Christophe Lafolet\n * Copyright (c) 2014 Tom Greenwood <tgr"
  },
  {
    "path": "src/org/freedesktop/gstreamer/TagMergeMode.java",
    "chars": 2283,
    "preview": "/* \n * Copyright (C) 2019 Neil C Smith\n * Copyright (C) 2007 Wayne Meissner\n * Copyright (C) 2003 Benjamin Otte\n * \n * T"
  },
  {
    "path": "src/org/freedesktop/gstreamer/Version.java",
    "chars": 4960,
    "preview": "/* \n * Copyright (c) 2021 Neil C Smith\n * Copyright (c) 2008 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/controller/ARGBControlBinding.java",
    "chars": 3915,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you"
  },
  {
    "path": "src/org/freedesktop/gstreamer/controller/Controllers.java",
    "chars": 2303,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you"
  },
  {
    "path": "src/org/freedesktop/gstreamer/controller/DirectControlBinding.java",
    "chars": 4090,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you"
  },
  {
    "path": "src/org/freedesktop/gstreamer/controller/InterpolationControlSource.java",
    "chars": 3367,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you"
  },
  {
    "path": "src/org/freedesktop/gstreamer/controller/InterpolationMode.java",
    "chars": 1752,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you"
  },
  {
    "path": "src/org/freedesktop/gstreamer/controller/LFOControlSource.java",
    "chars": 5783,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you"
  },
  {
    "path": "src/org/freedesktop/gstreamer/controller/LFOWaveform.java",
    "chars": 1564,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you"
  },
  {
    "path": "src/org/freedesktop/gstreamer/controller/ProxyControlBinding.java",
    "chars": 3118,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you"
  },
  {
    "path": "src/org/freedesktop/gstreamer/controller/TimedValueControlSource.java",
    "chars": 5241,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you"
  },
  {
    "path": "src/org/freedesktop/gstreamer/controller/TriggerControlSource.java",
    "chars": 3336,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you"
  },
  {
    "path": "src/org/freedesktop/gstreamer/device/Device.java",
    "chars": 4946,
    "preview": "/*\n * \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2015 Andres Colubri <andres.colubri@gmail.com>\n * Copyright ("
  },
  {
    "path": "src/org/freedesktop/gstreamer/device/DeviceMonitor.java",
    "chars": 5173,
    "preview": "/*\n * \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2015 Andres Colubri <andres.colubri@gmail.com>\n * Copyright ("
  },
  {
    "path": "src/org/freedesktop/gstreamer/device/DeviceProvider.java",
    "chars": 6784,
    "preview": "/*\n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2015 Andres Colubri <andres.colubri@gmail.com>\n * Copyright (C) 2"
  },
  {
    "path": "src/org/freedesktop/gstreamer/device/DeviceProviderFactory.java",
    "chars": 5446,
    "preview": "/*\n * Copyright (c) 2025 Neil C Smith\n * Copyright (c) 2015 Andres Colubri <andres.colubri@gmail.com>\n * Copyright (C) 2"
  },
  {
    "path": "src/org/freedesktop/gstreamer/elements/AppSink.java",
    "chars": 10286,
    "preview": "/*\n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2016 Christophe Lafolet\n * Copyright (c) 2009 Levente Farkas\n * C"
  },
  {
    "path": "src/org/freedesktop/gstreamer/elements/AppSrc.java",
    "chars": 14563,
    "preview": "/*\n * Copyright (c) 2025 Neil C Smith\n * Copyright (c) 2009 Andres Colubri\n * Copyright (c) 2008 Wayne Meissner\n * Copyr"
  },
  {
    "path": "src/org/freedesktop/gstreamer/elements/BaseSink.java",
    "chars": 5863,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/elements/BaseSrc.java",
    "chars": 2782,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2007 Wayne Meissner\n * \n * "
  },
  {
    "path": "src/org/freedesktop/gstreamer/elements/BaseTransform.java",
    "chars": 1352,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2009 Levente Farkas\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/elements/DecodeBin.java",
    "chars": 14461,
    "preview": "/*\n * Copyright (c) 2025 Neil C Smith\n * Copyright (c) 2016 Christophe Lafolet\n * Copyright (c) 2010 DHoyt <david.g.hoyt"
  },
  {
    "path": "src/org/freedesktop/gstreamer/elements/Elements.java",
    "chars": 1820,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you"
  },
  {
    "path": "src/org/freedesktop/gstreamer/elements/PlayBin.java",
    "chars": 21554,
    "preview": "/*\n * Copyright (c) 2021 Neil C Smith\n * Copyright (c) 2014 Tom Greenwood <tgreenwood@cafex.com>\n * Copyright (c) 2009 A"
  },
  {
    "path": "src/org/freedesktop/gstreamer/elements/PlayFlags.java",
    "chars": 2454,
    "preview": "/* \n * Copyright (c) 2021 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you"
  },
  {
    "path": "src/org/freedesktop/gstreamer/elements/URIDecodeBin.java",
    "chars": 15384,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2016 Christophe Lafolet\n * \n * This file is part of gstreamer-ja"
  },
  {
    "path": "src/org/freedesktop/gstreamer/event/BufferSizeEvent.java",
    "chars": 3666,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2008 Wayne Meissner\n * Copyright (C) 1999,2000 Erik Walthinsen <"
  },
  {
    "path": "src/org/freedesktop/gstreamer/event/CapsEvent.java",
    "chars": 1824,
    "preview": "/*\n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2016 Christophe Lafolet\n *\n * This file is part of gstreamer-java"
  },
  {
    "path": "src/org/freedesktop/gstreamer/event/EOSEvent.java",
    "chars": 2447,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2008 Wayne Meissner\n * Copyright (C) 1999,2000 Erik Walthinsen <"
  },
  {
    "path": "src/org/freedesktop/gstreamer/event/Event.java",
    "chars": 4267,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007, 2008 Wayne Meissner\n * \n * This file is part of gstreamer-"
  },
  {
    "path": "src/org/freedesktop/gstreamer/event/EventType.java",
    "chars": 7536,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2008 Wayne Meissner\n * Copyright (C) 1999,2000 Erik Walthinsen <"
  },
  {
    "path": "src/org/freedesktop/gstreamer/event/FlushStartEvent.java",
    "chars": 2666,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2008 Wayne Meissner\n * Copyright (C) 1999,2000 Erik Walthinsen <"
  },
  {
    "path": "src/org/freedesktop/gstreamer/event/FlushStopEvent.java",
    "chars": 2262,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2008 Wayne Meissner\n * Copyright (C) 1999,2000 Erik Walthinsen <"
  },
  {
    "path": "src/org/freedesktop/gstreamer/event/LatencyEvent.java",
    "chars": 2446,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2008 Wayne Meissner\n * Copyright (C) 1999,2000 Erik Walthinsen <"
  },
  {
    "path": "src/org/freedesktop/gstreamer/event/NavigationEvent.java",
    "chars": 7061,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2008 Wayne Meissner\n * Copyright (C) 1999,2000 Erik Walthinsen <"
  },
  {
    "path": "src/org/freedesktop/gstreamer/event/QOSEvent.java",
    "chars": 5596,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2008 Wayne Meissner\n * Copyright (C) 1999,2000 Erik Walthinsen <"
  },
  {
    "path": "src/org/freedesktop/gstreamer/event/QOSType.java",
    "chars": 1826,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/event/ReconfigureEvent.java",
    "chars": 1889,
    "preview": "/*\n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2016 Christophe Lafolet\n *\n * This file is part of gstreamer-java"
  },
  {
    "path": "src/org/freedesktop/gstreamer/event/SeekEvent.java",
    "chars": 6806,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2008 Wayne Meissner\n * Copyright (C) 1999,2000 Erik Walthinsen <"
  },
  {
    "path": "src/org/freedesktop/gstreamer/event/SeekFlags.java",
    "chars": 4113,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/event/SeekType.java",
    "chars": 1549,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/event/SegmentEvent.java",
    "chars": 4110,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2008 Wayne Meissner\n * Copyright (C) 1999,2000 Erik Walthinsen <"
  },
  {
    "path": "src/org/freedesktop/gstreamer/event/StepEvent.java",
    "chars": 2595,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2010 DHoyt <david.g.hoyt@gmail.com>\n * Copyright (c) 2010 Levent"
  },
  {
    "path": "src/org/freedesktop/gstreamer/event/StreamStartEvent.java",
    "chars": 1721,
    "preview": "/*\n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2016 Christophe Lafolet\n *\n * This file is part of gstreamer-java"
  },
  {
    "path": "src/org/freedesktop/gstreamer/event/TagEvent.java",
    "chars": 3487,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2008 Wayne Meissner\n * Copyright (C) 1999,2000 Erik Walthinsen <"
  },
  {
    "path": "src/org/freedesktop/gstreamer/glib/GCancellable.java",
    "chars": 1113,
    "preview": "/* \n * Copyright (c) 2021 Neil C Smith\n * Copyright (c) 2016 Isaac Raño Jares\n * \n * This file is part of gstreamer-java"
  },
  {
    "path": "src/org/freedesktop/gstreamer/glib/GDate.java",
    "chars": 2657,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2016 Christophe Lafolet\n * Copyright (c) 2007 Wayne Meissner\n * "
  },
  {
    "path": "src/org/freedesktop/gstreamer/glib/GError.java",
    "chars": 1586,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/glib/GInetAddress.java",
    "chars": 1112,
    "preview": "/* \n * Copyright (c) 2021 Neil C Smith\n * Copyright (c) 2016 Isaac Raño Jares\n * \n * This file is part of gstreamer-java"
  },
  {
    "path": "src/org/freedesktop/gstreamer/glib/GInetSocketAddress.java",
    "chars": 1846,
    "preview": "/* \n * Copyright (c) 2021 Neil C Smith\n * Copyright (c) 2016 Isaac Raño Jares\n * \n * This file is part of gstreamer-java"
  },
  {
    "path": "src/org/freedesktop/gstreamer/glib/GLib.java",
    "chars": 4865,
    "preview": "/* \n * \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2018 Ingo Randalf\n *\n * This file is part of gstreamer-java."
  },
  {
    "path": "src/org/freedesktop/gstreamer/glib/GLibException.java",
    "chars": 1300,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n *\n * This file is part of gstreamer-java.\n *\n * This code is free software: you "
  },
  {
    "path": "src/org/freedesktop/gstreamer/glib/GMainContext.java",
    "chars": 2056,
    "preview": "/* \n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java"
  },
  {
    "path": "src/org/freedesktop/gstreamer/glib/GObject.java",
    "chars": 29595,
    "preview": "/*\n * Copyright (c) 2020 Neil C Smith\n * Copyright (C) 2014 Tom Greenwood <tgreenwood@cafex.com>\n * Copyright (C) 2009 L"
  },
  {
    "path": "src/org/freedesktop/gstreamer/glib/GQuark.java",
    "chars": 1581,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2016 Christophe Lafolet\n * Copyright (c) 2007 Wayne Meissner\n * "
  },
  {
    "path": "src/org/freedesktop/gstreamer/glib/GSocket.java",
    "chars": 3996,
    "preview": "/* \n * Copyright (c) 2025 Neil C Smith\n * Copyright (c) 2016 Isaac Raño Jares\n * \n * This file is part of gstreamer-java"
  },
  {
    "path": "src/org/freedesktop/gstreamer/glib/GSocketAddress.java",
    "chars": 1068,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2016 Isaac Raño Jares\n * \n * This file is part of gstreamer-java"
  },
  {
    "path": "src/org/freedesktop/gstreamer/glib/GSocketFamily.java",
    "chars": 1572,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2016 Isaac Raño Jares\n * \n * This file is part of gstreamer-java"
  },
  {
    "path": "src/org/freedesktop/gstreamer/glib/GSocketProtocol.java",
    "chars": 1470,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2016 Isaac Raño Jares\n * \n * This file is part of gstreamer-java"
  },
  {
    "path": "src/org/freedesktop/gstreamer/glib/GSocketType.java",
    "chars": 1434,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2016 Isaac Raño Jares\n * \n * This file is part of gstreamer-java"
  },
  {
    "path": "src/org/freedesktop/gstreamer/glib/GSource.java",
    "chars": 2499,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/glib/MainContextExecutorService.java",
    "chars": 7013,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007, 2008 Wayne Meissner\n * \n * This file is part of gstreamer-"
  },
  {
    "path": "src/org/freedesktop/gstreamer/glib/NativeEnum.java",
    "chars": 2339,
    "preview": "/*\n * Copyright (c) 2020 Neil C Smith\n *\n * This file is part of gstreamer-java.\n *\n * This code is free software: you c"
  },
  {
    "path": "src/org/freedesktop/gstreamer/glib/NativeFlags.java",
    "chars": 1691,
    "preview": "/* \n * Copyright (c) 2020 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you"
  },
  {
    "path": "src/org/freedesktop/gstreamer/glib/NativeObject.java",
    "chars": 14998,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/glib/Natives.java",
    "chars": 10278,
    "preview": "/*\n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you "
  },
  {
    "path": "src/org/freedesktop/gstreamer/glib/RefCountedObject.java",
    "chars": 1851,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007, 2008 Wayne Meissner\n * \n * This file is part of gstreamer-"
  },
  {
    "path": "src/org/freedesktop/gstreamer/interfaces/ColorBalance.java",
    "chars": 4025,
    "preview": "/* \n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2009 Tamas Korodi <kotyo@zamba.fm>\n * \n * This file is part of"
  },
  {
    "path": "src/org/freedesktop/gstreamer/interfaces/ColorBalanceChannel.java",
    "chars": 2228,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2009 Tamas Korodi <kotyo@za"
  },
  {
    "path": "src/org/freedesktop/gstreamer/interfaces/GstInterface.java",
    "chars": 1299,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2008 Wayne Meissner\n * \n * "
  },
  {
    "path": "src/org/freedesktop/gstreamer/interfaces/Navigation.java",
    "chars": 2016,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2009 Tamas Korodi <kotyo@za"
  },
  {
    "path": "src/org/freedesktop/gstreamer/interfaces/VideoOrientation.java",
    "chars": 2680,
    "preview": "/* \n * Copyright (c) 2019 Neil c Smith\n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2009 Tamas Korodi <kotyo@za"
  },
  {
    "path": "src/org/freedesktop/gstreamer/interfaces/VideoOverlay.java",
    "chars": 4461,
    "preview": "/* \n * Copyright (C) 2019 Neil C Smith\n * Copyright (C) 2009 Levente Farkas <lfarkas@lfarkas.org>\n * Copyright (C) 2009 "
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/AppAPI.java",
    "chars": 2710,
    "preview": "/*\n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2009 Andres Colubri\n * Copyright (c) 2008 Wayne Meissner\n *\n * "
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/BaseSinkAPI.java",
    "chars": 10359,
    "preview": "/* \n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/BaseSrcAPI.java",
    "chars": 10164,
    "preview": "/* \n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/BaseTransformAPI.java",
    "chars": 9695,
    "preview": "/* \n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/EnumMapper.java",
    "chars": 2912,
    "preview": "/* \n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: y"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GBoolean.java",
    "chars": 1058,
    "preview": "/* \n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: y"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GFunctionMapper.java",
    "chars": 1408,
    "preview": "/* \n * Copyright (c) 2008 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: y"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GNative.java",
    "chars": 8613,
    "preview": "/*\n * Copyright (c) 2021 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n *\n * This file is part of gstreamer-java.\n *"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GObjectAPI.java",
    "chars": 20655,
    "preview": "/*\n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2008 Andres Colubri\n * Copyright (c) 2007 Wayne Meissner\n * \n *"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GObjectPtr.java",
    "chars": 1549,
    "preview": "/*\n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you "
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GPointer.java",
    "chars": 1272,
    "preview": "/*\n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you "
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GSignalAPI.java",
    "chars": 3048,
    "preview": "/* \n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2008 Wayne Meissner\n * \n * This file is part of gstreamer-java"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GType.java",
    "chars": 5057,
    "preview": "/*\n * Copyright (c) 2020 Christophe Lafolet\n * Copyright (c) 2007 Wayne Meissner\n *\n * This file is part of gstreamer-ja"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GTypeMapper.java",
    "chars": 12078,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GTypedPtr.java",
    "chars": 1018,
    "preview": "/*\n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you "
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GValueAPI.java",
    "chars": 15555,
    "preview": "/*\n * Copyright (c) 2017 Neil C Smith\n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2008 Andres Colubri\n * Copyr"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GValueStruct.java",
    "chars": 1134,
    "preview": "/* \n * Copyright (c) 2007 Wayne Meissner\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: y"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GioAPI.java",
    "chars": 1778,
    "preview": "/* \n * Copyright (c) 2021 Neil C Smith\n * Copyright (c) 2016 Isaac Raño Jares\n * \n * This file is part of gstreamer-java"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GlibAPI.java",
    "chars": 7679,
    "preview": "/* \n * Copyright (c) 2025 Neil C Smith\n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2007 Wayne Meissner\n * \n * "
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstAPI.java",
    "chars": 5388,
    "preview": "/* \n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2007, 2008 Wayne Meissner\n * \n * This file is part of gstreame"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstARGBControlBindingPtr.java",
    "chars": 995,
    "preview": "/*\n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you "
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstBinAPI.java",
    "chars": 2356,
    "preview": "/* \n * Copyright (c) 2021 Neil C Smith\n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2007, 2008 Wayne Meissner\n "
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstBufferAPI.java",
    "chars": 7502,
    "preview": "/* \n * Copyright (c) 2014 Tom Greenwood <tgreenwood@cafex.com>\n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 200"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstBufferPoolAPI.java",
    "chars": 1891,
    "preview": "/*\n * Copyright (c) 2016 Christophe Lafolet\n *\n * This file is part of gstreamer-java.\n *\n * This code is free software:"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstBusAPI.java",
    "chars": 3034,
    "preview": "/* \n * Copyright (c) 2020 Neil C Smith\n * Copyright (c) 2014 Tom Greenwood <tgreenwood@cafex.com>\n * Copyright (c) 2009 "
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstBusPtr.java",
    "chars": 957,
    "preview": "/*\n * Copyright (c) 2020 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you "
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstCapsAPI.java",
    "chars": 3834,
    "preview": "/* \n * Copyright (c) 2015 Neil C Smith \n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2007, 2008 Wayne Meissner\n"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstClockAPI.java",
    "chars": 3267,
    "preview": "/* \n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2007, 2008 Wayne Meissner\n * \n * This file is part of gstreame"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstColorBalanceAPI.java",
    "chars": 2503,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2009 Tamas Korodi <kotyo@za"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstContextAPI.java",
    "chars": 953,
    "preview": "package org.freedesktop.gstreamer.lowlevel;\n\nimport org.freedesktop.gstreamer.Structure;\n\n/**\n * GstContext API\n * \n * h"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstContextPtr.java",
    "chars": 234,
    "preview": "package org.freedesktop.gstreamer.lowlevel;\n\nimport com.sun.jna.Pointer;\n\npublic class GstContextPtr extends GstMiniObje"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstControlBindingAPI.java",
    "chars": 1838,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstControlBindingPtr.java",
    "chars": 975,
    "preview": "/*\n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you "
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstControlSourceAPI.java",
    "chars": 2243,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstControlSourcePtr.java",
    "chars": 972,
    "preview": "/*\n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you "
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstControllerAPI.java",
    "chars": 3993,
    "preview": "/* \n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstDateTimeAPI.java",
    "chars": 2410,
    "preview": "/* \n * Copyright (c) 2010 Levente Farkas\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: y"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstDeviceAPI.java",
    "chars": 1933,
    "preview": "/*\n * Copyright (c) 2017 Neil C Smith\n * Copyright (c) 2015 Andres Colubri <andres.colubri@gmail.com>\n * Copyright (C) 2"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstDeviceMonitorAPI.java",
    "chars": 1974,
    "preview": "/*\n * Copyright (c) 2015 Andres Colubri <andres.colubri@gmail.com>\n*  Copyright (C) 2013 Olivier Crete <olivier.crete@co"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstDeviceProviderAPI.java",
    "chars": 3752,
    "preview": "/*\n * Copyright (c) 2015 Andres Colubri <andres.colubri@gmail.com>\n*  Copyright (C) 2013 Olivier Crete <olivier.crete@co"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstDeviceProviderFactoryAPI.java",
    "chars": 2193,
    "preview": "/*\n * Copyright (c) 2015 Andres Colubri <andres.colubri@gmail.com>\n*  Copyright (C) 2013 Olivier Crete <olivier.crete@co"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstDirectControlBindingPtr.java",
    "chars": 1001,
    "preview": "/*\n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you "
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstElementAPI.java",
    "chars": 15538,
    "preview": "/* \n * Copyright (c) 2021 Neil C Smith\n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2007, 2008 Wayne Meissner\n "
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstElementFactoryAPI.java",
    "chars": 2740,
    "preview": "/* Copyright (c) 2016 Christophe Lafolet\n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2007, 2008 Wayne Meissner"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstEventAPI.java",
    "chars": 6218,
    "preview": "/* \n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2007, 2008 Wayne Meissner\n * \n * This file is part of gstreame"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstGhostPadAPI.java",
    "chars": 2152,
    "preview": "/* \n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2007, 2008 Wayne Meissner\n * \n * This file is part of gstreame"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstInterpolationControlSourceAPI.java",
    "chars": 3631,
    "preview": "/* \n * Copyright (c) 2009 Levente Farkas\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: y"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstInterpolationControlSourcePtr.java",
    "chars": 1028,
    "preview": "/*\n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you "
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstIteratorAPI.java",
    "chars": 1104,
    "preview": "/* \n * Copyright (c) 2021 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you"
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstIteratorPtr.java",
    "chars": 961,
    "preview": "/*\n * Copyright (c) 2021 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you "
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstLFOControlSourcePtr.java",
    "chars": 988,
    "preview": "/*\n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you "
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstMessageAPI.java",
    "chars": 8033,
    "preview": "/* \n * Copyright (c) 2020 Neil C Smith\n * Copyright (c) 2014 Tom Greenwood <tgreenwood@cafex.com>\n * Copyright (c) 2009 "
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstMessagePtr.java",
    "chars": 1512,
    "preview": "/*\n * Copyright (c) 2020 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you "
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstMetaAPI.java",
    "chars": 1166,
    "preview": "package org.freedesktop.gstreamer.lowlevel;\n\nimport com.sun.jna.Library;\nimport com.sun.jna.Pointer;\nimport com.sun.jna."
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstMetaPtr.java",
    "chars": 2281,
    "preview": "/*\n * Copyright (c) 2020 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you "
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstMiniObjectAPI.java",
    "chars": 3437,
    "preview": "/*\n * Copyright (c) 2016 Christophe Lafolet\n * Copyright (c) 2014 Tom Greenwood <tgreenwood@cafex.com>\n * Copyright (c) "
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstMiniObjectPtr.java",
    "chars": 1521,
    "preview": "/*\n * Copyright (c) 2019 Neil C Smith\n * \n * This file is part of gstreamer-java.\n *\n * This code is free software: you "
  },
  {
    "path": "src/org/freedesktop/gstreamer/lowlevel/GstNative.java",
    "chars": 2150,
    "preview": "/* \n * Copyright (c) 2016 Neil C Smith\n * Copyright (c) 2009 Levente Farkas\n * Copyright (c) 2007, 2008 Wayne Meissner\n "
  }
]

// ... and 128 more files (download for full content)

About this extraction

This page contains the full source code of the gstreamer-java/gst1-java-core GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 328 files (1.4 MB), approximately 353.4k tokens, and a symbol index with 3911 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!