Skip to content

Commit

Permalink
Merged branch upstream/2.23.x (OBS 30) into streamlabs
Browse files Browse the repository at this point in the history
  • Loading branch information
avoitenko-logitech committed Sep 12, 2024
2 parents 630848a + c710222 commit 83c81e8
Show file tree
Hide file tree
Showing 31 changed files with 385 additions and 96 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/clang-format.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ jobs:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v4
with:
submodules: 'recursive'

Expand Down
44 changes: 23 additions & 21 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ if(NOT ENABLE_BROWSER)
return()
endif()

find_package(CEF REQUIRED)
find_package(CEF REQUIRED 95)
find_package(nlohmann_json REQUIRED)

add_library(obs-browser MODULE)
Expand All @@ -20,26 +20,28 @@ add_library(OBS::browser ALIAS obs-browser)
option(ENABLE_BROWSER_PANELS "Enable Qt web browser panel support" ON)
mark_as_advanced(ENABLE_BROWSER_PANELS)

set(obs-browser_SOURCES
obs-browser-plugin.cpp
obs-browser-source.cpp
obs-browser-source.hpp
obs-browser-source-audio.cpp
browser-app.cpp
browser-app.hpp
browser-client.cpp
browser-client.hpp
browser-scheme.cpp
browser-scheme.hpp
browser-version.h
cef-headers.hpp
deps/base64/base64.cpp
deps/base64/base64.hpp
deps/wide-string.cpp
deps/wide-string.hpp
deps/signal-restore.cpp
deps/signal-restore.hpp
deps/obs-websocket-api/obs-websocket-api.h browser-mac.mm browser-mac.h)
target_sources(
obs-browser
PRIVATE # cmake-format: sortable
browser-app.cpp
browser-app.hpp
browser-client.cpp
browser-client.hpp
browser-scheme.cpp
browser-scheme.hpp
browser-version.h
cef-headers.hpp
deps/base64/base64.cpp
deps/base64/base64.hpp
deps/obs-websocket-api/obs-websocket-api.h
deps/signal-restore.cpp
deps/signal-restore.hpp
deps/wide-string.cpp
deps/wide-string.hpp
obs-browser-plugin.cpp
obs-browser-source-audio.cpp
obs-browser-source.cpp
obs-browser-source.hpp)

if(OS_MACOS)
list(APPEND obs-browser_SOURCES
Expand Down
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ window.addEventListener('obsSceneChanged', function(event) {
Descriptions for these events can be [found here](https://obsproject.com/docs/reference-frontend-api.html?highlight=paused#c.obs_frontend_event).

* obsSceneChanged
* obsSceneListChanged
* obsTransitionChanged
* obsTransitionListChanged
* obsSourceVisibleChanged
* obsSourceActiveChanged
* obsStreamingStarting
Expand Down
61 changes: 53 additions & 8 deletions browser-app.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,56 @@ void BrowserApp::SetDocumentVisibility(CefRefPtr<CefBrowser> browser,
}
#endif

CefRefPtr<CefV8Value> CefValueToCefV8Value(CefRefPtr<CefValue> value)
{
CefRefPtr<CefV8Value> result;
switch (value->GetType()) {
case VTYPE_INVALID:
result = CefV8Value::CreateNull();
break;
case VTYPE_NULL:
result = CefV8Value::CreateNull();
break;
case VTYPE_BOOL:
result = CefV8Value::CreateBool(value->GetBool());
break;
case VTYPE_INT:
result = CefV8Value::CreateInt(value->GetInt());
break;
case VTYPE_DOUBLE:
result = CefV8Value::CreateDouble(value->GetDouble());
break;
case VTYPE_STRING:
result = CefV8Value::CreateString(value->GetString());
break;
case VTYPE_BINARY:
result = CefV8Value::CreateNull();
break;
case VTYPE_DICTIONARY: {
result = CefV8Value::CreateObject(nullptr, nullptr);
CefRefPtr<CefDictionaryValue> dict = value->GetDictionary();
CefDictionaryValue::KeyList keys;
dict->GetKeys(keys);
for (unsigned int i = 0; i < keys.size(); i++) {
CefString key = keys[i];
result->SetValue(
key, CefValueToCefV8Value(dict->GetValue(key)),
V8_PROPERTY_ATTRIBUTE_NONE);
}
} break;
case VTYPE_LIST: {
CefRefPtr<CefListValue> list = value->GetList();
size_t size = list->GetSize();
result = CefV8Value::CreateArray((int)size);
for (size_t i = 0; i < size; i++) {
result->SetValue((int)i, CefValueToCefV8Value(
list->GetValue(i)));
}
} break;
}
return result;
}

bool BrowserApp::OnProcessMessageReceived(CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame,
CefProcessId source_process,
Expand Down Expand Up @@ -369,25 +419,20 @@ bool BrowserApp::OnProcessMessageReceived(CefRefPtr<CefBrowser> browser,
} else if (message->GetName() == "executeCallback") {
CefRefPtr<CefV8Context> context =
browser->GetMainFrame()->GetV8Context();
CefRefPtr<CefV8Value> retval;
CefRefPtr<CefV8Exception> exception;

context->Enter();

CefRefPtr<CefListValue> arguments = message->GetArgumentList();
int callbackID = arguments->GetInt(0);
CefString jsonString = arguments->GetString(1);

std::string script;
script += "JSON.parse('";
script += arguments->GetString(1).ToString();
script += "');";
CefRefPtr<CefValue> json =
CefParseJSON(arguments->GetString(1).ToString(), {});

CefRefPtr<CefV8Value> callback = callbackMap[callbackID];
CefV8ValueList args;

context->Eval(script, browser->GetMainFrame()->GetURL(), 0,
retval, exception);
CefRefPtr<CefV8Value> retval = CefValueToCefV8Value(json);

args.push_back(retval);

Expand Down
9 changes: 5 additions & 4 deletions browser-client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ bool BrowserClient::OnProcessMessageReceived(
if (name == "getScenes") {
struct obs_frontend_source_list list = {};
obs_frontend_get_scenes(&list);
std::vector<const char *> scenes_vector;
std::vector<nlohmann::json> scenes_vector;
for (size_t i = 0; i < list.sources.num; i++) {
obs_source_t *source = list.sources.array[i];
scenes_vector.push_back(
Expand All @@ -227,7 +227,7 @@ bool BrowserClient::OnProcessMessageReceived(
} else if (name == "getTransitions") {
struct obs_frontend_source_list list = {};
obs_frontend_get_transitions(&list);
std::vector<const char *> transitions_vector;
std::vector<nlohmann::json> transitions_vector;
for (size_t i = 0; i < list.sources.num; i++) {
obs_source_t *source = list.sources.array[i];
transitions_vector.push_back(
Expand Down Expand Up @@ -668,8 +668,9 @@ void BrowserClient::OnLoadEnd(CefRefPtr<CefBrowser>, CefRefPtr<CefFrame> frame,

std::string script;
script += "const obsCSS = document.createElement('style');";
script += "obsCSS.innerHTML = decodeURIComponent(\"" +
uriEncodedCSS + "\");";
script += "obsCSS.appendChild(document.createTextNode("
"decodeURIComponent(\"" +
uriEncodedCSS + "\")));";
script += "document.querySelector('head').appendChild(obsCSS);";

frame->ExecuteJavaScript(script, "", 0);
Expand Down
4 changes: 2 additions & 2 deletions browser-version.h
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#pragma once

#define OBS_BROWSER_VERSION_MAJOR 2
#define OBS_BROWSER_VERSION_MINOR 21
#define OBS_BROWSER_VERSION_PATCH 1
#define OBS_BROWSER_VERSION_MINOR 23
#define OBS_BROWSER_VERSION_PATCH 6

#ifndef MAKE_SEMANTIC_VERSION
#define MAKE_SEMANTIC_VERSION(major, minor, patch) \
Expand Down
13 changes: 10 additions & 3 deletions cmake/feature-panels.cmake
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
find_qt(COMPONENTS Widgets)
find_package(Qt6 REQUIRED Widgets)

add_library(browser-panels INTERFACE)
add_library(OBS::browser-panels ALIAS browser-panels)
Expand All @@ -9,8 +9,11 @@ target_include_directories(browser-panels INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}

target_compile_definitions(browser-panels INTERFACE BROWSER_AVAILABLE)

target_sources(obs-browser PRIVATE panel/browser-panel-client.hpp panel/browser-panel-internal.hpp
panel/browser-panel.cpp panel/browser-panel-client.cpp)
target_sources(
obs-browser
PRIVATE # cmake-format: sortable
panel/browser-panel-client.cpp panel/browser-panel-client.hpp panel/browser-panel-internal.hpp
panel/browser-panel.cpp)

target_link_libraries(obs-browser PRIVATE OBS::browser-panels Qt::Widgets)

Expand All @@ -19,3 +22,7 @@ set_target_properties(
PROPERTIES AUTOMOC ON
AUTOUIC ON
AUTORCC ON)

if(OS_WINDOWS)
set_property(SOURCE browser-app.hpp PROPERTY SKIP_AUTOMOC TRUE)
endif()
2 changes: 1 addition & 1 deletion cmake/legacy.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ option(ENABLE_BROWSER_QT_LOOP "Enable running CEF on the main UI thread alongsid

mark_as_advanced(ENABLE_BROWSER_LEGACY ENABLE_BROWSER_SHARED_TEXTURE ENABLE_BROWSER_PANELS ENABLE_BROWSER_QT_LOOP)

find_package(CEF REQUIRED)
find_package(CEF REQUIRED 95)

if(NOT TARGET CEF::Wrapper)
message(
Expand Down
9 changes: 6 additions & 3 deletions cmake/os-linux.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,23 @@ set_target_properties(obs-browser PROPERTIES BUILD_RPATH "$ORIGIN/" INSTALL_RPAT
add_executable(browser-helper)
add_executable(OBS::browser-helper ALIAS browser-helper)

target_sources(browser-helper PRIVATE cef-headers.hpp obs-browser-page/obs-browser-page-main.cpp browser-app.cpp
browser-app.hpp deps/json11/json11.cpp deps/json11/json11.hpp)
target_sources(
browser-helper PRIVATE # cmake-format: sortable
browser-app.cpp browser-app.hpp cef-headers.hpp obs-browser-page/obs-browser-page-main.cpp)

target_include_directories(browser-helper PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/deps"
"${CMAKE_CURRENT_SOURCE_DIR}/obs-browser-page")

target_link_libraries(browser-helper PRIVATE CEF::Wrapper CEF::Library)

set(OBS_EXECUTABLE_DESTINATION "${OBS_PLUGIN_DESTINATION}")

# cmake-format: off
set_target_properties_obs(
browser-helper
PROPERTIES FOLDER plugins/obs-browser
BUILD_RPATH "$ORIGIN/"
INSTALL_RPATH "$ORIGIN/"
PREFIX ""
OUTPUT_NAME obs-browser-page)
# cmake-format: on
17 changes: 9 additions & 8 deletions cmake/os-macos.cmake
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
find_qt(COMPONENTS Widgets)

find_library(COREFOUNDATION CoreFoundation)
find_library(APPKIT AppKit)
mark_as_advanced(COREFOUNDATION APPKIT)
find_package(Qt6 REQUIRED Widgets)

target_compile_definitions(obs-browser PRIVATE ENABLE_BROWSER_SHARED_TEXTURE ENABLE_BROWSER_QT_LOOP)

if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 14.0.3)
target_compile_options(obs-browser PRIVATE -Wno-error=unqualified-std-cast-call)
endif()

target_link_libraries(obs-browser PRIVATE Qt::Widgets ${COREFOUNDATION} ${APPKIT} CEF::Wrapper)
target_link_libraries(obs-browser PRIVATE Qt::Widgets CEF::Wrapper "$<LINK_LIBRARY:FRAMEWORK,CoreFoundation.framework>"
"$<LINK_LIBRARY:FRAMEWORK,AppKit.framework>")

set(helper_basename browser-helper)
set(helper_output_name "obs64 Helper")
Expand All @@ -31,9 +29,12 @@ foreach(helper IN LISTS helper_suffixes)
add_executable(${target_name} MACOSX_BUNDLE EXCLUDE_FROM_ALL)
add_executable(OBS::${target_name} ALIAS ${target_name})

target_sources(${target_name} PRIVATE browser-app.cpp browser-app.hpp obs-browser-page/obs-browser-page-main.cpp
cef-headers.hpp browser-mac.mm browser-mac.h)
target_sources(
${target_name} PRIVATE # cmake-format: sortable
browser-app.cpp browser-app.hpp browser-mac.mm browser-mac.h cef-headers.hpp obs-browser-page/obs-browser-page-main.cpp)

target_compile_definitions(${target_name} PRIVATE ENABLE_BROWSER_SHARED_TEXTURE)

if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 14.0.3)
target_compile_options(${target_name} PRIVATE -Wno-error=unqualified-std-cast-call)
endif()
Expand Down
8 changes: 3 additions & 5 deletions cmake/os-windows.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,9 @@ add_executable(OBS::browser-helper ALIAS obs-browser-helper)

target_sources(
obs-browser-helper
PRIVATE cef-headers.hpp
obs-browser-page/obs-browser-page-main.cpp
browser-app.cpp
browser-app.hpp
obs-browser-page.manifest)
PRIVATE # cmake-format: sortable
browser-app.cpp browser-app.hpp cef-headers.hpp obs-browser-page.manifest
obs-browser-page/obs-browser-page-main.cpp)

target_include_directories(obs-browser-helper PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/deps"
"${CMAKE_CURRENT_SOURCE_DIR}/obs-browser-page")
Expand Down
28 changes: 28 additions & 0 deletions data/locale/af-ZA.ini
Original file line number Diff line number Diff line change
@@ -1,12 +1,40 @@
LocalFile="Lokale lêer"
Width="Breedte"
Height="Hoogte"
FPS="RPS"
CSS="Pasgemaakte CSS"
BrowserSource="Blaaier"
CustomFrameRate="Gebruik pasgemaakte beeldduur"
RerouteAudio="Beheer oudio d.m.v. OBS"
Inspect="Inspekteer"
DevTools="Inspekteer blaaierdok ‘%1’"
CopyUrl="Kopieer huidige adres"
WebpageControlLevel="Bladtoestemmings"
WebpageControlLevel.Level.None="Geen toegang tot OBS"
WebpageControlLevel.Level.ReadObs="Leestoegang tot OBS-statusinligting"
WebpageControlLevel.Level.ReadUser="Leestoegang tot gebruikerinligting (huidige toneelversameling, oorgange)"
WebpageControlLevel.Level.Basic="Basiese toegang tot OBS (bewaar terugspeelbuffer, ens.)"
WebpageControlLevel.Level.Advanced="Gevorderde toegang tot OBS (Verander tonele, Begin/stop herhaalbuffer, ens.)"
WebpageControlLevel.Level.All="Volle toegang tot OBS (begin/stop stroming sonder waarskuwing, ens.)"
Dialog.Alert="JavaScript-waarskuwing"
Dialog.Confirm="JavaScript-bevestiging"
Dialog.Prompt="JavaScript-melding"
Dialog.BrowserDock="Blaaierdok"
Dialog.ReceivedFrom="Ontvang van ‘%1’"
Error.Title="Kon nie daardie blad laai nie!"
Error.Description="Maak seker die adres is korrek en dat die werf nie probleme ervaar nie."
Error.Retry="Klik hier om weer te probeer"
Error.Code="Fout: %1"
Zoom.Reset="Herstel zoem"
Zoom.Out="Zoem uit"
Zoom.In="Zoem in"
ErrorCode.ERR_CONNECTION_REFUSED="Bediener het die koppeling geweier"
ErrorCode.ERR_NAME_NOT_RESOLVED="Bediener se IP-adres nie gevind nie"
ErrorCode.ERR_CONNECTION_TIMED_OUT="Verbinding het uitgetel"
ErrorCode.ERR_TIMED_OUT="Bewerking het uitgetel"
ErrorCode.ERR_FILE_NOT_FOUND="Lêer nie gevind nie"
ErrorCode.ERR_FAILED="Kon nie koppel nie"
ErrorCode.ERR_NETWORK_CHANGED="Netwerk het verander"
ErrorCode.ERR_SSL_VERSION_INTERFERENCE="SSL-weergawekoppelvlak. TLS 1.3 is dalk versper of gewysig."
ErrorCode.ERR_SSL_PROTOCOL_ERROR="SSL-protokolfout. Kon nie ’n beveiligde verbinding maak nie."
ErrorCode.ERR_CERT_DATE_INVALID="Bediener se SSL-sertifikaat is verouderd of u rekenaar se tyd is verkeerd."
Loading

0 comments on commit 83c81e8

Please sign in to comment.