Bug 191998 - [GStreamer] -DENABLE_VIDEO=ON -DENABLE_OPENGL=OFF still tries to build GstreamerGL
Summary: [GStreamer] -DENABLE_VIDEO=ON -DENABLE_OPENGL=OFF still tries to build Gstrea...
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: WebKitGTK (show other bugs)
Version: WebKit Local Build
Hardware: PC Linux
: P3 Normal
Assignee: Nobody
URL:
Keywords: Gtk
Depends on:
Blocks:
 
Reported: 2018-11-27 00:08 PST by Mart Raudsepp
Modified: 2018-12-10 02:17 PST (History)
8 users (show)

See Also:


Attachments
Patch (4.57 KB, patch)
2018-12-05 19:41 PST, Carlos Eduardo Ramalho
no flags Details | Formatted Diff | Diff
Archive of layout-test-results from ews101 for mac-sierra (2.63 MB, application/zip)
2018-12-05 23:42 PST, Build Bot
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Mart Raudsepp 2018-11-27 00:08:01 PST
It appears that if trying to build with gstreamer but without GL, GstreamerGL is still somehow enabled (despite apparent efforts in the build system to conditionalize GstreamerGL on GL), leading to build failures:

-o Source/WebCore/CMakeFiles/WebCore.dir/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp.o -c /var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp
In file included from /usr/include/glib-2.0/gobject/gobject.h:24,
                 from /usr/include/glib-2.0/gobject/gbinding.h:29,
                 from /usr/include/glib-2.0/glib-object.h:23,
                 from /usr/include/gstreamer-1.0/gst/gstenumtypes.h:7,
                 from /usr/include/gstreamer-1.0/gst/gst.h:31,
                 from /var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.h:24,
                 from /var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:24,
                 from /var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:28,
                 from /var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:26:
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp: In member function ‘bool WebCore::MediaPlayerPrivateGStreamerBase::ensureGstGLContext()’:
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:527:144: error: ‘WTF::match_constness<WebCore::PlatformDisplay, WebCore::PlatformDisplayWayland>::type’ {aka ‘class WebCore::PlatformDisplayWayland’} has no member named ‘eglDisplay’; did you mean ‘m_display’?
                 m_glDisplay = adoptGRef(GST_GL_DISPLAY(gst_gl_display_egl_new_with_egl_display(downcast<PlatformDisplayWayland>(sharedDisplay).eglDisplay())));
                                                                                                                                                ^~~~~~~~~~
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:527:56: error: ‘gst_gl_display_egl_new_with_egl_display’ was not declared in this scope
                 m_glDisplay = adoptGRef(GST_GL_DISPLAY(gst_gl_display_egl_new_with_egl_display(downcast<PlatformDisplayWayland>(sharedDisplay).eglDisplay())));
                                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:527:56: note: suggested alternative: ‘gst_gl_display_get_gl_api’
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:529:134: error: ‘WTF::match_constness<WebCore::PlatformDisplay, WebCore::PlatformDisplayWayland>::type’ {aka ‘class WebCore::PlatformDisplayWayland’} has no member named ‘eglDisplay’; did you mean ‘m_display’?
                 m_glDisplay = GST_GL_DISPLAY(gst_gl_display_egl_new_with_egl_display(downcast<PlatformDisplayWayland>(sharedDisplay).eglDisplay()));
                                                                                                                                      ^~~~~~~~~~
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:529:46: error: ‘gst_gl_display_egl_new_with_egl_display’ was not declared in this scope
                 m_glDisplay = GST_GL_DISPLAY(gst_gl_display_egl_new_with_egl_display(downcast<PlatformDisplayWayland>(sharedDisplay).eglDisplay()));
                                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:529:46: note: suggested alternative: ‘gst_gl_display_get_gl_api’
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:545:46: error: ‘class WebCore::PlatformDisplay’ has no member named ‘sharingGLContext’
     GLContext* webkitContext = sharedDisplay.sharingGLContext();
                                              ^~~~~~~~~~~~~~~~
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:557:62: error: ‘class WebCore::GLContext’ has no member named ‘platformContext’; did you mean ‘_vptr.GLContext’?
     PlatformGraphicsContext3D contextHandle = webkitContext->platformContext();
                                                              ^~~~~~~~~~~~~~~
                                                              _vptr.GLContext
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:562:134: error: ‘glAPI’ was not declared in this scope
         m_glContext = adoptGRef(gst_gl_context_new_wrapped(m_glDisplay.get(), reinterpret_cast<guintptr>(contextHandle), glPlatform, glAPI));
                                                                                                                                      ^~~~~
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:562:134: note: suggested alternative: ‘GLAPI’
         m_glContext = adoptGRef(gst_gl_context_new_wrapped(m_glDisplay.get(), reinterpret_cast<guintptr>(contextHandle), glPlatform, glAPI));
                                                                                                                                      ^~~~~
                                                                                                                                      GLAPI
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:564:124: error: ‘glAPI’ was not declared in this scope
         m_glContext = gst_gl_context_new_wrapped(m_glDisplay.get(), reinterpret_cast<guintptr>(contextHandle), glPlatform, glAPI);
                                                                                                                            ^~~~~
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:564:124: note: suggested alternative: ‘GLAPI’
         m_glContext = gst_gl_context_new_wrapped(m_glDisplay.get(), reinterpret_cast<guintptr>(contextHandle), glPlatform, glAPI);
                                                                                                                            ^~~~~
                                                                                                                            GLAPI
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp: In member function ‘void WebCore::MediaPlayerPrivateGStreamerBase::flushCurrentBuffer()’:
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:930:12: error: ‘TextureMapperPlatformLayerProxy’ has not been declared
         [](TextureMapperPlatformLayerProxy& proxy)
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp: In lambda function:
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:932:37: error: request for member ‘lock’ in ‘proxy’, which is of non-class type ‘int’
             LockHolder locker(proxy.lock());
                                     ^~~~
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:934:23: error: request for member ‘isActive’ in ‘proxy’, which is of non-class type ‘int’
             if (proxy.isActive())
                       ^~~~~~~~
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:935:23: error: request for member ‘dropCurrentBufferWhilePreservingTexture’ in ‘proxy’, which is of non-class type ‘int’
                 proxy.dropCurrentBufferWhilePreservingTexture();
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp: In member function ‘void WebCore::MediaPlayerPrivateGStreamerBase::flushCurrentBuffer()’:
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:941:21: error: ‘m_platformLayerProxy’ was not declared in this scope
     proxyOperation(*m_platformLayerProxy);
                     ^~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:941:21: note: suggested alternative: ‘platformLayer’
     proxyOperation(*m_platformLayerProxy);
                     ^~~~~~~~~~~~~~~~~~~~
                     platformLayer
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp: In member function ‘virtual bool WebCore::MediaPlayerPrivateGStreamerBase::copyVideoTextureToPlatformTexture(WebCore::GraphicsContext3D*, Platform3DObject, GC3Denum, GC3Dint, GC3Denum, GC3Denum, GC3Denum, bool, bool)’:
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:990:21: error: ‘GstVideoFrameHolder’ was not declared in this scope
     std::unique_ptr<GstVideoFrameHolder> frameHolder = std::make_unique<GstVideoFrameHolder>(m_sample.get(), texMapFlagFromOrientation(m_videoSourceOrientation), true);
                     ^~~~~~~~~~~~~~~~~~~
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:990:21: note: suggested alternative: ‘GstVideoFrameFlags’
     std::unique_ptr<GstVideoFrameHolder> frameHolder = std::make_unique<GstVideoFrameHolder>(m_sample.get(), texMapFlagFromOrientation(m_videoSourceOrientation), true);
                     ^~~~~~~~~~~~~~~~~~~
                     GstVideoFrameFlags
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:990:40: error: template argument 1 is invalid
     std::unique_ptr<GstVideoFrameHolder> frameHolder = std::make_unique<GstVideoFrameHolder>(m_sample.get(), texMapFlagFromOrientation(m_videoSourceOrientation), true);
                                        ^
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:990:40: error: template argument 2 is invalid
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:990:110: error: ‘texMapFlagFromOrientation’ was not declared in this scope
     std::unique_ptr<GstVideoFrameHolder> frameHolder = std::make_unique<GstVideoFrameHolder>(m_sample.get(), texMapFlagFromOrientation(m_videoSourceOrientation), true);
                                                                                                              ^~~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:990:110: note: suggested alternative: ‘DefaultImageOrientation’
     std::unique_ptr<GstVideoFrameHolder> frameHolder = std::make_unique<GstVideoFrameHolder>(m_sample.get(), texMapFlagFromOrientation(m_videoSourceOrientation), true);
                                                                                                              ^~~~~~~~~~~~~~~~~~~~~~~~~
                                                                                                              DefaultImageOrientation
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:992:33: error: base operand of ‘->’ is not a pointer
     auto textureID = frameHolder->textureID();
                                 ^~
/var/tmp/portage/net-libs/webkit-gtk-2.22.4/work/webkitgtk-2.22.4/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:996:28: error: base operand of ‘->’ is not a pointer
     auto size = frameHolder->size();
                            ^~


There's a
if (DEFINED ENABLE_OPENGL)
  WEBKIT_OPTION_DEPEND(USE_GSTREAMER_GL ENABLE_OPENGL)
endif ()

but this part appears to still fail.

I happened to be building with EGL still enabled (with GL disabled), so it's not from EGL being disabling, either.
Though maybe there are some missing checks about EGL too, if it's needed for window creation for gstreamer code; I believe lack of EGL currently only errors out for when wayland and/or gles2 are enabled, but might be mistaken.
Comment 1 Michael Catanzaro 2018-11-27 02:07:31 PST
> There's a
> if (DEFINED ENABLE_OPENGL)
>   WEBKIT_OPTION_DEPEND(USE_GSTREAMER_GL ENABLE_OPENGL)
> endif ()
> 
> but this part appears to still fail.

I think the problem is that the dependency is not added if ENABLE_OPENGL is not defined. The intent was for that to disable USE_GSTREAMER_GL if ENABLE_OPENGL is turned off, but the effect is to do nothing because the code will only be executed if ENABLE_OPENGL is on. The condition was probably added because the file is shared between GTK and WPE, and WPE does not have an ENABLE_OPENGL option.

Please test this speculative fix:

if (PORT STREQUAL "GTK")
    WEBKIT_OPTION_DEPEND(USE_GSTREAMER_GL ENABLE_OPENGL)
endif ()
Comment 2 Philippe Normand 2018-11-28 03:34:43 PST
Out of curiosity, why do you want to disable gst-gl support?
Comment 3 Mart Raudsepp 2018-11-28 03:43:46 PST
Because that's what needs to be (automatically) disabled to build without GL but with gstreamer. We want to support any potential embedded use cases downstream too, etc.
This doesn't work for other reasons until bug 191997 is separately fixed, just due to this bug here, it fails even earlier if gstreamer is involved.
Comment 4 Carlos Eduardo Ramalho 2018-12-05 19:41:00 PST
Created attachment 356701 [details]
Patch
Comment 5 Carlos Eduardo Ramalho 2018-12-05 19:41:48 PST
(In reply to Carlos Eduardo Ramalho from comment #4)
> Created attachment 356701 [details]
> Patch

Patch in bug 191997 needs to land too for the compilation with -DENABLE_VIDEO=ON -DENABLE_OPENGL=OFF to succeed.
Comment 6 Build Bot 2018-12-05 23:42:17 PST
Comment on attachment 356701 [details]
Patch

Attachment 356701 [details] did not pass mac-ews (mac):
Output: https://webkit-queues.webkit.org/results/10289097

New failing tests:
http/tests/misc/resource-timing-resolution.html
Comment 7 Build Bot 2018-12-05 23:42:19 PST
Created attachment 356719 [details]
Archive of layout-test-results from ews101 for mac-sierra

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews101  Port: mac-sierra  Platform: Mac OS X 10.12.6
Comment 8 Philippe Normand 2018-12-06 04:42:18 PST
Comment on attachment 356701 [details]
Patch

Let's try this but I suspect you'll need to rebase.
Comment 9 WebKit Commit Bot 2018-12-06 05:07:53 PST
Comment on attachment 356701 [details]
Patch

Clearing flags on attachment: 356701

Committed r238929: <https://trac.webkit.org/changeset/238929>
Comment 10 WebKit Commit Bot 2018-12-06 05:07:54 PST
All reviewed patches have been landed.  Closing bug.
Comment 11 Michael Catanzaro 2018-12-06 12:21:28 PST
Comment on attachment 356701 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=356701&action=review

> Source/cmake/OptionsGTK.cmake:153
> -include(GStreamerDefinitions)
> +include(GStreamerDependencies)

Ow :P
Comment 12 Xabier Rodríguez Calvar 2018-12-09 23:37:24 PST
Comment on attachment 356701 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=356701&action=review

>> Source/cmake/OptionsGTK.cmake:153
>> +include(GStreamerDependencies)
> 
> Ow :P

This needs to be fixed.
Comment 13 Xabier Rodríguez Calvar 2018-12-09 23:41:55 PST
This needs a follow up soon or I'll rollout this.
Comment 14 Philippe Normand 2018-12-10 01:22:56 PST
Comment on attachment 356701 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=356701&action=review

> ChangeLog:13
> +        * Source/cmake/OptionsGTK.cmake: GStreamerDefinitions.cmake was included twice by mistake. Second should be GStreamerDependencies.cmake.

Not if you read this, Calvaris :)
Comment 15 Xabier Rodríguez Calvar 2018-12-10 02:17:53 PST
(In reply to Philippe Normand from comment #14)
> Comment on attachment 356701 [details]
> Patch
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=356701&action=review
> 
> > ChangeLog:13
> > +        * Source/cmake/OptionsGTK.cmake: GStreamerDefinitions.cmake was included twice by mistake. Second should be GStreamerDependencies.cmake.
> 
> Not if you read this, Calvaris :)

Yes, just did, sorry for the noise.