Changes of Revision 78

obs-studio.changes Changed
x
 
1
@@ -1,4 +1,82 @@
2
 -------------------------------------------------------------------
3
+Mon Apr 27 18:55:30 UTC 2020 - jimmy@boombatower.com
4
+
5
+- Update to version 25.0.8:
6
+  * Revert "Merge pull request #1786 from brittneysclark/qsv_texture_based_encoding"
7
+  * libobs: Update version to 25.0.8
8
+  * CI: Update macOS deps to fix lua
9
+  * obs-ffmpeg: Add error message for non-zero GPU
10
+  * obs-ffmpeg: Add localization for NVENC error messages
11
+  * libobs: Clear last error on encoder shutdown
12
+  * obs-ffmpeg: Preserve error message from new NVENC
13
+  * obs-ffmpeg: Log why new NVENC might not be used
14
+  * UI: Remove requirement for replay buffer hotkey
15
+  * obs-filters: Add a user label to the LUT filter
16
+  * CI: Fix Azure Pipelines macOS runs
17
+  * obs-browser, obs-vst: Fix formatting
18
+  * UI: Update OSX to macOS in English translation
19
+  * rtmp-services: Add VirtWish service
20
+  * rtmp-services: Change Stripchat streaming service
21
+  * UI: Add white icons for dock titles
22
+  * Revert "UI: Remove unnecessary global variables"
23
+  * libobs-opengl: Fix viewport flip
24
+  * CI: Add main Github Actions workflow for branch pushes and PRs
25
+  * UI: Remove unnecessary global variables
26
+  * UI: Adjust a few margins
27
+  * obs-vst: Fix formatting
28
+  * obs-browser: Fix formatting
29
+  * UI: Remove all scenes in ClearSceneData
30
+  * libobs: Don't save removed sources
31
+  * rtmp-services: Update ChathostessModels service (#2745)
32
+  * obs-qsv11: Enable QSV texture-based encoding
33
+  * libobs: Fix plugin folder search path case on macOS
34
+  * UI: Add status icons for recording and streaming
35
+  * CI: Add freetype dep on osx
36
+  * rtmp-services: Add WASDTV (#2697)
37
+  * docs/sphinx: Add Property Grouping
38
+  * libobs: Update version to 25.0.6 (mac release)
39
+  * obs-vst: Don't allow widget close on macOS
40
+  * CI: Add qt5-xml package for FreeBSD build task
41
+  * linux-jack: Fix conversion from channels to speaker layout
42
+  * obs-ffmpeg: Fix media source not closing file when inactive
43
+  * UI: Refuse drop operations from our own widgets
44
+  * UI: Fix projector on other than primary display
45
+  * linux-v4l2: Fix build with Clang 10.0
46
+  * obs-ffmpeg: Add error text for NVENC AVERROR_EXTERNAL
47
+  * obs-ffmpeg: Use new encoder error handling functions
48
+  * libobs: Add support functions for encoder error handling
49
+  * mac-syphon: Move the syphon plugin over to ARC
50
+  * CI: Rewrite new deps paths in obs-ouputs.so
51
+  * CI: Move clang format check into a seperate github workflow
52
+  * UI: Fix warning when compiling with Clang 10
53
+  * UI: Properly apply hide cursor on fullscreen projectors
54
+  * rtmp-services: Add niconico
55
+  * rtmp-services: Update castr.io rtmp ingest list
56
+  * UI: Fix missing includes
57
+  * libobs: Update version to 25.0.5 (mac release)
58
+  * libobs-opengl: Fix atan2 HLSL->GLSL transpile
59
+  * libobs-opengl: Add sincos to HLSL->GLSL transpile
60
+  * obs-browser: Fix formatting
61
+  * libobs/util: FreeBSD/Dragonfly exec path support
62
+  * UI: Log global audio devices and their filters
63
+  * CI: Update dependencies on macOS
64
+  * mac-capture: update owner_pid in `update_window`
65
+  * mac-capture: Use int in place of NSNumber for owner_pid
66
+  * deps: lzma: also use .note.GNU-stack on FreeBSD
67
+  * mac-capture: Only find window by window id when owner name and pid match
68
+  * mac-capture: Use window id to identify windows on MacOS
69
+  * plugins: Build ALSA plugin for FreeBSD
70
+  * UI: Fix previewLabel styling
71
+  * obs-outputs: Fix warnings WITH_RTMPS=OFF
72
+  * UI: Require selected source for Transform shortcut
73
+  * CI: Update macOS dependencies
74
+  * rtmp-services: Fix memory leak when update rtmp-custom-service.
75
+  * CI: Make processor count consistent
76
+  * rtmp-services: Update Bongacams servers and settings
77
+  * UI: Don't open Studio Mode's Program label in a window
78
+  * CMake: Build Windows modules with file descriptors
79
+
80
+-------------------------------------------------------------------
81
 Sun Apr 05 21:29:12 UTC 2020 - jimmy@boombatower.com
82
 
83
 - Update to version 25.0.4:
84
obs-studio.spec Changed
8
 
1
@@ -1,5 +1,5 @@
2
 Name:           obs-studio
3
-Version:        25.0.4
4
+Version:        25.0.8
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/25.0.4</param>
6
+    <param name="revision">refs/tags/25.0.8</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">47058d9b6999f14bb5e2c76f7ae449efa2ca1c13</param>
6
+    <param name="changesrevision">4c0d4a1d8e1433897dcbbff6084b0f38a421f231</param>
7
   </service>
8
 </servicedata>
9
obs-studio-25.0.4.tar.xz/.cirrus.yml -> obs-studio-25.0.8.tar.xz/.cirrus.yml Changed
10
 
1
@@ -13,7 +13,7 @@
2
     freetype2 jackit jansson luajit mbedtls pulseaudio speexdsp
3
     libsysinfo libudev-devd libv4l libx264 cmake ninja
4
     mesa-libs lua52 pkgconf
5
-    qt5-svg qt5-qmake qt5-buildtools qt5-x11extras
6
+    qt5-svg qt5-qmake qt5-buildtools qt5-x11extras qt5-xml
7
   script:
8
   - mkdir build
9
   - cd build
10
obs-studio-25.0.8.tar.xz/.github/workflows Added
2
 
1
+(directory)
2
obs-studio-25.0.8.tar.xz/.github/workflows/clang-format.yml Added
50
 
1
@@ -0,0 +1,48 @@
2
+name: Clang Format Check
3
+
4
+on: [push, pull_request]
5
+jobs:
6
+  ubuntu64:
7
+    runs-on: ubuntu-latest
8
+    steps:
9
+      - name: Checkout
10
+        uses: actions/checkout@v2
11
+        with:
12
+          submodules: 'recursive'
13
+
14
+      - name: Install clang format
15
+        run: |
16
+          # gets us newer clang
17
+          sudo bash -c "cat >> /etc/apt/sources.list" << LLVMAPT
18
+          # 3.8
19
+          deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main
20
+          deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main
21
+          LLVMAPT
22
+
23
+          wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -    
24
+
25
+          sudo apt-get -qq update
26
+
27
+          sudo apt-get install -y clang-format-8
28
+
29
+      - name: Check the Formatting
30
+        run: |
31
+          ./formatcode.sh
32
+          ./CI/check-format.sh
33
+
34
+  macos64:
35
+    runs-on: macos-latest        
36
+    steps:
37
+      - name: Checkout
38
+        uses: actions/checkout@v2
39
+        with:
40
+          submodules: 'recursive'
41
+
42
+      - name: Install clang-format
43
+        run: |
44
+          brew install clang-format
45
+
46
+      - name: Check the Formatting
47
+        run: |
48
+          ./formatcode.sh
49
+          ./CI/check-format.sh 
50
obs-studio-25.0.8.tar.xz/.github/workflows/main.yml Added
201
 
1
@@ -0,0 +1,348 @@
2
+name: 'CI Multiplatform Build'
3
+
4
+on:
5
+  push:
6
+    branches:
7
+      - master
8
+  pull_request:
9
+    paths-ignore:
10
+      - '**.md'
11
+    branches:
12
+      - master
13
+
14
+env:
15
+  CEF_BUILD_VERSION: '3770'
16
+  CEF_VERSION: '75.1.16+g16a67c4+chromium-75.0.3770.100'
17
+
18
+jobs:
19
+  macos64:
20
+    name: 'macOS 64-bit'
21
+    runs-on: [macos-latest]
22
+    env:
23
+      MACOS_DEPS_VERSION: '2020-04-24'
24
+      VLC_VERSION: '3.0.8'
25
+      SPARKLE_VERSION: '1.23.0'
26
+      QT_VERSION: '5.14.1'
27
+    steps:
28
+      - name: 'Checkout'
29
+        uses: actions/checkout@v2
30
+        with:
31
+          submodules: 'recursive'
32
+      - name: 'Fetch Git Tags'
33
+        run: |
34
+          git fetch --prune --unshallow
35
+          echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD)
36
+          echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD)
37
+          echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0)
38
+      - name: 'Install prerequisites (Homebrew)'
39
+        shell: bash
40
+        run: |
41
+          brew bundle --file ./CI/scripts/macos/Brewfile
42
+      - name: 'Install prerequisite: Pre-built dependencies'
43
+        shell: bash
44
+        run: |
45
+          curl -L -O https://github.com/obsproject/obs-deps/releases/download/${{ env.MACOS_DEPS_VERSION }}/osx-deps-${{ env.MACOS_DEPS_VERSION }}.tar.gz
46
+          tar -xf ./osx-deps-${{ env.MACOS_DEPS_VERSION }}.tar.gz -C "/tmp"
47
+      - name: 'Install prerequisite: VLC'
48
+        shell: bash
49
+        run: |
50
+          curl -L -O https://downloads.videolan.org/vlc/${{ env.VLC_VERSION }}/vlc-${{ env.VLC_VERSION }}.tar.xz
51
+          if [ ! -d "${{ github.workspace }}/cmbuild" ]; then mkdir "${{ github.workspace }}/cmbuild"; fi
52
+          tar -xf ./vlc-${{ env.VLC_VERSION }}.tar.xz -C "${{ github.workspace }}/cmbuild"
53
+      - name: 'Install prerequisite: Sparkle'
54
+        shell: bash
55
+        run: |
56
+          curl -L -o sparkle.tar.bz2 https://github.com/sparkle-project/Sparkle/releases/download/${{ env.SPARKLE_VERSION }}/Sparkle-${{ env.SPARKLE_VERSION }}.tar.bz2
57
+          mkdir ${{ github.workspace }}/cmbuild/sparkle
58
+          tar -xf ./sparkle.tar.bz2 -C ${{ github.workspace }}/cmbuild/sparkle
59
+          sudo cp -R ${{ github.workspace }}/cmbuild/sparkle/Sparkle.framework /Library/Frameworks/Sparkle.framework
60
+      - name: 'Restore Chromium Embedded Framework from cache'
61
+        id: cef-cache
62
+        uses: actions/cache@v1
63
+        env:
64
+          CACHE_NAME: 'cef-cache'
65
+        with:
66
+          path: ${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_BUILD_VERSION }}_macosx64
67
+          key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.CEF_BUILD_VERSION }}
68
+          restore-keys: |
69
+            ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-
70
+      - name: 'Install prerequisite: Chromium Embedded Framework'
71
+        if: steps.cef-cache.outputs.cache-hit != 'true'
72
+        shell: bash
73
+        run: |
74
+          curl -L -O https://obs-nightly.s3-us-west-2.amazonaws.com/cef_binary_${{ env.CEF_BUILD_VERSION }}_macosx64.tar.bz2
75
+          tar -xf ./cef_binary_${{ env.CEF_BUILD_VERSION }}_macosx64.tar.bz2 -C ${{ github.workspace }}/cmbuild/
76
+          cd ${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_BUILD_VERSION }}_macosx64
77
+          sed -i '.orig' '/add_subdirectory(tests\/ceftests)/d' ./CMakeLists.txt
78
+          # target 10.11
79
+          sed -i '.orig' s/\"10.9\"/\"10.11\"/ ./cmake/cef_variables.cmake
80
+          mkdir build && cd build
81
+          cmake  -DCMAKE_CXX_FLAGS="-std=c++11 -stdlib=libc++" -DCMAKE_EXE_LINKER_FLAGS="-std=c++11 -stdlib=libc++" -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11  ..
82
+          make -j4
83
+          mkdir libcef_dll
84
+          cd ../../
85
+      - name: 'Configure'
86
+        shell: bash
87
+        run: |
88
+          mkdir ./build
89
+          cd ./build
90
+          cmake -DENABLE_SPARKLE_UPDATER=ON -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11 -DQTDIR="/usr/local/Cellar/qt/${{ env.QT_VERSION }}" -DDepsPath="/tmp/obsdeps" -DVLCPath="${{ github.workspace }}/cmbuild/vlc-${{ env.VLC_VERSION }}" -DBUILD_BROWSER=ON -DBROWSER_DEPLOY=ON -DBUILD_CAPTIONS=ON -DWITH_RTMPS=ON -DCEF_ROOT_DIR="${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_BUILD_VERSION }}_macosx64" ..
91
+      - name: 'Build'
92
+        shell: bash
93
+        working-directory: ${{ github.workspace }}/build
94
+        run: make -j4
95
+      - name: 'Install prerequisite: Packages app'
96
+        if: success() && (github.event_name != 'pull_request' || contains( github.event.pull_request.labels.*.name, 'Seeking Testers'))
97
+        shell: bash
98
+        run: |
99
+          curl -L -O https://s3-us-west-2.amazonaws.com/obs-nightly/Packages.pkg
100
+          sudo installer -pkg ./Packages.pkg -target /
101
+      - name: 'Install prerequisite: DMGbuild'
102
+        if: success() && (github.event_name != 'pull_request' || contains( github.event.pull_request.labels.*.name, 'Seeking Testers'))
103
+        shell: bash
104
+        run: |
105
+          pip3 install dmgbuild
106
+      - name: 'Package'
107
+        if: success() && (github.event_name != 'pull_request' || contains( github.event.pull_request.labels.*.name, 'Seeking Testers'))
108
+        shell: bash
109
+        run: |
110
+          FILE_DATE=$(date +%Y-%m-%d)
111
+          FILE_NAME=$FILE_DATE-${{ env.OBS_GIT_HASH }}-${{ env.OBS_GIT_TAG }}-osx.dmg
112
+          echo "::set-env name=FILE_NAME::${FILE_NAME}"
113
+          ./CI/scripts/macos/prepareApp.sh
114
+          dmgbuild -s ./CI/scripts/macos/package/settings.json "OBS" OBS.dmg
115
+          mkdir ./nightly
116
+          sudo mv ./OBS.dmg ./nightly/${FILE_NAME}
117
+      - name: 'Publish'
118
+        if: success() && (github.event_name != 'pull_request' || contains( github.event.pull_request.labels.*.name, 'Seeking Testers'))
119
+        uses: actions/upload-artifact@v2-preview
120
+        with:
121
+          name: '${{ env.FILE_NAME }}'
122
+          path: ./nightly/*.dmg
123
+  ubuntu64:
124
+    name: 'Linux/Ubuntu 64-bit'
125
+    runs-on: [ubuntu-latest]
126
+    steps:
127
+      - name: 'Checkout'
128
+        uses: actions/checkout@v2
129
+        with:
130
+          submodules: 'recursive'
131
+      - name: 'Fetch Git Tags'
132
+        run: |
133
+          git fetch --prune --unshallow
134
+          echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD)
135
+          echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD)
136
+          echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0)
137
+      - name: Install prerequisites (Apt)
138
+        shell: bash
139
+        run: |
140
+          sudo dpkg --add-architecture amd64
141
+          sudo apt-get -qq update
142
+          sudo apt-get install -y \
143
+           build-essential \
144
+           checkinstall \
145
+           cmake \
146
+           libasound2-dev \
147
+           libavcodec-dev \
148
+           libavdevice-dev \
149
+           libavfilter-dev \
150
+           libavformat-dev \
151
+           libavutil-dev \
152
+           libcurl4-openssl-dev \
153
+           libfdk-aac-dev \
154
+           libfontconfig-dev \
155
+           libfreetype6-dev \
156
+           libgl1-mesa-dev \
157
+           libjack-jackd2-dev \
158
+           libjansson-dev \
159
+           libluajit-5.1-dev \
160
+           libpulse-dev \
161
+           libqt5x11extras5-dev \
162
+           libspeexdsp-dev \
163
+           libswresample-dev \
164
+           libswscale-dev \
165
+           libudev-dev \
166
+           libv4l-dev \
167
+           libva-dev \
168
+           libvlc-dev \
169
+           libx11-dev \
170
+           libx264-dev \
171
+           libxcb-randr0-dev \
172
+           libxcb-shm0-dev \
173
+           libxcb-xinerama0-dev \
174
+           libxcomposite-dev \
175
+           libxinerama-dev \
176
+           libmbedtls-dev \
177
+           pkg-config \
178
+           python3-dev \
179
+           qtbase5-dev \
180
+           libqt5svg5-dev \
181
+           swig
182
+      - name: 'Install prerequisite: Chromium Embedded Framework'
183
+        shell: bash
184
+        run: |
185
+          curl -kL https://cdn-fastly.obsproject.com/downloads/cef_binary_${{ env.CEF_BUILD_VERSION }}_linux64.tar.bz2 -f --retry 5 -o cef.tar.bz2
186
+          if [ ! -d "${{ github.workspace }}/cmbuild" ]; then mkdir "${{ github.workspace }}/cmbuild"; fi
187
+          tar -C"${{ github.workspace }}/cmbuild" -xjf cef.tar.bz2
188
+      - name: 'Configure'
189
+        shell: bash
190
+        run: |
191
+          mkdir ./build
192
+          cd ./build
193
+          cmake -DUNIX_STRUCTURE=0 -DCMAKE_INSTALL_PREFIX="${{ github.workspace }}/obs-studio-portable" -DBUILD_CAPTIONS=ON -DWITH_RTMPS=ON -DBUILD_BROWSER=ON -DCEF_ROOT_DIR="${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_BUILD_VERSION }}_linux64" ..
194
+      - name: 'Build'
195
+        shell: bash
196
+        working-directory: ${{ github.workspace }}/build
197
+        run: make -j4
198
+      - name: 'Package'
199
+        if: success() && (github.event_name != 'pull_request' || contains( github.event.pull_request.labels.*.name, 'Seeking Testers'))
200
+        shell: bash
201
obs-studio-25.0.4.tar.xz/CI/before-deploy-osx.sh -> obs-studio-25.0.8.tar.xz/CI/before-deploy-osx.sh Changed
26
 
1
@@ -37,7 +37,7 @@
2
 
3
 ../CI/install/osx/packageApp.sh
4
 
5
-# fix obs outputs
6
+# fix obs outputs plugin it doesn't play nicely with dylibBundler at the moment
7
 cp /usr/local/opt/mbedtls/lib/libmbedtls.12.dylib ./OBS.app/Contents/Frameworks/
8
 cp /usr/local/opt/mbedtls/lib/libmbedcrypto.3.dylib ./OBS.app/Contents/Frameworks/
9
 cp /usr/local/opt/mbedtls/lib/libmbedx509.0.dylib ./OBS.app/Contents/Frameworks/
10
@@ -45,11 +45,12 @@
11
 install_name_tool -id @executable_path/../Frameworks/libmbedtls.12.dylib ./OBS.app/Contents/Frameworks/libmbedtls.12.dylib
12
 install_name_tool -id @executable_path/../Frameworks/libmbedcrypto.3.dylib ./OBS.app/Contents/Frameworks/libmbedcrypto.3.dylib
13
 install_name_tool -id @executable_path/../Frameworks/libmbedx509.0.dylib ./OBS.app/Contents/Frameworks/libmbedx509.0.dylib
14
-install_name_tool -change /usr/local/opt/mbedtls/lib/libmbedtls.12.dylib @executable_path/../Frameworks/libmbedtls.12.dylib ./OBS.app/Contents/Plugins/obs-outputs.so
15
-install_name_tool -change /usr/local/opt/mbedtls/lib/libmbedcrypto.3.dylib @executable_path/../Frameworks/libmbedcrypto.3.dylib ./OBS.app/Contents/Plugins/obs-outputs.so
16
-install_name_tool -change /usr/local/opt/mbedtls/lib/libmbedx509.0.dylib @executable_path/../Frameworks/libmbedx509.0.dylib ./OBS.app/Contents/Plugins/obs-outputs.so
17
+install_name_tool -change libmbedtls.12.dylib @executable_path/../Frameworks/libmbedtls.12.dylib ./OBS.app/Contents/Plugins/obs-outputs.so
18
+install_name_tool -change libmbedcrypto.3.dylib @executable_path/../Frameworks/libmbedcrypto.3.dylib ./OBS.app/Contents/Plugins/obs-outputs.so
19
+install_name_tool -change libmbedx509.0.dylib @executable_path/../Frameworks/libmbedx509.0.dylib ./OBS.app/Contents/Plugins/obs-outputs.so
20
 install_name_tool -change /usr/local/opt/curl/lib/libcurl.4.dylib @executable_path/../Frameworks/libcurl.4.dylib ./OBS.app/Contents/Plugins/obs-outputs.so
21
 install_name_tool -change @rpath/libobs.0.dylib @executable_path/../Frameworks/libobs.0.dylib ./OBS.app/Contents/Plugins/obs-outputs.so
22
+install_name_tool -change /tmp/obsdeps/bin/libjansson.4.dylib @executable_path/../Frameworks/libjansson.4.dylib ./OBS.app/Contents/Plugins/obs-outputs.so
23
 
24
 # copy sparkle into the app
25
 hr "Copying Sparkle.framework"
26
obs-studio-25.0.4.tar.xz/CI/before-script-linux.sh -> obs-studio-25.0.8.tar.xz/CI/before-script-linux.sh Changed
12
 
1
@@ -1,10 +1,5 @@
2
 #!/bin/bash
3
 
4
-./formatcode.sh
5
-if ! ./CI/check-format.sh; then
6
-   exit 1
7
-fi
8
-
9
 set -ex
10
 ccache -s || echo "CCache is not available."
11
 mkdir build && cd build
12
obs-studio-25.0.4.tar.xz/CI/before-script-osx.sh -> obs-studio-25.0.8.tar.xz/CI/before-script-osx.sh Changed
23
 
1
@@ -3,19 +3,15 @@
2
 
3
 git fetch --tags
4
 
5
-./formatcode.sh
6
-if ! ./CI/check-format.sh; then
7
-   exit 1
8
-fi
9
-
10
 mkdir build
11
 cd build
12
 cmake -DENABLE_SPARKLE_UPDATER=ON \
13
 -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11 \
14
 -DQTDIR=/usr/local/Cellar/qt/5.14.1 \
15
 -DDepsPath=/tmp/obsdeps \
16
--DVLCPath=$PWD/../../vlc-3.0.4 \
17
+-DVLCPath=$PWD/../../vlc-3.0.8 \
18
 -DBUILD_BROWSER=ON \
19
 -DBROWSER_DEPLOY=ON \
20
 -DBUILD_CAPTIONS=ON \
21
+-DWITH_RTMPS=ON \
22
 -DCEF_ROOT_DIR=$PWD/../../cef_binary_${CEF_BUILD_VERSION}_macosx64 ..
23
obs-studio-25.0.4.tar.xz/CI/install-dependencies-linux.sh -> obs-studio-25.0.8.tar.xz/CI/install-dependencies-linux.sh Changed
27
 
1
@@ -3,15 +3,6 @@
2
 
3
 curl -L https://packagecloud.io/github/git-lfs/gpgkey | sudo apt-key add -
4
 
5
-# gets us newer clang
6
-sudo bash -c "cat >> /etc/apt/sources.list" << LLVMAPT
7
-# 3.8
8
-deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main
9
-deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main
10
-LLVMAPT
11
-
12
-wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -
13
-
14
 sudo apt-get -qq update
15
 sudo apt-get install -y \
16
         build-essential \
17
@@ -52,8 +43,7 @@
18
         python3-dev \
19
         qtbase5-dev \
20
         libqt5svg5-dev \
21
-        swig \
22
-        clang-format-8
23
+        swig
24
 
25
 # build cef
26
 wget --quiet --retry-connrefused --waitretry=1 https://cdn-fastly.obsproject.com/downloads/cef_binary_${CEF_BUILD_VERSION}_linux64.tar.bz2
27
obs-studio-25.0.4.tar.xz/CI/install-dependencies-osx.sh -> obs-studio-25.0.8.tar.xz/CI/install-dependencies-osx.sh Changed
38
 
1
@@ -28,9 +28,11 @@
2
 brew update
3
 
4
 #Base OBS Deps and ccache
5
-brew install jack speexdsp ccache mbedtls clang-format freetype fdk-aac
6
+brew install jack speexdsp ccache mbedtls freetype fdk-aac
7
 brew install https://gist.githubusercontent.com/DDRBoxman/9c7a2b08933166f4b61ed9a44b242609/raw/ef4de6c587c6bd7f50210eccd5bd51ff08e6de13/qt.rb
8
-brew unlink swig
9
+if [ -d "$(brew --cellar)/swig" ]; then
10
+    brew unlink swig
11
+fi
12
 brew install https://gist.githubusercontent.com/DDRBoxman/4cada55c51803a2f963fa40ce55c9d3e/raw/572c67e908bfbc1bcb8c476ea77ea3935133f5b5/swig.rb
13
 
14
 pip install dmgbuild
15
@@ -40,17 +42,17 @@
16
 
17
 # Fetch and untar prebuilt OBS deps that are compatible with older versions of OSX
18
 hr "Downloading OBS deps"
19
-wget --quiet --retry-connrefused --waitretry=1 https://obs-nightly.s3.amazonaws.com/osx-deps-2018-08-09.tar.gz
20
-tar -xf ./osx-deps-2018-08-09.tar.gz -C /tmp
21
+wget --quiet --retry-connrefused --waitretry=1 https://github.com/obsproject/obs-deps/releases/download/2020-04-24/osx-deps-2020-04-24.tar.gz
22
+tar -xf ./osx-deps-2020-04-24.tar.gz -C /tmp
23
 
24
 # Fetch vlc codebase
25
 hr "Downloading VLC repo"
26
-wget --quiet --retry-connrefused --waitretry=1 https://downloads.videolan.org/vlc/3.0.4/vlc-3.0.4.tar.xz
27
-tar -xf vlc-3.0.4.tar.xz
28
+wget --quiet --retry-connrefused --waitretry=1 https://downloads.videolan.org/vlc/3.0.8/vlc-3.0.8.tar.xz
29
+tar -xf vlc-3.0.8.tar.xz
30
 
31
 # Get sparkle
32
 hr "Downloading Sparkle framework"
33
-wget --quiet --retry-connrefused --waitretry=1 -O sparkle.tar.bz2 https://github.com/sparkle-project/Sparkle/releases/download/1.20.0/Sparkle-1.20.0.tar.bz2
34
+wget --quiet --retry-connrefused --waitretry=1 -O sparkle.tar.bz2 https://github.com/sparkle-project/Sparkle/releases/download/1.23.0/Sparkle-1.23.0.tar.bz2
35
 mkdir ./sparkle
36
 tar -xf ./sparkle.tar.bz2 -C ./sparkle
37
 sudo cp -R ./sparkle/Sparkle.framework /Library/Frameworks/Sparkle.framework
38
obs-studio-25.0.8.tar.xz/CI/scripts Added
2
 
1
+(directory)
2
obs-studio-25.0.8.tar.xz/CI/scripts/macos Added
2
 
1
+(directory)
2
obs-studio-25.0.8.tar.xz/CI/scripts/macos/Brewfile Added
10
 
1
@@ -0,0 +1,8 @@
2
+brew "jack"
3
+brew "speexdsp"
4
+brew "cmake"
5
+brew "freetype"
6
+brew "fdk-aac"
7
+brew "https://gist.githubusercontent.com/DDRBoxman/9c7a2b08933166f4b61ed9a44b242609/raw/ef4de6c587c6bd7f50210eccd5bd51ff08e6de13/qt.rb"
8
+brew "swig", link: false
9
+brew "https://gist.githubusercontent.com/DDRBoxman/4cada55c51803a2f963fa40ce55c9d3e/raw/572c67e908bfbc1bcb8c476ea77ea3935133f5b5/swig.rb"
10
obs-studio-25.0.8.tar.xz/CI/scripts/macos/app Added
2
 
1
+(directory)
2
obs-studio-25.0.8.tar.xz/CI/scripts/macos/app/Info.plist Added
30
 
1
@@ -0,0 +1,28 @@
2
+<?xml version="1.0" encoding="UTF-8"?>
3
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
4
+<plist version="1.0">
5
+<dict>
6
+   <key>CFBundleIconFile</key>
7
+   <string>obs.icns</string>
8
+   <key>CFBundleName</key>
9
+   <string>OBS</string>
10
+   <key>CFBundleGetInfoString</key>
11
+   <string>OBS - Free and Open Source Streaming/Recording Software</string>
12
+   <key>CFBundleExecutable</key>
13
+   <string>obs</string>
14
+   <key>CFBundleIdentifier</key>
15
+   <string>com.obsproject.obs-studio</string>
16
+   <key>CFBundlePackageType</key>
17
+   <string>APPL</string>
18
+   <key>LSMinimumSystemVersion</key>
19
+   <string>10.8.5</string>
20
+   <key>NSHighResolutionCapable</key>
21
+   <true/>
22
+   <key>LSAppNapIsDisabled</key>
23
+   <true/>
24
+   <key>NSCameraUsageDescription</key>
25
+   <string>OBS needs to access the camera to enable camera sources to work.</string>
26
+   <key>NSMicrophoneUsageDescription</key>
27
+   <string>OBS needs to access the microphone to enable audio input.</string>
28
+</dict>
29
+</plist>
30
obs-studio-25.0.8.tar.xz/CI/scripts/macos/app/OBSPublicDSAKey.pem Added
38
 
1
@@ -0,0 +1,36 @@
2
+-----BEGIN PUBLIC KEY-----
3
+MIIGPDCCBC4GByqGSM44BAEwggQhAoICAQCZZZ2y7H2GJmMfP4KQihJTJOoiGNUw
4
+mue6sqMbH+utRykRnSKBZux6R665eRFMpNgrgFO1TLLGbdD2U31KiGtCvFJOmOl3
5
++QP055BuXjEG36NU7AWEFLAlbDlr/2D3oumq3Ib3iMnnr9RrVztJ2VFOvVio1eWr
6
+ZxboVwKPK8D6BqsWiv15vbYlJnTC4Fls6ySmdjVBxwoPlTaMu1ysi5DfbIZ93s5u
7
+aQt1FvXuWtPBWjyVUORcNbcWf49E5R2pV0OSBK95Hw2/wXz4vmj+w92dTePGnVaW
8
+Me4CoF5PIeZILwp6DCLStX4eW2WG1NChJTC8zeQ/3bMMoGyKM/MadyvrDqMywsKY
9
+caxkIwHrDKOEdXXGo80dIwZMMLipPA8DKhx5ojphfkeXjIhKSx+49knXT3ED5okE
10
+Wai7tGUXj/8D8sGh+7b+AVsdujvr4v8WQaZiKUOZ2IIHOg3VLz9T9v0zet1Yt987
11
+KNymFcp2CHeJ6KnDP/ZGQ6Nl0HsPxUgscsXV+R2FEc8Q1j0Ukkuxnopa0E4/huUu
12
+gjyRzpXD734qFMDf7LcXca6qNjBor6gVj5sRyRKCpZ+KQfMUlr8jp506ztYSyeJu
13
+dxJV30tQgztwkbrs02CqOt4Z3Peo6sdht7hWKSPVwmja3tq8/TfUSSoo6wKYN9/w
14
+Mf3dVeRF8hCzJQIVAJnzuzmzQhCKPiQnl3jh5qGII2XfAoICAQCCVATAff89ceHj
15
+ROHEbHTQFpVxJ/kRZPfxnU46DSw79Tih7tthV68oakPSOTP3cx/Tga0GwogarZ9N
16
+F2VVan5w9OQSSewXsr5UDT5bnmJF+h+JB7TMy+sXZBYobUqjlUd5VtKc8RsN86P4
17
+s7xbK0mA+hfe+27r18JT81/eH3xUfh7UOUGSdMN2Ch9f7RFSMZIgUAZUzu2K3ODp
18
+hPgtc2QJ8QVAp7GLvQgw8ZUME/ChZslyBIyJvYgUIxfxlgRWYro5pQT7/ngkgdXo
19
+wlghHKkldwMuY3zaFdhPnFNuEUEtc18ILsbz0+AnagCUd6n+3safskCRqLIHMOY6
20
+iLBSZPX9hJQhVCqSqz1VNDDww8FNa/fojJ1Lr/TI0I+0Ib2pCiY2LChXUqGY5SLZ
21
+2KNs5qFsyZP+I0L8YsGwqvUYyFwk7Ok224n0NtaOwqpLCrtXd/i6DaDNiaoJuwJC
22
+1ELCfaZivorgkC5rhBt2H7qWUAR+EtrFE/gb0k/G5EIhjYql7onGbX+G2re38vQA
23
+fg1pzguhig2dafP/BxMLZrn1Gg61xzmEYPuS9gclktaf675srv8GVb46VkOxXL+D
24
+YvTmpJPP7UUOVlmAMCo4j4y09MW3jq9TDp42VTLeZVubyjslGnavlnq1O+ZyXUye
25
+1FMeby65sIbSHHHwoFnRv3hLSEXI5gOCAgYAAoICAQCUkYnZkPfHfOJZI403xUYP
26
+CE/bLpkza074Xo6EXElsWRnpQgNTx+JFOvItgj3v0OkIqDin9UredKOwfkiftslV
27
+jxUVKA6I5kwnGvCpvTpQMLyLjq+VQr+J2D6eId6tV/iajhdu5r4JThU8KllT7Ywb
28
+NAur34ftLNCVAMRUaDNeEoHfePgderW384e+lbvpmtifmBluammGSxxRtUsdjvJZ
29
+BFkhaJu86CKxcU7D1lbPVOtV/jaxz6d16VdGcfBdi2LzXZzZtYpT9XGPX3NF+xii
30
+spAURWsoe11LTRXF+eJhgCm5iIDN3kh1HEQKYKAVpmrcM0aFzk/NpS+tFyU72vaq
31
+IRSSJw/aa1oELOAakG5oPldc4RcYWl32sbnVwXHO7TZvgTrBSC10o65MAC5CHP/s
32
+b07heDYAIt7re7szvOYq+c/9zAMAlu3pcO8MqaXYMmybdHBXHQ2b+DdJWHmIUWcX
33
+CbUzr09vzGkJAvqsXqbmJPr8aixrO75DhT0iDTILLWe/GWK51nf+Tg0pNxVgGyAl
34
+BqvRqqo7SSDu9FMkwQesFFHhuoHLyEHwVPJ+sMQTNwQcm9c6YuW8EYDRSkeKLWYk
35
+3fkjG+Pe9uVE8a1taDg3FjSY0UqjUT6XMw+i0Lajyus2L6wFBwrrGM6E4xa6x1CC
36
+MGjmuSOlPA1umQsToIcO4g==
37
+-----END PUBLIC KEY-----
38
obs-studio-25.0.8.tar.xz/CI/scripts/macos/app/obs.icns Added
obs-studio-25.0.8.tar.xz/CI/scripts/macos/package Added
2
 
1
+(directory)
2
obs-studio-25.0.8.tar.xz/CI/scripts/macos/package/background.tiff Added
obs-studio-25.0.8.tar.xz/CI/scripts/macos/package/dylibBundler Added
obs-studio-25.0.8.tar.xz/CI/scripts/macos/package/settings.json Added
16
 
1
@@ -0,0 +1,14 @@
2
+{
3
+    "title": "OBS",
4
+    "background": "./CI/scripts/macos/package/background.tiff",
5
+    "icon": "./CI/scripts/macos/app/obs.icns",
6
+    "format": "UDZO",
7
+    "compression-level": 9,
8
+    "window": { "position": { "x": 100, "y": 100 },
9
+                "size": { "width": 540, "height": 380 } },
10
+    "contents": [
11
+        { "x": 120, "y": 180, "type": "file",
12
+          "path": "./OBS.app" },
13
+        { "x": 420, "y": 180, "type": "link", "path": "/Applications" }
14
+    ]
15
+}
16
obs-studio-25.0.8.tar.xz/CI/scripts/macos/package/src Added
2
 
1
+(directory)
2
obs-studio-25.0.8.tar.xz/CI/scripts/macos/package/src/background.png Added
obs-studio-25.0.8.tar.xz/CI/scripts/macos/package/src/background@2x.png Added
obs-studio-25.0.8.tar.xz/CI/scripts/macos/package/src/makeRetinaBG Added
3
 
1
@@ -0,0 +1,1 @@
2
+tiffutil -cathidpicheck background.png background@2x.png -out background.tiff
3
obs-studio-25.0.8.tar.xz/CI/scripts/macos/packageApp.sh Added
80
 
1
@@ -0,0 +1,78 @@
2
+#!/usr/bin/env bash
3
+
4
+# Exit if something fails
5
+set -e
6
+
7
+rm -rf ./OBS.app
8
+
9
+mkdir OBS.app
10
+mkdir OBS.app/Contents
11
+mkdir OBS.app/Contents/MacOS
12
+mkdir OBS.app/Contents/PlugIns
13
+mkdir OBS.app/Contents/Resources
14
+
15
+cp -R rundir/RelWithDebInfo/bin/ ./OBS.app/Contents/MacOS
16
+cp -R rundir/RelWithDebInfo/data ./OBS.app/Contents/Resources
17
+cp ../CI/scripts/macos/app/obs.icns ./OBS.app/Contents/Resources
18
+cp -R rundir/RelWithDebInfo/obs-plugins/ ./OBS.app/Contents/PlugIns
19
+cp ../CI/scripts/macos/app/Info.plist ./OBS.app/Contents
20
+
21
+../CI/scripts/macos/package/dylibBundler -b -cd -d ./OBS.app/Contents/Frameworks -p @executable_path/../Frameworks/ \
22
+-s ./OBS.app/Contents/MacOS \
23
+-x ./OBS.app/Contents/PlugIns/coreaudio-encoder.so \
24
+-x ./OBS.app/Contents/PlugIns/decklink-ouput-ui.so \
25
+-x ./OBS.app/Contents/PlugIns/frontend-tools.so \
26
+-x ./OBS.app/Contents/PlugIns/image-source.so \
27
+-x ./OBS.app/Contents/PlugIns/linux-jack.so \
28
+-x ./OBS.app/Contents/PlugIns/mac-avcapture.so \
29
+-x ./OBS.app/Contents/PlugIns/mac-capture.so \
30
+-x ./OBS.app/Contents/PlugIns/mac-decklink.so \
31
+-x ./OBS.app/Contents/PlugIns/mac-syphon.so \
32
+-x ./OBS.app/Contents/PlugIns/mac-vth264.so \
33
+-x ./OBS.app/Contents/PlugIns/obs-browser.so \
34
+-x ./OBS.app/Contents/PlugIns/obs-browser-page \
35
+-x ./OBS.app/Contents/PlugIns/obs-ffmpeg.so \
36
+-x ./OBS.app/Contents/PlugIns/obs-filters.so \
37
+-x ./OBS.app/Contents/PlugIns/obs-transitions.so \
38
+-x ./OBS.app/Contents/PlugIns/obs-vst.so \
39
+-x ./OBS.app/Contents/PlugIns/rtmp-services.so \
40
+-x ./OBS.app/Contents/MacOS/obs \
41
+-x ./OBS.app/Contents/MacOS/obs-ffmpeg-mux \
42
+-x ./OBS.app/Contents/MacOS/obslua.so \
43
+-x ./OBS.app/Contents/MacOS/_obspython.so \
44
+-x ./OBS.app/Contents/PlugIns/obs-x264.so \
45
+-x ./OBS.app/Contents/PlugIns/text-freetype2.so \
46
+-x ./OBS.app/Contents/PlugIns/obs-libfdk.so
47
+# -x ./OBS.app/Contents/PlugIns/obs-outputs.so \
48
+
49
+/usr/local/Cellar/qt/${QT_VERSION}/bin/macdeployqt ./OBS.app
50
+
51
+mv ./OBS.app/Contents/MacOS/libobs-opengl.so ./OBS.app/Contents/Frameworks
52
+
53
+rm -f -r ./OBS.app/Contents/Frameworks/QtNetwork.framework
54
+
55
+# put qt network in here becasuse streamdeck uses it
56
+cp -R /usr/local/opt/qt/lib/QtNetwork.framework ./OBS.app/Contents/Frameworks
57
+chmod -R +w ./OBS.app/Contents/Frameworks/QtNetwork.framework
58
+rm -r ./OBS.app/Contents/Frameworks/QtNetwork.framework/Headers
59
+rm -r ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/Headers/
60
+chmod 644 ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/Resources/Info.plist
61
+install_name_tool -id @executable_path/../Frameworks/QtNetwork.framework/Versions/5/QtNetwork ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/QtNetwork
62
+install_name_tool -change /usr/local/Cellar/qt/${QT_VERSION}/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/QtNetwork
63
+
64
+
65
+# decklink ui qt
66
+install_name_tool -change /usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui ./OBS.app/Contents/PlugIns/decklink-ouput-ui.so
67
+install_name_tool -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./OBS.app/Contents/PlugIns/decklink-ouput-ui.so
68
+install_name_tool -change /usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets ./OBS.app/Contents/PlugIns/decklink-ouput-ui.so
69
+
70
+# frontend tools qt
71
+install_name_tool -change /usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui ./OBS.app/Contents/PlugIns/frontend-tools.so
72
+install_name_tool -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./OBS.app/Contents/PlugIns/frontend-tools.so
73
+install_name_tool -change /usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets ./OBS.app/Contents/PlugIns/frontend-tools.so
74
+
75
+# vst qt
76
+install_name_tool -change /usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui ./OBS.app/Contents/PlugIns/obs-vst.so
77
+install_name_tool -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./OBS.app/Contents/PlugIns/obs-vst.so
78
+install_name_tool -change /usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets ./OBS.app/Contents/PlugIns/obs-vst.so
79
+install_name_tool -change /usr/local/opt/qt/lib/QtMacExtras.framework/Versions/5/QtMacExtras @executable_path/../Frameworks/QtMacExtras.framework/Versions/5/QtMacExtras ./OBS.app/Contents/PlugIns/obs-vst.so
80
obs-studio-25.0.8.tar.xz/CI/scripts/macos/prepareApp.sh Added
43
 
1
@@ -0,0 +1,41 @@
2
+#!/usr/bin/env bash
3
+
4
+# Exit if something fails
5
+set -e
6
+
7
+cd ./build
8
+
9
+mv ./rundir/RelWithDebInfo/data/obs-scripting/obslua.so ./rundir/RelWithDebInfo/bin/
10
+mv ./rundir/RelWithDebInfo/data/obs-scripting/_obspython.so ./rundir/RelWithDebInfo/bin/
11
+mv ./rundir/RelWithDebInfo/data/obs-scripting/obspython.py ./rundir/RelWithDebInfo/bin/
12
+
13
+../CI/scripts/macos/packageApp.sh
14
+
15
+# fix obs outputs plugin it doesn't play nicely with dylibBundler at the moment
16
+chmod +w ./OBS.app/Contents/Frameworks/*.dylib
17
+install_name_tool -change libmbedtls.12.dylib @executable_path/../Frameworks/libmbedtls.12.dylib ./OBS.app/Contents/Plugins/obs-outputs.so
18
+install_name_tool -change libmbedcrypto.3.dylib @executable_path/../Frameworks/libmbedcrypto.3.dylib ./OBS.app/Contents/Plugins/obs-outputs.so
19
+install_name_tool -change libmbedx509.0.dylib @executable_path/../Frameworks/libmbedx509.0.dylib ./OBS.app/Contents/Plugins/obs-outputs.so
20
+install_name_tool -change /usr/local/opt/curl/lib/libcurl.4.dylib @executable_path/../Frameworks/libcurl.4.dylib ./OBS.app/Contents/Plugins/obs-outputs.so
21
+install_name_tool -change @rpath/libobs.0.dylib @executable_path/../Frameworks/libobs.0.dylib ./OBS.app/Contents/Plugins/obs-outputs.so
22
+install_name_tool -change /tmp/obsdeps/bin/libjansson.4.dylib @executable_path/../Frameworks/libjansson.4.dylib ./OBS.app/Contents/Plugins/obs-outputs.so
23
+
24
+cp -R ${GITHUB_WORKSPACE}/cmbuild/sparkle/Sparkle.framework ./OBS.app/Contents/Frameworks/
25
+install_name_tool -change @rpath/Sparkle.framework/Versions/A/Sparkle @executable_path/../Frameworks/Sparkle.framework/Versions/A/Sparkle ./OBS.app/Contents/MacOS/obs
26
+
27
+sudo mkdir -p ./OBS.app/Contents/Frameworks
28
+sudo cp -R ${GITHUB_WORKSPACE}/cmbuild/cef_binary_${CEF_BUILD_VERSION}_macosx64/Release/Chromium\ Embedded\ Framework.framework ./OBS.app/Contents/Frameworks/
29
+install_name_tool -change /usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui ./OBS.app/Contents/Plugins/obs-browser.so
30
+install_name_tool -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./OBS.app/Contents/Plugins/obs-browser.so
31
+install_name_tool -change /usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets ./OBS.app/Contents/Plugins/obs-browser.so
32
+
33
+cp ../CI/scripts/macos/app/OBSPublicDSAKey.pem ./OBS.app/Contents/Resources
34
+
35
+plutil -insert CFBundleVersion -string $(basename ${GITHUB_REF}) ./OBS.app/Contents/Info.plist
36
+plutil -insert CFBundleShortVersionString -string $(basename ${GITHUB_REF}) ./OBS.app/Contents/Info.plist
37
+plutil -insert OBSFeedsURL -string https://obsproject.com/osx_update/feeds.xml ./OBS.app/Contents/Info.plist
38
+plutil -insert SUFeedURL -string https://obsproject.com/osx_update/stable/updates.xml ./OBS.app/Contents/Info.plist
39
+plutil -insert SUPublicDSAKeyFile -string OBSPublicDSAKey.pem ./OBS.app/Contents/Info.plist
40
+
41
+mv ./OBS.app ../OBS.app
42
+cd -
43
obs-studio-25.0.4.tar.xz/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/CMakeLists.txt Changed
13
 
1
@@ -86,6 +86,11 @@
2
    list(GET UI_VERSION_SEMANTIC 0 UI_VERSION_MAJOR)
3
    list(GET UI_VERSION_SEMANTIC 1 UI_VERSION_MINOR)
4
    list(GET UI_VERSION_SEMANTIC 2 UI_VERSION_PATCH)
5
+   set(OBS_COMPANY_NAME "OBS")
6
+   set(OBS_PRODUCT_NAME "OBS Studio")
7
+   set(OBS_COMMENTS "Free and open source software for video recording and live streaming")
8
+   set(OBS_LEGAL_COPYRIGHT "(C) Hugh Bailey")
9
+   set(MODULE_DESCRIPTION "OBS Studio")
10
    configure_file(UI/obs.rc.in ${PROJECT_BINARY_DIR}/obs.rc)
11
 endif()
12
 
13
obs-studio-25.0.4.tar.xz/UI/data/locale/en-US.ini -> obs-studio-25.0.8.tar.xz/UI/data/locale/en-US.ini Changed
29
 
1
@@ -52,8 +52,8 @@
2
 New="New"
3
 Duplicate="Duplicate"
4
 Enable="Enable"
5
-DisableOSXVSync="Disable OSX V-Sync"
6
-ResetOSXVSyncOnExit="Reset OSX V-Sync on Exit"
7
+DisableOSXVSync="Disable macOS V-Sync"
8
+ResetOSXVSyncOnExit="Reset macOS V-Sync on Exit"
9
 HighResourceUsage="Encoding overloaded! Consider turning down video settings or using a faster encoding preset."
10
 Transition="Transition"
11
 QuickTransitions="Quick Transitions"
12
@@ -324,8 +324,6 @@
13
 Output.RecordError.Title="Recording error"
14
 Output.RecordError.Msg="An unspecified error occurred while recording."
15
 Output.RecordError.EncodeErrorMsg="An encoder error occurred while recording."
16
-Output.ReplayBuffer.NoHotkey.Title="No hotkey set!"
17
-Output.ReplayBuffer.NoHotkey.Msg="No save hotkey set for replay buffer. Please set the \"Save\" hotkey to use for saving replay recordings."
18
 
19
 # output recording messages
20
 Output.BadPath.Title="Bad File Path"
21
@@ -715,7 +713,6 @@
22
 Basic.Settings.Output.ReplayBuffer.MegabytesMax="Maximum Memory (Megabytes)"
23
 Basic.Settings.Output.ReplayBuffer.Estimate="Estimated memory usage: %1 MB"
24
 Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Cannot estimate memory usage. Please set maximum memory limit."
25
-Basic.Settings.Output.ReplayBuffer.HotkeyMessage="(Note: Make sure to set a hotkey for the replay buffer in the hotkeys section)"
26
 Basic.Settings.Output.ReplayBuffer.Prefix="Replay Buffer Filename Prefix"
27
 Basic.Settings.Output.ReplayBuffer.Suffix="Suffix"
28
 Basic.Settings.Output.Simple.SavePath="Recording Path"
29
obs-studio-25.0.4.tar.xz/UI/data/themes/Acri.qss -> obs-studio-25.0.8.tar.xz/UI/data/themes/Acri.qss Changed
21
 
1
@@ -155,6 +155,11 @@
2
 
3
 /* Dock stuff */
4
 QDockWidget {
5
+   titlebar-close-icon: url('./Dark/Close.svg');
6
+   titlebar-normal-icon: url('./Dark/Popout.svg');
7
+}
8
+
9
+QDockWidget {
10
    background: #181819;
11
    border: none;
12
    font-size: 14px;
13
@@ -182,6 +187,7 @@
14
    subcontrol-position: top right;
15
    subcontrol-origin: padding;
16
    right: 0px;
17
+   margin: 0px;
18
 }
19
 
20
 QDockWidget::float-button {
21
obs-studio-25.0.4.tar.xz/UI/data/themes/Dark.qss -> obs-studio-25.0.8.tar.xz/UI/data/themes/Dark.qss Changed
13
 
1
@@ -119,6 +119,11 @@
2
 
3
 /* Dock Widget */
4
 
5
+QDockWidget {
6
+   titlebar-close-icon: url('./Dark/Close.svg');
7
+   titlebar-normal-icon: url('./Dark/Popout.svg');
8
+}
9
+
10
 QDockWidget::title {
11
     text-align: center;
12
     background-color: rgb(70,69,70);
13
obs-studio-25.0.8.tar.xz/UI/data/themes/Dark/close.svg Added
3
 
1
@@ -0,0 +1,1 @@
2
+<svg class="feather feather-plus" fill="none" stroke="#FFF" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" version="1.1" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"><line x1="2" x2="28" y1="2" y2="28" /><line x1="2" x2="28" y1="28" y2="2" /></svg>
3
obs-studio-25.0.8.tar.xz/UI/data/themes/Dark/popout.svg Added
3
 
1
@@ -0,0 +1,1 @@
2
+<svg class="feather feather-plus" fill="none" stroke="#FFF" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" version="1.1" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg"><rect x="2" y="2" width="24" height="20" /><rect x="2" y="2" width="24" height="4" style="fill:#fff" /><rect x="14" y="18" width="24" height="20" /><rect x="14" y="18" width="24" height="4" style="fill:#fff" /></svg>
3
obs-studio-25.0.4.tar.xz/UI/data/themes/Rachni.qss -> obs-studio-25.0.8.tar.xz/UI/data/themes/Rachni.qss Changed
13
 
1
@@ -189,6 +189,11 @@
2
 /***********************/
3
 
4
 QDockWidget {
5
+   titlebar-close-icon: url('./Dark/Close.svg');
6
+   titlebar-normal-icon: url('./Dark/Popout.svg');
7
+}
8
+
9
+QDockWidget {
10
    background: rgb(49, 54, 59); /* Blue-gray */
11
    border: 1px solid rgb(58, 64, 69); /* Light Blue-gray */
12
 }
13
obs-studio-25.0.4.tar.xz/UI/forms/OBSBasic.ui -> obs-studio-25.0.8.tar.xz/UI/forms/OBSBasic.ui Changed
48
 
1
@@ -38,6 +38,21 @@
2
   </property>
3
   <widget class="QWidget" name="centralwidget">
4
    <layout class="QVBoxLayout" name="verticalLayout">
5
+    <property name="spacing">
6
+     <number>0</number>
7
+    </property>
8
+    <property name="leftMargin">
9
+     <number>0</number>
10
+    </property>
11
+    <property name="topMargin">
12
+     <number>0</number>
13
+    </property>
14
+    <property name="rightMargin">
15
+     <number>0</number>
16
+    </property>
17
+    <property name="bottomMargin">
18
+     <number>0</number>
19
+    </property>
20
     <item>
21
      <layout class="QHBoxLayout" name="horizontalLayout_2">
22
       <item>
23
@@ -853,19 +868,19 @@
24
       <widget class="QWidget" name="transitionsContainer" native="true">
25
        <layout class="QVBoxLayout" name="verticalLayout_2">
26
         <property name="spacing">
27
-         <number>4</number>
28
+         <number>2</number>
29
         </property>
30
         <property name="leftMargin">
31
-         <number>1</number>
32
+         <number>0</number>
33
         </property>
34
         <property name="topMargin">
35
-         <number>1</number>
36
+         <number>0</number>
37
         </property>
38
         <property name="rightMargin">
39
-         <number>1</number>
40
+         <number>0</number>
41
         </property>
42
         <property name="bottomMargin">
43
-         <number>2</number>
44
+         <number>0</number>
45
         </property>
46
         <item>
47
          <widget class="QComboBox" name="transitions">
48
obs-studio-25.0.4.tar.xz/UI/forms/OBSBasicSettings.ui -> obs-studio-25.0.8.tar.xz/UI/forms/OBSBasicSettings.ui Changed
29
 
1
@@ -1766,13 +1766,6 @@
2
                      </widget>
3
                     </item>
4
                     <item row="2" column="1">
5
-                     <widget class="QLabel" name="label_45">
6
-                      <property name="text">
7
-                       <string>Basic.Settings.Output.ReplayBuffer.HotkeyMessage</string>
8
-                      </property>
9
-                     </widget>
10
-                    </item>
11
-                    <item row="3" column="1">
12
                      <widget class="QLabel" name="simpleRBEstimate">
13
                       <property name="text">
14
                        <string notr="true"/>
15
@@ -3676,13 +3669,6 @@
16
                          </widget>
17
                         </item>
18
                         <item row="2" column="1">
19
-                         <widget class="QLabel" name="advRBHotkeyLabel">
20
-                          <property name="text">
21
-                           <string>Basic.Settings.Output.ReplayBuffer.HotkeyMessage</string>
22
-                          </property>
23
-                         </widget>
24
-                        </item>
25
-                        <item row="3" column="1">
26
                          <widget class="QLabel" name="advRBEstimate">
27
                           <property name="text">
28
                            <string notr="true"/>
29
obs-studio-25.0.8.tar.xz/UI/forms/images/recording-active.svg Added
39
 
1
@@ -0,0 +1,37 @@
2
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
3
+<svg
4
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
5
+   xmlns:cc="http://creativecommons.org/ns#"
6
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
7
+   xmlns:svg="http://www.w3.org/2000/svg"
8
+   xmlns="http://www.w3.org/2000/svg"
9
+   id="svg8"
10
+   version="1.1"
11
+   viewBox="0 0 2.1166666 2.1166667"
12
+   height="8"
13
+   width="8">
14
+  <defs
15
+     id="defs2" />
16
+  <metadata
17
+     id="metadata5">
18
+    <rdf:RDF>
19
+      <cc:Work
20
+         rdf:about="">
21
+        <dc:format>image/svg+xml</dc:format>
22
+        <dc:type
23
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
24
+        <dc:title></dc:title>
25
+      </cc:Work>
26
+    </rdf:RDF>
27
+  </metadata>
28
+  <g
29
+     transform="translate(0,-294.88332)"
30
+     id="layer1">
31
+    <circle
32
+       r="0.52916664"
33
+       cy="295.94165"
34
+       cx="1.0583333"
35
+       id="path4544"
36
+       style="fill:#d40000;fill-opacity:1;stroke:none;stroke-width:0.06614584;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
37
+  </g>
38
+</svg>
39
obs-studio-25.0.8.tar.xz/UI/forms/images/recording-inactive.svg Added
39
 
1
@@ -0,0 +1,37 @@
2
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
3
+<svg
4
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
5
+   xmlns:cc="http://creativecommons.org/ns#"
6
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
7
+   xmlns:svg="http://www.w3.org/2000/svg"
8
+   xmlns="http://www.w3.org/2000/svg"
9
+   id="svg8"
10
+   version="1.1"
11
+   viewBox="0 0 2.1166666 2.1166667"
12
+   height="8"
13
+   width="8">
14
+  <defs
15
+     id="defs2" />
16
+  <metadata
17
+     id="metadata5">
18
+    <rdf:RDF>
19
+      <cc:Work
20
+         rdf:about="">
21
+        <dc:format>image/svg+xml</dc:format>
22
+        <dc:type
23
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
24
+        <dc:title></dc:title>
25
+      </cc:Work>
26
+    </rdf:RDF>
27
+  </metadata>
28
+  <g
29
+     transform="translate(0,-294.88332)"
30
+     id="layer1">
31
+    <circle
32
+       r="0.52916664"
33
+       cy="295.94165"
34
+       cx="1.0583333"
35
+       id="path4544"
36
+       style="fill:#999999;fill-opacity:1;stroke:none;stroke-width:0.06614584;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
37
+  </g>
38
+</svg>
39
obs-studio-25.0.8.tar.xz/UI/forms/images/recording-pause-inactive.svg Added
47
 
1
@@ -0,0 +1,45 @@
2
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
3
+<svg
4
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
5
+   xmlns:cc="http://creativecommons.org/ns#"
6
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
7
+   xmlns:svg="http://www.w3.org/2000/svg"
8
+   xmlns="http://www.w3.org/2000/svg"
9
+   id="svg8"
10
+   version="1.1"
11
+   viewBox="0 0 5.2916665 5.2916668"
12
+   height="20"
13
+   width="20">
14
+  <defs
15
+     id="defs2" />
16
+  <metadata
17
+     id="metadata5">
18
+    <rdf:RDF>
19
+      <cc:Work
20
+         rdf:about="">
21
+        <dc:format>image/svg+xml</dc:format>
22
+        <dc:type
23
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
24
+        <dc:title></dc:title>
25
+      </cc:Work>
26
+    </rdf:RDF>
27
+  </metadata>
28
+  <g
29
+     transform="translate(0,-291.70832)"
30
+     id="layer1">
31
+    <rect
32
+       y="293.03125"
33
+       x="1.3229166"
34
+       height="2.6458333"
35
+       width="1.0583333"
36
+       id="rect822"
37
+       style="fill:#999999;fill-opacity:1;stroke:none;stroke-width:0.5020116;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
38
+    <rect
39
+       y="293.03125"
40
+       x="2.9104166"
41
+       height="2.6458333"
42
+       width="1.0583333"
43
+       id="rect822-1"
44
+       style="fill:#999999;fill-opacity:1;stroke:none;stroke-width:0.5020116;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
45
+  </g>
46
+</svg>
47
obs-studio-25.0.8.tar.xz/UI/forms/images/recording-pause.svg Added
47
 
1
@@ -0,0 +1,45 @@
2
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
3
+<svg
4
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
5
+   xmlns:cc="http://creativecommons.org/ns#"
6
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
7
+   xmlns:svg="http://www.w3.org/2000/svg"
8
+   xmlns="http://www.w3.org/2000/svg"
9
+   id="svg8"
10
+   version="1.1"
11
+   viewBox="0 0 5.2916665 5.2916668"
12
+   height="20"
13
+   width="20">
14
+  <defs
15
+     id="defs2" />
16
+  <metadata
17
+     id="metadata5">
18
+    <rdf:RDF>
19
+      <cc:Work
20
+         rdf:about="">
21
+        <dc:format>image/svg+xml</dc:format>
22
+        <dc:type
23
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
24
+        <dc:title></dc:title>
25
+      </cc:Work>
26
+    </rdf:RDF>
27
+  </metadata>
28
+  <g
29
+     transform="translate(0,-291.70832)"
30
+     id="layer1">
31
+    <rect
32
+       y="293.03125"
33
+       x="1.3229166"
34
+       height="2.6458333"
35
+       width="1.0583333"
36
+       id="rect822"
37
+       style="fill:#d4ae00;fill-opacity:1;stroke:none;stroke-width:0.5020116;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
38
+    <rect
39
+       y="293.03125"
40
+       x="2.9104166"
41
+       height="2.6458333"
42
+       width="1.0583333"
43
+       id="rect822-1"
44
+       style="fill:#d4ae00;fill-opacity:1;stroke:none;stroke-width:0.5020116;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
45
+  </g>
46
+</svg>
47
obs-studio-25.0.8.tar.xz/UI/forms/images/streaming-active.svg Added
57
 
1
@@ -0,0 +1,55 @@
2
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
3
+<svg
4
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
5
+   xmlns:cc="http://creativecommons.org/ns#"
6
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
7
+   xmlns:svg="http://www.w3.org/2000/svg"
8
+   xmlns="http://www.w3.org/2000/svg"
9
+   id="svg8"
10
+   version="1.1"
11
+   viewBox="0 0 2.1166666 2.1166667"
12
+   height="8"
13
+   width="8">
14
+  <defs
15
+     id="defs2" />
16
+  <metadata
17
+     id="metadata5">
18
+    <rdf:RDF>
19
+      <cc:Work
20
+         rdf:about="">
21
+        <dc:format>image/svg+xml</dc:format>
22
+        <dc:type
23
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
24
+        <dc:title></dc:title>
25
+      </cc:Work>
26
+    </rdf:RDF>
27
+  </metadata>
28
+  <g
29
+     transform="translate(0,-294.88332)"
30
+     id="layer1">
31
+    <circle
32
+       r="0.39687499"
33
+       cy="295.94165"
34
+       cx="1.0582843"
35
+       id="path4544-3"
36
+       style="fill:#5079cc;fill-opacity:1;stroke:none;stroke-width:0.13229169;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
37
+    <path
38
+       d="M 0.41577997,296.5497 A 0.79374999,0.79374999 0 0 1 0.13224262,295.94165 0.79374999,0.79374999 0 0 1 0.41577996,295.3336"
39
+       id="path4546-7"
40
+       style="fill:none;fill-opacity:1;stroke:#5079cc;stroke-width:0.15875001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
41
+    <path
42
+       transform="scale(-1,1)"
43
+       d="m -1.7008867,296.5497 a 0.79374999,0.79374999 0 0 1 -0.2835374,-0.60805 0.79374999,0.79374999 0 0 1 0.2835374,-0.60805"
44
+       id="path4546-1-3"
45
+       style="fill:none;fill-opacity:1;stroke:#5079cc;stroke-width:0.15875001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
46
+    <path
47
+       d="M 0.63239977,296.41847 A 0.62244385,0.62244385 0 0 1 0.4100551,295.94165 0.62244385,0.62244385 0 0 1 0.63239977,295.46483"
48
+       id="path4546-5-7"
49
+       style="fill:none;fill-opacity:1;stroke:#5079cc;stroke-width:0.15875001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
50
+    <path
51
+       transform="scale(-1,1)"
52
+       d="m -1.484193,296.41847 a 0.62244391,0.62244391 0 0 1 -0.2223447,-0.47682 0.62244391,0.62244391 0 0 1 0.2223447,-0.47682"
53
+       id="path4546-5-4-2"
54
+       style="fill:none;fill-opacity:1;stroke:#5079cc;stroke-width:0.15875001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
55
+  </g>
56
+</svg>
57
obs-studio-25.0.8.tar.xz/UI/forms/images/streaming-inactive.svg Added
57
 
1
@@ -0,0 +1,55 @@
2
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
3
+<svg
4
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
5
+   xmlns:cc="http://creativecommons.org/ns#"
6
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
7
+   xmlns:svg="http://www.w3.org/2000/svg"
8
+   xmlns="http://www.w3.org/2000/svg"
9
+   id="svg8"
10
+   version="1.1"
11
+   viewBox="0 0 2.1166666 2.1166667"
12
+   height="8"
13
+   width="8">
14
+  <defs
15
+     id="defs2" />
16
+  <metadata
17
+     id="metadata5">
18
+    <rdf:RDF>
19
+      <cc:Work
20
+         rdf:about="">
21
+        <dc:format>image/svg+xml</dc:format>
22
+        <dc:type
23
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
24
+        <dc:title></dc:title>
25
+      </cc:Work>
26
+    </rdf:RDF>
27
+  </metadata>
28
+  <g
29
+     transform="translate(0,-294.88332)"
30
+     id="layer1">
31
+    <circle
32
+       r="0.39687499"
33
+       cy="295.94165"
34
+       cx="1.0583333"
35
+       id="path4544"
36
+       style="fill:#7f7d7f;fill-opacity:1;stroke:none;stroke-width:0.13229167;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
37
+    <path
38
+       d="M 0.41582902,296.5497 A 0.79374999,0.79374999 0 0 1 0.13229167,295.94165 0.79374999,0.79374999 0 0 1 0.41582902,295.3336"
39
+       id="path4546"
40
+       style="fill:none;fill-opacity:1;stroke:#7f7d7f;stroke-width:0.15875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
41
+    <path
42
+       transform="scale(-1,1)"
43
+       d="m -1.7009357,296.5497 a 0.79374999,0.79374999 0 0 1 -0.2835373,-0.60805 0.79374999,0.79374999 0 0 1 0.2835373,-0.60805"
44
+       id="path4546-1"
45
+       style="fill:none;fill-opacity:1;stroke:#7f7d7f;stroke-width:0.15875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
46
+    <path
47
+       d="M 0.6324488,296.41847 A 0.6224438,0.6224438 0 0 1 0.41010416,295.94165 0.6224438,0.6224438 0 0 1 0.6324488,295.46483"
48
+       id="path4546-5"
49
+       style="fill:none;fill-opacity:1;stroke:#7f7d7f;stroke-width:0.15875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
50
+    <path
51
+       transform="scale(-1,1)"
52
+       d="m -1.484242,296.41847 a 0.62244385,0.62244385 0 0 1 -0.2223447,-0.47682 0.62244385,0.62244385 0 0 1 0.2223447,-0.47682"
53
+       id="path4546-5-4"
54
+       style="fill:none;fill-opacity:1;stroke:#7f7d7f;stroke-width:0.15875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
55
+  </g>
56
+</svg>
57
obs-studio-25.0.4.tar.xz/UI/forms/obs.qrc -> obs-studio-25.0.8.tar.xz/UI/forms/obs.qrc Changed
14
 
1
@@ -34,6 +34,12 @@
2
     <file>images/sources/text.svg</file>
3
     <file>images/sources/window.svg</file>
4
     <file>images/sources/default.svg</file>
5
+    <file>images/recording-active.svg</file>
6
+    <file>images/recording-inactive.svg</file>
7
+    <file>images/recording-pause.svg</file>
8
+    <file>images/recording-pause-inactive.svg</file>
9
+    <file>images/streaming-active.svg</file>
10
+    <file>images/streaming-inactive.svg</file>
11
   </qresource>
12
   <qresource prefix="/settings">
13
     <file>images/settings/output.svg</file>
14
obs-studio-25.0.4.tar.xz/UI/frontend-plugins/decklink-output-ui/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/UI/frontend-plugins/decklink-output-ui/CMakeLists.txt Changed
15
 
1
@@ -39,6 +39,13 @@
2
    forms/output.ui
3
    )
4
 
5
+if(WIN32)
6
+   set(MODULE_DESCRIPTION "OBS DeckLink Output UI")
7
+   configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in decklink-ouput-ui.rc)
8
+   list(APPEND decklink-ouput-ui_SOURCES
9
+       decklink-ouput-ui.rc)
10
+endif()
11
+
12
 if(APPLE)
13
    set(decklink-ouput-ui_PLATFORM_LIBS
14
        ${COCOA})
15
obs-studio-25.0.4.tar.xz/UI/frontend-plugins/frontend-tools/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/UI/frontend-plugins/frontend-tools/CMakeLists.txt Changed
14
 
1
@@ -71,8 +71,11 @@
2
 endif()
3
 
4
 if(WIN32)
5
+   set(MODULE_DESCRIPTION "OBS Frontend Tools")
6
+   configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in frontend-tools.rc)
7
    set(frontend-tools_PLATFORM_SOURCES
8
-       auto-scene-switcher-win.cpp)
9
+       auto-scene-switcher-win.cpp
10
+       frontend-tools.rc)
11
 
12
    if(BUILD_CAPTIONS)
13
        set(frontend-tools_PLATFORM_SOURCES
14
obs-studio-25.0.4.tar.xz/UI/obs-frontend-api/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/UI/obs-frontend-api/CMakeLists.txt Changed
14
 
1
@@ -7,6 +7,12 @@
2
 set(obs-frontend-api_SOURCES
3
    obs-frontend-api.cpp)
4
 
5
+if(WIN32)
6
+   set(MODULE_DESCRIPTION "OBS Frontend API")
7
+   configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in ./obs-frontend-api.rc)
8
+   list(APPEND obs-frontend-api_SOURCES
9
+       obs-frontend-api.rc)
10
+endif()
11
 set(obs-frontend-api_HEADERS
12
    obs-frontend-internal.hpp
13
    obs-frontend-api.h)
14
obs-studio-25.0.4.tar.xz/UI/properties-view.moc.hpp -> obs-studio-25.0.8.tar.xz/UI/properties-view.moc.hpp Changed
9
 
1
@@ -6,6 +6,7 @@
2
 #include <QStackedWidget>
3
 #include <QWidget>
4
 
5
+#include <obs.h>
6
 #include <media-io/frame-rate.h>
7
 
8
 #include <vector>
9
obs-studio-25.0.4.tar.xz/UI/source-tree.hpp -> obs-studio-25.0.8.tar.xz/UI/source-tree.hpp Changed
10
 
1
@@ -8,6 +8,8 @@
2
 #include <QStaticText>
3
 #include <QSvgRenderer>
4
 #include <QAbstractListModel>
5
+#include <obs.hpp>
6
+#include <obs-frontend-api.h>
7
 
8
 class QLabel;
9
 class QCheckBox;
10
obs-studio-25.0.4.tar.xz/UI/window-basic-main-dropfiles.cpp -> obs-studio-25.0.8.tar.xz/UI/window-basic-main-dropfiles.cpp Changed
14
 
1
@@ -169,6 +169,12 @@
2
 
3
 void OBSBasic::dragEnterEvent(QDragEnterEvent *event)
4
 {
5
+   // refuse drops of our own widgets
6
+   if (event->source() != nullptr) {
7
+       event->setDropAction(Qt::IgnoreAction);
8
+       return;
9
+   }
10
+
11
    event->acceptProposedAction();
12
 }
13
 
14
obs-studio-25.0.4.tar.xz/UI/window-basic-main-transitions.cpp -> obs-studio-25.0.8.tar.xz/UI/window-basic-main-transitions.cpp Changed
10
 
1
@@ -1346,7 +1346,7 @@
2
 
3
        RefreshQuickTransitions();
4
 
5
-       programLabel = new QLabel(QTStr("StudioMode.Program"));
6
+       programLabel = new QLabel(QTStr("StudioMode.Program"), this);
7
        programLabel->setSizePolicy(QSizePolicy::Preferred,
8
                        QSizePolicy::Preferred);
9
        programLabel->setAlignment(Qt::AlignHCenter | Qt::AlignBottom);
10
obs-studio-25.0.4.tar.xz/UI/window-basic-main.cpp -> obs-studio-25.0.8.tar.xz/UI/window-basic-main.cpp Changed
106
 
1
@@ -385,6 +385,7 @@
2
    statsDock->move(newPos);
3
 
4
    ui->previewLabel->setProperty("themeID", "previewProgramLabels");
5
+   ui->previewLabel->style()->polish(ui->previewLabel);
6
 
7
    bool labels = config_get_bool(GetGlobalConfig(), "BasicWindow",
8
                      "StudioModeLabels");
9
@@ -670,6 +671,8 @@
10
    }
11
 }
12
 
13
+static void LogFilter(obs_source_t *, obs_source_t *filter, void *v_val);
14
+
15
 static void LoadAudioDevice(const char *name, int channel, obs_data_t *parent)
16
 {
17
    obs_data_t *data = obs_data_get_obj(parent, name);
18
@@ -679,6 +682,10 @@
19
    obs_source_t *source = obs_load_source(data);
20
    if (source) {
21
        obs_set_output_source(channel, source);
22
+
23
+       const char *name = obs_source_get_name(source);
24
+       blog(LOG_INFO, "[Loaded global audio device]: '%s'", name);
25
+       obs_source_enum_filters(source, LogFilter, (void *)(intptr_t)1);
26
        obs_source_release(source);
27
    }
28
 
29
@@ -3915,6 +3922,7 @@
30
        return true;
31
    };
32
 
33
+   obs_enum_scenes(cb, nullptr);
34
    obs_enum_sources(cb, nullptr);
35
 
36
    if (api)
37
@@ -5719,9 +5727,6 @@
38
    UpdatePause(false);
39
 }
40
 
41
-#define RP_NO_HOTKEY_TITLE QTStr("Output.ReplayBuffer.NoHotkey.Title")
42
-#define RP_NO_HOTKEY_TEXT QTStr("Output.ReplayBuffer.NoHotkey.Msg")
43
-
44
 void OBSBasic::ShowReplayBufferPauseWarning()
45
 {
46
    auto msgBox = []() {
47
@@ -5773,21 +5778,6 @@
48
        return;
49
    }
50
 
51
-   obs_output_t *output = outputHandler->replayBuffer;
52
-   obs_data_t *hotkeys = obs_hotkeys_save_output(output);
53
-   obs_data_array_t *bindings =
54
-       obs_data_get_array(hotkeys, "ReplayBuffer.Save");
55
-   size_t count = obs_data_array_count(bindings);
56
-   obs_data_array_release(bindings);
57
-   obs_data_release(hotkeys);
58
-
59
-   if (!count) {
60
-       OBSMessageBox::information(this, RP_NO_HOTKEY_TITLE,
61
-                      RP_NO_HOTKEY_TEXT);
62
-       replayBufferButton->setChecked(false);
63
-       return;
64
-   }
65
-
66
    if (api)
67
        api->on_event(OBS_FRONTEND_EVENT_REPLAY_BUFFER_STARTING);
68
 
69
@@ -6225,6 +6215,9 @@
70
    if (transformWindow)
71
        transformWindow->close();
72
 
73
+   if (!GetCurrentSceneItem())
74
+       return;
75
+
76
    transformWindow = new OBSBasicTransform(this);
77
    transformWindow->show();
78
    transformWindow->setAttribute(Qt::WA_DeleteOnClose, true);
79
@@ -7264,7 +7257,7 @@
80
        copyVisible = obs_sceneitem_visible(item);
81
 
82
        uint32_t output_flags = obs_source_get_output_flags(source);
83
-       if (!(output_flags & OBS_SOURCE_DO_NOT_DUPLICATE) == 0)
84
+       if (output_flags & OBS_SOURCE_DO_NOT_DUPLICATE)
85
            allowPastingDuplicate = false;
86
    }
87
 
88
@@ -7703,6 +7696,8 @@
89
        pause->setChecked(true);
90
        pause->blockSignals(false);
91
 
92
+       ui->statusbar->RecordingPaused();
93
+
94
        if (trayIcon)
95
            trayIcon->setIcon(QIcon(":/res/images/obs_paused.png"));
96
 
97
@@ -7730,6 +7725,8 @@
98
        pause->setChecked(false);
99
        pause->blockSignals(false);
100
 
101
+       ui->statusbar->RecordingUnpaused();
102
+
103
        if (trayIcon)
104
            trayIcon->setIcon(
105
                QIcon(":/res/images/tray_active.png"));
106
obs-studio-25.0.4.tar.xz/UI/window-basic-stats.hpp -> obs-studio-25.0.8.tar.xz/UI/window-basic-stats.hpp Changed
9
 
1
@@ -2,6 +2,7 @@
2
 
3
 #include <obs.hpp>
4
 #include <util/platform.h>
5
+#include <obs-frontend-api.h>
6
 #include <QPointer>
7
 #include <QWidget>
8
 #include <QTimer>
9
obs-studio-25.0.4.tar.xz/UI/window-basic-status-bar.cpp -> obs-studio-25.0.8.tar.xz/UI/window-basic-status-bar.cpp Changed
160
 
1
@@ -11,18 +11,36 @@
2
    : QStatusBar(parent),
3
      delayInfo(new QLabel),
4
      droppedFrames(new QLabel),
5
+     streamIcon(new QLabel),
6
      streamTime(new QLabel),
7
+     recordIcon(new QLabel),
8
      recordTime(new QLabel),
9
      cpuUsage(new QLabel),
10
      transparentPixmap(20, 20),
11
      greenPixmap(20, 20),
12
      grayPixmap(20, 20),
13
-     redPixmap(20, 20)
14
+     redPixmap(20, 20),
15
+     recordingActivePixmap(QIcon(":/res/images/recording-active.svg")
16
+                   .pixmap(QSize(20, 20))),
17
+     recordingPausePixmap(QIcon(":/res/images/recording-pause.svg")
18
+                      .pixmap(QSize(20, 20))),
19
+     recordingPauseInactivePixmap(
20
+         QIcon(":/res/images/recording-pause-inactive.svg")
21
+             .pixmap(QSize(20, 20))),
22
+     recordingInactivePixmap(QIcon(":/res/images/recording-inactive.svg")
23
+                     .pixmap(QSize(20, 20))),
24
+     streamingActivePixmap(QIcon(":/res/images/streaming-active.svg")
25
+                   .pixmap(QSize(20, 20))),
26
+     streamingInactivePixmap(QIcon(":/res/images/streaming-inactive.svg")
27
+                     .pixmap(QSize(20, 20)))
28
 {
29
    streamTime->setText(QString("LIVE: 00:00:00"));
30
    recordTime->setText(QString("REC: 00:00:00"));
31
    cpuUsage->setText(QString("CPU: 0.0%, 0.00 fps"));
32
 
33
+   streamIcon->setPixmap(streamingInactivePixmap);
34
+   recordIcon->setPixmap(recordingInactivePixmap);
35
+
36
    QWidget *brWidget = new QWidget(this);
37
    QHBoxLayout *brLayout = new QHBoxLayout(brWidget);
38
    brLayout->setContentsMargins(0, 0, 0, 0);
39
@@ -39,8 +57,12 @@
40
    delayInfo->setAlignment(Qt::AlignVCenter);
41
    droppedFrames->setAlignment(Qt::AlignRight);
42
    droppedFrames->setAlignment(Qt::AlignVCenter);
43
+   streamIcon->setAlignment(Qt::AlignRight);
44
+   streamIcon->setAlignment(Qt::AlignVCenter);
45
    streamTime->setAlignment(Qt::AlignRight);
46
    streamTime->setAlignment(Qt::AlignVCenter);
47
+   recordIcon->setAlignment(Qt::AlignRight);
48
+   recordIcon->setAlignment(Qt::AlignVCenter);
49
    recordTime->setAlignment(Qt::AlignRight);
50
    recordTime->setAlignment(Qt::AlignVCenter);
51
    cpuUsage->setAlignment(Qt::AlignRight);
52
@@ -50,13 +72,15 @@
53
 
54
    delayInfo->setIndent(20);
55
    droppedFrames->setIndent(20);
56
-   streamTime->setIndent(20);
57
-   recordTime->setIndent(20);
58
+   streamIcon->setIndent(20);
59
+   recordIcon->setIndent(20);
60
    cpuUsage->setIndent(20);
61
    kbps->setIndent(10);
62
 
63
    addPermanentWidget(droppedFrames);
64
+   addPermanentWidget(streamIcon);
65
    addPermanentWidget(streamTime);
66
+   addPermanentWidget(recordIcon);
67
    addPermanentWidget(recordTime);
68
    addPermanentWidget(cpuUsage);
69
    addPermanentWidget(delayInfo);
70
@@ -93,6 +117,14 @@
71
            statusSquare->setPixmap(grayPixmap);
72
        }
73
    }
74
+
75
+   if (streamOutput) {
76
+       streamIcon->setPixmap(streamingActivePixmap);
77
+   }
78
+
79
+   if (recordOutput) {
80
+       recordIcon->setPixmap(recordingActivePixmap);
81
+   }
82
 }
83
 
84
 void OBSBasicStatusBar::Deactivate()
85
@@ -103,11 +135,13 @@
86
 
87
    if (!streamOutput) {
88
        streamTime->setText(QString("LIVE: 00:00:00"));
89
+       streamIcon->setPixmap(streamingInactivePixmap);
90
        totalStreamSeconds = 0;
91
    }
92
 
93
    if (!recordOutput) {
94
        recordTime->setText(QString("REC: 00:00:00"));
95
+       recordIcon->setPixmap(recordingInactivePixmap);
96
        totalRecordSeconds = 0;
97
    }
98
 
99
@@ -247,25 +281,26 @@
100
 {
101
    bool paused = os_atomic_load_bool(&recording_paused);
102
 
103
-   if (!paused)
104
+   if (!paused) {
105
        totalRecordSeconds++;
106
 
107
-   QString text;
108
-
109
-   if (paused) {
110
-       text = QStringLiteral("REC: PAUSED");
111
-   } else {
112
        int seconds = totalRecordSeconds % 60;
113
        int totalMinutes = totalRecordSeconds / 60;
114
        int minutes = totalMinutes % 60;
115
        int hours = totalMinutes / 60;
116
 
117
-       text = QString::asprintf("REC: %02d:%02d:%02d", hours, minutes,
118
-                    seconds);
119
-   }
120
+       QString text = QString::asprintf("REC: %02d:%02d:%02d", hours,
121
+                        minutes, seconds);
122
 
123
-   recordTime->setText(text);
124
-   recordTime->setMinimumWidth(recordTime->width());
125
+       recordTime->setText(text);
126
+       recordTime->setMinimumWidth(recordTime->width());
127
+   } else {
128
+       recordIcon->setPixmap(streamPauseIconToggle
129
+                         ? recordingPauseInactivePixmap
130
+                         : recordingPausePixmap);
131
+
132
+       streamPauseIconToggle = !streamPauseIconToggle;
133
+   }
134
 }
135
 
136
 void OBSBasicStatusBar::UpdateDroppedFrames()
137
@@ -483,3 +518,22 @@
138
    recordOutput = nullptr;
139
    Deactivate();
140
 }
141
+
142
+void OBSBasicStatusBar::RecordingPaused()
143
+{
144
+   QString text = QStringLiteral("REC: PAUSED");
145
+   recordTime->setText(text);
146
+   recordTime->setMinimumWidth(recordTime->width());
147
+
148
+   if (recordOutput) {
149
+       recordIcon->setPixmap(recordingPausePixmap);
150
+       streamPauseIconToggle = true;
151
+   }
152
+}
153
+
154
+void OBSBasicStatusBar::RecordingUnpaused()
155
+{
156
+   if (recordOutput) {
157
+       recordIcon->setPixmap(recordingActivePixmap);
158
+   }
159
+}
160
obs-studio-25.0.4.tar.xz/UI/window-basic-status-bar.hpp -> obs-studio-25.0.8.tar.xz/UI/window-basic-status-bar.hpp Changed
43
 
1
@@ -14,8 +14,10 @@
2
 private:
3
    QLabel *delayInfo;
4
    QLabel *droppedFrames;
5
+   QLabel *streamIcon;
6
    QLabel *streamTime;
7
    QLabel *recordTime;
8
+   QLabel *recordIcon;
9
    QLabel *cpuUsage;
10
    QLabel *kbps;
11
    QLabel *statusSquare;
12
@@ -24,6 +26,7 @@
13
    obs_output_t *recordOutput = nullptr;
14
    bool active = false;
15
    bool overloadedNotify = true;
16
+   bool streamPauseIconToggle = false;
17
 
18
    int retries = 0;
19
    int totalStreamSeconds = 0;
20
@@ -48,6 +51,13 @@
21
    QPixmap grayPixmap;
22
    QPixmap redPixmap;
23
 
24
+   QPixmap recordingActivePixmap;
25
+   QPixmap recordingPausePixmap;
26
+   QPixmap recordingPauseInactivePixmap;
27
+   QPixmap recordingInactivePixmap;
28
+   QPixmap streamingActivePixmap;
29
+   QPixmap streamingInactivePixmap;
30
+
31
    float lastCongestion = 0.0f;
32
 
33
    QPointer<QTimer> refreshTimer;
34
@@ -81,6 +91,8 @@
35
    void StreamStopped();
36
    void RecordingStarted(obs_output_t *output);
37
    void RecordingStopped();
38
+   void RecordingPaused();
39
+   void RecordingUnpaused();
40
 
41
    void ReconnectClear();
42
 };
43
obs-studio-25.0.4.tar.xz/UI/window-projector.cpp -> obs-studio-25.0.8.tar.xz/UI/window-projector.cpp Changed
30
 
1
@@ -58,9 +58,6 @@
2
 
3
    connect(this, &OBSQTDisplay::DisplayCreated, addDrawCallback);
4
 
5
-   if (isFullScreen())
6
-       SetHideCursor();
7
-
8
    if (type == ProjectorType::Multiview) {
9
        obs_enter_graphics();
10
 
11
@@ -169,8 +166,9 @@
12
 {
13
    savedMonitor = monitor;
14
    QScreen *screen = QGuiApplication::screens()[monitor];
15
-   showFullScreen();
16
    setGeometry(screen->geometry());
17
+   showFullScreen();
18
+   SetHideCursor();
19
 }
20
 
21
 void OBSProjector::SetHideCursor()
22
@@ -1034,7 +1032,6 @@
23
 
24
    int monitor = sender()->property("monitor").toInt();
25
    SetMonitor(monitor);
26
-   SetHideCursor();
27
 
28
    UpdateProjectorTitle(QT_UTF8(obs_source_get_name(source)));
29
 }
30
obs-studio-25.0.4.tar.xz/azure-pipelines.yml -> obs-studio-25.0.8.tar.xz/azure-pipelines.yml Changed
10
 
1
@@ -55,7 +55,7 @@
2
     condition: or(ne(variables['Build.Reason'], 'PullRequest'), eq(variables['prHasCILabel'], true))
3
     inputs:
4
       pathtoPublish: './nightly'
5
-      artifactName: build
6
+      artifactName: macbuild
7
 
8
 - job: 'Build_Windows32'
9
   dependsOn: Prebuild
10
obs-studio-25.0.8.tar.xz/cmake/winrc/obs-module.rc.in Added
27
 
1
@@ -0,0 +1,24 @@
2
+1 VERSIONINFO
3
+FILEVERSION ${UI_VERSION_MAJOR},${UI_VERSION_MINOR},${UI_VERSION_PATCH},0
4
+BEGIN
5
+  BLOCK "StringFileInfo"
6
+  BEGIN
7
+    BLOCK "040904B0"
8
+    BEGIN
9
+      VALUE "CompanyName", "${OBS_COMPANY_NAME}"
10
+      VALUE "FileDescription", "${MODULE_DESCRIPTION}"
11
+      VALUE "FileVersion", "${UI_VERSION}"
12
+      VALUE "ProductName", "${OBS_PRODUCT_NAME}"
13
+      VALUE "ProductVersion", "${UI_VERSION}"
14
+      VALUE "Comments", "${OBS_COMMENTS}"
15
+      VALUE "LegalCopyright", "${OBS_LEGAL_COPYRIGHT}"
16
+      VALUE "InternalName", "${PROJECT_NAME}"
17
+      VALUE "OriginalFilename", "${PROJECT_NAME}"
18
+    END
19
+  END
20
+
21
+  BLOCK "VarFileInfo"
22
+  BEGIN
23
+    VALUE "Translation", 0x0409, 0x04B0
24
+  END
25
+END
26
\ No newline at end of file
27
obs-studio-25.0.4.tar.xz/deps/glad/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/deps/glad/CMakeLists.txt Changed
15
 
1
@@ -11,9 +11,12 @@
2
    include/glad/glad.h)
3
 
4
 if(WIN32)
5
+   set(MODULE_DESCRIPTION "Glad OpenGL Loading Library")
6
+   configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in obsglad.rc)
7
    set(glad_PLATFORM_SOURCES
8
        src/glad_wgl.c
9
-       include/glad/glad_wgl.h)
10
+       include/glad/glad_wgl.h
11
+       obsglad.rc)
12
 elseif(NOT APPLE)
13
    set(glad_PLATFORM_SOURCES
14
        src/glad_glx.c
15
obs-studio-25.0.4.tar.xz/deps/lzma/liblzma/check/crc32_x86.S -> obs-studio-25.0.8.tar.xz/deps/lzma/liblzma/check/crc32_x86.S Changed
9
 
1
@@ -299,6 +299,6 @@
2
  * use __linux__ here, but I don't know a way to detect when
3
  * we are using GNU assembler.
4
  */
5
-#if defined(__ELF__) && defined(__linux__)
6
+#if defined(__ELF__) && (defined(__FreeBSD__) || defined(__linux__))
7
    .section    .note.GNU-stack,"",@progbits
8
 #endif
9
obs-studio-25.0.4.tar.xz/deps/lzma/liblzma/check/crc64_x86.S -> obs-studio-25.0.8.tar.xz/deps/lzma/liblzma/check/crc64_x86.S Changed
9
 
1
@@ -282,6 +282,6 @@
2
  * use __linux__ here, but I don't know a way to detect when
3
  * we are using GNU assembler.
4
  */
5
-#if defined(__ELF__) && defined(__linux__)
6
+#if defined(__ELF__) && (defined(__FreeBSD__) || defined(__linux__))
7
    .section    .note.GNU-stack,"",@progbits
8
 #endif
9
obs-studio-25.0.4.tar.xz/deps/obs-scripting/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/deps/obs-scripting/CMakeLists.txt Changed
15
 
1
@@ -158,6 +158,13 @@
2
    cstrcache.h
3
    )
4
 
5
+if(WIN32)
6
+   set(MODULE_DESCRIPTION "OBS Studio scripting module")
7
+   configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in obs-scripting.rc)
8
+   list(APPEND obs-scripting_SOURCES
9
+       obs-scripting.rc)
10
+endif()
11
+
12
 file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/swig)
13
 
14
 if(PYTHONLIBS_FOUND)
15
obs-studio-25.0.4.tar.xz/deps/w32-pthreads/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/deps/w32-pthreads/CMakeLists.txt Changed
14
 
1
@@ -4,8 +4,11 @@
2
    return()
3
 endif()
4
 
5
+set(MODULE_DESCRIPTION "POSIX Threads for Windows")
6
+configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in w32-pthreads.rc)
7
 set(w32-pthreads_SOURCES
8
-   pthread.c)
9
+   pthread.c
10
+   w32-pthreads.rc)
11
 
12
 set(w32-pthreads_HEADERS
13
    implement.h
14
obs-studio-25.0.4.tar.xz/docs/sphinx/reference-properties.rst -> obs-studio-25.0.8.tar.xz/docs/sphinx/reference-properties.rst Changed
71
 
1
@@ -71,6 +71,10 @@
2
 
3
 ---------------------
4
 
5
+.. function:: obs_properties_t *obs_properties_get_parent(obs_properties_t *props)
6
+
7
+---------------------
8
+
9
 
10
 Property Object Functions
11
 -------------------------
12
@@ -276,6 +280,29 @@
13
 
14
 ---------------------
15
 
16
+.. function:: obs_property_t *obs_properties_add_group(obs_properties_t *props, const char *name, const char *description, enum obs_group_type type, obs_properties_t *group)
17
+
18
+   Adds a property group.
19
+
20
+   :param    name:        Setting identifier string
21
+   :param    description: Localized name shown to user
22
+   :param    type:        Can be one of the following values:
23
+
24
+                          - **OBS_GROUP_NORMAL** - A normal group with just a name and content.
25
+                          - **OBS_GROUP_CHECKABLE** - A checkable group with a checkbox, name and content.
26
+
27
+   :param    group:       Group to add
28
+
29
+   :return:               The property
30
+
31
+   Important Related Functions:
32
+
33
+   - :c:func:`obs_property_group_type`
34
+   - :c:func:`obs_property_group_content`
35
+   - :c:func:`obs_properties_get_parent`
36
+
37
+---------------------
38
+
39
 
40
 Property Enumeration Functions
41
 ------------------------------
42
@@ -340,6 +367,7 @@
43
             - OBS_PROPERTY_FONT
44
             - OBS_PROPERTY_EDITABLE_LIST
45
             - OBS_PROPERTY_FRAME_RATE
46
+            - OBS_PROPERTY_GROUP
47
 
48
 ---------------------
49
 
50
@@ -467,6 +495,20 @@
51
 
52
 ---------------------
53
 
54
+.. function:: enum obs_group_type obs_property_group_type(obs_property_t *p)
55
+
56
+  :return: One of the following values:
57
+
58
+            - OBS_COMBO_INVALID
59
+            - OBS_GROUP_NORMAL
60
+            - OBS_GROUP_CHECKABLE
61
+
62
+---------------------
63
+
64
+.. function:: obs_properties_t *obs_property_group_content(obs_property_t *p)
65
+
66
+---------------------
67
+
68
 
69
 Property Modification Functions
70
 -------------------------------
71
obs-studio-25.0.4.tar.xz/formatcode.sh -> obs-studio-25.0.8.tar.xz/formatcode.sh Changed
14
 
1
@@ -14,10 +14,8 @@
2
 # Get CPU count
3
 OS=$(uname)
4
 NPROC=1
5
-if [[ $OS = "Linux" ]] ; then
6
-    NPROC=$(nproc)
7
-elif [[ ${OS} = "Darwin" ]] ; then
8
-    NPROC=$(sysctl -n hw.physicalcpu)
9
+if [[ $OS = "Linux" || $OS = "Darwin" ]] ; then
10
+    NPROC=$(getconf _NPROCESSORS_ONLN)
11
 fi
12
 
13
 # Discover clang-format
14
obs-studio-25.0.4.tar.xz/libobs-d3d11/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/libobs-d3d11/CMakeLists.txt Changed
21
 
1
@@ -4,6 +4,9 @@
2
 
3
 add_definitions(-DLIBOBS_EXPORTS)
4
 
5
+set(MODULE_DESCRIPTION "OBS Library D3D11 wrapper")
6
+configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in libobs-d3d11.rc)
7
+
8
 if(NOT DEFINED GPU_PRIORITY_VAL OR "${GPU_PRIORITY_VAL}" STREQUAL "" OR
9
    "${GPU_PRIORITY_VAL}" STREQUAL "0")
10
    set(USE_GPU_PRIORITY FALSE)
11
@@ -30,7 +33,8 @@
12
    d3d11-vertexbuffer.cpp
13
    d3d11-duplicator.cpp
14
    d3d11-rebuild.cpp
15
-   d3d11-zstencilbuffer.cpp)
16
+   d3d11-zstencilbuffer.cpp
17
+   libobs-d3d11.rc)
18
 
19
 set(libobs-d3d11_HEADERS
20
    ${CMAKE_CURRENT_BINARY_DIR}/d3d11-config.h
21
obs-studio-25.0.4.tar.xz/libobs-opengl/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/libobs-opengl/CMakeLists.txt Changed
14
 
1
@@ -7,8 +7,11 @@
2
 add_definitions(-DLIBOBS_EXPORTS)
3
 
4
 if(WIN32)
5
+   set(MODULE_DESCRIPTION "OBS Library OpenGL wrapper")
6
+   configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in libobs-opengl.rc)
7
    set(libobs-opengl_PLATFORM_SOURCES
8
-       gl-windows.c)
9
+       gl-windows.c
10
+       libobs-opengl.rc)
11
 elseif(APPLE)
12
    set(libobs-opengl_PLATFORM_SOURCES
13
        gl-cocoa.m)
14
obs-studio-25.0.4.tar.xz/libobs-opengl/gl-shaderparser.c -> obs-studio-25.0.8.tar.xz/libobs-opengl/gl-shaderparser.c Changed
79
 
1
@@ -270,6 +270,7 @@
2
  *   mul      -> (change to operator)
3
  *   rsqrt    -> inversesqrt
4
  *   saturate -> (use clamp)
5
+ *   sincos   -> (map to manual sin/cos calls)
6
  *   tex*     -> texture
7
  *   tex*grad -> textureGrad
8
  *   tex*lod  -> textureLod
9
@@ -301,6 +302,51 @@
10
    return true;
11
 }
12
 
13
+static bool gl_write_sincos(struct gl_shader_parser *glsp,
14
+               struct cf_token **p_token)
15
+{
16
+   struct cf_parser *cfp = &glsp->parser.cfp;
17
+   struct dstr var = {0};
18
+   bool success = false;
19
+
20
+   cfp->cur_token = *p_token;
21
+
22
+   if (!cf_next_token(cfp))
23
+       return false;
24
+   if (!cf_token_is(cfp, "("))
25
+       return false;
26
+
27
+   dstr_printf(&var, "sincos_var_internal_%d", glsp->sincos_counter++);
28
+
29
+   dstr_cat(&glsp->gl_string, "float ");
30
+   dstr_cat_dstr(&glsp->gl_string, &var);
31
+   dstr_cat(&glsp->gl_string, " = ");
32
+   gl_write_function_contents(glsp, &cfp->cur_token, ",");
33
+   dstr_cat(&glsp->gl_string, "); ");
34
+
35
+   if (!cf_next_token(cfp))
36
+       goto fail;
37
+   gl_write_function_contents(glsp, &cfp->cur_token, ",");
38
+   dstr_cat(&glsp->gl_string, " = sin(");
39
+   dstr_cat_dstr(&glsp->gl_string, &var);
40
+   dstr_cat(&glsp->gl_string, "); ");
41
+
42
+   if (!cf_next_token(cfp))
43
+       goto fail;
44
+   gl_write_function_contents(glsp, &cfp->cur_token, ")");
45
+   dstr_cat(&glsp->gl_string, " = cos(");
46
+   dstr_cat_dstr(&glsp->gl_string, &var);
47
+   dstr_cat(&glsp->gl_string, ")");
48
+
49
+   success = true;
50
+
51
+fail:
52
+   dstr_free(&var);
53
+
54
+   *p_token = cfp->cur_token;
55
+   return success;
56
+}
57
+
58
 static bool gl_write_saturate(struct gl_shader_parser *glsp,
59
                  struct cf_token **p_token)
60
 {
61
@@ -404,7 +450,7 @@
62
    bool written = true;
63
 
64
    if (strref_cmp(&token->str, "atan2") == 0) {
65
-       dstr_cat(&glsp->gl_string, "atan2");
66
+       dstr_cat(&glsp->gl_string, "atan");
67
    } else if (strref_cmp(&token->str, "ddx") == 0) {
68
        dstr_cat(&glsp->gl_string, "dFdx");
69
    } else if (strref_cmp(&token->str, "ddy") == 0) {
70
@@ -421,6 +467,8 @@
71
        written = gl_write_saturate(glsp, &token);
72
    } else if (strref_cmp(&token->str, "mul") == 0) {
73
        written = gl_write_mul(glsp, &token);
74
+   } else if (strref_cmp(&token->str, "sincos") == 0) {
75
+       written = gl_write_sincos(glsp, &token);
76
    } else {
77
        struct shader_var *var = sp_getparam(glsp, token);
78
        if (var && astrcmp_n(var->type, "texture", 7) == 0)
79
obs-studio-25.0.4.tar.xz/libobs-opengl/gl-shaderparser.h -> obs-studio-25.0.8.tar.xz/libobs-opengl/gl-shaderparser.h Changed
17
 
1
@@ -48,6 +48,7 @@
2
    const char *output_prefix;
3
    struct shader_parser parser;
4
    struct dstr gl_string;
5
+   int sincos_counter;
6
 
7
    DARRAY(uint32_t) texture_samplers;
8
    DARRAY(struct gl_parser_attrib) attribs;
9
@@ -70,6 +71,7 @@
10
    dstr_init(&glsp->gl_string);
11
    da_init(glsp->texture_samplers);
12
    da_init(glsp->attribs);
13
+   glsp->sincos_counter = 1;
14
 }
15
 
16
 static inline void gl_shader_parser_free(struct gl_shader_parser *glsp)
17
obs-studio-25.0.4.tar.xz/libobs-opengl/gl-subsystem.c -> obs-studio-25.0.8.tar.xz/libobs-opengl/gl-subsystem.c Changed
19
 
1
@@ -1264,7 +1264,6 @@
2
             int height)
3
 {
4
    uint32_t base_height = 0;
5
-   int gl_y = 0;
6
 
7
    /* GL uses bottom-up coordinates for viewports.  We want top-down */
8
    if (device->cur_render_target) {
9
@@ -1274,7 +1273,8 @@
10
        gl_getclientsize(device->cur_swap, &dw, &base_height);
11
    }
12
 
13
-   if (base_height)
14
+   GLint gl_y = y;
15
+   if (base_height && !device->cur_fbo)
16
        gl_y = base_height - y - height;
17
 
18
    glViewport(x, gl_y, width, height);
19
obs-studio-25.0.4.tar.xz/libobs/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/libobs/CMakeLists.txt Changed
25
 
1
@@ -81,12 +81,22 @@
2
 include_directories(${OBS_JANSSON_INCLUDE_DIRS})
3
 
4
 if(WIN32)
5
+   set(MODULE_DESCRIPTION "OBS Library")
6
+   file(STRINGS obs-config.h _version_parse REGEX "^.*(MAJOR|MINOR|PATCH)_VER[ \t]+[0-9]+[ \t]*$")
7
+
8
+   string(REGEX REPLACE ".*MAJOR_VER[ \t]+([0-9]+).*" "\\1" UI_VERSION_MAJOR "${_version_parse}")
9
+   string(REGEX REPLACE ".*MINOR_VER[ \t]+([0-9]+).*" "\\1" UI_VERSION_MINOR "${_version_parse}")
10
+   string(REGEX REPLACE ".*PATCH_VER[ \t]+([0-9]+).*" "\\1" UI_VERSION_PATCH "${_version_parse}")
11
+   set(UI_VERSION "${UI_VERSION_MAJOR}.${UI_VERSION_MINOR}.${UI_VERSION_PATCH}")
12
+
13
+   configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in libobs.rc)
14
    set(libobs_PLATFORM_SOURCES
15
        obs-win-crash-handler.c
16
        obs-windows.c
17
        util/threading-windows.c
18
        util/pipe-windows.c
19
-       util/platform-windows.c)
20
+       util/platform-windows.c
21
+       libobs.rc)
22
    set(libobs_PLATFORM_HEADERS
23
        util/threading-windows.h
24
        util/windows/win-registry.h
25
obs-studio-25.0.4.tar.xz/libobs/obs-cocoa.m -> obs-studio-25.0.8.tar.xz/libobs/obs-cocoa.m Changed
10
 
1
@@ -65,7 +65,7 @@
2
            [NSRunningApplication currentApplication];
3
        NSURL *bundleURL = [app bundleURL];
4
        NSURL *pluginsURL = [bundleURL
5
-           URLByAppendingPathComponent:@"Contents/Plugins"];
6
+           URLByAppendingPathComponent:@"Contents/PlugIns"];
7
        NSURL *dataURL = [bundleURL
8
            URLByAppendingPathComponent:
9
                @"Contents/Resources/data/obs-plugins/%module%"];
10
obs-studio-25.0.4.tar.xz/libobs/obs-config.h -> obs-studio-25.0.8.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 4
6
+#define LIBOBS_API_PATCH_VER 8
7
 
8
 #define MAKE_SEMANTIC_VERSION(major, minor, patch) \
9
    ((major << 24) | (minor << 16) | patch)
10
obs-studio-25.0.4.tar.xz/libobs/obs-encoder.c -> obs-studio-25.0.8.tar.xz/libobs/obs-encoder.c Changed
44
 
1
@@ -276,6 +276,8 @@
2
        obs_context_data_free(&encoder->context);
3
        if (encoder->owns_info_id)
4
            bfree((void *)encoder->info.id);
5
+       if (encoder->last_error_message)
6
+           bfree(encoder->last_error_message);
7
        bfree(encoder);
8
    }
9
 }
10
@@ -521,6 +523,7 @@
11
        encoder->offset_usec = 0;
12
        encoder->start_ts = 0;
13
    }
14
+   obs_encoder_set_last_error(encoder, NULL);
15
    pthread_mutex_unlock(&encoder->init_mutex);
16
 }
17
 
18
@@ -1484,3 +1487,25 @@
19
               ? os_atomic_load_bool(&encoder->paused)
20
               : false;
21
 }
22
+
23
+const char *obs_encoder_get_last_error(obs_encoder_t *encoder)
24
+{
25
+   if (!obs_encoder_valid(encoder, "obs_encoder_get_last_error"))
26
+       return NULL;
27
+
28
+   return encoder->last_error_message;
29
+}
30
+
31
+void obs_encoder_set_last_error(obs_encoder_t *encoder, const char *message)
32
+{
33
+   if (!obs_encoder_valid(encoder, "obs_encoder_set_last_error"))
34
+       return;
35
+
36
+   if (encoder->last_error_message)
37
+       bfree(encoder->last_error_message);
38
+
39
+   if (message)
40
+       encoder->last_error_message = bstrdup(message);
41
+   else
42
+       encoder->last_error_message = NULL;
43
+}
44
obs-studio-25.0.4.tar.xz/libobs/obs-internal.h -> obs-studio-25.0.8.tar.xz/libobs/obs-internal.h Changed
9
 
1
@@ -1076,6 +1076,7 @@
2
    struct pause_data pause;
3
 
4
    const char *profile_encoder_encode_name;
5
+   char *last_error_message;
6
 };
7
 
8
 extern struct obs_encoder_info *find_encoder(const char *id);
9
obs-studio-25.0.4.tar.xz/libobs/obs-output.c -> obs-studio-25.0.8.tar.xz/libobs/obs-output.c Changed
25
 
1
@@ -1979,6 +1979,9 @@
2
 {
3
    for (size_t i = 0; i < num_mixes; i++) {
4
        if (!obs_encoder_initialize(output->audio_encoders[i])) {
5
+           obs_output_set_last_error(
6
+               output, obs_encoder_get_last_error(
7
+                       output->audio_encoders[i]));
8
            return false;
9
        }
10
    }
11
@@ -2038,8 +2041,12 @@
12
 
13
    if (!encoded)
14
        return false;
15
-   if (has_video && !obs_encoder_initialize(output->video_encoder))
16
+   if (has_video && !obs_encoder_initialize(output->video_encoder)) {
17
+       obs_output_set_last_error(
18
+           output,
19
+           obs_encoder_get_last_error(output->video_encoder));
20
        return false;
21
+   }
22
    if (has_audio && !initialize_audio_encoders(output, num_mixes))
23
        return false;
24
 
25
obs-studio-25.0.4.tar.xz/libobs/obs.c -> obs-studio-25.0.8.tar.xz/libobs/obs.c Changed
11
 
1
@@ -2108,7 +2108,8 @@
2
 
3
    while (source) {
4
        if ((source->info.type != OBS_SOURCE_TYPE_FILTER) != 0 &&
5
-           !source->context.private && cb(data_, source)) {
6
+           !source->context.private && !source->removed &&
7
+           cb(data_, source)) {
8
            obs_data_t *source_data = obs_save_source(source);
9
 
10
            obs_data_array_push_back(array, source_data);
11
obs-studio-25.0.4.tar.xz/libobs/obs.h -> obs-studio-25.0.8.tar.xz/libobs/obs.h Changed
12
 
1
@@ -2102,6 +2102,10 @@
2
 /** Returns whether encoder is paused */
3
 EXPORT bool obs_encoder_paused(const obs_encoder_t *output);
4
 
5
+EXPORT const char *obs_encoder_get_last_error(obs_encoder_t *encoder);
6
+EXPORT void obs_encoder_set_last_error(obs_encoder_t *encoder,
7
+                      const char *message);
8
+
9
 /* ------------------------------------------------------------------------- */
10
 /* Stream Services */
11
 
12
obs-studio-25.0.4.tar.xz/libobs/util/platform-nix.c -> obs-studio-25.0.8.tar.xz/libobs/util/platform-nix.c Changed
22
 
1
@@ -275,7 +275,20 @@
2
 char *os_get_executable_path_ptr(const char *name)
3
 {
4
    char exe[PATH_MAX];
5
+#if defined(__FreeBSD__) || defined(__DragonFly__)
6
+   int sysctlname[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1};
7
+   size_t pathlen = PATH_MAX;
8
+   ssize_t count;
9
+   if (sysctl(sysctlname, nitems(sysctlname), exe, &pathlen, NULL, 0) ==
10
+       -1) {
11
+       blog(LOG_ERROR, "sysctl(KERN_PROC_PATHNAME) failed, errno %d",
12
+            errno);
13
+       return NULL;
14
+   }
15
+   count = pathlen;
16
+#else
17
    ssize_t count = readlink("/proc/self/exe", exe, PATH_MAX);
18
+#endif
19
    const char *path_out = NULL;
20
    struct dstr path;
21
 
22
obs-studio-25.0.4.tar.xz/plugins/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/plugins/CMakeLists.txt Changed
9
 
1
@@ -46,6 +46,7 @@
2
    add_subdirectory(linux-pulseaudio)
3
    add_subdirectory(linux-v4l2)
4
    add_subdirectory(linux-jack)
5
+   add_subdirectory(linux-alsa)
6
 endif()
7
 
8
 option(BUILD_BROWSER "Build browser plugin" OFF)
9
obs-studio-25.0.4.tar.xz/plugins/coreaudio-encoder/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/plugins/coreaudio-encoder/CMakeLists.txt Changed
12
 
1
@@ -4,6 +4,10 @@
2
    encoder.cpp)
3
 
4
 if (WIN32)
5
+   set(MODULE_DESCRIPTION "OBS Core Audio encoder")
6
+   configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in coreaudio-encoder.rc)
7
+   list(APPEND coreaudio-encoder_SOURCES
8
+       coreaudio-encoder.rc)
9
    set(coreaudio-encoder_HEADERS windows-imports.h)
10
    set(coreaudio-encoder_LIBS )
11
 
12
obs-studio-25.0.4.tar.xz/plugins/decklink/win/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/plugins/decklink/win/CMakeLists.txt Changed
19
 
1
@@ -31,6 +31,8 @@
2
    ../util.hpp
3
    )
4
 
5
+set(MODULE_DESCRIPTION "OBS DeckLink Windows module")
6
+configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in win-decklink.rc)
7
 set(win-decklink_SOURCES
8
    ../plugin-main.cpp
9
    ../decklink-devices.cpp
10
@@ -46,7 +48,7 @@
11
    ../audio-repack.c
12
    platform.cpp
13
    ../util.cpp
14
-   )
15
+   win-decklink.rc)
16
 
17
 add_idl_files(win-decklink-sdk_GENERATED_FILES
18
    ${win-decklink-sdk_IDLS}
19
obs-studio-25.0.4.tar.xz/plugins/image-source/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/plugins/image-source/CMakeLists.txt Changed
15
 
1
@@ -10,6 +10,13 @@
2
    color-source.c
3
    obs-slideshow.c)
4
 
5
+if(WIN32)
6
+   set(MODULE_DESCRIPTION "OBS image module")
7
+   configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in image-source.rc)
8
+   list(APPEND image-source_SOURCES
9
+       image-source.rc)
10
+endif()
11
+
12
 add_library(image-source MODULE
13
    ${image-source_SOURCES})
14
 target_link_libraries(image-source
15
obs-studio-25.0.4.tar.xz/plugins/linux-jack/jack-wrapper.c -> obs-studio-25.0.8.tar.xz/plugins/linux-jack/jack-wrapper.c Changed
10
 
1
@@ -43,6 +43,8 @@
2
        return SPEAKERS_STEREO;
3
    case 3:
4
        return SPEAKERS_2POINT1;
5
+   case 4:
6
+       return SPEAKERS_4POINT0;
7
    case 5:
8
        return SPEAKERS_4POINT1;
9
    case 6:
10
obs-studio-25.0.4.tar.xz/plugins/linux-v4l2/v4l2-controls.c -> obs-studio-25.0.8.tar.xz/plugins/linux-v4l2/v4l2-controls.c Changed
10
 
1
@@ -95,7 +95,7 @@
2
    return (qctrl->flags & INVALID_CONTROL_FLAGS) == 0;
3
 }
4
 
5
-static inline bool add_control_property(obs_properties_t *props,
6
+static inline void add_control_property(obs_properties_t *props,
7
                    obs_data_t *settings, int_fast32_t dev,
8
                    struct v4l2_queryctrl *qctrl)
9
 {
10
obs-studio-25.0.4.tar.xz/plugins/mac-capture/window-utils.h -> obs-studio-25.0.8.tar.xz/plugins/mac-capture/window-utils.h Changed
9
 
1
@@ -6,6 +6,7 @@
2
 
3
 struct cocoa_window {
4
    CGWindowID window_id;
5
+   int owner_pid;
6
 
7
    pthread_mutex_t name_lock;
8
    NSString *owner_name;
9
obs-studio-25.0.4.tar.xz/plugins/mac-capture/window-utils.m -> obs-studio-25.0.8.tar.xz/plugins/mac-capture/window-utils.m Changed
64
 
1
@@ -60,8 +60,11 @@
2
 
3
        NSNumber *window_id = (NSNumber *)dict[WINDOW_NUMBER];
4
        cw->window_id = window_id.intValue;
5
+       NSNumber *owner_pid = (NSNumber *)dict[OWNER_PID];
6
+       cw->owner_pid = owner_pid.intValue;
7
 
8
        obs_data_set_int(settings, "window", cw->window_id);
9
+       obs_data_set_int(settings, "owner_pid", cw->owner_pid);
10
        return true;
11
    }
12
 
13
@@ -78,7 +81,41 @@
14
    cw->window_name = @(obs_data_get_string(settings, "window_name"));
15
    [cw->owner_name retain];
16
    [cw->window_name retain];
17
-   find_window(cw, settings, true);
18
+
19
+   // Find initial window.
20
+   pthread_mutex_lock(&cw->name_lock);
21
+
22
+   if (!cw->window_name.length && !cw->owner_name.length)
23
+       goto invalid_name;
24
+
25
+   NSNumber *owner_pid = @(obs_data_get_int(settings, "owner_pid"));
26
+   NSNumber *window_id = @(obs_data_get_int(settings, "window"));
27
+   for (NSDictionary *dict in enumerate_windows()) {
28
+       bool owner_names_match =
29
+           [cw->owner_name isEqualToString:dict[OWNER_NAME]];
30
+       bool ids_match =
31
+           [owner_pid isEqualToNumber:dict[OWNER_PID]] &&
32
+           [window_id isEqualToNumber:dict[WINDOW_NUMBER]];
33
+       bool window_names_match =
34
+           [cw->window_name isEqualToString:dict[WINDOW_NAME]];
35
+
36
+       if (owner_names_match && (ids_match || window_names_match)) {
37
+           pthread_mutex_unlock(&cw->name_lock);
38
+
39
+           NSNumber *window_id = (NSNumber *)dict[WINDOW_NUMBER];
40
+           cw->window_id = window_id.intValue;
41
+           NSNumber *owner_pid = (NSNumber *)dict[OWNER_PID];
42
+           cw->owner_pid = owner_pid.intValue;
43
+
44
+           obs_data_set_int(settings, "window", cw->window_id);
45
+           obs_data_set_int(settings, "owner_pid", cw->owner_pid);
46
+           return;
47
+       }
48
+   }
49
+
50
+invalid_name:
51
+   pthread_mutex_unlock(&cw->name_lock);
52
+   return;
53
 }
54
 
55
 void destroy_window(cocoa_window_t cw)
56
@@ -99,6 +136,7 @@
57
    [cw->window_name retain];
58
    pthread_mutex_unlock(&cw->name_lock);
59
 
60
+   cw->owner_pid = obs_data_get_int(settings, "owner_pid");
61
    cw->window_id = obs_data_get_int(settings, "window");
62
 }
63
 
64
obs-studio-25.0.4.tar.xz/plugins/mac-syphon/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/plugins/mac-syphon/CMakeLists.txt Changed
32
 
1
@@ -55,6 +55,9 @@
2
    syphon-framework/SyphonServerDirectory.m
3
    )
4
 
5
+add_library(syphon-framework ${syphon_HEADERS}
6
+   ${syphon_SOURCES})
7
+
8
 set(mac-syphon_HEADERS
9
    )
10
 
11
@@ -70,15 +73,17 @@
12
 
13
 add_library(mac-syphon MODULE
14
    ${mac-syphon_SOURCES}
15
-   ${mac-syphon_HEADERS}
16
-   ${syphon_HEADERS}
17
-   ${syphon_SOURCES})
18
+   ${mac-syphon_HEADERS})
19
 
20
 target_link_libraries(mac-syphon
21
    libobs
22
+   syphon-framework
23
    ${COCOA}
24
    ${IOSURF}
25
    ${SCRIPTINGBRIDGE}
26
    ${OPENGL_gl_LIBRARY})
27
 
28
+set_property (TARGET mac-syphon APPEND_STRING PROPERTY
29
+   COMPILE_FLAGS "-fobjc-arc")
30
+
31
 install_obs_plugin_with_data(mac-syphon data)
32
obs-studio-25.0.4.tar.xz/plugins/mac-syphon/syphon.m -> obs-studio-25.0.8.tar.xz/plugins/mac-syphon/syphon.m Changed
201
 
1
@@ -41,12 +41,6 @@
2
 };
3
 typedef struct syphon *syphon_t;
4
 
5
-static inline void objc_release(NSObject **obj)
6
-{
7
-   [*obj release];
8
-   *obj = nil;
9
-}
10
-
11
 static inline void update_properties(syphon_t s)
12
 {
13
    obs_source_update_properties(s->source);
14
@@ -101,10 +95,7 @@
15
    obs_enter_graphics();
16
 
17
    if (s->client) {
18
-       @autoreleasepool {
19
-           [s->client stop];
20
-           objc_release(&s->client);
21
-       }
22
+       [s->client stop];
23
    }
24
 
25
    if (s->tex) {
26
@@ -178,16 +169,6 @@
27
        surfaces_string.UTF8String);
28
 }
29
 
30
-static inline bool update_string(NSString **str, NSString *new)
31
-{
32
-   if (!new)
33
-       return false;
34
-
35
-   [*str release];
36
-   *str = [new retain];
37
-   return true;
38
-}
39
-
40
 static inline void handle_new_frame(syphon_t s,
41
                    SYPHON_CLIENT_UNIQUE_CLASS_NAME *client)
42
 {
43
@@ -233,35 +214,26 @@
44
    NSDictionary *desc = find_by_uuid(servers, s->uuid);
45
    if (!desc) {
46
        desc = servers[0];
47
-       if (update_string(&s->uuid,
48
-                 desc[SyphonServerDescriptionUUIDKey]))
49
+       if (![s->uuid isEqualToString:
50
+                     desc[SyphonServerDescriptionUUIDKey]]) {
51
            s->uuid_changed = true;
52
+       }
53
    }
54
 
55
    check_version(s, desc);
56
    check_description(s, desc);
57
 
58
-   @autoreleasepool {
59
-       s->client = [[SYPHON_CLIENT_UNIQUE_CLASS_NAME alloc]
60
-           initWithServerDescription:desc
61
-                     options:nil
62
-                 newFrameHandler:^(
63
-                     SYPHON_CLIENT_UNIQUE_CLASS_NAME
64
-                         *client) {
65
-                     handle_new_frame(s, client);
66
-                 }];
67
-   }
68
+   s->client = [[SYPHON_CLIENT_UNIQUE_CLASS_NAME alloc]
69
+       initWithServerDescription:desc
70
+                 options:nil
71
+             newFrameHandler:^(
72
+                 SYPHON_CLIENT_UNIQUE_CLASS_NAME *client) {
73
+                 handle_new_frame(s, client);
74
+             }];
75
 
76
    s->active = true;
77
 }
78
 
79
-static inline void release_settings(syphon_t s)
80
-{
81
-   [s->app_name release];
82
-   [s->name release];
83
-   [s->uuid release];
84
-}
85
-
86
 static inline bool load_syphon_settings(syphon_t s, obs_data_t *settings)
87
 {
88
    NSString *app_name = @(obs_data_get_string(settings, "app_name"));
89
@@ -275,10 +247,9 @@
90
    if ([uuid isEqual:s->uuid] && equal_names)
91
        return false;
92
 
93
-   release_settings(s);
94
-   s->app_name = [app_name retain];
95
-   s->name = [name retain];
96
-   s->uuid = [uuid retain];
97
+   s->app_name = app_name;
98
+   s->name = name;
99
+   s->uuid = uuid;
100
    s->uuid_changed = false;
101
    return true;
102
 }
103
@@ -299,10 +270,12 @@
104
        !([app_name isEqual:s->app_name] && [name isEqual:s->name]))
105
        return;
106
 
107
-   update_string(&s->app_name, app_name);
108
-   update_string(&s->name, name);
109
-   if (update_string(&s->uuid, uuid))
110
+   s->app_name = app_name;
111
+   s->name = name;
112
+   if (![s->uuid isEqualToString:uuid]) {
113
+       s->uuid = uuid;
114
        s->uuid_changed = true;
115
+   }
116
 
117
    create_client(s);
118
 }
119
@@ -324,8 +297,6 @@
120
 
121
    if (!(s->inject_server_found = announce)) {
122
        s->inject_wait_time = 0.f;
123
-
124
-       objc_release(&s->inject_uuid);
125
        LOG(LOG_INFO,
126
            "Injected server retired: "
127
            "[%s] InjectedSyphon (%s)",
128
@@ -336,7 +307,7 @@
129
    if (s->inject_uuid) //TODO: track multiple injected instances?
130
        return;
131
 
132
-   s->inject_uuid = [uuid retain];
133
+   s->inject_uuid = uuid;
134
    LOG(LOG_INFO, "Injected server found: [%s] %s (%s)",
135
        app_name.UTF8String, name.UTF8String, uuid.UTF8String);
136
 }
137
@@ -487,26 +458,31 @@
138
 
139
    s->source = source;
140
 
141
-   if (!init_obs_graphics_objects(s))
142
-       goto fail;
143
+   if (!init_obs_graphics_objects(s)) {
144
+       syphon_destroy_internal(s);
145
+       return NULL;
146
+   }
147
 
148
-   if (!load_syphon_settings(s, settings))
149
-       goto fail;
150
+   if (!load_syphon_settings(s, settings)) {
151
+       syphon_destroy_internal(s);
152
+       return NULL;
153
+   }
154
 
155
    const char *inject_info = obs_data_get_string(settings, "application");
156
    s->inject_info = obs_data_create_from_json(inject_info);
157
    s->inject_active = obs_data_get_bool(settings, "inject");
158
    s->inject_app = @(obs_data_get_string(s->inject_info, "name"));
159
 
160
-   if (s->inject_app)
161
-       [s->inject_app retain];
162
-
163
-   if (!create_syphon_listeners(s))
164
-       goto fail;
165
+   if (!create_syphon_listeners(s)) {
166
+       syphon_destroy_internal(s);
167
+       return NULL;
168
+   }
169
 
170
    NSWorkspace *ws = [NSWorkspace sharedWorkspace];
171
-   if (!create_applications_observer(s, ws))
172
-       goto fail;
173
+   if (!create_applications_observer(s, ws)) {
174
+       syphon_destroy_internal(s);
175
+       return NULL;
176
+   }
177
 
178
    if (s->inject_active)
179
        find_and_inject_target(s, ws.runningApplications, false);
180
@@ -519,10 +495,6 @@
181
        obs_data_get_bool(settings, "allow_transparency");
182
 
183
    return s;
184
-
185
-fail:
186
-   syphon_destroy_internal(s);
187
-   return NULL;
188
 }
189
 
190
 static void *syphon_create(obs_data_t *settings, obs_source_t *source)
191
@@ -550,15 +522,9 @@
192
    [ws removeObserver:s->launch_listener
193
        forKeyPath:NSStringFromSelector(@selector
194
                        (runningApplications))];
195
-   objc_release(&s->launch_listener);
196
-
197
-   objc_release(&s->inject_app);
198
-   objc_release(&s->inject_uuid);
199
 
200
    obs_data_release(s->inject_info);
201
obs-studio-25.0.8.tar.xz/plugins/obs-browser/.clang-format Added
111
 
1
@@ -0,0 +1,108 @@
2
+
3
+# please use clang-format version 8 or later
4
+
5
+Standard: Cpp11
6
+AccessModifierOffset: -8
7
+AlignAfterOpenBracket: Align
8
+AlignConsecutiveAssignments: false
9
+AlignConsecutiveDeclarations: false
10
+AlignEscapedNewlines: Left
11
+AlignOperands: true
12
+AlignTrailingComments: true
13
+#AllowAllArgumentsOnNextLine: false  # requires clang-format 9
14
+#AllowAllConstructorInitializersOnNextLine: false  # requires clang-format 9
15
+AllowAllParametersOfDeclarationOnNextLine: false
16
+AllowShortBlocksOnASingleLine: false
17
+AllowShortCaseLabelsOnASingleLine: false
18
+AllowShortFunctionsOnASingleLine: Inline
19
+AllowShortIfStatementsOnASingleLine: false
20
+#AllowShortLambdasOnASingleLine: Inline  # requires clang-format 9
21
+AllowShortLoopsOnASingleLine: false
22
+AlwaysBreakAfterDefinitionReturnType: None
23
+AlwaysBreakAfterReturnType: None
24
+AlwaysBreakBeforeMultilineStrings: false
25
+AlwaysBreakTemplateDeclarations: false
26
+BinPackArguments: true
27
+BinPackParameters: true
28
+BraceWrapping:
29
+  AfterClass: false
30
+  AfterControlStatement: false
31
+  AfterEnum: false
32
+  AfterFunction: true
33
+  AfterNamespace: false
34
+  AfterObjCDeclaration: false
35
+  AfterStruct: false
36
+  AfterUnion: false
37
+  AfterExternBlock: false
38
+  BeforeCatch: false
39
+  BeforeElse: false
40
+  IndentBraces: false
41
+  SplitEmptyFunction: true
42
+  SplitEmptyRecord: true
43
+  SplitEmptyNamespace: true
44
+BreakBeforeBinaryOperators: None
45
+BreakBeforeBraces: Custom
46
+BreakBeforeTernaryOperators: true
47
+BreakConstructorInitializers: BeforeColon
48
+BreakStringLiterals: false  # apparently unpredictable
49
+ColumnLimit: 80
50
+CompactNamespaces: false
51
+ConstructorInitializerAllOnOneLineOrOnePerLine: true
52
+ConstructorInitializerIndentWidth: 8
53
+ContinuationIndentWidth: 8
54
+Cpp11BracedListStyle: true
55
+DerivePointerAlignment: false
56
+DisableFormat: false
57
+FixNamespaceComments: false
58
+ForEachMacros: 
59
+  - 'json_object_foreach'
60
+  - 'json_object_foreach_safe'
61
+  - 'json_array_foreach'
62
+IncludeBlocks: Preserve
63
+IndentCaseLabels: false
64
+IndentPPDirectives: None
65
+IndentWidth: 8
66
+IndentWrappedFunctionNames: false
67
+KeepEmptyLinesAtTheStartOfBlocks: true
68
+MaxEmptyLinesToKeep: 1
69
+NamespaceIndentation: None
70
+#ObjCBinPackProtocolList: Auto  # requires clang-format 7
71
+ObjCBlockIndentWidth: 8
72
+ObjCSpaceAfterProperty: true
73
+ObjCSpaceBeforeProtocolList: true
74
+
75
+PenaltyBreakAssignment: 10
76
+PenaltyBreakBeforeFirstCallParameter: 30
77
+PenaltyBreakComment: 10
78
+PenaltyBreakFirstLessLess: 0
79
+PenaltyBreakString: 10
80
+PenaltyExcessCharacter: 100
81
+PenaltyReturnTypeOnItsOwnLine: 60
82
+
83
+PointerAlignment: Right
84
+ReflowComments: false
85
+SortIncludes: false
86
+SortUsingDeclarations: false
87
+SpaceAfterCStyleCast: false
88
+#SpaceAfterLogicalNot: false  # requires clang-format 9
89
+SpaceAfterTemplateKeyword: false
90
+SpaceBeforeAssignmentOperators: true
91
+#SpaceBeforeCtorInitializerColon: true  # requires clang-format 7
92
+#SpaceBeforeInheritanceColon: true  # requires clang-format 7
93
+SpaceBeforeParens: ControlStatements
94
+#SpaceBeforeRangeBasedForLoopColon: true  # requires clang-format 7
95
+SpaceInEmptyParentheses: false
96
+SpacesBeforeTrailingComments: 1
97
+SpacesInAngles: false
98
+SpacesInCStyleCastParentheses: false
99
+SpacesInContainerLiterals: false
100
+SpacesInParentheses: false
101
+SpacesInSquareBrackets: false
102
+#StatementMacros:  # requires clang-format 8
103
+#  - 'Q_OBJECT'
104
+TabWidth: 8
105
+#TypenameMacros:  # requires clang-format 9
106
+#  - 'DARRAY'
107
+UseTab: ForContinuationAndIndentation
108
+---
109
+Language: ObjC
110
\ No newline at end of file
111
obs-studio-25.0.8.tar.xz/plugins/obs-browser/.github Added
2
 
1
+(directory)
2
obs-studio-25.0.8.tar.xz/plugins/obs-browser/.github/workflows Added
2
 
1
+(directory)
2
obs-studio-25.0.8.tar.xz/plugins/obs-browser/.github/workflows/clang-format.yml Added
45
 
1
@@ -0,0 +1,42 @@
2
+name: Clang Format Check
3
+
4
+on: [push, pull_request]
5
+jobs:
6
+  ubuntu64:
7
+    runs-on: ubuntu-latest
8
+    steps:
9
+      - name: Checkout
10
+        uses: actions/checkout@v2
11
+        with:
12
+          submodules: 'recursive'
13
+
14
+      - name: Install clang format
15
+        run: |
16
+          # gets us newer clang
17
+          sudo bash -c "cat >> /etc/apt/sources.list" << LLVMAPT
18
+          # 3.8
19
+          deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main
20
+          deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main
21
+          LLVMAPT
22
+          wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -    
23
+          sudo apt-get -qq update
24
+          sudo apt-get install -y clang-format-8
25
+      - name: Check the Formatting
26
+        run: |
27
+          ./formatcode.sh
28
+          ./CI/check-format.sh
29
+  macos64:
30
+    runs-on: macos-latest        
31
+    steps:
32
+      - name: Checkout
33
+        uses: actions/checkout@v2
34
+        with:
35
+          submodules: 'recursive'
36
+
37
+      - name: Install clang-format
38
+        run: |
39
+          brew install clang-format
40
+      - name: Check the Formatting
41
+        run: |
42
+          ./formatcode.sh
43
+          ./CI/check-format.sh
44
\ No newline at end of file
45
obs-studio-25.0.8.tar.xz/plugins/obs-browser/CI Added
2
 
1
+(directory)
2
obs-studio-25.0.8.tar.xz/plugins/obs-browser/CI/check-format.sh Added
14
 
1
@@ -0,0 +1,11 @@
2
+#!/bin/bash
3
+dirty=$(git ls-files --modified)
4
+
5
+set +x
6
+if [[ $dirty ]]; then
7
+   echo "================================="
8
+    echo "Files were not formatted properly"
9
+    echo "$dirty"
10
+    echo "================================="
11
+    exit 1
12
+fi
13
\ No newline at end of file
14
obs-studio-25.0.8.tar.xz/plugins/obs-browser/formatcode.sh Added
32
 
1
@@ -0,0 +1,29 @@
2
+#!/usr/bin/env bash
3
+# Original source https://github.com/Project-OSRM/osrm-backend/blob/master/scripts/format.sh
4
+
5
+set +x
6
+set -o errexit
7
+set -o pipefail
8
+set -o nounset
9
+
10
+# Runs the Clang Formatter in parallel on the code base.
11
+# Return codes:
12
+#  - 1 there are files to be formatted
13
+#  - 0 everything looks fine
14
+
15
+# Get CPU count
16
+OS=$(uname)
17
+NPROC=1
18
+if [[ $OS = "Linux" || $OS = "Darwin" ]] ; then
19
+    NPROC=$(getconf _NPROCESSORS_ONLN)
20
+fi
21
+
22
+# Discover clang-format
23
+if type clang-format-8 2> /dev/null ; then
24
+    CLANG_FORMAT=clang-format-8
25
+else
26
+    CLANG_FORMAT=clang-format
27
+fi
28
+
29
+find . -type d -type f -o -name '*.h' -or -name '*.hpp' -or -name '*.m' -or -name '*.mm' -or -name '*.c' -or -name '*.cpp' \
30
+| xargs -I{} -P ${NPROC} ${CLANG_FORMAT} -i -style=file  -fallback-style=none {}
31
\ No newline at end of file
32
obs-studio-25.0.4.tar.xz/plugins/obs-browser/linux-keyboard-helpers.hpp -> obs-studio-25.0.8.tar.xz/plugins/obs-browser/linux-keyboard-helpers.hpp Changed
12
 
1
@@ -665,8 +665,8 @@
2
    case XK_ugrave:
3
    case XK_Ugrave:
4
    case XK_brokenbar:
5
-       return VKEY_OEM_102; // international backslash key in 102
6
-           // keyboard.
7
+       // international backslash key in 102 keyboard
8
+       return VKEY_OEM_102;
9
 
10
    // When evdev is in use, /usr/share/X11/xkb/symbols/inet maps F13-18
11
    // keys to the special XF86XK symbols to support Microsoft Ergonomic
12
obs-studio-25.0.4.tar.xz/plugins/obs-ffmpeg/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/plugins/obs-ffmpeg/CMakeLists.txt Changed
15
 
1
@@ -46,9 +46,12 @@
2
 endif()
3
 
4
 if(WIN32)
5
+   set(MODULE_DESCRIPTION "OBS FFmpeg module")
6
+   configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in obs-ffmpeg.rc)
7
    list(APPEND obs-ffmpeg_SOURCES
8
        jim-nvenc.c
9
-       jim-nvenc-helpers.c)
10
+       jim-nvenc-helpers.c
11
+       obs-ffmpeg.rc)
12
    list(APPEND obs-ffmpeg_HEADERS
13
        jim-nvenc.h)
14
 endif()
15
obs-studio-25.0.4.tar.xz/plugins/obs-ffmpeg/data/locale/en-US.ini -> obs-studio-25.0.8.tar.xz/plugins/obs-ffmpeg/data/locale/en-US.ini Changed
13
 
1
@@ -58,3 +58,11 @@
2
 HelperProcessFailed="Unable to start the recording helper process. Check that OBS files have not been blocked or removed by any 3rd party antivirus / security software."
3
 UnableToWritePath="Unable to write to %1. Make sure you're using a recording path which your user account is allowed to write to and that there is sufficient disk space."
4
 WarnWindowsDefender="If Windows 10 Ransomware Protection is enabled it can also cause this error. Try turning off controlled folder access in Windows Security / Virus & threat protection settings."
5
+
6
+NVENC.Error="Failed to open NVENC codec: %1"
7
+NVENC.GenericError="Check your video drivers are up to date. Try closing other recording software which might be using NVENC such as NVIDIA Shadowplay or Windows 10 Game DVR."
8
+NVENC.BadGPUIndex="You have selected GPU %1 in your output encoder settings. Set this back to 0 and try again."
9
+NVENC.OutdatedDriver="Your current video card driver does not support this NVENC version, please update your drivers."
10
+NVENC.UnsupportedDevice="NVENC Error: Unsupported device. Check your video card supports NVENC and that the drivers are up to date."
11
+NVENC.TooManySessions="NVENC Error: Too many concurrent sessions. Try closing other recording software which might be using NVENC such as NVIDIA Shadowplay or Windows 10 Game DVR."
12
+NVENC.CheckDrivers="Please check your video drivers are up to date."
13
obs-studio-25.0.4.tar.xz/plugins/obs-ffmpeg/jim-nvenc-helpers.c -> obs-studio-25.0.8.tar.xz/plugins/obs-ffmpeg/jim-nvenc-helpers.c Changed
119
 
1
@@ -1,6 +1,7 @@
2
 #include "jim-nvenc.h"
3
 #include <util/platform.h>
4
 #include <util/threading.h>
5
+#include <util/dstr.h>
6
 
7
 static void *nvenc_lib = NULL;
8
 static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
9
@@ -9,18 +10,40 @@
10
 
11
 #define error(format, ...) blog(LOG_ERROR, "[jim-nvenc] " format, ##__VA_ARGS__)
12
 
13
-static inline bool nv_failed(NVENCSTATUS err, const char *func,
14
-                const char *call)
15
+bool nv_failed(obs_encoder_t *encoder, NVENCSTATUS err, const char *func,
16
+          const char *call)
17
 {
18
-   if (err == NV_ENC_SUCCESS)
19
+   struct dstr error_message = {0};
20
+
21
+   switch (err) {
22
+   case NV_ENC_SUCCESS:
23
        return false;
24
 
25
+   case NV_ENC_ERR_OUT_OF_MEMORY:
26
+       obs_encoder_set_last_error(
27
+           encoder, obs_module_text("NVENC.TooManySessions"));
28
+       break;
29
+
30
+   case NV_ENC_ERR_UNSUPPORTED_DEVICE:
31
+       obs_encoder_set_last_error(
32
+           encoder, obs_module_text("NVENC.UnsupportedDevice"));
33
+       break;
34
+
35
+   default:
36
+       dstr_printf(&error_message,
37
+               "NVENC Error: %s: %s failed: %d (%s)", func, call,
38
+               (int)err, nv_error_name(err));
39
+       obs_encoder_set_last_error(encoder, error_message.array);
40
+       dstr_free(&error_message);
41
+       break;
42
+   }
43
+
44
    error("%s: %s failed: %d (%s)", func, call, (int)err,
45
          nv_error_name(err));
46
    return true;
47
 }
48
 
49
-#define NV_FAILED(x) nv_failed(x, __FUNCTION__, #x)
50
+#define NV_FAILED(e, x) nv_failed(e, x, __FUNCTION__, #x)
51
 
52
 bool load_nvenc_lib(void)
53
 {
54
@@ -83,7 +106,7 @@
55
    return "Unknown Error";
56
 }
57
 
58
-static inline bool init_nvenc_internal(void)
59
+static inline bool init_nvenc_internal(obs_encoder_t *encoder)
60
 {
61
    static bool initialized = false;
62
    static bool success = false;
63
@@ -95,17 +118,24 @@
64
    NV_MAX_VER_FUNC nv_max_ver = (NV_MAX_VER_FUNC)load_nv_func(
65
        "NvEncodeAPIGetMaxSupportedVersion");
66
    if (!nv_max_ver) {
67
+       obs_encoder_set_last_error(
68
+           encoder,
69
+           "Missing NvEncodeAPIGetMaxSupportedVersion, check "
70
+           "your video card drivers are up to date.");
71
        return false;
72
    }
73
 
74
    uint32_t ver = 0;
75
-   if (NV_FAILED(nv_max_ver(&ver))) {
76
+   if (NV_FAILED(encoder, nv_max_ver(&ver))) {
77
        return false;
78
    }
79
 
80
    uint32_t cur_ver = (NVENCAPI_MAJOR_VERSION << 4) |
81
               NVENCAPI_MINOR_VERSION;
82
    if (cur_ver > ver) {
83
+       obs_encoder_set_last_error(
84
+           encoder, obs_module_text("NVENC.OutdatedDriver"));
85
+
86
        error("Current driver version does not support this NVENC "
87
              "version, please upgrade your driver");
88
        return false;
89
@@ -114,10 +144,13 @@
90
    nv_create_instance = (NV_CREATE_INSTANCE_FUNC)load_nv_func(
91
        "NvEncodeAPICreateInstance");
92
    if (!nv_create_instance) {
93
+       obs_encoder_set_last_error(
94
+           encoder, "Missing NvEncodeAPICreateInstance, check "
95
+                "your video card drivers are up to date.");
96
        return false;
97
    }
98
 
99
-   if (NV_FAILED(nv_create_instance(&nv))) {
100
+   if (NV_FAILED(encoder, nv_create_instance(&nv))) {
101
        return false;
102
    }
103
 
104
@@ -125,12 +158,12 @@
105
    return true;
106
 }
107
 
108
-bool init_nvenc(void)
109
+bool init_nvenc(obs_encoder_t *encoder)
110
 {
111
    bool success;
112
 
113
    pthread_mutex_lock(&init_mutex);
114
-   success = init_nvenc_internal();
115
+   success = init_nvenc_internal(encoder);
116
    pthread_mutex_unlock(&init_mutex);
117
 
118
    return success;
119
obs-studio-25.0.4.tar.xz/plugins/obs-ffmpeg/jim-nvenc.c -> obs-studio-25.0.8.tar.xz/plugins/obs-ffmpeg/jim-nvenc.c Changed
72
 
1
@@ -81,18 +81,7 @@
2
    HANDLE event;
3
 };
4
 
5
-static inline bool nv_failed(struct nvenc_data *enc, NVENCSTATUS err,
6
-                const char *func, const char *call)
7
-{
8
-   if (err == NV_ENC_SUCCESS)
9
-       return false;
10
-
11
-   error("%s: %s failed: %d (%s)", func, call, (int)err,
12
-         nv_error_name(err));
13
-   return true;
14
-}
15
-
16
-#define NV_FAILED(x) nv_failed(enc, x, __FUNCTION__, #x)
17
+#define NV_FAILED(x) nv_failed(enc->encoder, x, __FUNCTION__, #x)
18
 
19
 static bool nv_bitstream_init(struct nvenc_data *enc, struct nv_bitstream *bs)
20
 {
21
@@ -400,7 +389,8 @@
22
    err = nv.nvEncGetEncodePresetConfig(enc->session,
23
                        NV_ENC_CODEC_H264_GUID, nv_preset,
24
                        &preset_config);
25
-   if (nv_failed(enc, err, __FUNCTION__, "nvEncGetEncodePresetConfig")) {
26
+   if (nv_failed(enc->encoder, err, __FUNCTION__,
27
+             "nvEncGetEncodePresetConfig")) {
28
        return false;
29
    }
30
 
31
@@ -578,16 +568,19 @@
32
     * gpu other than the one OBS is currently running on. */
33
    int gpu = (int)obs_data_get_int(settings, "gpu");
34
    if (gpu != 0) {
35
+       info("different GPU selected by user, falling back to ffmpeg");
36
        goto fail;
37
    }
38
 
39
    if (obs_encoder_scaling_enabled(encoder)) {
40
+       info("scaling enabled, falling back to ffmpeg");
41
        goto fail;
42
    }
43
    if (!obs_nv12_tex_active()) {
44
+       info("nv12 not active, falling back to ffmpeg");
45
        goto fail;
46
    }
47
-   if (!init_nvenc()) {
48
+   if (!init_nvenc(encoder)) {
49
        goto fail;
50
    }
51
    if (NV_FAILED(nv_create_instance(&init))) {
52
@@ -766,7 +759,8 @@
53
        if (nvtex->mapped_res) {
54
            NVENCSTATUS err;
55
            err = nv.nvEncUnmapInputResource(s, nvtex->mapped_res);
56
-           if (nv_failed(enc, err, __FUNCTION__, "unmap")) {
57
+           if (nv_failed(enc->encoder, err, __FUNCTION__,
58
+                     "unmap")) {
59
                return false;
60
            }
61
            nvtex->mapped_res = NULL;
62
@@ -859,7 +853,8 @@
63
 
64
    err = nv.nvEncEncodePicture(enc->session, &params);
65
    if (err != NV_ENC_SUCCESS && err != NV_ENC_ERR_NEED_MORE_INPUT) {
66
-       nv_failed(enc, err, __FUNCTION__, "nvEncEncodePicture");
67
+       nv_failed(enc->encoder, err, __FUNCTION__,
68
+             "nvEncEncodePicture");
69
        return false;
70
    }
71
 
72
obs-studio-25.0.4.tar.xz/plugins/obs-ffmpeg/jim-nvenc.h -> obs-studio-25.0.8.tar.xz/plugins/obs-ffmpeg/jim-nvenc.h Changed
9
 
1
@@ -12,4 +12,6 @@
2
 extern const char *nv_error_name(NVENCSTATUS err);
3
 extern NV_ENCODE_API_FUNCTION_LIST nv;
4
 extern NV_CREATE_INSTANCE_FUNC nv_create_instance;
5
-extern bool init_nvenc(void);
6
+extern bool init_nvenc(obs_encoder_t *encoder);
7
+bool nv_failed(obs_encoder_t *encoder, NVENCSTATUS err, const char *func,
8
+          const char *call);
9
obs-studio-25.0.4.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c -> obs-studio-25.0.8.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c Changed
21
 
1
@@ -18,6 +18,7 @@
2
 #include <util/base.h>
3
 #include <util/circlebuf.h>
4
 #include <util/darray.h>
5
+#include <util/dstr.h>
6
 #include <obs-module.h>
7
 
8
 #include <libavutil/opt.h>
9
@@ -143,6 +144,11 @@
10
 
11
    ret = avcodec_open2(enc->context, enc->codec, NULL);
12
    if (ret < 0) {
13
+       struct dstr error_message = {0};
14
+       dstr_printf(&error_message, "Failed to open AAC codec: %s",
15
+               av_err2str(ret));
16
+       obs_encoder_set_last_error(enc->encoder, error_message.array);
17
+       dstr_free(&error_message);
18
        warn("Failed to open AAC codec: %s", av_err2str(ret));
19
        return false;
20
    }
21
obs-studio-25.0.4.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c -> obs-studio-25.0.8.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c Changed
61
 
1
@@ -88,8 +88,50 @@
2
 {
3
    int ret;
4
 
5
+   // avcodec_open2 will overwrite priv_data, we call this to get a
6
+   // local copy of the "gpu" setting for improved error messages.
7
+   int64_t gpu;
8
+   if (av_opt_get_int(enc->context->priv_data, "gpu", 0, &gpu) < 0) {
9
+       gpu = -1;
10
+   }
11
+
12
    ret = avcodec_open2(enc->context, enc->nvenc, NULL);
13
    if (ret < 0) {
14
+       // if we were a fallback from jim-nvenc, there may already be a
15
+       // more useful error returned from that, so don't overwrite.
16
+       // this can be removed if / when ffmpeg fallback is removed.
17
+       if (!obs_encoder_get_last_error(enc->encoder)) {
18
+           struct dstr error_message = {0};
19
+
20
+           dstr_copy(&error_message,
21
+                 obs_module_text("NVENC.Error"));
22
+           dstr_replace(&error_message, "%1", av_err2str(ret));
23
+           dstr_cat(&error_message, "\r\n\r\n");
24
+
25
+           if (gpu > 0) {
26
+               // if a non-zero GPU failed, almost always
27
+               // user error. tell then to fix it.
28
+               char gpu_str[16];
29
+               snprintf(gpu_str, sizeof(gpu_str) - 1, "%d",
30
+                    (int)gpu);
31
+               gpu_str[sizeof(gpu_str) - 1] = 0;
32
+
33
+               dstr_cat(&error_message,
34
+                    obs_module_text("NVENC.BadGPUIndex"));
35
+               dstr_replace(&error_message, "%1", gpu_str);
36
+           } else if (ret == AVERROR_EXTERNAL) {
37
+               // special case for common NVENC error
38
+               dstr_cat(&error_message,
39
+                    obs_module_text("NVENC.GenericError"));
40
+           } else {
41
+               dstr_cat(&error_message,
42
+                    obs_module_text("NVENC.CheckDrivers"));
43
+           }
44
+
45
+           obs_encoder_set_last_error(enc->encoder,
46
+                          error_message.array);
47
+           dstr_free(&error_message);
48
+       }
49
        warn("Failed to open NVENC codec: %s", av_err2str(ret));
50
        return false;
51
    }
52
@@ -296,6 +338,8 @@
53
    blog(LOG_INFO, "---------------------------------");
54
 
55
    if (!enc->nvenc) {
56
+       obs_encoder_set_last_error(encoder,
57
+                      "Couldn't find NVENC encoder");
58
        warn("Couldn't find encoder");
59
        goto fail;
60
    }
61
obs-studio-25.0.4.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-source.c -> obs-studio-25.0.8.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-source.c Changed
15
 
1
@@ -258,10 +258,11 @@
2
    struct ffmpeg_source *s = opaque;
3
    if (s->is_clear_on_media_end) {
4
        obs_source_output_video(s->source, NULL);
5
-       if (s->close_when_inactive && s->media_valid)
6
-           s->destroy_media = true;
7
    }
8
 
9
+   if (s->close_when_inactive && s->media_valid)
10
+       s->destroy_media = true;
11
+
12
    set_media_state(s, OBS_MEDIA_STATE_ENDED);
13
    obs_source_media_ended(s->source);
14
 }
15
obs-studio-25.0.4.tar.xz/plugins/obs-filters/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/plugins/obs-filters/CMakeLists.txt Changed
15
 
1
@@ -54,6 +54,13 @@
2
    expander-filter.c
3
    luma-key-filter.c)
4
 
5
+if(WIN32)
6
+   set(MODULE_DESCRIPTION "OBS A/V Filters")
7
+   configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in obs-filters.rc)
8
+   list(APPEND obs-filters_SOURCES
9
+       obs-filters.rc)
10
+endif()
11
+
12
 add_library(obs-filters MODULE
13
    ${obs-filters_SOURCES}
14
    ${obs-filters_config_HEADERS}
15
obs-studio-25.0.4.tar.xz/plugins/obs-filters/color-grade-filter.c -> obs-studio-25.0.8.tar.xz/plugins/obs-filters/color-grade-filter.c Changed
10
 
1
@@ -329,7 +329,7 @@
2
    obs_properties_t *props = obs_properties_create();
3
    struct dstr filter_str = {0};
4
 
5
-   dstr_cat(&filter_str, "(*.cube *.png)");
6
+   dstr_cat(&filter_str, "PNG/Cube (*.cube *.png)");
7
 
8
    if (s && s->file && *s->file) {
9
        dstr_copy(&path, s->file);
10
obs-studio-25.0.4.tar.xz/plugins/obs-outputs/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/plugins/obs-outputs/CMakeLists.txt Changed
15
 
1
@@ -156,6 +156,13 @@
2
    flv-mux.c
3
    net-if.c)
4
 
5
+if(WIN32)
6
+   set(MODULE_DESCRIPTION "OBS output module")
7
+   configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in obs-outputs.rc)
8
+   list(APPEND obs-outputs_SOURCES
9
+       obs-outputs.rc)
10
+endif()
11
+
12
 add_library(obs-outputs MODULE
13
    ${ftl_SOURCES}
14
    ${ftl_HEADERS}
15
obs-studio-25.0.4.tar.xz/plugins/obs-outputs/librtmp/rtmp.c -> obs-studio-25.0.8.tar.xz/plugins/obs-outputs/librtmp/rtmp.c Changed
27
 
1
@@ -360,6 +360,8 @@
2
     mbedtls_x509_crt_free(chain);
3
     free(chain);
4
     r->RTMP_TLS_ctx->cacert = NULL;
5
+#else /* USE_MBEDTLS */
6
+   UNUSED_PARAMETER(r);
7
 #endif /* USE_MBEDTLS */
8
 }
9
 
10
@@ -407,6 +409,7 @@
11
     SSL_CTX_set_default_verify_paths(RTMP_TLS_ctx);
12
 #endif
13
 #else
14
+   UNUSED_PARAMETER(r);
15
 #endif
16
 }
17
 
18
@@ -429,6 +432,8 @@
19
     // NO mbedtls_net_free() BECAUSE WE SET IT UP BY HAND!
20
     free(r->RTMP_TLS_ctx);
21
     r->RTMP_TLS_ctx = NULL;
22
+#else
23
+   UNUSED_PARAMETER(r);
24
 #endif
25
 }
26
 
27
obs-studio-25.0.4.tar.xz/plugins/obs-qsv11/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/plugins/obs-qsv11/CMakeLists.txt Changed
15
 
1
@@ -58,6 +58,13 @@
2
    obs-qsv11.c
3
    obs-qsv11-plugin-main.c)
4
 
5
+if(WIN32)
6
+   set(MODULE_DESCRIPTION "OBS QSV encoder")
7
+   configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in obs-qsv11.rc)
8
+   list(APPEND obs-qsv11_SOURCES
9
+       obs-qsv11.rc)
10
+endif()
11
+
12
 set(obs-qsv11_HEADERS
13
    bits/linux_defs.h
14
    bits/windows_defs.h
15
obs-studio-25.0.4.tar.xz/plugins/obs-text/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/plugins/obs-text/CMakeLists.txt Changed
14
 
1
@@ -5,8 +5,11 @@
2
 project(obs-text)
3
 
4
 if(WIN32)
5
+   set(MODULE_DESCRIPTION "OBS GDI+ text module")
6
+   configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in obs-text.rc)
7
    set(obs-text_PLATFORM_SOURCES
8
-       gdiplus/obs-text.cpp)
9
+       gdiplus/obs-text.cpp
10
+       obs-text.rc)
11
    set(obs-text_PLATFORM_DEPS
12
        gdiplus)
13
 endif()
14
obs-studio-25.0.4.tar.xz/plugins/obs-transitions/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/plugins/obs-transitions/CMakeLists.txt Changed
15
 
1
@@ -11,6 +11,13 @@
2
    transition-stinger.c
3
    )
4
 
5
+if(WIN32)
6
+   set(MODULE_DESCRIPTION "OBS Transitions module")
7
+   configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in obs-transitions.rc)
8
+   list(APPEND obs-transitions_SOURCES
9
+       obs-transitions.rc)
10
+endif()
11
+
12
 add_library(obs-transitions MODULE
13
    ${obs-transitions_SOURCES})
14
 target_link_libraries(obs-transitions
15
obs-studio-25.0.4.tar.xz/plugins/obs-vst/.clang-format -> obs-studio-25.0.8.tar.xz/plugins/obs-vst/.clang-format Changed
8
 
1
@@ -52,3 +52,5 @@
2
 SpacesInSquareBrackets: false
3
 TabWidth: 8
4
 UseTab: ForIndentation
5
+---
6
+Language: ObjC
7
\ No newline at end of file
8
obs-studio-25.0.8.tar.xz/plugins/obs-vst/.github Added
2
 
1
+(directory)
2
obs-studio-25.0.8.tar.xz/plugins/obs-vst/.github/workflows Added
2
 
1
+(directory)
2
obs-studio-25.0.8.tar.xz/plugins/obs-vst/.github/workflows/clang-format.yml Added
45
 
1
@@ -0,0 +1,42 @@
2
+name: Clang Format Check
3
+
4
+on: [push, pull_request]
5
+jobs:
6
+  ubuntu64:
7
+    runs-on: ubuntu-latest
8
+    steps:
9
+      - name: Checkout
10
+        uses: actions/checkout@v2
11
+        with:
12
+          submodules: 'recursive'
13
+
14
+      - name: Install clang format
15
+        run: |
16
+          # gets us newer clang
17
+          sudo bash -c "cat >> /etc/apt/sources.list" << LLVMAPT
18
+          # 3.8
19
+          deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main
20
+          deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main
21
+          LLVMAPT
22
+          wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -    
23
+          sudo apt-get -qq update
24
+          sudo apt-get install -y clang-format-8
25
+      - name: Check the Formatting
26
+        run: |
27
+          ./formatcode.sh
28
+          ./CI/check-format.sh
29
+  macos64:
30
+    runs-on: macos-latest        
31
+    steps:
32
+      - name: Checkout
33
+        uses: actions/checkout@v2
34
+        with:
35
+          submodules: 'recursive'
36
+
37
+      - name: Install clang-format
38
+        run: |
39
+          brew install clang-format
40
+      - name: Check the Formatting
41
+        run: |
42
+          ./formatcode.sh
43
+          ./CI/check-format.sh
44
\ No newline at end of file
45
obs-studio-25.0.8.tar.xz/plugins/obs-vst/CI Added
2
 
1
+(directory)
2
obs-studio-25.0.8.tar.xz/plugins/obs-vst/CI/check-format.sh Added
14
 
1
@@ -0,0 +1,11 @@
2
+#!/bin/bash
3
+dirty=$(git ls-files --modified)
4
+
5
+set +x
6
+if [[ $dirty ]]; then
7
+   echo "================================="
8
+    echo "Files were not formatted properly"
9
+    echo "$dirty"
10
+    echo "================================="
11
+    exit 1
12
+fi
13
\ No newline at end of file
14
obs-studio-25.0.4.tar.xz/plugins/obs-vst/EditorWidget.cpp -> obs-studio-25.0.8.tar.xz/plugins/obs-vst/EditorWidget.cpp Changed
22
 
1
@@ -17,6 +17,7 @@
2
 *****************************************************************************/
3
 
4
 #include "headers/EditorWidget.h"
5
+#include <QCloseEvent>
6
 
7
 EditorWidget::EditorWidget(QWidget *parent, VSTPlugin *plugin) : QWidget(parent), plugin(plugin)
8
 {
9
@@ -25,6 +26,10 @@
10
 
11
 void EditorWidget::closeEvent(QCloseEvent *event)
12
 {
13
+#ifdef __APPLE__
14
+   event->ignore();
15
+#else
16
    plugin->closeEditor();
17
    UNUSED_PARAMETER(event);
18
-}
19
\ No newline at end of file
20
+#endif
21
+}
22
obs-studio-25.0.8.tar.xz/plugins/obs-vst/formatcode.sh Added
32
 
1
@@ -0,0 +1,29 @@
2
+#!/usr/bin/env bash
3
+# Original source https://github.com/Project-OSRM/osrm-backend/blob/master/scripts/format.sh
4
+
5
+set +x
6
+set -o errexit
7
+set -o pipefail
8
+set -o nounset
9
+
10
+# Runs the Clang Formatter in parallel on the code base.
11
+# Return codes:
12
+#  - 1 there are files to be formatted
13
+#  - 0 everything looks fine
14
+
15
+# Get CPU count
16
+OS=$(uname)
17
+NPROC=1
18
+if [[ $OS = "Linux" || $OS = "Darwin" ]] ; then
19
+    NPROC=$(getconf _NPROCESSORS_ONLN)
20
+fi
21
+
22
+# Discover clang-format
23
+if type clang-format-8 2> /dev/null ; then
24
+    CLANG_FORMAT=clang-format-8
25
+else
26
+    CLANG_FORMAT=clang-format
27
+fi
28
+
29
+find . -type d -type f -o -name '*.h' -or -name '*.hpp' -or -name '*.m' -or -name '*.mm' -or -name '*.c' -or -name '*.cpp' \
30
+| xargs -I{} -P ${NPROC} ${CLANG_FORMAT} -i -style=file  -fallback-style=none {}
31
\ No newline at end of file
32
obs-studio-25.0.4.tar.xz/plugins/obs-vst/mac/EditorWidget-osx.mm -> obs-studio-25.0.8.tar.xz/plugins/obs-vst/mac/EditorWidget-osx.mm Changed
80
 
1
@@ -21,49 +21,46 @@
2
 #import "../headers/VSTPlugin.h"
3
 
4
 void EditorWidget::buildEffectContainer(AEffect *effect) {
5
-   cocoaViewContainer = new QMacCocoaViewContainer(nullptr, this);
6
-   cocoaViewContainer->move(0, 0);
7
-   cocoaViewContainer->resize(300, 300);
8
-   NSView *view = [[NSView alloc] initWithFrame:  NSMakeRect(0, 0,
9
-           300, 300)];
10
+  cocoaViewContainer = new QMacCocoaViewContainer(nullptr, this);
11
+  cocoaViewContainer->move(0, 0);
12
+  cocoaViewContainer->resize(300, 300);
13
+  NSView *view = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 300, 300)];
14
 
15
-   cocoaViewContainer->setCocoaView(view);
16
+  cocoaViewContainer->setCocoaView(view);
17
 
18
-   cocoaViewContainer->show();
19
+  cocoaViewContainer->show();
20
 
21
-   auto *hblParams  =new QHBoxLayout();
22
-   hblParams->setContentsMargins(0, 0, 0, 0);
23
-   hblParams->addWidget(cocoaViewContainer);
24
+  auto *hblParams = new QHBoxLayout();
25
+  hblParams->setContentsMargins(0, 0, 0, 0);
26
+  hblParams->addWidget(cocoaViewContainer);
27
 
28
-   VstRect* vstRect = nullptr;
29
-   effect->dispatcher (effect, effEditGetRect, 0, 0, &vstRect, 0);
30
-   if (vstRect)
31
-   {
32
-       NSRect frame = NSMakeRect(vstRect->left, vstRect->top,
33
-               vstRect->right, vstRect->bottom);
34
+  VstRect *vstRect = nullptr;
35
+  effect->dispatcher(effect, effEditGetRect, 0, 0, &vstRect, 0);
36
+  if (vstRect) {
37
+    NSRect frame = NSMakeRect(vstRect->left, vstRect->top, vstRect->right,
38
+                              vstRect->bottom);
39
 
40
-       [view setFrame:frame];
41
+    [view setFrame:frame];
42
 
43
-       cocoaViewContainer->resize(vstRect->right - vstRect->left,
44
-               vstRect->bottom- vstRect->top);
45
+    cocoaViewContainer->resize(vstRect->right - vstRect->left,
46
+                               vstRect->bottom - vstRect->top);
47
 
48
-       this->setGeometry(QRect(0,0,vstRect->right - vstRect->left,
49
-                               vstRect->bottom- vstRect->top));
50
-   }
51
+    this->setGeometry(QRect(0, 0, vstRect->right - vstRect->left,
52
+                            vstRect->bottom - vstRect->top));
53
+  }
54
 
55
-   effect->dispatcher (effect, effEditOpen, 0, 0, view, 0);
56
+  effect->dispatcher(effect, effEditOpen, 0, 0, view, 0);
57
 
58
-
59
-   this->setLayout(hblParams);
60
+  this->setLayout(hblParams);
61
 }
62
 
63
 void EditorWidget::handleResizeRequest(int width, int height) {
64
-   resize(width, height);
65
-   cocoaViewContainer->resize(width, height);
66
-   NSView *view = cocoaViewContainer->cocoaView();
67
-   NSRect frame = NSMakeRect(0, 0, width, height);
68
+  resize(width, height);
69
+  cocoaViewContainer->resize(width, height);
70
+  NSView *view = cocoaViewContainer->cocoaView();
71
+  NSRect frame = NSMakeRect(0, 0, width, height);
72
 
73
-   [view setFrame:frame];
74
+  [view setFrame:frame];
75
 
76
-   this->setGeometry(QRect(0,0,width, height));
77
+  this->setGeometry(QRect(0, 0, width, height));
78
 }
79
\ No newline at end of file
80
obs-studio-25.0.4.tar.xz/plugins/obs-vst/mac/VSTPlugin-osx.mm -> obs-studio-25.0.8.tar.xz/plugins/obs-vst/mac/VSTPlugin-osx.mm Changed
138
 
1
@@ -17,75 +17,67 @@
2
 
3
 #include "../headers/VSTPlugin.h"
4
 
5
-AEffect* VSTPlugin::loadEffect() {
6
-   AEffect* newEffect = NULL;
7
-
8
-   // Create a path to the bundle
9
-   CFStringRef pluginPathStringRef = CFStringCreateWithCString(NULL,
10
-           pluginPath.c_str(), kCFStringEncodingUTF8);
11
-   CFURLRef bundleUrl = CFURLCreateWithFileSystemPath
12
-           (kCFAllocatorDefault, pluginPathStringRef,
13
-           kCFURLPOSIXPathStyle, true);
14
-
15
-   if (bundleUrl == NULL)
16
-   {
17
-       blog(LOG_WARNING, "Couldn't make URL reference for VST plug-in");
18
-       return NULL;
19
-   }
20
-
21
-   // Open the bundle
22
-   bundle = CFBundleCreate(kCFAllocatorDefault, bundleUrl);
23
-   if (bundle == NULL)
24
-   {
25
-       blog(LOG_WARNING, "Couldn't create VST bundle reference.");
26
-       CFRelease(pluginPathStringRef);
27
-       CFRelease(bundleUrl);
28
-       return NULL;
29
-   }
30
-
31
-   vstPluginMain mainEntryPoint = NULL;
32
-   mainEntryPoint = (vstPluginMain) CFBundleGetFunctionPointerForName
33
-           (bundle, CFSTR("VSTPluginMain"));
34
-
35
-   // VST plugins previous to the 2.4 SDK used main_macho for the
36
-   // entry point name.
37
-   if (mainEntryPoint == NULL)
38
-   {
39
-       mainEntryPoint = (vstPluginMain)
40
-               CFBundleGetFunctionPointerForName(bundle,
41
-               CFSTR("main_macho"));
42
-   }
43
-
44
-   if (mainEntryPoint == NULL)
45
-   {
46
-       blog(LOG_WARNING, "Couldn't get a pointer to plug-in's main()");
47
-       CFBundleUnloadExecutable(bundle);
48
-       CFRelease(bundle);
49
-       return NULL;
50
-   }
51
-
52
-   newEffect = mainEntryPoint(hostCallback_static);
53
-   if (newEffect == NULL)
54
-   {
55
-       blog(LOG_WARNING, "VST Plug-in's main() returns null.");
56
-       CFBundleUnloadExecutable(bundle);
57
-       CFRelease(bundle);
58
-       return NULL;
59
-   }
60
-
61
-   newEffect->user = this;
62
-
63
-   // Clean up
64
-   CFRelease(pluginPathStringRef);
65
-   CFRelease(bundleUrl);
66
-
67
-   return newEffect;
68
+AEffect *VSTPlugin::loadEffect() {
69
+  AEffect *newEffect = NULL;
70
+
71
+  // Create a path to the bundle
72
+  CFStringRef pluginPathStringRef = CFStringCreateWithCString(
73
+      NULL, pluginPath.c_str(), kCFStringEncodingUTF8);
74
+  CFURLRef bundleUrl = CFURLCreateWithFileSystemPath(
75
+      kCFAllocatorDefault, pluginPathStringRef, kCFURLPOSIXPathStyle, true);
76
+
77
+  if (bundleUrl == NULL) {
78
+    blog(LOG_WARNING, "Couldn't make URL reference for VST plug-in");
79
+    return NULL;
80
+  }
81
+
82
+  // Open the bundle
83
+  bundle = CFBundleCreate(kCFAllocatorDefault, bundleUrl);
84
+  if (bundle == NULL) {
85
+    blog(LOG_WARNING, "Couldn't create VST bundle reference.");
86
+    CFRelease(pluginPathStringRef);
87
+    CFRelease(bundleUrl);
88
+    return NULL;
89
+  }
90
+
91
+  vstPluginMain mainEntryPoint = NULL;
92
+  mainEntryPoint = (vstPluginMain)CFBundleGetFunctionPointerForName(
93
+      bundle, CFSTR("VSTPluginMain"));
94
+
95
+  // VST plugins previous to the 2.4 SDK used main_macho for the
96
+  // entry point name.
97
+  if (mainEntryPoint == NULL) {
98
+    mainEntryPoint = (vstPluginMain)CFBundleGetFunctionPointerForName(
99
+        bundle, CFSTR("main_macho"));
100
+  }
101
+
102
+  if (mainEntryPoint == NULL) {
103
+    blog(LOG_WARNING, "Couldn't get a pointer to plug-in's main()");
104
+    CFBundleUnloadExecutable(bundle);
105
+    CFRelease(bundle);
106
+    return NULL;
107
+  }
108
+
109
+  newEffect = mainEntryPoint(hostCallback_static);
110
+  if (newEffect == NULL) {
111
+    blog(LOG_WARNING, "VST Plug-in's main() returns null.");
112
+    CFBundleUnloadExecutable(bundle);
113
+    CFRelease(bundle);
114
+    return NULL;
115
+  }
116
+
117
+  newEffect->user = this;
118
+
119
+  // Clean up
120
+  CFRelease(pluginPathStringRef);
121
+  CFRelease(bundleUrl);
122
+
123
+  return newEffect;
124
 }
125
 
126
 void VSTPlugin::unloadLibrary() {
127
-   if (bundle)
128
-   {
129
-       CFBundleUnloadExecutable(bundle);
130
-       CFRelease(bundle);
131
-   }
132
+  if (bundle) {
133
+    CFBundleUnloadExecutable(bundle);
134
+    CFRelease(bundle);
135
+  }
136
 }
137
\ No newline at end of file
138
obs-studio-25.0.4.tar.xz/plugins/obs-x264/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/plugins/obs-x264/CMakeLists.txt Changed
15
 
1
@@ -8,6 +8,13 @@
2
    obs-x264.c
3
    obs-x264-plugin-main.c)
4
 
5
+if(WIN32)
6
+   set(MODULE_DESCRIPTION "OBS x264 encoder")
7
+   configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in obs-x264.rc)
8
+   list(APPEND obs-x264_SOURCES
9
+       obs-x264.rc)
10
+endif()
11
+
12
 add_library(obs-x264 MODULE
13
    ${obs-x264_SOURCES})
14
 target_link_libraries(obs-x264
15
obs-studio-25.0.4.tar.xz/plugins/rtmp-services/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/plugins/rtmp-services/CMakeLists.txt Changed
15
 
1
@@ -13,6 +13,13 @@
2
    rtmp-custom.c
3
    rtmp-services-main.c)
4
 
5
+if(WIN32)
6
+   set(MODULE_DESCRIPTION "OBS RTMP Services")
7
+   configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in rtmp-services.rc)
8
+   list(APPEND rtmp-services_SOURCES
9
+       rtmp-services.rc)
10
+endif()
11
+
12
 set(rtmp-services_HEADERS
13
    twitch.h
14
    younow.h
15
obs-studio-25.0.4.tar.xz/plugins/rtmp-services/data/package.json -> obs-studio-25.0.8.tar.xz/plugins/rtmp-services/data/package.json Changed
14
 
1
@@ -1,10 +1,10 @@
2
 {
3
    "url": "https://obsproject.com/obs2_update/rtmp-services",
4
-   "version": 125,
5
+   "version": 131,
6
    "files": [
7
        {
8
            "name": "services.json",
9
-           "version": 125
10
+           "version": 131
11
        }
12
    ]
13
 }
14
obs-studio-25.0.4.tar.xz/plugins/rtmp-services/data/services.json -> obs-studio-25.0.8.tar.xz/plugins/rtmp-services/data/services.json Changed
201
 
1
@@ -893,56 +893,60 @@
2
             "name": "Castr.io",
3
             "servers": [
4
                 {
5
-                    "name": "Chicago US",
6
+                    "name": "US-East (Chicago, IL)",
7
                     "url": "rtmp://cg.castr.io/static"
8
                 },
9
                 {
10
-                    "name": "Los Angeles US",
11
-                    "url": "rtmp://la.castr.io/static"
12
-                },
13
-                {
14
-                    "name": "New York US",
15
+                    "name": "US-East (New York, NY)",
16
                     "url": "rtmp://ny.castr.io/static"
17
                 },
18
                 {
19
-                    "name": "Miami US",
20
+                    "name": "US-East (Miami, FL)",
21
                     "url": "rtmp://mi.castr.io/static"
22
                 },
23
                 {
24
-                    "name": "Montreal CA",
25
+                    "name": "US-West (Seattle, WA)",
26
+                    "url": "rtmp://se.castr.io/static"
27
+                },
28
+                {
29
+                    "name": "US-West (Los Angeles, CA)",
30
+                    "url": "rtmp://la.castr.io/static"
31
+                },
32
+                {
33
+                    "name": "US-Central (Dallas, TX)",
34
+                    "url": "rtmp://da.castr.io/static"
35
+                },
36
+                {
37
+                    "name": "NA-East (Toronto, CA)",
38
                     "url": "rtmp://qc.castr.io/static"
39
                 },
40
                 {
41
-                    "name": "London UK",
42
-                    "url": "rtmp://uk.castr.io/static"
43
+                    "name": "SA (Sao Paulo, BR)",
44
+                    "url": "rtmp://br.castr.io/static"
45
                 },
46
                 {
47
-                    "name": "Frankfurt DE",
48
-                    "url": "rtmp://de.castr.io/static"
49
+                    "name": "EU-West (London, UK)",
50
+                    "url": "rtmp://uk.castr.io/static"
51
                 },
52
                 {
53
-                    "name": "Frankfurt DE 2",
54
+                    "name": "EU-Central (Frankfurt, DE)",
55
                     "url": "rtmp://fr.castr.io/static"
56
                 },
57
                 {
58
-                    "name": "Moscow RU",
59
+                    "name": "Russia (Moscow)",
60
                     "url": "rtmp://ru.castr.io/static"
61
                 },
62
                 {
63
-                    "name": "Singapore",
64
+                    "name": "Asia (Singapore)",
65
                     "url": "rtmp://sg.castr.io/static"
66
                 },
67
                 {
68
-                    "name": "Sydney AU",
69
-                    "url": "rtmp://au.castr.io/static"
70
-                },
71
-                {
72
-                    "name": "Brazil",
73
-                    "url": "rtmp://br.castr.io/static"
74
+                    "name": "Asia (India)",
75
+                    "url": "rtmp://in.castr.io/static"
76
                 },
77
                 {
78
-                    "name": "India",
79
-                    "url": "rtmp://in.castr.io/static"
80
+                    "name": "Australia (Sydney)",
81
+                    "url": "rtmp://au.castr.io/static"
82
                 },
83
                 {
84
                     "name": "US Central",
85
@@ -975,10 +979,6 @@
86
                 {
87
                     "name": "Singapore",
88
                     "url": "rtmp://sg-central.castr.io/static"
89
-                },
90
-                {
91
-                    "name": "India",
92
-                    "url": "rtmp://in.castr.io/static"
93
                 }
94
             ],
95
             "recommended": {
96
@@ -1128,7 +1128,7 @@
97
             "servers": [
98
                 {
99
                     "name": "Auto",
100
-                    "url": "rtmp://s-sd.stripcdn.com/ext"
101
+                    "url": "rtmp://s-sd.stripst.com/ext"
102
                 }
103
             ],
104
             "recommended": {
105
@@ -1494,14 +1494,28 @@
106
             "name": "Bongacams",
107
             "servers": [
108
                 {
109
-                    "name": "Default",
110
-                    "url": "rtmp://origin.bcrncdn.com:1934/live"
111
+                    "name": "Automatic / Default",
112
+                    "url": "rtmp://auto.origin.gnsbc.com:1934/live"
113
+                },
114
+                {
115
+                    "name": "Automatic / Backup",
116
+                    "url": "rtmp://origin.bcvidorigin.com:1934/live"
117
+                },
118
+                {
119
+                    "name": "Europe",
120
+                    "url": "rtmp://z-eu.origin.gnsbc.com:1934/live"
121
+                },
122
+                {
123
+                    "name": "North America",
124
+                    "url": "rtmp://z-us.origin.gnsbc.com:1934/live"
125
                 }
126
             ],
127
             "recommend": {
128
                 "keyint": 2,
129
                 "max video bitrate": 6000,
130
-                "max audio bitrate": 192
131
+                "max audio bitrate": 192,
132
+                "bframes": 0,
133
+                "x264opts": "tune=zerolatency"
134
             }
135
         },
136
         {
137
@@ -1518,16 +1532,20 @@
138
             }
139
         },
140
         {
141
-            "name": "ChathostessModels",
142
+            "name": "Chathostess",
143
             "servers": [
144
                 {
145
-                    "name": "ChathostessModels - Default",
146
+                    "name": "Chathostess - Default",
147
                     "url": "rtmp://wowza01.foobarweb.com/cmschatsys_video"
148
+                },
149
+                {
150
+                    "name": "Chathostess - Backup",
151
+                    "url": "rtmp://wowza05.foobarweb.com/cmschatsys_video"
152
                 }
153
             ],
154
             "recommended": {
155
                 "keyint": 2,
156
-                "max video bitrate": 3000,
157
+                "max video bitrate": 3600,
158
                 "max audio bitrate": 128
159
             }
160
         },
161
@@ -1733,6 +1751,73 @@
162
             "recommended": {
163
                 "keyint": 2
164
             }
165
+        },
166
+        {
167
+            "name": "niconico, premium member (ニコニコ生放送 プレミアム会員)",
168
+            "servers": [
169
+                {
170
+                    "name": "Default",
171
+                    "url": "rtmp://aliveorigin.dmc.nico/named_input"
172
+                }
173
+            ],
174
+            "recommended": {
175
+                "keyint": 2,
176
+                "profile": "high",
177
+                "max audio bitrate": 192,
178
+                "max video bitrate": 5808,
179
+                "x264opts": "tune=zerolatency"
180
+            }
181
+        },
182
+        {
183
+            "name": "niconico, free member (ニコニコ生放送 一般会員)",
184
+            "servers": [
185
+                {
186
+                    "name": "Default",
187
+                    "url": "rtmp://aliveorigin.dmc.nico/named_input"
188
+                }
189
+            ],
190
+            "recommended": {
191
+                "keyint": 2,
192
+                "profile": "high",
193
+                "max audio bitrate": 96,
194
+                "max video bitrate": 904,
195
+                "x264opts": "tune=zerolatency"
196
+            }
197
+        },
198
+        {
199
+            "name": "WASD.TV",
200
+            "servers": [
201
obs-studio-25.0.4.tar.xz/plugins/rtmp-services/rtmp-custom.c -> obs-studio-25.0.8.tar.xz/plugins/rtmp-services/rtmp-custom.c Changed
10
 
1
@@ -18,6 +18,8 @@
2
 
3
    bfree(service->server);
4
    bfree(service->key);
5
+   bfree(service->username);
6
+   bfree(service->password);
7
 
8
    service->server = bstrdup(obs_data_get_string(settings, "server"));
9
    service->key = bstrdup(obs_data_get_string(settings, "key"));
10
obs-studio-25.0.4.tar.xz/plugins/text-freetype2/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/plugins/text-freetype2/CMakeLists.txt Changed
15
 
1
@@ -14,9 +14,12 @@
2
 endif()
3
 
4
 if(WIN32)
5
+   set(MODULE_DESCRIPTION "OBS Freetype text module")
6
+   configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in text-freetype2.rc)
7
    set(text-freetype2_PLATFORM_SOURCES
8
        find-font.c
9
-       find-font-windows.c)
10
+       find-font-windows.c
11
+       text-freetype2.rc)
12
 elseif(APPLE)
13
    find_package(Iconv QUIET)
14
    if(NOT ICONV_FOUND AND ENABLE_FREETYPE)
15
obs-studio-25.0.4.tar.xz/plugins/vlc-video/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/plugins/vlc-video/CMakeLists.txt Changed
15
 
1
@@ -31,6 +31,13 @@
2
    vlc-video-source.c
3
    )
4
 
5
+if(WIN32)
6
+   set(MODULE_DESCRIPTION "OBS VLC module")
7
+   configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in vlc-video.rc)
8
+   list(APPEND vlc-video_SOURCES
9
+       vlc-video.rc)
10
+endif()
11
+
12
 add_library(vlc-video MODULE
13
    ${vlc-video_SOURCES}
14
    ${vlc-video_HEADERS})
15
obs-studio-25.0.4.tar.xz/plugins/win-dshow/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/plugins/win-dshow/CMakeLists.txt Changed
17
 
1
@@ -12,11 +12,14 @@
2
    encode-dstr.hpp
3
    ffmpeg-decode.h)
4
 
5
+set(MODULE_DESCRIPTION "OBS DirectShow module")
6
+configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in win-dshow.rc)
7
 set(win-dshow_SOURCES
8
    win-dshow.cpp
9
    win-dshow-encoder.cpp
10
    dshow-plugin.cpp
11
-   ffmpeg-decode.c)
12
+   ffmpeg-decode.c
13
+   win-dshow.rc)
14
 
15
 set(libdshowcapture_SOURCES
16
    libdshowcapture/source/capture-filter.cpp
17
obs-studio-25.0.4.tar.xz/plugins/win-ivcam/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/plugins/win-ivcam/CMakeLists.txt Changed
14
 
1
@@ -40,9 +40,11 @@
2
    ${win-ivcam_seg_library_GENERATED_FILES}
3
    )
4
 
5
+set(MODULE_DESCRIPTION "OBS Intel(R) RealSense(TM) module")
6
+configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in win-ivcam.rc)
7
 set(win-ivcam_SOURCES
8
    realsense.cpp
9
-   )
10
+   win-ivcam.rc)
11
 
12
 source_group("seg_library\\Source Files" FILES ${win-ivcam_seg_library_SOURCES})
13
 source_group("seg_library\\Header Files" FILES ${win-ivcam_seg_library_HEADERS})
14
obs-studio-25.0.4.tar.xz/plugins/win-mf/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/plugins/win-mf/CMakeLists.txt Changed
30
 
1
@@ -9,6 +9,8 @@
2
 set(win-mf_config_HEADERS
3
    "${CMAKE_CURRENT_BINARY_DIR}/mf-config.hpp")
4
 
5
+set(MODULE_DESCRIPTION "OBS Windows Media Foundations H.264/AAC encoder")
6
+configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in win-mf.rc)
7
 if(ENABLE_WINMF)
8
    set(win-mf_SOURCES
9
        mf-plugin.cpp
10
@@ -17,7 +19,8 @@
11
        mf-common.cpp
12
        mf-encoder-descriptor.cpp
13
        mf-h264.cpp
14
-       mf-h264-encoder.cpp)
15
+       mf-h264-encoder.cpp
16
+       win-mf.rc)
17
 
18
    set(win-mf_HEADERS
19
        mf-common.hpp
20
@@ -35,7 +38,8 @@
21
        wmcodecdspuuid)
22
 else()
23
    set(win-mf_SOURCES
24
-       mf-plugin.cpp)
25
+       mf-plugin.cpp
26
+       win-mf.rc)
27
 endif()
28
 
29
 add_library(win-mf MODULE
30
obs-studio-25.0.4.tar.xz/plugins/win-wasapi/CMakeLists.txt -> obs-studio-25.0.8.tar.xz/plugins/win-wasapi/CMakeLists.txt Changed
16
 
1
@@ -3,10 +3,13 @@
2
 set(win-wasapi_HEADERS
3
    enum-wasapi.hpp)
4
 
5
+set(MODULE_DESCRIPTION "OBS WASAPI module")
6
+configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in win-wasapi.rc)
7
 set(win-wasapi_SOURCES
8
    win-wasapi.cpp
9
    enum-wasapi.cpp
10
-   plugin-main.cpp)
11
+   plugin-main.cpp
12
+   win-wasapi.rc)
13
 
14
 add_library(win-wasapi MODULE
15
    ${win-wasapi_SOURCES}
16