We truncated the diff of some files because they were too big.
If you want to see the full diff for every file, click here.
Changes of Revision 78
obs-studio.changes
Changed
x
1
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
30
return true;
31
};
32
33
+ obs_enum_scenes(cb, nullptr);
34
obs_enum_sources(cb, nullptr);
35
36
if (api)
37
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
43
- OBS_PROPERTY_FONT
44
- OBS_PROPERTY_EDITABLE_LIST
45
- OBS_PROPERTY_FRAME_RATE
46
+ - OBS_PROPERTY_GROUP
47
48
---------------------
49
50
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
63
64
err = nv.nvEncEncodePicture(enc->session, ¶ms);
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
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
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
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
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
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
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
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
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
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
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
11
SSL_CTX_set_default_verify_paths(RTMP_TLS_ctx);
12
#endif
13
#else
14
+ UNUSED_PARAMETER(r);
15
#endif
16
}
17
18
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
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
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
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
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
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
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
2
*****************************************************************************/
3
4
#include "headers/EditorWidget.h"
5
+#include <QCloseEvent>
6
7
EditorWidget::EditorWidget(QWidget *parent, VSTPlugin *plugin) : QWidget(parent), plugin(plugin)
8
{
9
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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