Changes of Revision 2
obs-studio.changes
Changed
x
1
2
-------------------------------------------------------------------
3
+Fri Mar 07 23:49:06 UTC 2025 - packman@nordisch.org
4
+
5
+- Update to version 31.0.2:
6
+ * libobs: Update version to 31.0.2
7
+ * mac-avcapture: Prevent race condition in source init/deinit
8
+ * win-dshow: Fix possible crash if frame width or height is zero
9
+ * obs-browser: Update version to 2.24.5
10
+ * obs-websocket: Update version to 5.5.5
11
+ * obs-nvenc: Fix lookahead depth value logging
12
+ * obs-nvenc: Correct max target quality for AV1
13
+ * cmake: Fix regexp to detect installed FFmpeg version
14
+ * nv-filters: Remove CUDA RT functions
15
+ * nv-filters: Update SDK version targeted
16
+ * obs-scripting: Fix macOS Homebrew Python loading
17
+
18
+-------------------------------------------------------------------
19
Mon Jan 20 09:57:57 UTC 2025 - darix <packman@nordisch.org>
20
21
- make nvenc handling more readable
22
obs-studio.spec
Changed
10
1
2
%endif
3
4
Name: obs-studio
5
-Version: 31.0.1
6
+Version: 31.0.2
7
Release: 0
8
Summary: A recording/broadcasting program
9
Group: Productivity/Multimedia/Video/Editors and Convertors
10
_service
Changed
10
1
2
<services>
3
<service name="tar_scm" mode="disabled">
4
<param name="versionformat">@PARENT_TAG@</param>
5
- <param name="revision">31.0.1</param>
6
+ <param name="revision">31.0.2</param>
7
<param name="url">https://github.com/obsproject/obs-studio.git</param>
8
<param name="versionrewrite-pattern">(\.\d+)-(a-z.*)</param>
9
<param name="versionrewrite-replacement">\1~\2</param>
10
_servicedata
Changed
10
1
2
<servicedata>
3
<service name="tar_scm">
4
<param name="url">https://github.com/obsproject/obs-studio.git</param>
5
- <param name="changesrevision">b7b7c4cbbcd86eb29d8bbc51765be0338ed6814d</param>
6
+ <param name="changesrevision">e6137e15e0fb26b3aa47a66df28e9f056d54b9af</param>
7
</service>
8
</servicedata>
9
\ No newline at end of file
10
obs-studio-31.0.1.tar.xz/build-aux/modules/99-cef.json -> obs-studio-31.0.2.tar.xz/build-aux/modules/99-cef.json
Changed
12
1
2
"sources":
3
{
4
"type": "archive",
5
- "url": "https://cdn-fastly.obsproject.com/downloads/cef_binary_6533_linux_x86_64.tar.xz",
6
- "sha256": "fab66dfc9cfd2e26fb87798f855aef30c2004edc8e19570d37af555644ae1655"
7
+ "url": "https://cdn-fastly.obsproject.com/downloads/cef_binary_6533_linux_x86_64_v3.tar.xz",
8
+ "sha256": "cb7225c7a937ac4cdc9c41700061f45cccc640d696902357782e57f8250bf43a"
9
}
10
11
}
12
obs-studio-31.0.1.tar.xz/buildspec.json -> obs-studio-31.0.2.tar.xz/buildspec.json
Changed
25
1
2
"baseUrl": "https://cdn-fastly.obsproject.com/downloads",
3
"label": "Chromium Embedded Framework",
4
"hashes": {
5
- "macos-x86_64": "139c6664b6c9c446e0b56f303586fa6bd4b3587bae4742e13967c2f0f99c8740",
6
- "macos-arm64": "8e833fce815b83114ab381c055122a18dc415e29af5c4db0a577caf4b817baa2",
7
- "ubuntu-x86_64": "fab66dfc9cfd2e26fb87798f855aef30c2004edc8e19570d37af555644ae1655",
8
- "ubuntu-aarch64": "ab09f04e534306d3f301ea997c03a6a9f7bd245042d50a434f17c1c98ac64b89",
9
- "windows-x64": "87b1033ff0f8f2fb7262d8a236bc36b981cb50d24b401c20cdf9b31099a9a217"
10
+ "macos-x86_64": "02478ad91d284d7717ea48aad90c4ecbe90f8c6a982c48861aa149b7466505eb",
11
+ "macos-arm64": "6a1084a985366f3f0695b1ecd902d326a2d6f286a067935d83567d4fe94bf62b",
12
+ "ubuntu-x86_64": "cb7225c7a937ac4cdc9c41700061f45cccc640d696902357782e57f8250bf43a",
13
+ "ubuntu-aarch64": "f92df7f076bdc8cac2e3c77e27be418008b7168723201cb73fdbc2f6d91bc778",
14
+ "windows-x64": "922efbda1f2f8be9e5b2754d878a14d90afc81f04e94fc9101a7513e2b5cecc1"
15
+ },
16
+ "revision": {
17
+ "macos-x86_64": 2,
18
+ "macos-arm64": 2,
19
+ "ubuntu-x86_64": 3,
20
+ "ubuntu-aarch64": 3,
21
+ "windows-x64": 2
22
}
23
}
24
},
25
obs-studio-31.0.1.tar.xz/cmake/finders/FindFFmpeg.cmake -> obs-studio-31.0.2.tar.xz/cmake/finders/FindFFmpeg.cmake
Changed
10
1
2
STRINGS
3
"${FFmpeg_avutil_INCLUDE_DIR}/libavutil/ffversion.h"
4
_version_string
5
- REGEX "^.*FFMPEG_VERSION \t+\"n?0-9a-z\\~.-+\" \t*$"
6
+ REGEX "^.*FFMPEG_VERSION \t+\"n?0-9a-z\\~+.-+\" \t*$"
7
)
8
string(REGEX REPLACE ".*FFMPEG_VERSION \t+\"n?(0-9+\\.0-9).*\".*" "\\1" FFmpeg_VERSION "${_version_string}")
9
endif()
10
obs-studio-31.0.1.tar.xz/libobs/obs-config.h -> obs-studio-31.0.2.tar.xz/libobs/obs-config.h
Changed
10
1
2
*
3
* Reset to zero each major or minor version
4
*/
5
-#define LIBOBS_API_PATCH_VER 1
6
+#define LIBOBS_API_PATCH_VER 2
7
8
#define MAKE_SEMANTIC_VERSION(major, minor, patch) ((major << 24) | (minor << 16) | patch)
9
10
obs-studio-31.0.1.tar.xz/plugins/mac-avcapture/plugin-main.m -> obs-studio-31.0.2.tar.xz/plugins/mac-avcapture/plugin-main.m
Changed
58
1
2
if (!capture) {
3
return;
4
}
5
+ /// It is possible that the source's serial queue is still creating this source, so perform destruction
6
+ /// synchronously on that queue to ensure the source is fully initialized before being destroyed.
7
+ dispatch_sync(capture.sessionQueue, ^{
8
+ OBSAVCaptureInfo *capture_info = capture.captureInfo;
9
10
- OBSAVCaptureInfo *capture_info = capture.captureInfo;
11
-
12
- capture stopCaptureSession;
13
- capture.deviceInput.device unlockForConfiguration;
14
+ capture stopCaptureSession;
15
+ capture.deviceInput.device unlockForConfiguration;
16
17
- if (capture_info->isFastPath) {
18
- pthread_mutex_destroy(&capture_info->mutex);
19
- }
20
+ if (capture_info->isFastPath) {
21
+ pthread_mutex_destroy(&capture_info->mutex);
22
+ }
23
24
- if (capture_info->videoFrame) {
25
- bfree(capture_info->videoFrame);
26
- capture_info->videoFrame = NULL;
27
- }
28
+ if (capture_info->videoFrame) {
29
+ bfree(capture_info->videoFrame);
30
+ capture_info->videoFrame = NULL;
31
+ }
32
33
- if (capture_info->audioFrame) {
34
- bfree(capture_info->audioFrame);
35
- capture_info->audioFrame = NULL;
36
- }
37
+ if (capture_info->audioFrame) {
38
+ bfree(capture_info->audioFrame);
39
+ capture_info->audioFrame = NULL;
40
+ }
41
42
- if (capture_info->sampleBufferDescription) {
43
- capture_info->sampleBufferDescription = NULL;
44
- }
45
+ if (capture_info->sampleBufferDescription) {
46
+ capture_info->sampleBufferDescription = NULL;
47
+ }
48
49
- bfree(capture_info);
50
+ bfree(capture_info);
51
52
- CFBridgingRelease((__bridge CFTypeRef _Nullable)(capture));
53
+ CFBridgingRelease((__bridge CFTypeRef _Nullable)(capture));
54
+ });
55
}
56
57
#pragma mark - OBS Module API
58
obs-studio-31.0.1.tar.xz/plugins/nv-filters/nv_sdk_versions.h -> obs-studio-31.0.2.tar.xz/plugins/nv-filters/nv_sdk_versions.h
Changed
6
1
2
-#define MIN_VFX_SDK_VERSION (0 << 24 | 7 << 16 | 2 << 8 | 0 << 0)
3
-#define MIN_AFX_SDK_VERSION (1 << 24 | 3 << 16 | 0 << 0)
4
+#define MIN_VFX_SDK_VERSION (0 << 24 | 7 << 16 | 6 << 8 | 0 << 0)
5
+#define MIN_AFX_SDK_VERSION (1 << 24 | 6 << 16 | 1 << 8 | 2 << 0)
6
obs-studio-31.0.1.tar.xz/plugins/nv-filters/nvidia-videofx-filter.c -> obs-studio-31.0.2.tar.xz/plugins/nv-filters/nvidia-videofx-filter.c
Changed
16
1
2
LOAD_SYM(NvCVImage_FromD3DColorSpace);
3
#undef LOAD_SYM
4
5
-#define LOAD_SYM(sym) LOAD_SYM_FROM_LIB(sym, nv_cudart, "cudart64_110.dll")
6
- LOAD_SYM(cudaMalloc);
7
- LOAD_SYM(cudaStreamSynchronize);
8
- LOAD_SYM(cudaFree);
9
- LOAD_SYM(cudaMemcpy);
10
- LOAD_SYM(cudaMemsetAsync);
11
-#undef LOAD_SYM
12
-
13
#define LOAD_SYM(sym) LOAD_SYM_FROM_LIB2(sym, nv_videofx, "NVVideoEffects.dll")
14
LOAD_SYM(NvVFX_SetStateObjectHandleArray);
15
LOAD_SYM(NvVFX_AllocateState);
16
obs-studio-31.0.1.tar.xz/plugins/nv-filters/nvvfx-load.h -> obs-studio-31.0.2.tar.xz/plugins/nv-filters/nvvfx-load.h
Changed
28
1
2
FreeLibrary(nv_cvimage);
3
nv_cvimage = NULL;
4
}
5
- cudaMalloc = NULL;
6
- cudaStreamSynchronize = NULL;
7
- cudaFree = NULL;
8
- cudaMemcpy = NULL;
9
- cudaMemsetAsync = NULL;
10
- if (nv_cudart) {
11
- FreeLibrary(nv_cudart);
12
- nv_cudart = NULL;
13
- }
14
}
15
16
static inline void nvvfx_get_sdk_path(char *buffer, const size_t len)
17
18
19
nv_videofx = LoadLibrary(L"NVVideoEffects.dll");
20
nv_cvimage = LoadLibrary(L"NVCVImage.dll");
21
- nv_cudart = LoadLibrary(L"cudart64_110.dll");
22
SetDllDirectoryA(NULL);
23
- return !!nv_videofx && !!nv_cvimage && !!nv_cudart;
24
+ return !!nv_videofx && !!nv_cvimage;
25
}
26
27
static unsigned int get_lib_version(void)
28
obs-studio-31.0.1.tar.xz/plugins/obs-browser/browser-app.cpp -> obs-studio-31.0.2.tar.xz/plugins/obs-browser/browser-app.cpp
Changed
18
1
2
// Don't override existing, as this can break OSR
3
std::string disableFeatures = command_line->GetSwitchValue("disable-features");
4
disableFeatures += ",HardwareMediaKeyHandling";
5
+#ifdef _WIN32
6
+ disableFeatures += ",EnableWindowsGamingInputDataFetcher";
7
+#endif
8
disableFeatures += ",WebBluetooth";
9
command_line->AppendSwitchWithValue("disable-features", disableFeatures);
10
} else {
11
command_line->AppendSwitchWithValue("disable-features", "WebBluetooth,"
12
+#ifdef _WIN32
13
+ "EnableWindowsGamingInputDataFetcher,"
14
+#endif
15
"HardwareMediaKeyHandling");
16
}
17
18
obs-studio-31.0.1.tar.xz/plugins/obs-browser/browser-client.cpp -> obs-studio-31.0.2.tar.xz/plugins/obs-browser/browser-client.cpp
Changed
16
1
2
return nullptr;
3
}
4
5
+void BrowserClient::OnRenderProcessTerminated(CefRefPtr<CefBrowser>, TerminationStatus, int,
6
+ const CefString &error_string)
7
+{
8
+ std::string str_text = error_string;
9
+ blog(LOG_ERROR, "obs-browser: '%s' Webpage has crashed unexpectedly! Reason: '%s'",
10
+ obs_source_get_name(bs->source), str_text.c_str());
11
+}
12
+
13
CefResourceRequestHandler::ReturnValue BrowserClient::OnBeforeResourceLoad(CefRefPtr<CefBrowser>, CefRefPtr<CefFrame>,
14
CefRefPtr<CefRequest>,
15
CefRefPtr<CefCallback>)
16
obs-studio-31.0.1.tar.xz/plugins/obs-browser/browser-client.hpp -> obs-studio-31.0.2.tar.xz/plugins/obs-browser/browser-client.hpp
Changed
10
1
2
GetResourceRequestHandler(CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame,
3
CefRefPtr<CefRequest> request, bool is_navigation, bool is_download,
4
const CefString &request_initiator, bool &disable_default_handling) override;
5
+ virtual void OnRenderProcessTerminated(CefRefPtr<CefBrowser> browser, TerminationStatus status, int error_code,
6
+ const CefString &error_string) override;
7
8
/* CefResourceRequestHandler */
9
virtual CefResourceRequestHandler::ReturnValue OnBeforeResourceLoad(CefRefPtr<CefBrowser> browser,
10
obs-studio-31.0.1.tar.xz/plugins/obs-browser/browser-version.h -> obs-studio-31.0.2.tar.xz/plugins/obs-browser/browser-version.h
Changed
10
1
2
3
#define OBS_BROWSER_VERSION_MAJOR 2
4
#define OBS_BROWSER_VERSION_MINOR 24
5
-#define OBS_BROWSER_VERSION_PATCH 4
6
+#define OBS_BROWSER_VERSION_PATCH 5
7
8
#ifndef MAKE_SEMANTIC_VERSION
9
#define MAKE_SEMANTIC_VERSION(major, minor, patch) ((major << 24) | (minor << 16) | patch)
10
obs-studio-31.0.1.tar.xz/plugins/obs-browser/cmake/os-linux.cmake -> obs-studio-31.0.2.tar.xz/plugins/obs-browser/cmake/os-linux.cmake
Changed
9
1
2
find_package(X11 REQUIRED)
3
4
-target_compile_definitions(obs-browser PRIVATE ENABLE_BROWSER_QT_LOOP)
5
-
6
target_link_libraries(obs-browser PRIVATE CEF::Wrapper CEF::Library X11::X11)
7
set_target_properties(obs-browser PROPERTIES BUILD_RPATH "$ORIGIN/" INSTALL_RPATH "$ORIGIN/")
8
9
obs-studio-31.0.1.tar.xz/plugins/obs-browser/obs-browser-plugin.cpp -> obs-studio-31.0.2.tar.xz/plugins/obs-browser/obs-browser-plugin.cpp
Changed
39
1
2
os_mkdir(conf_path);
3
4
CefSettings settings;
5
- settings.log_severity = LOGSEVERITY_DISABLE;
6
+ settings.log_severity = LOGSEVERITY_FATAL;
7
BPtr<char> log_path = obs_module_config_path("debug.log");
8
BPtr<char> log_path_abs = os_get_abs_path_ptr(log_path);
9
CefString(&settings.log_file) = log_path_abs;
10
11
12
#if !defined(_WIN32)
13
BackupSignalHandlers();
14
- CefInitialize(args, settings, app, nullptr);
15
+ bool success = CefInitialize(args, settings, app, nullptr);
16
RestoreSignalHandlers();
17
#elif (CHROME_VERSION_BUILD > 3770)
18
- CefInitialize(args, settings, app, nullptr);
19
+ bool success = CefInitialize(args, settings, app, nullptr);
20
#else
21
/* Massive (but amazing) hack to prevent chromium from modifying our
22
* process tokens and permissions, which caused us problems with winrt,
23
24
* we'll just switch back to the static library but I doubt we'll need
25
* to. */
26
uintptr_t zeroed_memory_lol32 = {};
27
- CefInitialize(args, settings, app, zeroed_memory_lol);
28
+ bool success = CefInitialize(args, settings, app, zeroed_memory_lol);
29
#endif
30
31
+ if (!success) {
32
+ blog(LOG_ERROR, "obs-browser: CEF failed to initialize. Exit code: %d", CefGetExitCode());
33
+ return;
34
+ }
35
+
36
#if !ENABLE_LOCAL_FILE_URL_SCHEME
37
/* Register http://absolute/ scheme handler for older
38
* CEF builds which do not support file:// URLs */
39
obs-studio-31.0.1.tar.xz/plugins/obs-browser/panel/browser-panel-client.cpp -> obs-studio-31.0.2.tar.xz/plugins/obs-browser/panel/browser-panel-client.cpp
Changed
10
1
2
void QCefBrowserClient::OnBeforeClose(CefRefPtr<CefBrowser>)
3
{
4
if (widget) {
5
- emit widget->CloseSafely();
6
+ widget->CloseSafely();
7
}
8
}
9
10
obs-studio-31.0.1.tar.xz/plugins/obs-nvenc/nvenc-properties.c -> obs-studio-31.0.2.tar.xz/plugins/obs-nvenc/nvenc-properties.c
Changed
11
1
2
p = obs_properties_add_int(props, "bitrate", obs_module_text("Bitrate"), 50, UINT32_MAX / 1000, 50);
3
obs_property_int_set_suffix(p, " Kbps");
4
5
- obs_properties_add_int(props, "target_quality", obs_module_text("TargetQuality"), 1, 51, 1);
6
+ obs_properties_add_int(props, "target_quality", obs_module_text("TargetQuality"), 1,
7
+ codec == CODEC_AV1 ? 63 : 51, 1);
8
9
p = obs_properties_add_int(props, "max_bitrate", obs_module_text("MaxBitrate"), 0, UINT32_MAX / 1000, 50);
10
obs_property_int_set_suffix(p, " Kbps");
11
obs-studio-31.0.1.tar.xz/plugins/obs-nvenc/nvenc.c -> obs-studio-31.0.2.tar.xz/plugins/obs-nvenc/nvenc.c
Changed
11
1
2
dstr_catf(&log, "\theight: %d\n", enc->cy);
3
dstr_catf(&log, "\tb-frames: %ld\n", enc->props.bf);
4
dstr_catf(&log, "\tb-ref-mode: %ld\n", enc->props.bframe_ref_mode);
5
- dstr_catf(&log, "\tlookahead: %s (%d frames)\n", lookahead ? "true" : "false", rc_lookahead);
6
+ dstr_catf(&log, "\tlookahead: %s (%d frames)\n", lookahead ? "true" : "false",
7
+ config->rcParams.lookaheadDepth);
8
dstr_catf(&log, "\taq: %s\n", enc->props.adaptive_quantization ? "true" : "false");
9
10
if (enc->props.split_encode) {
11
obs-studio-31.0.1.tar.xz/plugins/obs-websocket/CMakeLists.txt -> obs-studio-31.0.2.tar.xz/plugins/obs-websocket/CMakeLists.txt
Changed
9
1
2
cmake_minimum_required(VERSION 3.16...3.25)
3
4
-set(obs-websocket_VERSION 5.5.4)
5
+set(obs-websocket_VERSION 5.5.5)
6
set(OBS_WEBSOCKET_RPC_VERSION 1)
7
8
include(cmake/obs-websocket-api.cmake)
9
obs-studio-31.0.1.tar.xz/plugins/obs-websocket/src/utils/Json.cpp -> obs-studio-31.0.2.tar.xz/plugins/obs-websocket/src/utils/Json.cpp
Changed
32
1
2
3
bool Utils::Json::GetJsonFileContent(std::string fileName, json &content)
4
{
5
- std::ifstream f(fileName);
6
+ std::ifstream f(std::filesystem::u8path(fileName));
7
if (!f.is_open())
8
return false;
9
10
11
12
bool Utils::Json::SetJsonFileContent(std::string fileName, const json &content, bool makeDirs)
13
{
14
+ auto jsonFilePath = std::filesystem::u8path(fileName);
15
+
16
if (makeDirs) {
17
+ auto p = jsonFilePath.parent_path();
18
std::error_code ec;
19
- auto p = std::filesystem::path(fileName).parent_path();
20
if (!ec && !std::filesystem::exists(p, ec))
21
std::filesystem::create_directories(p, ec);
22
if (ec) {
23
24
}
25
}
26
27
- std::ofstream f(fileName);
28
+ std::ofstream f(jsonFilePath);
29
if (!f.is_open()) {
30
blog(LOG_ERROR, "Utils::Json::SetJsonFileContent Failed to open file `%s` for writing", fileName.c_str());
31
return false;
32
obs-studio-31.0.1.tar.xz/plugins/win-dshow/win-dshow.cpp -> obs-studio-31.0.2.tar.xz/plugins/win-dshow/win-dshow.cpp
Changed
14
1
2
return false;
3
}
4
5
+ if (!videoConfig.cx || !videoConfig.cy_abs) {
6
+ blog(LOG_ERROR, "%s: Frame width or height are zero (%" PRIu32 "x%" PRIu32 ")",
7
+ obs_source_get_name(source), videoConfig.cx, videoConfig.cy_abs);
8
+ return false;
9
+ }
10
+
11
DStr formatName = GetVideoFormatName(videoConfig.internalFormat);
12
13
double fps = 0.0;
14
obs-studio-31.0.1.tar.xz/shared/obs-scripting/obs-scripting-python-import.c -> obs-studio-31.0.2.tar.xz/shared/obs-scripting/obs-scripting-python-import.c
Changed
19
1
2
#define PATH_MAX MAX_PATH
3
#elif __APPLE__
4
#define VERSION_PATTERN "%d.%d"
5
-#define FILE_PATTERN "Python.framework/Versions/Current/lib/libpython%s.dylib"
6
+#define FILE_PATTERN "Python.framework/Versions/%s/lib/libpython%s.dylib"
7
#endif
8
9
#define PY_MAJOR_VERSION_MAX 3
10
11
12
struct dstr temp;
13
dstr_init(&temp);
14
- dstr_printf(&temp, FILE_PATTERN, cur_version);
15
+ dstr_printf(&temp, FILE_PATTERN, cur_version, cur_version);
16
17
int minor_version = PY_MINOR_VERSION_MAX;
18
do {
19
obs-studio-31.0.1.tar.xz/shared/obs-scripting/obs-scripting-python.c -> obs-studio-31.0.2.tar.xz/shared/obs-scripting/obs-scripting-python.c
Changed
11
1
2
if (python_path && *python_path) {
3
#ifdef __APPLE__
4
char tempPATH_MAX;
5
- snprintf(temp, sizeof(temp), "%s/Python.framework/Versions/Current", python_path);
6
+ snprintf(temp, sizeof(temp), "%s/Python.framework/Versions/%i.%i", python_path, python_version.major,
7
+ python_version.minor);
8
os_utf8_to_wcs(temp, 0, home_path, PATH_MAX);
9
Py_SetPythonHome(home_path);
10
#else
11