<plugin>
  <name>opengl</name>
  <description>OpenGL plugin</description>
  <filename>../../ext/gl/.libs/libgstopengl.so</filename>
  <basename>libgstopengl.so</basename>
  <version>1.14.4</version>
  <license>LGPL</license>
  <source>gst-plugins-base</source>
  <package>GStreamer Base Plug-ins source release</package>
  <origin>Unknown package origin</origin>
  <elements>
    <element>
      <name>glcolorbalance</name>
      <longname>Video balance</longname>
      <class>Filter/Effect/Video</class>
      <description>Adjusts brightness, contrast, hue, saturation on a video stream</description>
      <author>Matthew Waters &lt;matthew@centricular.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string){ 2D, external-oes }; video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string){ 2D, external-oes }</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string){ 2D, external-oes }; video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string){ 2D, external-oes }</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>glcolorconvert</name>
      <longname>OpenGL color converter</longname>
      <class>Filter/Converter/Video</class>
      <description>Converts between color spaces using OpenGL shaders</description>
      <author>Matthew Waters &lt;matthew@centricular.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string){ RGBA, RGB, RGBx, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string){ 2D, rectangle, external-oes }; video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, RGB, RGBx, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string){ 2D, rectangle, external-oes }</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string){ RGBA, RGB, RGBx, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string){ 2D, rectangle, external-oes }; video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, RGB, RGBx, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string){ 2D, rectangle, external-oes }</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>glcolorscale</name>
      <longname>OpenGL color scale</longname>
      <class>Filter/Effect/Video</class>
      <description>Colorspace converter and video scaler</description>
      <author>Julien Isorce &lt;julien.isorce@gmail.com&gt;
Matthew Waters &lt;matthew@centricular.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gldeinterlace</name>
      <longname>OpenGL deinterlacing filter</longname>
      <class>Deinterlace</class>
      <description>Deinterlacing based on fragment shaders</description>
      <author>Julien Isorce &lt;julien.isorce@mail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gldifferencematte</name>
      <longname>Gstreamer OpenGL DifferenceMatte</longname>
      <class>Filter/Effect/Video</class>
      <description>Saves a background frame and replace it with a pixbuf</description>
      <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gldownload</name>
      <longname>OpenGL downloader</longname>
      <class>Filter/Video</class>
      <description>Downloads data from OpenGL</description>
      <author>Matthew Waters &lt;matthew@centricular.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory); video/x-raw</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:DMABuf); video/x-raw; video/x-raw(memory:GLMemory)</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gleffects</name>
      <longname>Gstreamer OpenGL Effects</longname>
      <class>Filter/Effect/Video</class>
      <description>GL Shading Language effects</description>
      <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gleffects_blur</name>
      <longname>Blur with 9x9 separable convolution Effect</longname>
      <class>Filter/Effect/Video</class>
      <description>GL Shading Language effects - Blur with 9x9 separable convolution Effect</description>
      <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gleffects_bulge</name>
      <longname>Bulge Effect</longname>
      <class>Filter/Effect/Video</class>
      <description>GL Shading Language effects - Bulge Effect</description>
      <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gleffects_fisheye</name>
      <longname>FishEye Effect</longname>
      <class>Filter/Effect/Video</class>
      <description>GL Shading Language effects - FishEye Effect</description>
      <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gleffects_glow</name>
      <longname>Glow Lighting Effect</longname>
      <class>Filter/Effect/Video</class>
      <description>GL Shading Language effects - Glow Lighting Effect</description>
      <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gleffects_heat</name>
      <longname>Heat Signature Effect</longname>
      <class>Filter/Effect/Video</class>
      <description>GL Shading Language effects - Heat Signature Effect</description>
      <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gleffects_identity</name>
      <longname>Do nothing Effect</longname>
      <class>Filter/Effect/Video</class>
      <description>GL Shading Language effects - Do nothing Effect</description>
      <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gleffects_laplacian</name>
      <longname>Laplacian Convolution Demo Effect</longname>
      <class>Filter/Effect/Video</class>
      <description>GL Shading Language effects - Laplacian Convolution Demo Effect</description>
      <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gleffects_lumaxpro</name>
      <longname>Luma Cross Processing Effect</longname>
      <class>Filter/Effect/Video</class>
      <description>GL Shading Language effects - Luma Cross Processing Effect</description>
      <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gleffects_mirror</name>
      <longname>Mirror Effect</longname>
      <class>Filter/Effect/Video</class>
      <description>GL Shading Language effects - Mirror Effect</description>
      <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gleffects_sepia</name>
      <longname>Sepia Toning Effect</longname>
      <class>Filter/Effect/Video</class>
      <description>GL Shading Language effects - Sepia Toning Effect</description>
      <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gleffects_sin</name>
      <longname>All Grey but Red Effect</longname>
      <class>Filter/Effect/Video</class>
      <description>GL Shading Language effects - All Grey but Red Effect</description>
      <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gleffects_sobel</name>
      <longname>Sobel edge detection Effect</longname>
      <class>Filter/Effect/Video</class>
      <description>GL Shading Language effects - Sobel edge detection Effect</description>
      <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gleffects_square</name>
      <longname>Square Effect</longname>
      <class>Filter/Effect/Video</class>
      <description>GL Shading Language effects - Square Effect</description>
      <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gleffects_squeeze</name>
      <longname>Squeeze Effect</longname>
      <class>Filter/Effect/Video</class>
      <description>GL Shading Language effects - Squeeze Effect</description>
      <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gleffects_stretch</name>
      <longname>Stretch Effect</longname>
      <class>Filter/Effect/Video</class>
      <description>GL Shading Language effects - Stretch Effect</description>
      <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gleffects_tunnel</name>
      <longname>Light Tunnel Effect</longname>
      <class>Filter/Effect/Video</class>
      <description>GL Shading Language effects - Light Tunnel Effect</description>
      <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gleffects_twirl</name>
      <longname>Twirl Effect</longname>
      <class>Filter/Effect/Video</class>
      <description>GL Shading Language effects - Twirl Effect</description>
      <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gleffects_xpro</name>
      <longname>Cross Processing Effect</longname>
      <class>Filter/Effect/Video</class>
      <description>GL Shading Language effects - Cross Processing Effect</description>
      <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gleffects_xray</name>
      <longname>Glowing negative effect</longname>
      <class>Filter/Effect/Video</class>
      <description>GL Shading Language effects - Glowing negative effect</description>
      <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>glfilterapp</name>
      <longname>OpenGL application filter</longname>
      <class>Filter/Effect</class>
      <description>Use client callbacks to define the scene</description>
      <author>Julien Isorce &lt;julien.isorce@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>glfilterbin</name>
      <longname>GL Filter Bin</longname>
      <class>Filter/Video</class>
      <description>Infrastructure to process GL textures</description>
      <author>Matthew Waters &lt;matthew@centricular.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:DMABuf, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:GLMemory), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:DMABuf), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY)</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>glfiltercube</name>
      <longname>OpenGL cube filter</longname>
      <class>Filter/Effect/Video</class>
      <description>Map input texture on the 6 cube faces</description>
      <author>Julien Isorce &lt;julien.isorce@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>glfilterglass</name>
      <longname>OpenGL glass filter</longname>
      <class>Filter/Effect/Video</class>
      <description>Glass Filter</description>
      <author>Julien Isorce &lt;julien.isorce@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>glimagesink</name>
      <longname>GL Sink Bin</longname>
      <class>Sink/Video</class>
      <description>Infrastructure to process GL textures</description>
      <author>Matthew Waters &lt;matthew@centricular.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:DMABuf, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:GLMemory), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:DMABuf), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>glimagesinkelement</name>
      <longname>OpenGL video sink</longname>
      <class>Sink/Video</class>
      <description>A videosink based on OpenGL</description>
      <author>Julien Isorce &lt;julien.isorce@gmail.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string){ 2D, external-oes }; video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string){ 2D, external-oes }</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gloverlay</name>
      <longname>Gstreamer OpenGL Overlay</longname>
      <class>Filter/Effect/Video</class>
      <description>Overlay GL video texture with a JPEG/PNG image</description>
      <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;, Matthew Waters &lt;matthew@centricular.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>glshader</name>
      <longname>OpenGL fragment shader filter</longname>
      <class>Filter/Effect</class>
      <description>Perform operations with a GLSL shader</description>
      <author>&lt;matthew@centricular.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>glsinkbin</name>
      <longname>GL Sink Bin</longname>
      <class>Sink/Video</class>
      <description>Infrastructure to process GL textures</description>
      <author>Matthew Waters &lt;matthew@centricular.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:DMABuf, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:GLMemory), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:DMABuf), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>glsrcbin</name>
      <longname>GL Src Bin</longname>
      <class>Src/Video</class>
      <description>Infrastructure to process GL textures</description>
      <author>Matthew Waters &lt;matthew@centricular.com&gt;</author>
      <pads>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY)</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>glstereosplit</name>
      <longname>GLStereoSplit</longname>
      <class>Codec/Converter</class>
      <description>Splits a stereoscopic stream into separate left/right streams</description>
      <author>Jan Schmidt &lt;jan@centricular.com&gt;
Matthew Waters &lt;matthew@centricular.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
        </caps>
        <caps>
          <name>left</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
        </caps>
        <caps>
          <name>right</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>gltestsrc</name>
      <longname>Video test source</longname>
      <class>Source/Video</class>
      <description>Creates a test video stream</description>
      <author>David A. Schleef &lt;ds@schleef.org&gt;</author>
      <pads>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>glupload</name>
      <longname>OpenGL uploader</longname>
      <class>Filter/Video</class>
      <description>Uploads data into OpenGL</description>
      <author>Matthew Waters &lt;matthew@centricular.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:DMABuf, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:GLMemory), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:DMABuf), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY)</details>
        </caps>
      </pads>
    </element>
    <element>
      <name>glviewconvert</name>
      <longname>OpenGL Multiview/3D conversion filter</longname>
      <class>Filter</class>
      <description>Convert stereoscopic/multiview video formats</description>
      <author>Jan Schmidt &lt;jan@centricular.com&gt;
Matthew Waters &lt;matthew@centricular.com&gt;</author>
      <pads>
        <caps>
          <name>sink</name>
          <direction>sink</direction>
          <presence>always</presence>
          <details>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
        <caps>
          <name>src</name>
          <direction>source</direction>
          <presence>always</presence>
          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
        </caps>
      </pads>
    </element>
  </elements>
</plugin>