Changes of Revision 70

obs-studio.changes Changed
x
 
1
@@ -1,4 +1,35 @@
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
@@ -1,5 +1,5 @@
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
@@ -1,7 +1,7 @@
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
@@ -1,6 +1,6 @@
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
@@ -1911,6 +1911,18 @@
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
@@ -392,6 +392,12 @@
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
@@ -7548,6 +7554,29 @@
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
@@ -7558,12 +7587,11 @@
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
@@ -7582,3 +7610,15 @@
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
@@ -560,6 +560,9 @@
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
@@ -681,6 +684,8 @@
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
@@ -650,13 +650,15 @@
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
@@ -1677,7 +1679,7 @@
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
@@ -297,13 +297,7 @@
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
@@ -27,5 +27,5 @@
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
@@ -4,6 +4,20 @@
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
@@ -18,6 +32,7 @@
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
@@ -0,0 +1,20 @@
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
@@ -16,7 +16,7 @@
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
@@ -122,11 +122,11 @@
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
@@ -136,7 +136,7 @@
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
@@ -21,8 +21,10 @@
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
@@ -351,6 +353,63 @@
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
@@ -385,11 +444,24 @@
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
@@ -10,6 +10,14 @@
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
@@ -256,6 +264,7 @@
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
@@ -277,6 +286,8 @@
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
@@ -291,6 +302,7 @@
34
    }
35
 
36
    if (FAILED(hr)) {
37
+       warn("%s: Failed to get device: %08lX", __FUNCTION__, hr);
38
        goto fail;
39
    }
40
 
41
@@ -301,11 +313,13 @@
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
@@ -313,6 +327,7 @@
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
@@ -346,6 +361,7 @@
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
@@ -353,15 +369,19 @@
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
@@ -41,7 +41,7 @@
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
@@ -139,6 +139,8 @@
2
            if (!video->convert_textures[2])
3
                return false;
4
            break;
5
+       default:
6
+           break;
7
        }
8
 #ifdef _WIN32
9
    }
10
@@ -190,6 +192,8 @@
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
@@ -17,9 +17,9 @@
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
@@ -132,7 +132,7 @@
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
@@ -83,6 +83,26 @@
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,7 +2,7 @@
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
@@ -324,8 +324,7 @@
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
@@ -25,15 +25,16 @@
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
@@ -449,6 +449,8 @@
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
@@ -461,7 +463,8 @@
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
@@ -93,9 +93,6 @@
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
@@ -321,16 +318,12 @@
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
@@ -225,7 +225,8 @@
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
@@ -52,7 +52,7 @@
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