Difference Between Revision 3 and Multimedia / obs-studio
obs-studio.changes
Changed
x
1
2
-------------------------------------------------------------------
3
+Fri Mar 28 22:26:17 UTC 2025 - packman@nordisch.org
4
+
5
+- Update to version 31.0.3:
6
+ * libobs: Update version to 31.0.3
7
+ * libobs: Fix duplicating scene with custom size
8
+ * obs-websocket: Update version to 5.5.6
9
+ * UI: Only emit frontend events for existing scene collection
10
+ * rtmp-services: Add "VRCDN - Live" service
11
+ * rtmp-services: Update Castr.io ingests
12
+ * rtmp-services: Remove defunct servers/services
13
+ * mac-avcapture: Clear memory when creating frame struct
14
+ * obs-browser: Update version to 2.24.6
15
+ * nv-filters: Silence initial load error for Blur
16
+ * nv-filters: Remove reset signal for Video effects
17
+ * nv-filters: Fix CudaStream used in Video effects
18
+ * nv-filters: Reallocate state when resetting AIGS filters
19
+ * nv-filters: Fix destruction of Background Blur effect
20
+ * nv-filters: Set max effective threshold to 0.95 for Background removal
21
+ * obs-nvenc: Fix incorrect CUDA array size allocation
22
+ * libobs: Reset reconnecting state when can_reconnect is false
23
+ * Revert "libobs: Do not allow reconnect if stop code is OBS_OUTPUT_INVALID_STREAM"
24
+ * CI: Use rebuilt CEF to avoid memory allocation crashes on macOS
25
+ * win-capture: Add FragPunk to compatibility list
26
+ * rtmp-services: Remove unresponsive servers
27
+
28
+-------------------------------------------------------------------
29
+Fri Mar 07 23:49:06 UTC 2025 - packman@nordisch.org
30
+
31
+- Update to version 31.0.2:
32
+ * libobs: Update version to 31.0.2
33
+ * mac-avcapture: Prevent race condition in source init/deinit
34
+ * win-dshow: Fix possible crash if frame width or height is zero
35
+ * obs-browser: Update version to 2.24.5
36
+ * obs-websocket: Update version to 5.5.5
37
+ * obs-nvenc: Fix lookahead depth value logging
38
+ * obs-nvenc: Correct max target quality for AV1
39
+ * cmake: Fix regexp to detect installed FFmpeg version
40
+ * nv-filters: Remove CUDA RT functions
41
+ * nv-filters: Update SDK version targeted
42
+ * obs-scripting: Fix macOS Homebrew Python loading
43
+
44
+-------------------------------------------------------------------
45
Mon Jan 20 09:57:57 UTC 2025 - darix <packman@nordisch.org>
46
47
- make nvenc handling more readable
48
obs-studio.spec
Changed
10
1
2
%endif
3
4
Name: obs-studio
5
-Version: 31.0.1
6
+Version: 31.0.3
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.3</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">fcd1910bf5116b69404a6ecdda6efedd1d00ebdf</param>
7
</service>
8
</servicedata>
9
\ No newline at end of file
10
obs-studio-31.0.1.tar.xz/UI/window-basic-main.cpp -> obs-studio-31.0.3.tar.xz/UI/window-basic-main.cpp
Changed
20
1
2
disableSaving++;
3
}
4
5
- disableSaving--;
6
if (foundCollection || configuredCollection) {
7
+ disableSaving--;
8
OnEvent(OBS_FRONTEND_EVENT_SCENE_COLLECTION_LIST_CHANGED);
9
OnEvent(OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGED);
10
+ OnEvent(OBS_FRONTEND_EVENT_SCENE_CHANGED);
11
+ OnEvent(OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED);
12
+ disableSaving++;
13
}
14
- OnEvent(OBS_FRONTEND_EVENT_SCENE_CHANGED);
15
- OnEvent(OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED);
16
- disableSaving++;
17
}
18
19
loaded = true;
20
obs-studio-31.0.1.tar.xz/build-aux/modules/99-cef.json -> obs-studio-31.0.3.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.3.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": "d494f1a18746ae65846853c844c1dcf5efa2348e0f422bcbd97059a536f24496",
11
+ "macos-arm64": "1bb59dbb759150e170796f641a4a84c59c0dea4ffef89477e9d811520af5d15a",
12
+ "ubuntu-x86_64": "cb7225c7a937ac4cdc9c41700061f45cccc640d696902357782e57f8250bf43a",
13
+ "ubuntu-aarch64": "f92df7f076bdc8cac2e3c77e27be418008b7168723201cb73fdbc2f6d91bc778",
14
+ "windows-x64": "922efbda1f2f8be9e5b2754d878a14d90afc81f04e94fc9101a7513e2b5cecc1"
15
+ },
16
+ "revision": {
17
+ "macos-x86_64": 3,
18
+ "macos-arm64": 3,
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.3.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.3.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 3
7
8
#define MAKE_SEMANTIC_VERSION(major, minor, patch) ((major << 24) | (minor << 16) | patch)
9
10
obs-studio-31.0.1.tar.xz/libobs/obs-output.c -> obs-studio-31.0.3.tar.xz/libobs/obs-output.c
Changed
21
1
2
{
3
bool reconnect_active = output->reconnect_retry_max != 0;
4
5
- return code != OBS_OUTPUT_INVALID_STREAM && ((reconnecting(output) && code != OBS_OUTPUT_SUCCESS) ||
6
- (reconnect_active && code == OBS_OUTPUT_DISCONNECTED));
7
+ return (reconnecting(output) && code != OBS_OUTPUT_SUCCESS) ||
8
+ (reconnect_active && code == OBS_OUTPUT_DISCONNECTED);
9
}
10
11
void obs_output_signal_stop(obs_output_t *output, int code)
12
13
} else {
14
if (delay_active(output))
15
os_atomic_set_bool(&output->delay_active, false);
16
+ if (reconnecting(output))
17
+ os_atomic_set_bool(&output->reconnecting, false);
18
obs_output_end_data_capture(output);
19
}
20
}
21
obs-studio-31.0.1.tar.xz/libobs/obs-scene.c -> obs-studio-31.0.3.tar.xz/libobs/obs-scene.c
Changed
16
1
2
new_scene = make_private ? create_private_id(scene->source->info.id, name)
3
: create_id(scene->source->info.id, name);
4
5
+ new_scene->is_group = scene->is_group;
6
+ new_scene->custom_size = scene->custom_size;
7
+ new_scene->cx = scene->cx;
8
+ new_scene->cy = scene->cy;
9
+ new_scene->absolute_coordinates = scene->absolute_coordinates;
10
+ new_scene->last_width = scene->last_width;
11
+ new_scene->last_height = scene->last_height;
12
+
13
obs_source_copy_filters(new_scene->source, scene->source);
14
15
obs_data_apply(new_scene->source->private_settings, scene->source->private_settings);
16
obs-studio-31.0.1.tar.xz/plugins/mac-avcapture/plugin-main.m -> obs-studio-31.0.3.tar.xz/plugins/mac-avcapture/plugin-main.m
Changed
69
1
2
capture_data->isFastPath = false;
3
capture_data->settings = settings;
4
capture_data->source = source;
5
- capture_data->videoFrame = bmalloc(sizeof(OBSAVCaptureVideoFrame));
6
- capture_data->audioFrame = bmalloc(sizeof(OBSAVCaptureAudioFrame));
7
+ capture_data->videoFrame = bzalloc(sizeof(OBSAVCaptureVideoFrame));
8
+ capture_data->audioFrame = bzalloc(sizeof(OBSAVCaptureAudioFrame));
9
10
OBSAVCapture *capture = OBSAVCapture alloc initWithCaptureInfo:capture_data;
11
12
13
if (!capture) {
14
return;
15
}
16
+ /// It is possible that the source's serial queue is still creating this source, so perform destruction
17
+ /// synchronously on that queue to ensure the source is fully initialized before being destroyed.
18
+ dispatch_sync(capture.sessionQueue, ^{
19
+ OBSAVCaptureInfo *capture_info = capture.captureInfo;
20
21
- OBSAVCaptureInfo *capture_info = capture.captureInfo;
22
-
23
- capture stopCaptureSession;
24
- capture.deviceInput.device unlockForConfiguration;
25
+ capture stopCaptureSession;
26
+ capture.deviceInput.device unlockForConfiguration;
27
28
- if (capture_info->isFastPath) {
29
- pthread_mutex_destroy(&capture_info->mutex);
30
- }
31
+ if (capture_info->isFastPath) {
32
+ pthread_mutex_destroy(&capture_info->mutex);
33
+ }
34
35
- if (capture_info->videoFrame) {
36
- bfree(capture_info->videoFrame);
37
- capture_info->videoFrame = NULL;
38
- }
39
+ if (capture_info->videoFrame) {
40
+ bfree(capture_info->videoFrame);
41
+ capture_info->videoFrame = NULL;
42
+ }
43
44
- if (capture_info->audioFrame) {
45
- bfree(capture_info->audioFrame);
46
- capture_info->audioFrame = NULL;
47
- }
48
+ if (capture_info->audioFrame) {
49
+ bfree(capture_info->audioFrame);
50
+ capture_info->audioFrame = NULL;
51
+ }
52
53
- if (capture_info->sampleBufferDescription) {
54
- capture_info->sampleBufferDescription = NULL;
55
- }
56
+ if (capture_info->sampleBufferDescription) {
57
+ capture_info->sampleBufferDescription = NULL;
58
+ }
59
60
- bfree(capture_info);
61
+ bfree(capture_info);
62
63
- CFBridgingRelease((__bridge CFTypeRef _Nullable)(capture));
64
+ CFBridgingRelease((__bridge CFTypeRef _Nullable)(capture));
65
+ });
66
}
67
68
#pragma mark - OBS Module API
69
obs-studio-31.0.1.tar.xz/plugins/nv-filters/nv_sdk_versions.h -> obs-studio-31.0.3.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.3.tar.xz/plugins/nv-filters/nvidia-videofx-filter.c
Changed
133
1
2
bool processed_frame;
3
bool target_valid;
4
bool got_new_frame;
5
- signal_handler_t *handler;
6
7
/* RTX SDK vars */
8
NvVFX_Handle handle;
9
10
if (filter->strength != strength) {
11
filter->strength = strength;
12
vfxErr = NvVFX_SetF32(filter->handle_blur, NVVFX_STRENGTH, filter->strength);
13
+ vfxErr = NvVFX_Load(filter->handle_blur);
14
}
15
- vfxErr = NvVFX_Load(filter->handle_blur);
16
- if (NVCV_SUCCESS != vfxErr)
17
- error("Error loading blur FX %i", vfxErr);
18
}
19
}
20
21
22
NvCVImage_Destroy(filter->blur_dst_img);
23
}
24
}
25
- if (filter->stream)
26
- NvVFX_CudaStreamDestroy(filter->stream);
27
- if (filter->stream_blur)
28
- NvVFX_CudaStreamDestroy(filter->stream_blur);
29
30
if (filter->handle) {
31
if (filter->stateObjectHandle) {
32
33
if (filter->handle_blur) {
34
NvVFX_DestroyEffect(filter->handle_blur);
35
}
36
+ if (filter->stream)
37
+ NvVFX_CudaStreamDestroy(filter->stream);
38
+ if (filter->stream_blur)
39
+ NvVFX_CudaStreamDestroy(filter->stream_blur);
40
41
if (filter->effect) {
42
obs_enter_graphics();
43
44
filter->height = 0;
45
filter->initial_render = false;
46
os_atomic_set_bool(&filter->processing_stop, false);
47
- filter->handler = NULL;
48
filter->processing_interval = 1;
49
filter->processing_counter = 0;
50
// set nvvfx_fx_id
51
52
53
os_atomic_set_bool(&filter->processing_stop, true);
54
// A first destroy
55
- if (filter->stream) {
56
- NvVFX_CudaStreamDestroy(filter->stream);
57
- }
58
- if (filter->stream_blur) {
59
- NvVFX_CudaStreamDestroy(filter->stream_blur);
60
- }
61
if (filter->handle) {
62
if (filter->stateObjectHandle) {
63
NvVFX_DeallocateState(filter->handle, filter->stateObjectHandle);
64
65
if (filter->handle_blur) {
66
NvVFX_DestroyEffect(filter->handle_blur);
67
}
68
+ if (filter->stream) {
69
+ NvVFX_CudaStreamDestroy(filter->stream);
70
+ }
71
+ if (filter->stream_blur) {
72
+ NvVFX_CudaStreamDestroy(filter->stream_blur);
73
+ }
74
// B recreate
75
/* 1. Create FX */
76
/* 2. Set models path & initialize CudaStream */
77
78
vfxErr = NvVFX_Load(filter->handle);
79
if (NVCV_SUCCESS != vfxErr)
80
error("Error loading NVIDIA Video FX %i", vfxErr);
81
- vfxErr = NvVFX_ResetState(filter->handle, filter->stateObjectHandle);
82
+ // reallocate state object
83
+ vfxErr = NvVFX_AllocateState(filter->handle, &filter->stateObjectHandle);
84
+ vfxErr = NvVFX_SetStateObjectHandleArray(filter->handle, NVVFX_STATE, &filter->stateObjectHandle);
85
}
86
if (filter->filter_id != S_FX_AIGS) {
87
vfxErr = NvVFX_SetF32(filter->handle_blur, NVVFX_STRENGTH, filter->strength);
88
89
}
90
91
/* 2. Convert to BGR. */
92
- vfxErr = NvCVImage_Transfer(filter->src_img, filter->BGR_src_img, 1.0f, filter->stream_blur, filter->stage);
93
+ vfxErr = NvCVImage_Transfer(filter->src_img, filter->BGR_src_img, 1.0f, process_stream, filter->stage);
94
if (vfxErr != NVCV_SUCCESS) {
95
const char *errString = NvCV_GetErrorStringFromCode(vfxErr);
96
error("Error converting src to BGR img; error %i: %s", vfxErr, errString);
97
98
gs_effect_set_texture_srgb(filter->blur_param, filter->blur_texture);
99
} else {
100
gs_effect_set_texture(filter->mask_param, filter->alpha_texture);
101
- gs_effect_set_float(filter->threshold_param, filter->threshold);
102
+ gs_effect_set_float(filter->threshold_param, min(filter->threshold, 0.95f));
103
}
104
gs_effect_set_texture_srgb(filter->image_param, gs_texrender_get_texture(filter->render));
105
106
107
return;
108
}
109
110
- if (parent && !filter->handler) {
111
- filter->handler = obs_source_get_signal_handler(parent);
112
- signal_handler_connect(filter->handler, "update", nvvfx_filter_reset, filter);
113
- }
114
-
115
/* 1. Render to retrieve texture. */
116
if (!filter->render) {
117
obs_source_skip_video_filter(filter->context);
118
119
LOAD_SYM(NvCVImage_FromD3DColorSpace);
120
#undef LOAD_SYM
121
122
-#define LOAD_SYM(sym) LOAD_SYM_FROM_LIB(sym, nv_cudart, "cudart64_110.dll")
123
- LOAD_SYM(cudaMalloc);
124
- LOAD_SYM(cudaStreamSynchronize);
125
- LOAD_SYM(cudaFree);
126
- LOAD_SYM(cudaMemcpy);
127
- LOAD_SYM(cudaMemsetAsync);
128
-#undef LOAD_SYM
129
-
130
#define LOAD_SYM(sym) LOAD_SYM_FROM_LIB2(sym, nv_videofx, "NVVideoEffects.dll")
131
LOAD_SYM(NvVFX_SetStateObjectHandleArray);
132
LOAD_SYM(NvVFX_AllocateState);
133
obs-studio-31.0.1.tar.xz/plugins/nv-filters/nvvfx-load.h -> obs-studio-31.0.3.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.3.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.3.tar.xz/plugins/obs-browser/browser-client.cpp
Changed
25
1
2
return nullptr;
3
}
4
5
+void BrowserClient::OnRenderProcessTerminated(CefRefPtr<CefBrowser>, TerminationStatus, int,
6
+ const CefString &error_string)
7
+{
8
+ if (!valid())
9
+ return;
10
+
11
+ std::string str_text = error_string;
12
+
13
+ const char *sourceName = "<unknown>";
14
+
15
+ if (bs && bs->source)
16
+ sourceName = obs_source_get_name(bs->source);
17
+
18
+ blog(LOG_ERROR, "obs-browser: '%s' Webpage has crashed unexpectedly! Reason: '%s'", sourceName,
19
+ str_text.c_str());
20
+}
21
+
22
CefResourceRequestHandler::ReturnValue BrowserClient::OnBeforeResourceLoad(CefRefPtr<CefBrowser>, CefRefPtr<CefFrame>,
23
CefRefPtr<CefRequest>,
24
CefRefPtr<CefCallback>)
25
obs-studio-31.0.1.tar.xz/plugins/obs-browser/browser-client.hpp -> obs-studio-31.0.3.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.3.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 6
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.3.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.3.tar.xz/plugins/obs-browser/obs-browser-plugin.cpp
Changed
50
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
40
BrowserShutdown();
41
#else
42
if (manager_thread.joinable()) {
43
- while (!QueueCEFTask(() { CefQuitMessageLoop(); }))
44
- os_sleep_ms(5);
45
+ if (!QueueCEFTask(() { CefQuitMessageLoop(); }))
46
+ blog(LOG_DEBUG, "obs-browser: Failed to post CefQuit task to loop");
47
48
manager_thread.join();
49
}
50
obs-studio-31.0.1.tar.xz/plugins/obs-browser/panel/browser-panel-client.cpp -> obs-studio-31.0.3.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-cuda.c -> obs-studio-31.0.3.tar.xz/plugins/obs-nvenc/nvenc-cuda.c
Changed
12
1
2
desc.Height += enc->cy / 2;
3
break;
4
case NV_ENC_BUFFER_FORMAT_YUV420_10BIT:
5
- desc.Format = CU_AD_FORMAT_UNSIGNED_INT16;
6
+ desc.Format = CU_AD_FORMAT_UNSIGNED_INT16; // 2 bytes per element
7
desc.Height += enc->cy / 2;
8
- desc.NumChannels = 2; // number of bytes per element
9
break;
10
case NV_ENC_BUFFER_FORMAT_YUV444:
11
desc.Format = CU_AD_FORMAT_UNSIGNED_INT8;
12
obs-studio-31.0.1.tar.xz/plugins/obs-nvenc/nvenc-properties.c -> obs-studio-31.0.3.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.3.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.3.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.6)
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/eventhandler/EventHandler_Scenes.cpp -> obs-studio-31.0.3.tar.xz/plugins/obs-websocket/src/eventhandler/EventHandler_Scenes.cpp
Changed
11
1
2
{
3
OBSSourceAutoRelease currentScene = obs_frontend_get_current_scene();
4
5
+ if (!currentScene)
6
+ return;
7
+
8
json eventData;
9
eventData"sceneName" = obs_source_get_name(currentScene);
10
eventData"sceneUuid" = obs_source_get_uuid(currentScene);
11
obs-studio-31.0.1.tar.xz/plugins/obs-websocket/src/utils/Json.cpp -> obs-studio-31.0.3.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/rtmp-services/data/package.json -> obs-studio-31.0.3.tar.xz/plugins/rtmp-services/data/package.json
Changed
15
1
2
{
3
"$schema": "schema/package-schema.json",
4
"url": "https://obsproject.com/obs2_update/rtmp-services/v5",
5
- "version": 264,
6
+ "version": 268,
7
"files":
8
{
9
"name": "services.json",
10
- "version": 264
11
+ "version": 268
12
}
13
14
}
15
obs-studio-31.0.1.tar.xz/plugins/rtmp-services/data/services.json -> obs-studio-31.0.3.tar.xz/plugins/rtmp-services/data/services.json
Changed
151
1
2
"url": "rtmp://qc.castr.io/static"
3
},
4
{
5
- "name": "SA (Sao Paulo, BR)",
6
+ "name": "Mexico",
7
+ "url": "rtmp://mexico.castr.io/static"
8
+ },
9
+ {
10
+ "name": "Sao Paulo, BR",
11
"url": "rtmp://br.castr.io/static"
12
},
13
{
14
+ "name": "Colombia",
15
+ "url": "rtmp://bogota.castr.io/static"
16
+ },
17
+ {
18
+ "name": "Santiago, Chile",
19
+ "url": "rtmp://santiago.castr.io/static"
20
+ },
21
+ {
22
+ "name": "Istanbul, TR",
23
+ "url": "rtmp://istanbul.castr.io/static"
24
+ },
25
+ {
26
+ "name": "Tel Aviv, IL",
27
+ "url": "rtmp://telaviv.castr.io/static"
28
+ },
29
+ {
30
"name": "EU-West (London, UK)",
31
"url": "rtmp://uk.castr.io/static"
32
},
33
{
34
+ "name": "EU-West (Paris, FR)",
35
+ "url": "rtmp://paris.castr.io/static"
36
+ },
37
+ {
38
+ "name": "EU-West (Madrid, ES)",
39
+ "url": "rtmp://madrid.castr.io/static"
40
+ },
41
+ {
42
"name": "EU-Central (Frankfurt, DE)",
43
"url": "rtmp://fr.castr.io/static"
44
},
45
{
46
+ "name": "EU-Central (Milan, IT)",
47
+ "url": "rtmp://milan.castr.io/static"
48
+ },
49
+ {
50
+ "name": "EU-North (Stockholm, SE)",
51
+ "url": "rtmp://stockholm.castr.io/static"
52
+ },
53
+ {
54
+ "name": "EU-North (Copenhagen, DK)",
55
+ "url": "rtmp://copenhagen.castr.io/static"
56
+ },
57
+ {
58
"name": "Russia (Moscow)",
59
"url": "rtmp://ru.castr.io/static"
60
},
61
62
"url": "rtmp://sg.castr.io/static"
63
},
64
{
65
+ "name": "Asia (Hong Kong, HK)",
66
+ "url": "rtmp://hongkong.castr.io/static"
67
+ },
68
+ {
69
"name": "Asia (India)",
70
"url": "rtmp://in.castr.io/static"
71
},
72
73
"url": "rtmp://au.castr.io/static"
74
},
75
{
76
+ "name": "UAE (Dubai)",
77
+ "url": "rtmp://dubai.castr.io/static"
78
+ },
79
+ {
80
+ "name": "Africa (Johannesburg, ZA)",
81
+ "url": "rtmp://southafrica.castr.io/static"
82
+ },
83
+ {
84
+ "name": "Africa (Lagos, NG)",
85
+ "url": "rtmp://lagos.castr.io/static"
86
+ },
87
+ {
88
"name": "US Central",
89
"url": "rtmp://us-central.castr.io/static"
90
},
91
92
{
93
"name": "CloudBeta",
94
"url": "rtmp://cloudbetastreaming.onlyfans.com/live"
95
- },
96
- {
97
- "name": "Backup (USA)",
98
- "url": "rtmp://route0.onlyfans.com/live"
99
- },
100
- {
101
- "name": "Backup (Europe)",
102
- "url": "rtmp://route0-dc2.onlyfans.com/live"
103
}
104
,
105
"recommended": {
106
107
"url": "rtmp://live-us-lax-stream.shareplay.tv"
108
},
109
{
110
- "name": "Seattle, Washington, USA",
111
- "url": "rtmp://live-us-sea-stream.shareplay.tv"
112
- },
113
- {
114
- "name": "Paris, France",
115
- "url": "rtmp://live-fr-par-stream.shareplay.tv"
116
- },
117
- {
118
"name": "Milan, Italy",
119
"url": "rtmp://live-it-mil-stream.shareplay.tv"
120
},
121
{
122
- "name": "Sydney, Australia",
123
- "url": "rtmp://live-au-syd-stream.shareplay.tv"
124
- },
125
- {
126
"name": "Toronto, Canada",
127
"url": "rtmp://live-ca-yyz-stream.shareplay.tv"
128
},
129
130
"supported video codecs":
131
"h264"
132
133
+ },
134
+ {
135
+ "name": "VRCDN - Live",
136
+ "more_info_link": "https://vrcdn.live",
137
+ "servers":
138
+ {
139
+ "name": "Automatic",
140
+ "url": "rtmp://ingest.vrcdn.live/live"
141
+ }
142
+ ,
143
+ "supported video codecs": "h264",
144
+ "recommended": {
145
+ "keyint": 1,
146
+ "max video bitrate": 6000
147
+ }
148
}
149
150
}
151
obs-studio-31.0.1.tar.xz/plugins/win-capture/data/compatibility.json -> obs-studio-31.0.3.tar.xz/plugins/win-capture/data/compatibility.json
Changed
22
1
2
"window_capture_wgc": false,
3
"message": "The Bazaar may require OBS to be run as admin to use Game Capture.",
4
"url": "https://obsproject.com/kb/game-capture-troubleshooting"
5
+ },
6
+ {
7
+ "name": "FragPunk",
8
+ "translation_key": "Compatibility.GameCapture.Admin",
9
+ "severity": 1,
10
+ "executable": "FragPunk.exe",
11
+ "window_class": "",
12
+ "window_title": "",
13
+ "match_flags": 1,
14
+ "game_capture": true,
15
+ "window_capture": false,
16
+ "window_capture_wgc": false,
17
+ "message": "FragPunk may require OBS to be run as admin to use Game Capture.",
18
+ "url": "https://obsproject.com/kb/game-capture-troubleshooting"
19
}
20
21
}
22
obs-studio-31.0.1.tar.xz/plugins/win-capture/data/package.json -> obs-studio-31.0.3.tar.xz/plugins/win-capture/data/package.json
Changed
15
1
2
{
3
"$schema": "schema/package-schema.json",
4
"url": "https://obsproject.com/obs2_update/win-capture/v1",
5
- "version": 6,
6
+ "version": 7,
7
"files":
8
{
9
"name": "compatibility.json",
10
- "version": 6
11
+ "version": 7
12
}
13
14
}
15
obs-studio-31.0.1.tar.xz/plugins/win-dshow/win-dshow.cpp -> obs-studio-31.0.3.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.3.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.3.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