From eca6a5cb1e2beda84dfbafc31ed225e272f4f3fb Mon Sep 17 00:00:00 2001
From: Sven Gothel <sgothel@jausoft.com>
Date: Thu, 29 Aug 2013 22:46:57 +0200
Subject: Enhance GLMediaPlayer: Full FFMPeg support, 'dshow' camera support on
 windows, 2 more pixel formats, fail-safe data handling

- add support for ffmpeg 2 / libav 10 -> lavc55_lavf55_lavu52_lavr01

- add support for ffmpeg libswresample (similar to libavresample)

- handle BGRA (GL type) and BGR24 (texture shader)

- Change Camera URI semantics, drop 'host' and use 'path' for camera ID
  and use 'query' for options.

- add support for Window's DShow camera selection
  - our camera id -> index of list of video-input devices,
    this gives us same behavior as w/ Linux
  - requires windows libs: strmiids, uuid, ole32, oleaut32
  - Compiles w/ MingW64, works w/ libav/ffmpeg
  - TODO: test compilation w/ MingW 32bit !

- don't push data to texture if (linesize <= 0)
  this may happen due to buggy decoder / setup ..

Tested manually on GNU/Linux x64 and Windows x64:
  - GNU/Linux libav 0.8, libav 9, libav 10, ffmpeg 1.2, ffmpeg 2.0
  - Windows   libav 0.8, libav 9, ffmpeg 2.0
  - videos and camera
---
 .../com/jogamp/opengl/util/av/GLMediaPlayer.java   | 24 ++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

(limited to 'src/jogl/classes/com/jogamp/opengl/util')

diff --git a/src/jogl/classes/com/jogamp/opengl/util/av/GLMediaPlayer.java b/src/jogl/classes/com/jogamp/opengl/util/av/GLMediaPlayer.java
index 0feca9f45..7f57138a7 100644
--- a/src/jogl/classes/com/jogamp/opengl/util/av/GLMediaPlayer.java
+++ b/src/jogl/classes/com/jogamp/opengl/util/av/GLMediaPlayer.java
@@ -197,13 +197,33 @@ public interface GLMediaPlayer extends TextureSequence {
      * {@link URI#getScheme() URI scheme} name {@value} for camera input. E.g. <code>camera://0</code>
      * for the 1st camera device.
      * <p>
-     * Note: the {@link URI#getHost() URI host} is being used to identify the camera:
+     * The {@link URI#getRawPath() URI path} is being used to identify the camera,
+     * where the root fwd-slash is being cut-off.
+     * </p>
+     * <p>
+     * The {@link URI#getRawQuery() URI query} is used to pass options to the camera.
+     * </p>
+     * <pre>
+     *    camera:/<id>
+     *    camera://somewhere/<id>
+     *    camera://somewhere/<id>?width=640&height=480&rate=15
+     * </pre>
      * <pre>
-     *    camera://<id>
+     *  URI: [scheme:][//authority][path][?query][#fragment]
+     *  w/ authority: [user-info@]host[:port]
+     *  Note: 'path' starts w/ fwd slash
      * </pre>
      * </p> 
      */
     public static final String CameraInputScheme = "camera";
+    /** Camera property {@value}, size as string, e.g. <code>1280x720</code>, <code>hd720</code>. May not be supported on all platforms. See {@link #CameraInputScheme}. */
+    public static final String CameraPropSizeS = "size";
+    /** Camera property {@value}. See {@link #CameraInputScheme}. */
+    public static final String CameraPropWidth = "width";
+    /** Camera property {@value}. See {@link #CameraInputScheme}. */
+    public static final String CameraPropHeight = "height";
+    /** Camera property {@value}. See {@link #CameraInputScheme}. */
+    public static final String CameraPropRate = "rate";
     
     /** Maximum video frame async of {@value} milliseconds. */
     public static final int MAXIMUM_VIDEO_ASYNC = 22;
-- 
cgit v1.2.3