Changes of Revision 70
obs-studio.changes
Changed
x
1
2
-------------------------------------------------------------------
3
+Tue Oct 15 14:33:53 UTC 2019 - jimmy@boombatower.com
4
+
5
+- Update to version 24.0.3:
6
+ * obs-browser: Remove "monitor by default" flag
7
+ * Revert "libobs/audio-monitoring: Don't init until used"
8
+ * libobs-d3d11: Fix code styling
9
+ * libobs: Update version to 24.0.3
10
+ * libobs-d3d11: Fix calling convention of loaded func
11
+ * obs-browser: Only disable NetworkService on macOS
12
+ * libobs-d3d11: Use unordered_map for duplicator collection
13
+ * win-capture: Fix extra duplicator refs
14
+ * UI: Fix issue where multiview doesn't update
15
+ * libobs: Update version to 24.0.2
16
+ * libobs-d3d11: Don't set GPU priority on Intel adapters
17
+ * libobs/audio-monitoring: Add error logging
18
+ * libobs/audio-monitoring: Don't init until used
19
+ * obs-browser: Use older chromium network implementation
20
+ * libobs-d3d11: Set maximum GPU priority
21
+ * Exclude build dir from clang format
22
+ * UI, libobs: Fix compiler warnings
23
+ * Revert "UI: Remove FFZ from twitch integration"
24
+ * UI: Remove FFZ from twitch integration
25
+ * libobs-d3d11: Disable NV12 format support for WARP
26
+ * obs-ffmpeg: Remove unbuffered mode from media source
27
+ * obs-transitions: Fix stingers sometimes getting cut off
28
+ * obs-browser: Update version to 2.7.12
29
+ * obs-ffmpeg: Fix deadlock with nvenc lookahead
30
+ * UI: Fix path calculation for disk space check
31
+ * obs-ffmpeg: Do not enable hardware decoding by default
32
+
33
+-------------------------------------------------------------------
34
Sun Sep 22 21:04:42 UTC 2019 - jimmy@boombatower.com
35
36
- Update to version 24.0.1:
37
obs-studio.spec
Changed
8
1
2
Name: obs-studio
3
-Version: 24.0.1
4
+Version: 24.0.3
5
Release: 0
6
Summary: A recording/broadcasting program
7
Group: Productivity/Multimedia/Video/Editors and Convertors
8
_service
Changed
10
1
2
<services>
3
<service name="tar_scm" mode="disabled">
4
<param name="versionformat">@PARENT_TAG@</param>
5
- <param name="revision">refs/tags/24.0.1</param>
6
+ <param name="revision">refs/tags/24.0.3</param>
7
<param name="url">git://github.com/jp9000/obs-studio.git</param>
8
<param name="scm">git</param>
9
<param name="changesgenerate">enable</param>
10
_servicedata
Changed
9
1
2
<servicedata>
3
<service name="tar_scm">
4
<param name="url">git://github.com/jp9000/obs-studio.git</param>
5
- <param name="changesrevision">94570478b7d1f8c097a0bf8d8dabfb5613e4ab92</param>
6
+ <param name="changesrevision">d88a5a5a60bcdcbdde6d5dc54dc352ae8d431070</param>
7
</service>
8
</servicedata>
9
obs-studio-24.0.1.tar.xz/UI/obs-app.cpp -> obs-studio-24.0.3.tar.xz/UI/obs-app.cpp
Changed
20
1
2
NULL);
3
}
4
5
+ if (!!LookupPrivilegeValue(NULL, SE_INC_BASE_PRIORITY_NAME, &val)) {
6
+ tp.PrivilegeCount = 1;
7
+ tp.Privileges[0].Luid = val;
8
+ tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
9
+
10
+ if (!AdjustTokenPrivileges(token, false, &tp, sizeof(tp), NULL,
11
+ NULL)) {
12
+ blog(LOG_INFO, "Could not set privilege to "
13
+ "increase GPU priority");
14
+ }
15
+ }
16
+
17
CloseHandle(token);
18
}
19
#endif
20
obs-studio-24.0.1.tar.xz/UI/window-basic-main.cpp -> obs-studio-24.0.3.tar.xz/UI/window-basic-main.cpp
Changed
78
1
2
SLOT(PreviewDisabledMenu(const QPoint &)));
3
connect(ui->enablePreviewButton, SIGNAL(clicked()), this,
4
SLOT(TogglePreview()));
5
+
6
+ connect(ui->scenes->model(),
7
+ SIGNAL(rowsMoved(QModelIndex, int, int, QModelIndex, int)),
8
+ this,
9
+ SLOT(ScenesReordered(const QModelIndex &, int, int,
10
+ const QModelIndex &, int)));
11
}
12
13
static void SaveAudioDevice(const char *name, int channel, obs_data_t *parent,
14
15
#define MBYTES_LEFT_STOP_REC 50ULL
16
#define MAX_BYTES_LEFT (MBYTES_LEFT_STOP_REC * MBYTE)
17
18
+const char *OBSBasic::GetCurrentOutputPath()
19
+{
20
+ const char *path = nullptr;
21
+ const char *mode = config_get_string(Config(), "Output", "Mode");
22
+
23
+ if (strcmp(mode, "Advanced") == 0) {
24
+ const char *advanced_mode =
25
+ config_get_string(Config(), "AdvOut", "RecType");
26
+
27
+ if (strcmp(advanced_mode, "FFmpeg") == 0) {
28
+ path = config_get_string(Config(), "AdvOut",
29
+ "FFFilePath");
30
+ } else {
31
+ path = config_get_string(Config(), "AdvOut",
32
+ "RecFilePath");
33
+ }
34
+ } else {
35
+ path = config_get_string(Config(), "SimpleOutput", "FilePath");
36
+ }
37
+
38
+ return path;
39
+}
40
+
41
void OBSBasic::DiskSpaceMessage()
42
{
43
blog(LOG_ERROR, "Recording stopped because of low disk space");
44
45
46
bool OBSBasic::LowDiskSpace()
47
{
48
- const char *mode = config_get_string(Config(), "Output", "Mode");
49
- const char *path =
50
- strcmp(mode, "Advanced")
51
- ? config_get_string(Config(), "SimpleOutput",
52
- "FilePath")
53
- : config_get_string(Config(), "AdvOut", "RecFilePath");
54
+ const char *path;
55
+
56
+ path = GetCurrentOutputPath();
57
+ if (!path)
58
+ return false;
59
60
uint64_t num_bytes = os_get_free_disk_space(path);
61
62
63
DiskSpaceMessage();
64
}
65
}
66
+
67
+void OBSBasic::ScenesReordered(const QModelIndex &parent, int start, int end,
68
+ const QModelIndex &destination, int row)
69
+{
70
+ UNUSED_PARAMETER(parent);
71
+ UNUSED_PARAMETER(start);
72
+ UNUSED_PARAMETER(end);
73
+ UNUSED_PARAMETER(destination);
74
+ UNUSED_PARAMETER(row);
75
+
76
+ OBSProjector::UpdateMultiviewProjectors();
77
+}
78
obs-studio-24.0.1.tar.xz/UI/window-basic-main.hpp -> obs-studio-24.0.3.tar.xz/UI/window-basic-main.hpp
Changed
20
1
2
3
void CheckDiskSpaceRemaining();
4
5
+ void ScenesReordered(const QModelIndex &parent, int start, int end,
6
+ const QModelIndex &destination, int row);
7
+
8
private:
9
/* OBS Callbacks */
10
static void SceneReordered(void *data, calldata_t *params);
11
12
13
static OBSBasic *Get();
14
15
+ const char *GetCurrentOutputPath();
16
+
17
protected:
18
virtual void closeEvent(QCloseEvent *event) override;
19
virtual void changeEvent(QEvent *event) override;
20
obs-studio-24.0.1.tar.xz/UI/window-basic-preview.cpp -> obs-studio-24.0.3.tar.xz/UI/window-basic-preview.cpp
Changed
28
1
2
3
std::lock_guard<std::mutex> lock(selectMutex);
4
if (altDown || ctrlDown || shiftDown) {
5
- for (int i = 0; i < selectedItems.size(); i++) {
6
+ for (size_t i = 0; i < selectedItems.size();
7
+ i++) {
8
obs_sceneitem_select(selectedItems[i],
9
true);
10
}
11
}
12
13
- for (int i = 0; i < hoveredPreviewItems.size(); i++) {
14
+ for (size_t i = 0; i < hoveredPreviewItems.size();
15
+ i++) {
16
bool select = true;
17
obs_sceneitem_t *item = hoveredPreviewItems[i];
18
19
20
bool hovered = false;
21
{
22
std::lock_guard<std::mutex> lock(prev->selectMutex);
23
- for (int i = 0; i < prev->hoveredPreviewItems.size(); i++) {
24
+ for (size_t i = 0; i < prev->hoveredPreviewItems.size(); i++) {
25
if (prev->hoveredPreviewItems[i] == item) {
26
hovered = true;
27
break;
28
obs-studio-24.0.1.tar.xz/UI/window-basic-stats.cpp -> obs-studio-24.0.3.tar.xz/UI/window-basic-stats.cpp
Changed
16
1
2
3
/* ------------------ */
4
5
- const char *mode = config_get_string(main->Config(), "Output", "Mode");
6
- const char *path = strcmp(mode, "Advanced")
7
- ? config_get_string(main->Config(),
8
- "SimpleOutput",
9
- "FilePath")
10
- : config_get_string(main->Config(), "AdvOut",
11
- "RecFilePath");
12
+ const char *path = main->GetCurrentOutputPath();
13
14
#define MBYTE (1024ULL * 1024ULL)
15
#define GBYTE (1024ULL * 1024ULL * 1024ULL)
16
obs-studio-24.0.1.tar.xz/formatcode.sh -> obs-studio-24.0.3.tar.xz/formatcode.sh
Changed
10
1
2
CLANG_FORMAT=clang-format
3
fi
4
5
-find . -type d \( -path ./deps -o -path ./cmake -o -path ./plugins/decklink/win -o -path ./plugins/decklink/mac -o -path ./plugins/decklink/linux \) -prune -type f -o -name '*.h' -or -name '*.hpp' -or -name '*.m' -or -name '*.mm' -or -name '*.c' -or -name '*.cpp' \
6
-| xargs -I{} -P ${NPROC} ${CLANG_FORMAT} -i -style=file -fallback-style=none {}
7
\ No newline at end of file
8
+find . -type d \( -path ./deps -o -path ./cmake -o -path ./plugins/decklink/win -o -path ./plugins/decklink/mac -o -path ./plugins/decklink/linux -o -path ./build \) -prune -type f -o -name '*.h' -or -name '*.hpp' -or -name '*.m' -or -name '*.mm' -or -name '*.c' -or -name '*.cpp' \
9
+| xargs -I{} -P ${NPROC} ${CLANG_FORMAT} -i -style=file -fallback-style=none {}
10
obs-studio-24.0.1.tar.xz/libobs-d3d11/CMakeLists.txt -> obs-studio-24.0.3.tar.xz/libobs-d3d11/CMakeLists.txt
Changed
30
1
2
3
add_definitions(-DLIBOBS_EXPORTS)
4
5
+if(NOT DEFINED GPU_PRIORITY_VAL OR "${GPU_PRIORITY_VAL}" STREQUAL "" OR
6
+ "${GPU_PRIORITY_VAL}" STREQUAL "0")
7
+ set(USE_GPU_PRIORITY FALSE)
8
+ set(GPU_PRIORITY_VAL "0")
9
+else()
10
+ set(USE_GPU_PRIORITY TRUE)
11
+endif()
12
+
13
+configure_file(
14
+ "${CMAKE_CURRENT_SOURCE_DIR}/d3d11-config.h.in"
15
+ "${CMAKE_CURRENT_BINARY_DIR}/d3d11-config.h")
16
+
17
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
18
+
19
set(libobs-d3d11_SOURCES
20
d3d11-indexbuffer.cpp
21
d3d11-samplerstate.cpp
22
23
d3d11-zstencilbuffer.cpp)
24
25
set(libobs-d3d11_HEADERS
26
+ ${CMAKE_CURRENT_BINARY_DIR}/d3d11-config.h
27
d3d11-shaderprocessor.hpp
28
d3d11-subsystem.hpp)
29
30
obs-studio-24.0.3.tar.xz/libobs-d3d11/d3d11-config.h.in
Added
22
1
2
+#pragma once
3
+
4
+#ifndef TRUE
5
+#define TRUE 1
6
+#endif
7
+
8
+#ifndef ON
9
+#define ON 1
10
+#endif
11
+
12
+#ifndef FALSE
13
+#define FALSE 0
14
+#endif
15
+
16
+#ifndef OFF
17
+#define OFF 0
18
+#endif
19
+
20
+#define USE_GPU_PRIORITY @USE_GPU_PRIORITY@
21
+#define GPU_PRIORITY_VAL @GPU_PRIORITY_VAL@
22
obs-studio-24.0.1.tar.xz/libobs-d3d11/d3d11-duplicator.cpp -> obs-studio-24.0.3.tar.xz/libobs-d3d11/d3d11-duplicator.cpp
Changed
33
1
2
******************************************************************************/
3
4
#include "d3d11-subsystem.hpp"
5
-#include <map>
6
+#include <unordered_map>
7
8
static inline bool get_monitor(gs_device_t *device, int monitor_idx,
9
IDXGIOutput **dxgiOutput)
10
11
return true;
12
}
13
14
-static std::map<int, gs_duplicator *> instances;
15
+static std::unordered_map<int, gs_duplicator *> instances;
16
17
void reset_duplicators(void)
18
{
19
- for (auto &pair : instances) {
20
+ for (std::pair<const int, gs_duplicator *> &pair : instances) {
21
pair.second->updated = false;
22
}
23
}
24
25
{
26
gs_duplicator *duplicator = nullptr;
27
28
- auto it = instances.find(monitor_idx);
29
+ const auto it = instances.find(monitor_idx);
30
if (it != instances.end()) {
31
duplicator = it->second;
32
duplicator->refs++;
33
obs-studio-24.0.1.tar.xz/libobs-d3d11/d3d11-subsystem.cpp -> obs-studio-24.0.3.tar.xz/libobs-d3d11/d3d11-subsystem.cpp
Changed
101
1
2
#include <util/dstr.h>
3
#include <util/util.hpp>
4
#include <graphics/matrix3.h>
5
+#include <winternl.h>
6
#include <d3d9.h>
7
#include "d3d11-subsystem.hpp"
8
+#include "d3d11-config.h"
9
10
struct UnsupportedHWError : HRError {
11
inline UnsupportedHWError(const char *str, HRESULT hr)
12
13
return false;
14
}
15
16
+#if USE_GPU_PRIORITY
17
+static bool set_priority(ID3D11Device *device)
18
+{
19
+ typedef enum _D3DKMT_SCHEDULINGPRIORITYCLASS {
20
+ D3DKMT_SCHEDULINGPRIORITYCLASS_IDLE,
21
+ D3DKMT_SCHEDULINGPRIORITYCLASS_BELOW_NORMAL,
22
+ D3DKMT_SCHEDULINGPRIORITYCLASS_NORMAL,
23
+ D3DKMT_SCHEDULINGPRIORITYCLASS_ABOVE_NORMAL,
24
+ D3DKMT_SCHEDULINGPRIORITYCLASS_HIGH,
25
+ D3DKMT_SCHEDULINGPRIORITYCLASS_REALTIME
26
+ } D3DKMT_SCHEDULINGPRIORITYCLASS;
27
+
28
+ ComQIPtr<IDXGIDevice> dxgiDevice(device);
29
+ if (!dxgiDevice) {
30
+ blog(LOG_DEBUG, "%s: Failed to get IDXGIDevice", __FUNCTION__);
31
+ return false;
32
+ }
33
+
34
+ HMODULE gdi32 = GetModuleHandleW(L"GDI32");
35
+ if (!gdi32) {
36
+ blog(LOG_DEBUG, "%s: Failed to get GDI32", __FUNCTION__);
37
+ return false;
38
+ }
39
+
40
+ NTSTATUS(WINAPI * d3dkmt_spspc)(HANDLE, D3DKMT_SCHEDULINGPRIORITYCLASS);
41
+ d3dkmt_spspc = (decltype(d3dkmt_spspc))GetProcAddress(
42
+ gdi32, "D3DKMTSetProcessSchedulingPriorityClass");
43
+ if (!d3dkmt_spspc) {
44
+ blog(LOG_DEBUG, "%s: Failed to get d3dkmt_spspc", __FUNCTION__);
45
+ return false;
46
+ }
47
+
48
+ NTSTATUS status = d3dkmt_spspc(GetCurrentProcess(),
49
+ D3DKMT_SCHEDULINGPRIORITYCLASS_REALTIME);
50
+ if (status != 0) {
51
+ blog(LOG_DEBUG, "%s: Failed to set process priority class: %d",
52
+ __FUNCTION__, (int)status);
53
+ return false;
54
+ }
55
+
56
+ HRESULT hr = dxgiDevice->SetGPUThreadPriority(GPU_PRIORITY_VAL);
57
+ if (FAILED(hr)) {
58
+ blog(LOG_DEBUG, "%s: SetGPUThreadPriority failed",
59
+ __FUNCTION__);
60
+ return false;
61
+ }
62
+
63
+ blog(LOG_INFO, "D3D11 GPU priority setup success");
64
+ return true;
65
+}
66
+
67
+static bool is_intel(const wstring &name)
68
+{
69
+ return wstrstri(name.c_str(), L"intel") != nullptr;
70
+}
71
+#endif
72
+
73
void gs_device::InitDevice(uint32_t adapterIdx)
74
{
75
wstring adapterName;
76
77
blog(LOG_INFO, "D3D11 loaded successfully, feature level used: %x",
78
(unsigned int)levelUsed);
79
80
+ /* adjust gpu thread priority */
81
+#if USE_GPU_PRIORITY
82
+ if (!is_intel(adapterName) && !set_priority(device)) {
83
+ blog(LOG_INFO, "D3D11 GPU priority setup "
84
+ "failed (not admin?)");
85
+ }
86
+#endif
87
+
88
/* ---------------------------------------- */
89
/* check for nv12 texture output support */
90
91
nv12Supported = false;
92
93
+ /* WARP NV12 support is suspected to be buggy on older Windows */
94
+ if (desc.VendorId == 0x1414 && desc.DeviceId == 0x8c) {
95
+ return;
96
+ }
97
+
98
/* Intel CopyResource is very slow with NV12 */
99
if (desc.VendorId == 0x8086) {
100
return;
101
obs-studio-24.0.1.tar.xz/libobs/audio-monitoring/win32/wasapi-output.c -> obs-studio-24.0.3.tar.xz/libobs/audio-monitoring/win32/wasapi-output.c
Changed
91
1
2
EXTERN_C const GUID DECLSPEC_SELECTANY name = { \
3
l, w1, w2, {b1, b2, b3, b4, b5, b6, b7, b8}}
4
5
+#define do_log(level, format, ...) \
6
+ blog(level, "[audio monitoring: '%s'] " format, \
7
+ obs_source_get_name(monitor->source), ##__VA_ARGS__)
8
+
9
+#define warn(format, ...) do_log(LOG_WARNING, format, ##__VA_ARGS__)
10
+#define info(format, ...) do_log(LOG_INFO, format, ##__VA_ARGS__)
11
+#define debug(format, ...) do_log(LOG_DEBUG, format, ##__VA_ARGS__)
12
+
13
ACTUALLY_DEFINE_GUID(CLSID_MMDeviceEnumerator, 0xBCDE0395, 0xE52F, 0x467C, 0x8E,
14
0x3D, 0xC4, 0x57, 0x92, 0x91, 0x69, 0x2E);
15
ACTUALLY_DEFINE_GUID(IID_IMMDeviceEnumerator, 0xA95664D2, 0x9614, 0x4F35, 0xA7,
16
17
18
const char *id = obs->audio.monitoring_device_id;
19
if (!id) {
20
+ warn("%s: No device ID set", __FUNCTION__);
21
return false;
22
}
23
24
25
hr = CoCreateInstance(&CLSID_MMDeviceEnumerator, NULL, CLSCTX_ALL,
26
&IID_IMMDeviceEnumerator, (void **)&immde);
27
if (FAILED(hr)) {
28
+ warn("%s: Failed to create IMMDeviceEnumerator: %08lX",
29
+ __FUNCTION__, hr);
30
return false;
31
}
32
33
34
}
35
36
if (FAILED(hr)) {
37
+ warn("%s: Failed to get device: %08lX", __FUNCTION__, hr);
38
goto fail;
39
}
40
41
42
&IID_IAudioClient, CLSCTX_ALL,
43
NULL, (void **)&monitor->client);
44
if (FAILED(hr)) {
45
+ warn("%s: Failed to activate device: %08lX", __FUNCTION__, hr);
46
goto fail;
47
}
48
49
hr = monitor->client->lpVtbl->GetMixFormat(monitor->client, &wfex);
50
if (FAILED(hr)) {
51
+ warn("%s: Failed to get mix format: %08lX", __FUNCTION__, hr);
52
goto fail;
53
}
54
55
56
AUDCLNT_SHAREMODE_SHARED, 0,
57
10000000, 0, wfex, NULL);
58
if (FAILED(hr)) {
59
+ warn("%s: Failed to initialize: %08lX", __FUNCTION__, hr);
60
goto fail;
61
}
62
63
64
65
hr = monitor->client->lpVtbl->GetBufferSize(monitor->client, &frames);
66
if (FAILED(hr)) {
67
+ warn("%s: Failed to get buffer size: %08lX", __FUNCTION__, hr);
68
goto fail;
69
}
70
71
72
&IID_IAudioRenderClient,
73
(void **)&monitor->render);
74
if (FAILED(hr)) {
75
+ warn("%s: Failed to get IAudioRenderClient: %08lX",
76
+ __FUNCTION__, hr);
77
goto fail;
78
}
79
80
if (pthread_mutex_init(&monitor->playback_mutex, NULL) != 0) {
81
+ warn("%s: Failed to initialize mutex", __FUNCTION__);
82
goto fail;
83
}
84
85
hr = monitor->client->lpVtbl->Start(monitor->client);
86
if (FAILED(hr)) {
87
+ warn("%s: Failed to start audio: %08lX", __FUNCTION__, hr);
88
goto fail;
89
}
90
91
obs-studio-24.0.1.tar.xz/libobs/obs-config.h -> obs-studio-24.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) \
9
((major << 24) | (minor << 16) | patch)
10
obs-studio-24.0.1.tar.xz/libobs/obs.c -> obs-studio-24.0.3.tar.xz/libobs/obs.c
Changed
19
1
2
if (!video->convert_textures[2])
3
return false;
4
break;
5
+ default:
6
+ break;
7
}
8
#ifdef _WIN32
9
}
10
11
if (!video->copy_surfaces[i][2])
12
return false;
13
break;
14
+ default:
15
+ break;
16
}
17
18
return true;
19
obs-studio-24.0.1.tar.xz/plugins/obs-browser/README.md -> obs-studio-24.0.3.tar.xz/plugins/obs-browser/README.md
Changed
22
1
2
/**
3
* onVisibilityChange gets callbacks when the visibility of the browser source changes in OBS
4
*
5
- * @param {bool} visiblity - True -> visible, False -> hidden
6
+ * @param {bool} visibility - True -> visible, False -> hidden
7
*/
8
-window.obsstudio.onVisibilityChange = function(visiblity) {
9
+window.obsstudio.onVisibilityChange = function(visibility) {
10
11
};
12
```
13
14
* Open cef.sln from the 'build' subdirectory
15
16
#### Building
17
-* Build atleast libcef_dll_wrapper (as Release), the rest is optional and are just clients to test with
18
+* Build at least libcef_dll_wrapper (as Release), the rest is optional and are just clients to test with
19
20
### Building OBS and obs-browser
21
#### Follow the OBS build instructions
22
obs-studio-24.0.1.tar.xz/plugins/obs-browser/browser-app.cpp -> obs-studio-24.0.3.tar.xz/plugins/obs-browser/browser-app.cpp
Changed
28
1
2
3
command_line->AppendSwitch("enable-system-flash");
4
5
+ if (command_line->HasSwitch("disable-features")) {
6
+ // Don't override existing, as this can break OSR
7
+ std::string disableFeatures =
8
+ command_line->GetSwitchValue("disable-features");
9
+ disableFeatures += ",HardwareMediaKeyHandling"
10
+#ifdef __APPLE__
11
+ ",NetworkService"
12
+#endif
13
+ ;
14
+ command_line->AppendSwitchWithValue("disable-features",
15
+ disableFeatures);
16
+ } else {
17
+ command_line->AppendSwitchWithValue("disable-features",
18
+ "HardwareMediaKeyHandling"
19
+#ifdef __APPLE__
20
+ ",NetworkService"
21
+#endif
22
+ );
23
+ }
24
+
25
command_line->AppendSwitchWithValue("autoplay-policy",
26
"no-user-gesture-required");
27
}
28
obs-studio-24.0.1.tar.xz/plugins/obs-browser/browser-version.h -> obs-studio-24.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 7
5
-#define OBS_BROWSER_VERSION_PATCH 11
6
+#define OBS_BROWSER_VERSION_PATCH 15
7
8
#ifndef MAKE_SEMANTIC_VERSION
9
#define MAKE_SEMANTIC_VERSION(major, minor, patch) \
10
obs-studio-24.0.1.tar.xz/plugins/obs-browser/obs-browser-plugin.cpp -> obs-studio-24.0.3.tar.xz/plugins/obs-browser/obs-browser-plugin.cpp
Changed
11
1
2
OBS_SOURCE_AUDIO |
3
#endif
4
OBS_SOURCE_CUSTOM_DRAW | OBS_SOURCE_INTERACTION |
5
- OBS_SOURCE_DO_NOT_DUPLICATE |
6
- OBS_SOURCE_MONITOR_BY_DEFAULT;
7
+ OBS_SOURCE_DO_NOT_DUPLICATE;
8
info.get_properties = browser_source_get_properties;
9
info.get_defaults = browser_source_get_defaults;
10
11
obs-studio-24.0.1.tar.xz/plugins/obs-browser/obs-browser-source-audio.cpp -> obs-studio-24.0.3.tar.xz/plugins/obs-browser/obs-browser-source-audio.cpp
Changed
23
1
2
}
3
}
4
5
-static inline void mix_audio(float *p_out, float *p_in, size_t pos,
6
+static inline void mix_audio(float *__restrict p_out,
7
+ const float *__restrict p_in, size_t pos,
8
size_t count)
9
{
10
- register float *out = p_out;
11
- register float *in = p_in + pos;
12
- register float *end = in + count;
13
+ float *__restrict out = p_out;
14
+ const float *__restrict in = p_in + pos;
15
+ const float *__restrict end = in + count;
16
17
while (in < end)
18
- *(out++) += *(in++);
19
+ *out++ += *in++;
20
}
21
22
bool BrowserSource::AudioMix(uint64_t *ts_out,
23
obs-studio-24.0.1.tar.xz/plugins/obs-ffmpeg/jim-nvenc.c -> obs-studio-24.0.3.tar.xz/plugins/obs-ffmpeg/jim-nvenc.c
Changed
20
1
2
if (lookahead && nv_get_cap(enc, NV_ENC_CAPS_SUPPORT_LOOKAHEAD)) {
3
config->rcParams.lookaheadDepth = 8;
4
config->rcParams.enableLookahead = 1;
5
+ } else {
6
+ lookahead = false;
7
}
8
9
/* psycho aq */
10
11
/* rate control */
12
13
enc->can_change_bitrate =
14
- nv_get_cap(enc, NV_ENC_CAPS_SUPPORT_DYN_BITRATE_CHANGE);
15
+ nv_get_cap(enc, NV_ENC_CAPS_SUPPORT_DYN_BITRATE_CHANGE) &&
16
+ !lookahead;
17
18
config->rcParams.rateControlMode = twopass ? NV_ENC_PARAMS_RC_VBR_HQ
19
: NV_ENC_PARAMS_RC_VBR;
20
obs-studio-24.0.1.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-source.c -> obs-studio-24.0.3.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-source.c
Changed
28
1
2
obs_data_set_default_bool(settings, "looping", false);
3
obs_data_set_default_bool(settings, "clear_on_media_end", true);
4
obs_data_set_default_bool(settings, "restart_on_activate", true);
5
-#if defined(_WIN32)
6
- obs_data_set_default_bool(settings, "hw_decode", true);
7
-#endif
8
obs_data_set_default_int(settings, "buffering_mb", 2);
9
obs_data_set_default_int(settings, "speed_percent", 100);
10
}
11
12
s->is_looping = obs_data_get_bool(settings, "looping");
13
s->close_when_inactive =
14
obs_data_get_bool(settings, "close_when_inactive");
15
-
16
- obs_source_set_async_unbuffered(s->source, true);
17
} else {
18
input = (char *)obs_data_get_string(settings, "input");
19
input_format =
20
(char *)obs_data_get_string(settings, "input_format");
21
s->is_looping = false;
22
s->close_when_inactive = true;
23
-
24
- obs_source_set_async_unbuffered(s->source, false);
25
}
26
27
s->input = input ? bstrdup(input) : NULL;
28
obs-studio-24.0.1.tar.xz/plugins/obs-transitions/transition-stinger.c -> obs-studio-24.0.3.tar.xz/plugins/obs-transitions/transition-stinger.c
Changed
11
1
2
3
proc_handler_call(ph, "get_duration", &cd);
4
proc_handler_call(ph, "get_nb_frames", &cd);
5
- s->duration_ns = (uint64_t)calldata_int(&cd, "duration");
6
+ s->duration_ns =
7
+ (uint64_t)calldata_int(&cd, "duration") + 500000000ULL;
8
s->duration_frames = (uint64_t)calldata_int(&cd, "num_frames");
9
10
if (s->transition_point_is_frame)
11
obs-studio-24.0.1.tar.xz/plugins/win-capture/duplicator-monitor-capture.c -> obs-studio-24.0.3.tar.xz/plugins/win-capture/duplicator-monitor-capture.c
Changed
10
1
2
obs_enter_graphics();
3
4
gs_duplicator_destroy(capture->duplicator);
5
- capture->duplicator = gs_duplicator_create(capture->monitor);
6
+ capture->duplicator = NULL;
7
capture->width = 0;
8
capture->height = 0;
9
capture->x = 0;
10