libobs: Introduce the concept of a Unix platform
This is a Unix-specific code. The only available platforms at this point are the X11/GLX and X11/EGL platforms. The concept of a platform display is also introduced. Again, the only display that is set right now is the X11 display.master
parent
510c747459
commit
506b950d02
|
@ -58,6 +58,11 @@
|
|||
#include <pthread.h>
|
||||
#endif
|
||||
|
||||
#if !defined(_WIN32) && !defined(__APPLE__)
|
||||
#include <obs-nix-platform.h>
|
||||
#include <QX11Info>
|
||||
#endif
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#include "ui-config.h"
|
||||
|
@ -1384,6 +1389,13 @@ bool OBSApp::OBSInit()
|
|||
|
||||
qRegisterMetaType<VoidFunc>();
|
||||
|
||||
#if !defined(_WIN32) && !defined(__APPLE__)
|
||||
obs_set_nix_platform(OBS_NIX_PLATFORM_X11_GLX);
|
||||
if (QApplication::platformName() == "xcb") {
|
||||
obs_set_nix_platform_display(QX11Info::display());
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!StartupOBS(locale.c_str(), GetProfilerNameStore()))
|
||||
return false;
|
||||
|
||||
|
|
|
@ -187,13 +187,15 @@ elseif(APPLE)
|
|||
elseif(UNIX)
|
||||
set(libobs_PLATFORM_SOURCES
|
||||
obs-nix.c
|
||||
obs-nix-platform.c
|
||||
obs-nix-x11.c
|
||||
util/threading-posix.c
|
||||
util/pipe-posix.c
|
||||
util/platform-nix.c)
|
||||
|
||||
set(libobs_PLATFORM_HEADERS
|
||||
util/threading-posix.h)
|
||||
util/threading-posix.h
|
||||
obs-nix-platform.h)
|
||||
|
||||
if(HAVE_PULSEAUDIO)
|
||||
set(libobs_audio_monitoring_HEADERS
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
/******************************************************************************
|
||||
Copyright (C) 2019 by Jason Francis <cycl0ps@tuta.io>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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 General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
******************************************************************************/
|
||||
|
||||
#include "obs-nix-platform.h"
|
||||
|
||||
static enum obs_nix_platform_type obs_nix_platform = OBS_NIX_PLATFORM_X11_GLX;
|
||||
|
||||
static void *obs_nix_platform_display = NULL;
|
||||
|
||||
void obs_set_nix_platform(enum obs_nix_platform_type platform)
|
||||
{
|
||||
obs_nix_platform = platform;
|
||||
}
|
||||
|
||||
enum obs_nix_platform_type obs_get_nix_platform(void)
|
||||
{
|
||||
return obs_nix_platform;
|
||||
}
|
||||
|
||||
void obs_set_nix_platform_display(void *display)
|
||||
{
|
||||
obs_nix_platform_display = display;
|
||||
}
|
||||
|
||||
void *obs_get_nix_platform_display(void)
|
||||
{
|
||||
return obs_nix_platform_display;
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
/******************************************************************************
|
||||
Copyright (C) 2019 by Jason Francis <cycl0ps@tuta.io>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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 General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
******************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "util/c99defs.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
enum obs_nix_platform_type {
|
||||
OBS_NIX_PLATFORM_X11_GLX,
|
||||
OBS_NIX_PLATFORM_X11_EGL,
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets the Unix platform.
|
||||
* @param platform The platform to select.
|
||||
*/
|
||||
EXPORT void obs_set_nix_platform(enum obs_nix_platform_type platform);
|
||||
/**
|
||||
* Gets the host platform.
|
||||
*/
|
||||
EXPORT enum obs_nix_platform_type obs_get_nix_platform(void);
|
||||
/**
|
||||
* Sets the host platform's display connection.
|
||||
* @param display The host display connection.
|
||||
*/
|
||||
EXPORT void obs_set_nix_platform_display(void *display);
|
||||
/**
|
||||
* Gets the host platform's display connection.
|
||||
*/
|
||||
EXPORT void *obs_get_nix_platform_display(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
|
@ -18,6 +18,7 @@
|
|||
******************************************************************************/
|
||||
|
||||
#include "obs-internal.h"
|
||||
#include "obs-nix-platform.h"
|
||||
#include "obs-nix-x11.h"
|
||||
|
||||
#include <xcb/xcb.h>
|
||||
|
@ -32,7 +33,7 @@
|
|||
|
||||
void obs_nix_x11_log_info(void)
|
||||
{
|
||||
Display *dpy = XOpenDisplay(NULL);
|
||||
Display *dpy = obs_get_nix_platform_display();
|
||||
if (!dpy) {
|
||||
blog(LOG_INFO, "Unable to open X display");
|
||||
return;
|
||||
|
@ -827,7 +828,7 @@ static inline void registerMouseEvents(struct obs_core_hotkeys *hotkeys)
|
|||
|
||||
static bool obs_nix_x11_hotkeys_platform_init(struct obs_core_hotkeys *hotkeys)
|
||||
{
|
||||
Display *display = XOpenDisplay(NULL);
|
||||
Display *display = obs_get_nix_platform_display();
|
||||
if (!display)
|
||||
return false;
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
|
||||
#include "obs-internal.h"
|
||||
#include "obs-nix.h"
|
||||
#include "obs-nix-platform.h"
|
||||
#include "obs-nix-x11.h"
|
||||
#if defined(__FreeBSD__)
|
||||
#define _GNU_SOURCE
|
||||
|
@ -316,12 +317,22 @@ void log_system_info(void)
|
|||
log_distribution_info();
|
||||
log_desktop_session_info();
|
||||
#endif
|
||||
obs_nix_x11_log_info();
|
||||
switch (obs_get_nix_platform()) {
|
||||
case OBS_NIX_PLATFORM_X11_GLX:
|
||||
case OBS_NIX_PLATFORM_X11_EGL:
|
||||
obs_nix_x11_log_info();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool obs_hotkeys_platform_init(struct obs_core_hotkeys *hotkeys)
|
||||
{
|
||||
hotkeys_vtable = obs_nix_x11_get_hotkeys_vtable();
|
||||
switch (obs_get_nix_platform()) {
|
||||
case OBS_NIX_PLATFORM_X11_GLX:
|
||||
case OBS_NIX_PLATFORM_X11_EGL:
|
||||
hotkeys_vtable = obs_nix_x11_get_hotkeys_vtable();
|
||||
break;
|
||||
}
|
||||
|
||||
return hotkeys_vtable->init(hotkeys);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue