<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[181499] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/181499">181499</a></dd>
<dt>Author</dt> <dd>vjaquez@igalia.com</dd>
<dt>Date</dt> <dd>2015-03-14 11:25:57 -0700 (Sat, 14 Mar 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>[GStreamer] share GL context in pipeline
https://bugs.webkit.org/show_bug.cgi?id=142693

Reviewed by Philippe Normand.

.:

Add search of gstreamer-gl library in the GStreamer installation. If
it is found, WTF_USE_GSTREAMER_GL macro is defined.

* Source/cmake/FindGStreamer.cmake:
* Source/cmake/OptionsGTK.cmake:

Source/WebCore:

GstGL elements in a pipeline need to be aware of the application's
display and its GL context. This information is shared through context
messages between the pipeline and the browser.

This patch shares this context through a GStreamer's synchronous
message, using the GL information held in the web process.

This patch is based on the work of Philippe Normand for Bug 138562.

No new tests because this is platform specific and it depends in the
run-time availability and configurations of GstGL elements.

* PlatformGTK.cmake: appends the GstGL header files in the include
directories. Also its library directory is appended.
* platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
(WebCore::mediaPlayerPrivateSyncMessageCallback): New callback function.
(WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
Initialize the new class attributes.
(WebCore::MediaPlayerPrivateGStreamer::handleSyncMessage): New method
for handling synchronous messages from the pipeline. This method
currently only handles the GL context sharing.
(WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin): Configures
the pipeline's bus to handle the synchronous messages.
* platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Add new
class methods and attributes.

Source/WebKit2:

* WebProcess/gtk/WebProcessMainGtk.cpp: Enable XInitThreads() if
GSTREAMER_GL is used, since GstGL elements use another thread for
queuing GL operations.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkChangeLog">trunk/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorePlatformGTKcmake">trunk/Source/WebCore/PlatformGTK.cmake</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsgstreamerMediaPlayerPrivateGStreamercpp">trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsgstreamerMediaPlayerPrivateGStreamerh">trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2WebProcessgtkWebProcessMainGtkcpp">trunk/Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp</a></li>
<li><a href="#trunkSourcecmakeFindGStreamercmake">trunk/Source/cmake/FindGStreamer.cmake</a></li>
<li><a href="#trunkSourcecmakeOptionsGTKcmake">trunk/Source/cmake/OptionsGTK.cmake</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/ChangeLog (181498 => 181499)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/ChangeLog        2015-03-14 17:45:43 UTC (rev 181498)
+++ trunk/ChangeLog        2015-03-14 18:25:57 UTC (rev 181499)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2015-03-14  Víctor Manuel Jáquez Leal  &lt;vjaquez@igalia.com&gt;
+
+        [GStreamer] share GL context in pipeline
+        https://bugs.webkit.org/show_bug.cgi?id=142693
+
+        Reviewed by Philippe Normand.
+
+        Add search of gstreamer-gl library in the GStreamer installation. If
+        it is found, WTF_USE_GSTREAMER_GL macro is defined.
+
+        * Source/cmake/FindGStreamer.cmake:
+        * Source/cmake/OptionsGTK.cmake:
+
</ins><span class="cx"> 2015-03-13  Alex Christensen  &lt;achristensen@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Progress towards CMake on Mac.
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (181498 => 181499)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-03-14 17:45:43 UTC (rev 181498)
+++ trunk/Source/WebCore/ChangeLog        2015-03-14 18:25:57 UTC (rev 181499)
</span><span class="lines">@@ -1,3 +1,36 @@
</span><ins>+2015-03-14  Víctor Manuel Jáquez Leal  &lt;vjaquez@igalia.com&gt;
+
+        [GStreamer] share GL context in pipeline
+        https://bugs.webkit.org/show_bug.cgi?id=142693
+
+        Reviewed by Philippe Normand.
+
+        GstGL elements in a pipeline need to be aware of the application's
+        display and its GL context. This information is shared through context
+        messages between the pipeline and the browser.
+
+        This patch shares this context through a GStreamer's synchronous
+        message, using the GL information held in the web process.
+
+        This patch is based on the work of Philippe Normand for Bug 138562.
+
+        No new tests because this is platform specific and it depends in the
+        run-time availability and configurations of GstGL elements.
+
+        * PlatformGTK.cmake: appends the GstGL header files in the include
+        directories. Also its library directory is appended.
+        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
+        (WebCore::mediaPlayerPrivateSyncMessageCallback): New callback function.
+        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
+        Initialize the new class attributes.
+        (WebCore::MediaPlayerPrivateGStreamer::handleSyncMessage): New method
+        for handling synchronous messages from the pipeline. This method
+        currently only handles the GL context sharing.
+        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin): Configures
+        the pipeline's bus to handle the synchronous messages.
+        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Add new
+        class methods and attributes.
+
</ins><span class="cx"> 2015-03-13  Alex Christensen  &lt;achristensen@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Progress towards CMake on Mac.
</span></span></pre></div>
<a id="trunkSourceWebCorePlatformGTKcmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/PlatformGTK.cmake (181498 => 181499)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/PlatformGTK.cmake        2015-03-14 17:45:43 UTC (rev 181498)
+++ trunk/Source/WebCore/PlatformGTK.cmake        2015-03-14 18:25:57 UTC (rev 181499)
</span><span class="lines">@@ -345,6 +345,16 @@
</span><span class="cx">             ${GSTREAMER_MPEGTS_LIBRARIES}
</span><span class="cx">         )
</span><span class="cx">     endif ()
</span><ins>+
+    if (USE_GSTREAMER_GL)
+        list(APPEND WebCore_INCLUDE_DIRECTORIES
+            ${GSTREAMER_GL_INCLUDE_DIRS}
+        )
+
+        list(APPEND WebCore_LIBRARIES
+            ${GSTREAMER_GL_LIBRARIES}
+        )
+    endif ()
</ins><span class="cx"> endif ()
</span><span class="cx"> 
</span><span class="cx"> if (ENABLE_WEB_AUDIO)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsgstreamerMediaPlayerPrivateGStreamercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp (181498 => 181499)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp        2015-03-14 17:45:43 UTC (rev 181498)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp        2015-03-14 18:25:57 UTC (rev 181499)
</span><span class="lines">@@ -68,6 +68,28 @@
</span><span class="cx"> #include &quot;AudioSourceProviderGStreamer.h&quot;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+#if USE(GSTREAMER_GL)
+#include &quot;GLContext.h&quot;
+
+#define GST_USE_UNSTABLE_API
+#include &lt;gst/gl/gl.h&gt;
+#undef GST_USE_UNSTABLE_API
+
+#if USE(GLX)
+#include &quot;GLContextGLX.h&quot;
+#include &lt;gst/gl/x11/gstgldisplay_x11.h&gt;
+#elif USE(EGL)
+#include &quot;GLContextEGL.h&quot;
+#include &lt;gst/gl/egl/gstgldisplay_egl.h&gt;
+#endif
+
+// gstglapi.h may include eglplatform.h and it includes X.h, which
+// defines None, breaking MediaPlayer::None enum
+#if PLATFORM(X11) &amp;&amp; GST_GL_HAVE_PLATFORM_EGL
+#undef None
+#endif
+#endif // USE(GSTREAMER_GL)
+
</ins><span class="cx"> // Max interval in seconds to stay in the READY state on manual
</span><span class="cx"> // state change requests.
</span><span class="cx"> static const unsigned gReadyStateTimerInterval = 60;
</span><span class="lines">@@ -84,6 +106,11 @@
</span><span class="cx">     return player-&gt;handleMessage(message);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static gboolean mediaPlayerPrivateSyncMessageCallback(GstBus*, GstMessage* message, MediaPlayerPrivateGStreamer* player)
+{
+    return player-&gt;handleSyncMessage(message);
+}
+
</ins><span class="cx"> static void mediaPlayerPrivateSourceChangedCallback(GObject*, GParamSpec*, MediaPlayerPrivateGStreamer* player)
</span><span class="cx"> {
</span><span class="cx">     player-&gt;sourceChanged();
</span><span class="lines">@@ -217,6 +244,10 @@
</span><span class="cx"> #endif
</span><span class="cx">     , m_requestedState(GST_STATE_VOID_PENDING)
</span><span class="cx">     , m_missingPlugins(false)
</span><ins>+#if USE(GSTREAMER_GL)
+    , m_glContext(nullptr)
+    , m_glDisplay(nullptr)
+#endif
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -904,6 +935,60 @@
</span><span class="cx">     return timeRanges;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+gboolean MediaPlayerPrivateGStreamer::handleSyncMessage(GstMessage* message)
+{
+    switch (GST_MESSAGE_TYPE(message)) {
+#if USE(GSTREAMER_GL)
+    case GST_MESSAGE_NEED_CONTEXT: {
+        const gchar* contextType;
+        gst_message_parse_context_type(message, &amp;contextType);
+
+        if (!m_glDisplay) {
+#if PLATFORM(X11)
+            Display* display = GLContext::sharedX11Display();
+            GstGLDisplayX11* gstGLDisplay = gst_gl_display_x11_new_with_display(display);
+#elif PLATFORM(WAYLAND)
+            EGLDisplay display = WaylandDisplay::instance()-&gt;eglDisplay();
+            GstGLDisplayEGL* gstGLDisplay = gst_gl_display_egl_new_with_egl_display(display);
+#else
+            return FALSE;
+#endif
+
+            m_glDisplay = reinterpret_cast&lt;GstGLDisplay*&gt;(gstGLDisplay);
+            GLContext* webkitContext = GLContext::sharingContext();
+#if USE(GLX)
+            GLXContext* glxSharingContext = reinterpret_cast&lt;GLXContext*&gt;(webkitContext-&gt;platformContext());
+            if (glxSharingContext &amp;&amp; !m_glContext)
+                m_glContext = gst_gl_context_new_wrapped(GST_GL_DISPLAY(gstGLDisplay), reinterpret_cast&lt;guintptr&gt;(glxSharingContext), GST_GL_PLATFORM_GLX, GST_GL_API_OPENGL);
+#elif USE(EGL)
+            EGLContext* eglSharingContext = reinterpret_cast&lt;EGLContext*&gt;(webkitContext-&gt;platformContext());
+            if (eglSharingContext &amp;&amp; !m_glContext)
+                m_glContext = gst_gl_context_new_wrapped(GST_GL_DISPLAY(gstGLDisplay), reinterpret_cast&lt;guintptr&gt;(eglSharingContext), GST_GL_PLATFORM_EGL, GST_GL_API_GLES2);
+#endif
+        }
+
+        if (!g_strcmp0(contextType, GST_GL_DISPLAY_CONTEXT_TYPE)) {
+            GstContext* displayContext = gst_context_new(GST_GL_DISPLAY_CONTEXT_TYPE, TRUE);
+            gst_context_set_gl_display(displayContext, m_glDisplay);
+            gst_element_set_context(GST_ELEMENT(message-&gt;src), displayContext);
+            return TRUE;
+        }
+        if (!g_strcmp0(contextType, &quot;gst.gl.app_context&quot;)) {
+            GstContext* appContext = gst_context_new(&quot;gst.gl.app_context&quot;, TRUE);
+            GstStructure* structure = gst_context_writable_structure(appContext);
+            gst_structure_set(structure, &quot;context&quot;, GST_GL_TYPE_CONTEXT, m_glContext, nullptr);
+            gst_element_set_context(GST_ELEMENT(message-&gt;src), appContext);
+            return TRUE;
+        }
+        break;
+    }
+#endif // USE(GSTREAMER_GL)
+    default:
+        break;
+    }
+    return FALSE;
+}
+
</ins><span class="cx"> gboolean MediaPlayerPrivateGStreamer::handleMessage(GstMessage* message)
</span><span class="cx"> {
</span><span class="cx">     GUniqueOutPtr&lt;GError&gt; err;
</span><span class="lines">@@ -1935,6 +2020,8 @@
</span><span class="cx">     GRefPtr&lt;GstBus&gt; bus = adoptGRef(gst_pipeline_get_bus(GST_PIPELINE(m_playBin.get())));
</span><span class="cx">     gst_bus_add_signal_watch(bus.get());
</span><span class="cx">     g_signal_connect(bus.get(), &quot;message&quot;, G_CALLBACK(mediaPlayerPrivateMessageCallback), this);
</span><ins>+    gst_bus_enable_sync_message_emission(bus.get());
+    g_signal_connect(bus.get(), &quot;sync-message&quot;, G_CALLBACK(mediaPlayerPrivateSyncMessageCallback), this);
</ins><span class="cx"> 
</span><span class="cx">     g_object_set(m_playBin.get(), &quot;mute&quot;, m_player-&gt;muted(), NULL);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsgstreamerMediaPlayerPrivateGStreamerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h (181498 => 181499)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h        2015-03-14 17:45:43 UTC (rev 181498)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h        2015-03-14 18:25:57 UTC (rev 181499)
</span><span class="lines">@@ -47,6 +47,8 @@
</span><span class="cx"> typedef struct _GstMessage GstMessage;
</span><span class="cx"> typedef struct _GstElement GstElement;
</span><span class="cx"> typedef struct _GstMpegtsSection GstMpegtsSection;
</span><ins>+typedef struct _GstGLContext GstGLContext;
+typedef struct _GstGLDisplay GstGLDisplay;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="lines">@@ -66,6 +68,7 @@
</span><span class="cx">     ~MediaPlayerPrivateGStreamer();
</span><span class="cx"> 
</span><span class="cx">     static void registerMediaEngine(MediaEngineRegistrar);
</span><ins>+    gboolean handleSyncMessage(GstMessage*);
</ins><span class="cx">     gboolean handleMessage(GstMessage*);
</span><span class="cx">     void handlePluginInstallerResult(GstInstallPluginsReturn);
</span><span class="cx"> 
</span><span class="lines">@@ -251,6 +254,10 @@
</span><span class="cx"> #else
</span><span class="cx">     bool isMediaSource() const { return false; }
</span><span class="cx"> #endif
</span><ins>+#if USE(GSTREAMER_GL)
+    GstGLContext* m_glContext;
+    GstGLDisplay* m_glDisplay;
+#endif
</ins><span class="cx"> };
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (181498 => 181499)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2015-03-14 17:45:43 UTC (rev 181498)
+++ trunk/Source/WebKit2/ChangeLog        2015-03-14 18:25:57 UTC (rev 181499)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2015-03-14  Víctor Manuel Jáquez Leal  &lt;vjaquez@igalia.com&gt;
+
+        [GStreamer] share GL context in pipeline
+        https://bugs.webkit.org/show_bug.cgi?id=142693
+
+        Reviewed by Philippe Normand.
+
+        * WebProcess/gtk/WebProcessMainGtk.cpp: Enable XInitThreads() if
+        GSTREAMER_GL is used, since GstGL elements use another thread for
+        queuing GL operations.
+
</ins><span class="cx"> 2015-03-13  Alex Christensen  &lt;achristensen@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Progress towards CMake on Mac.
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessgtkWebProcessMainGtkcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp (181498 => 181499)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp        2015-03-14 17:45:43 UTC (rev 181498)
+++ trunk/Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp        2015-03-14 18:25:57 UTC (rev 181499)
</span><span class="lines">@@ -51,7 +51,7 @@
</span><span class="cx">             sleep(30);
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-#if USE(COORDINATED_GRAPHICS_THREADED) &amp;&amp; PLATFORM(X11)
</del><ins>+#if (USE(COORDINATED_GRAPHICS_THREADED) || USE(GSTREAMER_GL)) &amp;&amp; PLATFORM(X11)
</ins><span class="cx">         XInitThreads();
</span><span class="cx"> #endif
</span><span class="cx">         gtk_init(nullptr, nullptr);
</span></span></pre></div>
<a id="trunkSourcecmakeFindGStreamercmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/cmake/FindGStreamer.cmake (181498 => 181499)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/cmake/FindGStreamer.cmake        2015-03-14 17:45:43 UTC (rev 181498)
+++ trunk/Source/cmake/FindGStreamer.cmake        2015-03-14 18:25:57 UTC (rev 181499)
</span><span class="lines">@@ -19,6 +19,7 @@
</span><span class="cx"> #  gstreamer-app:        GSTREAMER_APP_INCLUDE_DIRS and GSTREAMER_APP_LIBRARIES
</span><span class="cx"> #  gstreamer-audio:      GSTREAMER_AUDIO_INCLUDE_DIRS and GSTREAMER_AUDIO_LIBRARIES
</span><span class="cx"> #  gstreamer-fft:        GSTREAMER_FFT_INCLUDE_DIRS and GSTREAMER_FFT_LIBRARIES
</span><ins>+#  gstreamer-gl:         GSTREAMER_GL_INCLUDE_DIRS and GSTREAMER_GL_LIBRARIES
</ins><span class="cx"> #  gstreamer-mpegts:     GSTREAMER_MPEGTS_INCLUDE_DIRS and GSTREAMER_MPEGTS_LIBRARIES
</span><span class="cx"> #  gstreamer-pbutils:    GSTREAMER_PBUTILS_INCLUDE_DIRS and GSTREAMER_PBUTILS_LIBRARIES
</span><span class="cx"> #  gstreamer-tag:        GSTREAMER_TAG_INCLUDE_DIRS and GSTREAMER_TAG_LIBRARIES
</span><span class="lines">@@ -84,6 +85,7 @@
</span><span class="cx"> FIND_GSTREAMER_COMPONENT(GSTREAMER_APP gstreamer-app-1.0 gstapp-1.0)
</span><span class="cx"> FIND_GSTREAMER_COMPONENT(GSTREAMER_AUDIO gstreamer-audio-1.0 gstaudio-1.0)
</span><span class="cx"> FIND_GSTREAMER_COMPONENT(GSTREAMER_FFT gstreamer-fft-1.0 gstfft-1.0)
</span><ins>+FIND_GSTREAMER_COMPONENT(GSTREAMER_GL gstreamer-gl-1.0&gt;=1.5.0 gstgl-1.0)
</ins><span class="cx"> FIND_GSTREAMER_COMPONENT(GSTREAMER_MPEGTS gstreamer-mpegts-1.0&gt;=1.4.0 gstmpegts-1.0)
</span><span class="cx"> FIND_GSTREAMER_COMPONENT(GSTREAMER_PBUTILS gstreamer-pbutils-1.0 gstpbutils-1.0)
</span><span class="cx"> FIND_GSTREAMER_COMPONENT(GSTREAMER_TAG gstreamer-tag-1.0 gsttag-1.0)
</span><span class="lines">@@ -114,6 +116,8 @@
</span><span class="cx">     GSTREAMER_BASE_LIBRARIES
</span><span class="cx">     GSTREAMER_FFT_INCLUDE_DIRS
</span><span class="cx">     GSTREAMER_FFT_LIBRARIES
</span><ins>+    GSTREAMER_GL_INCLUDE_DIRS
+    GSTREAMER_GL_LIBRARIES
</ins><span class="cx">     GSTREAMER_INCLUDE_DIRS
</span><span class="cx">     GSTREAMER_LIBRARIES
</span><span class="cx">     GSTREAMER_MPEGTS_INCLUDE_DIRS
</span></span></pre></div>
<a id="trunkSourcecmakeOptionsGTKcmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/cmake/OptionsGTK.cmake (181498 => 181499)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/cmake/OptionsGTK.cmake        2015-03-14 17:45:43 UTC (rev 181498)
+++ trunk/Source/cmake/OptionsGTK.cmake        2015-03-14 18:25:57 UTC (rev 181499)
</span><span class="lines">@@ -257,7 +257,7 @@
</span><span class="cx">     set(GSTREAMER_COMPONENTS app pbutils)
</span><span class="cx">     add_definitions(-DWTF_USE_GSTREAMER)
</span><span class="cx">     if (ENABLE_VIDEO)
</span><del>-        list(APPEND GSTREAMER_COMPONENTS video mpegts tag)
</del><ins>+        list(APPEND GSTREAMER_COMPONENTS video mpegts tag gl)
</ins><span class="cx">     endif ()
</span><span class="cx"> 
</span><span class="cx">     if (ENABLE_WEB_AUDIO)
</span><span class="lines">@@ -271,6 +271,11 @@
</span><span class="cx">         add_definitions(-DWTF_USE_GSTREAMER_MPEGTS)
</span><span class="cx">         set(USE_GSTREAMER_MPEGTS TRUE)
</span><span class="cx">     endif ()
</span><ins>+
+    if (PC_GSTREAMER_GL_FOUND)
+        add_definitions(-DWTF_USE_GSTREAMER_GL)
+        set(USE_GSTREAMER_GL TRUE)
+    endif ()
</ins><span class="cx"> endif ()
</span><span class="cx"> 
</span><span class="cx"> if (ENABLE_WAYLAND_TARGET)
</span></span></pre>
</div>
</div>

</body>
</html>