mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-29 21:21:12 +00:00
gl: provide a pkg-config/gir file for the viv-fb backend
Required to be able to generate coherent bindings for window system specific APIs due to limitations in gobject-introspection. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5020>
This commit is contained in:
parent
ffb2e87fd4
commit
a2d9584b27
6 changed files with 99 additions and 9 deletions
|
@ -380,6 +380,10 @@ if gstgl_dep.found()
|
||||||
gstglegl_dep = dependency('gstreamer-gl-egl-1.0', version : gst_req,
|
gstglegl_dep = dependency('gstreamer-gl-egl-1.0', version : gst_req,
|
||||||
fallback : ['gst-plugins-base', 'gstglegl_dep'], required: true)
|
fallback : ['gst-plugins-base', 'gstglegl_dep'], required: true)
|
||||||
endif
|
endif
|
||||||
|
if gst_gl_have_window_viv_fb
|
||||||
|
gstglviv_fb_dep = dependency('gstreamer-gl-viv-fb-1.0', version : gst_req,
|
||||||
|
fallback : ['gst-plugins-base', 'gstglviv_fb_dep'], required: true)
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
libm = cc.find_library('m', required : false)
|
libm = cc.find_library('m', required : false)
|
||||||
|
|
|
@ -3,6 +3,7 @@ gstglproto_dep = dependency('', required : false)
|
||||||
gstglx11_dep = dependency('', required : false)
|
gstglx11_dep = dependency('', required : false)
|
||||||
gstglwayland_dep = dependency('', required : false)
|
gstglwayland_dep = dependency('', required : false)
|
||||||
gstglegl_dep = dependency('', required : false)
|
gstglegl_dep = dependency('', required : false)
|
||||||
|
gstglviv_fb_dep = dependency('', required : false)
|
||||||
|
|
||||||
if get_option('gl').disabled()
|
if get_option('gl').disabled()
|
||||||
message('GStreamer OpenGL integration disabled via options.')
|
message('GStreamer OpenGL integration disabled via options.')
|
||||||
|
@ -115,6 +116,8 @@ gl_wayland_sources = []
|
||||||
gl_wayland_headers = []
|
gl_wayland_headers = []
|
||||||
gl_egl_sources = []
|
gl_egl_sources = []
|
||||||
gl_egl_headers = []
|
gl_egl_headers = []
|
||||||
|
gl_viv_fb_sources = []
|
||||||
|
gl_viv_fb_headers = []
|
||||||
|
|
||||||
glconf = configuration_data()
|
glconf = configuration_data()
|
||||||
glconf_options = [
|
glconf_options = [
|
||||||
|
@ -930,15 +933,19 @@ if need_platform_egl != 'no' and need_win_viv_fb != 'no'
|
||||||
if egl_dep.found() and cc.has_function ('fbGetDisplay', dependencies : egl_dep)
|
if egl_dep.found() and cc.has_function ('fbGetDisplay', dependencies : egl_dep)
|
||||||
enabled_gl_winsys += 'viv-fb'
|
enabled_gl_winsys += 'viv-fb'
|
||||||
glconf.set('GST_GL_HAVE_WINDOW_VIV_FB', 1)
|
glconf.set('GST_GL_HAVE_WINDOW_VIV_FB', 1)
|
||||||
gl_priv_sources += [
|
gl_priv_sources += files([
|
||||||
'viv-fb/gstgldisplay_viv_fb.c',
|
'viv-fb/gstgldisplay_viv_fb.c',
|
||||||
'viv-fb/gstglwindow_viv_fb_egl.c',
|
'viv-fb/gstglwindow_viv_fb_egl.c',
|
||||||
]
|
])
|
||||||
|
gl_viv_fb_sources += files([
|
||||||
|
'viv-fb/gstgldisplay_viv_fb.c',
|
||||||
|
])
|
||||||
|
|
||||||
gl_cpp_args += ['-DEGL_API_FB']
|
gl_cpp_args += ['-DEGL_API_FB']
|
||||||
gl_viv_fb_headers = [
|
gl_viv_fb_headers = files([
|
||||||
|
'viv-fb/gstglviv-fb.h',
|
||||||
'viv-fb/gstgldisplay_viv_fb.h',
|
'viv-fb/gstgldisplay_viv_fb.h',
|
||||||
]
|
])
|
||||||
install_headers(gl_viv_fb_headers, subdir : 'gstreamer-1.0/gst/gl/viv-fb')
|
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -1060,7 +1067,7 @@ if build_gstgl
|
||||||
common_args += '-I@0@'.format(meson.current_build_dir())
|
common_args += '-I@0@'.format(meson.current_build_dir())
|
||||||
|
|
||||||
gstgl = library('gstgl-' + api_version,
|
gstgl = library('gstgl-' + api_version,
|
||||||
gl_sources, gl_egl_sources, gl_x11_sources, gl_wayland_sources, gl_priv_sources, gl_enumtypes_c, gl_enumtypes_h,
|
gl_sources, gl_egl_sources, gl_x11_sources, gl_wayland_sources, gl_viv_fb_sources, gl_priv_sources, gl_enumtypes_c, gl_enumtypes_h,
|
||||||
c_args : common_args,
|
c_args : common_args,
|
||||||
cpp_args : common_args,
|
cpp_args : common_args,
|
||||||
objc_args : common_args + gl_objc_args,
|
objc_args : common_args + gl_objc_args,
|
||||||
|
@ -1249,6 +1256,42 @@ if build_gstgl
|
||||||
meson.override_dependency(pkg_name, gstglegl_dep)
|
meson.override_dependency(pkg_name, gstglegl_dep)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if gl_viv_fb_headers.length() > 0
|
||||||
|
install_headers(gl_viv_fb_headers, subdir : 'gstreamer-1.0/gst/gl/viv-fb')
|
||||||
|
pkg_name = 'gstreamer-gl-viv-fb-1.0'
|
||||||
|
pkgconfig.generate(
|
||||||
|
libraries : [gstgl],
|
||||||
|
subdirs : pkgconfig_subdirs,
|
||||||
|
name : pkg_name,
|
||||||
|
description : 'Streaming media framework, OpenGL plugins libraries (Vivante Framebuffer specifics)',
|
||||||
|
)
|
||||||
|
gl_viv_fb_gir = []
|
||||||
|
if build_gir
|
||||||
|
gir = {
|
||||||
|
'sources' : gl_viv_fb_sources + gl_viv_fb_headers,
|
||||||
|
'namespace' : 'GstGLVivFB',
|
||||||
|
'nsversion' : api_version,
|
||||||
|
'identifier_prefix' : 'Gst',
|
||||||
|
'symbol_prefix' : 'gst',
|
||||||
|
'export_packages' : pkg_name,
|
||||||
|
'includes' : ['Gst-1.0', 'GstBase-1.0', 'GstVideo-1.0'],
|
||||||
|
'install' : true,
|
||||||
|
'extra_args' : gir_init_section + ['--c-include=gst/gl/viv-fb/gstglviv-fb.h'],
|
||||||
|
'dependencies' : [video_dep, gst_dep, gst_base_dep]
|
||||||
|
}
|
||||||
|
gir_dict = gir + {'includes': gir['includes'] + ['GstGL-1.0']}
|
||||||
|
gst_libraries += [[pkg_name, {'gir': gir_dict}]]
|
||||||
|
if not static_build
|
||||||
|
gir += {'includes': gir['includes'] + [gl_gir[0]]}
|
||||||
|
gl_viv_fb_gir = gnome.generate_gir(gstgl, kwargs: gir)
|
||||||
|
library_def += {'gir_targets': library_def.get('gir_targets', []) + [gl_viv_fb_gir]}
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
gstglviv_fb_dep = declare_dependency(dependencies : [gstgl_dep],
|
||||||
|
sources : gl_viv_fb_gir)
|
||||||
|
meson.override_dependency(pkg_name, gstglviv_fb_dep)
|
||||||
|
endif
|
||||||
|
|
||||||
elif get_option('gl').enabled()
|
elif get_option('gl').enabled()
|
||||||
error('GStreamer OpenGL integration required via options, but needed dependencies not found.')
|
error('GStreamer OpenGL integration required via options, but needed dependencies not found.')
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
* GStreamer
|
||||||
|
* Copyright (C) 2023 Matthew Waters <matthew@centricular.com>
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Library General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Library General Public
|
||||||
|
* License along with this library; if not, write to the
|
||||||
|
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||||
|
* Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __GST_GL_VIV_FB_H__
|
||||||
|
#define __GST_GL_VIV_FB_H__
|
||||||
|
|
||||||
|
#include <gst/gl/gl.h>
|
||||||
|
#include <gst/gl/viv-fb/gstgldisplay_viv_fb.h>
|
||||||
|
|
||||||
|
#endif /* __GST_GL_VIV_FB_H__ */
|
|
@ -44,7 +44,7 @@
|
||||||
#include <gst/gl/wayland/gstgldisplay_wayland.h>
|
#include <gst/gl/wayland/gstgldisplay_wayland.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if GST_GL_HAVE_WINDOW_VIV_FB
|
#if GST_GL_HAVE_WINDOW_VIV_FB && defined (HAVE_QT_VIV_FB)
|
||||||
#include <gst/gl/viv-fb/gstgldisplay_viv_fb.h>
|
#include <gst/gl/viv-fb/gstgldisplay_viv_fb.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -117,7 +117,7 @@ gst_qt_get_gl_display (gboolean sink)
|
||||||
}
|
}
|
||||||
#elif GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_EGLFS)
|
#elif GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_EGLFS)
|
||||||
if (QString::fromUtf8("eglfs") == app->platformName()) {
|
if (QString::fromUtf8("eglfs") == app->platformName()) {
|
||||||
#if GST_GL_HAVE_WINDOW_VIV_FB
|
#if GST_GL_HAVE_WINDOW_VIV_FB && defined (HAVE_QT_VIV_FB)
|
||||||
/* FIXME: Could get the display directly from Qt like this
|
/* FIXME: Could get the display directly from Qt like this
|
||||||
* QPlatformNativeInterface *native =
|
* QPlatformNativeInterface *native =
|
||||||
* QGuiApplication::platformNativeInterface();
|
* QGuiApplication::platformNativeInterface();
|
||||||
|
@ -202,7 +202,7 @@ gst_qt_get_gl_wrapcontext (GstGLDisplay * display,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_EGLFS)
|
#if GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_EGLFS)
|
||||||
#if GST_GL_HAVE_WINDOW_VIV_FB
|
#if GST_GL_HAVE_WINDOW_VIV_FB && defined (HAVE_QT_VIV_FB)
|
||||||
if (GST_IS_GL_DISPLAY_VIV_FB (display)) {
|
if (GST_IS_GL_DISPLAY_VIV_FB (display)) {
|
||||||
#else
|
#else
|
||||||
if (GST_IS_GL_DISPLAY_EGL (display)) {
|
if (GST_IS_GL_DISPLAY_EGL (display)) {
|
||||||
|
|
|
@ -181,6 +181,17 @@ if host_system == 'ios'
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# EGL windowing for Vivante Framebuffer (e.g. i.MX6)
|
||||||
|
qt5_viv_fb = qt5_egl \
|
||||||
|
.require(host_system == 'linux') \
|
||||||
|
.require(gstglviv_fb_dep.found(), error_message: 'gstreamer-gl-viv_fb-1.0 is required') \
|
||||||
|
.require(gst_gl_have_platform_egl, error_message: 'egl platform support in gstreamer-gl is required')
|
||||||
|
if qt5_viv_fb.allowed()
|
||||||
|
qt_defines += ['-DHAVE_QT_VIV_FB']
|
||||||
|
optional_deps += gstglviv_fb_dep
|
||||||
|
have_qt_windowing = true
|
||||||
|
endif
|
||||||
|
|
||||||
if qt5_option.require(have_qt_windowing).allowed()
|
if qt5_option.require(have_qt_windowing).allowed()
|
||||||
# rpath is needed to be able to load the plugin on macOS inside the devenv
|
# rpath is needed to be able to load the plugin on macOS inside the devenv
|
||||||
qmlgl_kwargs = {}
|
qmlgl_kwargs = {}
|
||||||
|
|
|
@ -321,6 +321,7 @@ gstglproto_dep = dependency('', required : false)
|
||||||
gstglx11_dep = dependency('', required : false)
|
gstglx11_dep = dependency('', required : false)
|
||||||
gstglwayland_dep = dependency('', required : false)
|
gstglwayland_dep = dependency('', required : false)
|
||||||
gstglegl_dep = dependency('', required : false)
|
gstglegl_dep = dependency('', required : false)
|
||||||
|
gstglviv_fb_dep = dependency('', required : false)
|
||||||
|
|
||||||
have_gstgl = gstgl_dep.found()
|
have_gstgl = gstgl_dep.found()
|
||||||
|
|
||||||
|
@ -370,6 +371,10 @@ if have_gstgl
|
||||||
gstglegl_dep = dependency('gstreamer-gl-egl-1.0', version : gst_req,
|
gstglegl_dep = dependency('gstreamer-gl-egl-1.0', version : gst_req,
|
||||||
fallback : ['gst-plugins-base', 'gstglegl_dep'], required: true)
|
fallback : ['gst-plugins-base', 'gstglegl_dep'], required: true)
|
||||||
endif
|
endif
|
||||||
|
if gst_gl_have_window_viv_fb
|
||||||
|
gstglviv_fb_dep = dependency('gstreamer-gl-viv-fb-1.0', version : gst_req,
|
||||||
|
fallback : ['gst-plugins-base', 'gstglviv_fb_dep'], required: true)
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
zlib_dep = dependency('zlib')
|
zlib_dep = dependency('zlib')
|
||||||
|
|
Loading…
Reference in a new issue