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 71
obs-studio.changes
Changed
x
1
2
-------------------------------------------------------------------
3
+Fri Dec 13 21:17:57 UTC 2019 - jimmy@boombatower.com
4
+
5
+- Update to version 24.0.5:
6
+ * libobs: Update version to 24.0.5
7
+ * CI: Don't run clang format on some submodule plugins
8
+ * Merge pull request #2010 from wanhongqing123/master
9
+ * Merge pull request #2042 from WizardCM/custom-twitch-docks
10
+ * Merge pull request #2183 from ratwithacompiler/macos-python-fix-2
11
+ * Merge pull request #2085 from ratwithacompiler/macos-python-fix
12
+ * Merge pull request #2090 from jpark37/dxgi-refresh-rate
13
+ * Merge pull request #2089 from jpark37/dxgi-driver-version
14
+ * UI: Delete cookies before connecting account
15
+ * UI: Fix bug in untested/unused function code path
16
+ * deps/media-playback: Don't use interrupt cb for local files
17
+ * deps/media-playback: Don't exit thread on AVERROR_EXIT
18
+ * deps/obs-scripting: Fix formatting
19
+ * Merge pull request #2152 from Rosuav/fix-cursor-position
20
+ * UI: Fix Twitch panels not using dark first time
21
+ * Merge pull request #1914 from YouNow/master
22
+ * Merge pull request #2140 from DevWolk/avn-obs
23
+ * Merge pull request #2045 from wolf247/master
24
+ * Merge pull request #2179 from WizardCM/remove-help-interact
25
+ * Merge pull request #2125 from DDRBoxman/appbundle
26
+ * Merge pull request #2168 from kkartaltepe/vaapi-profile-fix
27
+ * Merge pull request #2148 from eulertour/master
28
+ * Merge pull request #2146 from Fenrirthviti/recording-bitrate-fix
29
+ * libobs: Fix race condition
30
+ * Merge pull request #2147 from JohannMG/vscode-ignore
31
+ * Merge pull request #2134 from WizardCM/wasapi-samplerate
32
+ * Merge pull request #2129 from Fenrirthviti/win-blacklist-update
33
+ * Merge pull request #2131 from jpark37/input-layout-error
34
+ * Merge pull request #2128 from Xaymar/return-to-break
35
+ * Merge pull request #2121 from cg2121/fix-warning
36
+ * Merge pull request #2110 from derrod/ffmpeg-output-fix
37
+ * Merge pull request #2106 from cg2121/fix-preview-bug
38
+ * Merge pull request #2126 from Fenrirthviti/linux-ci-fix
39
+ * Merge pull request #2091 from Programatic/xshm_wrong_windows
40
+ * Merge pull request #2120 from jpark37/objc-msgsend
41
+
42
+-------------------------------------------------------------------
43
Tue Oct 15 14:33:53 UTC 2019 - jimmy@boombatower.com
44
45
- Update to version 24.0.3:
46
obs-studio.spec
Changed
8
1
2
Name: obs-studio
3
-Version: 24.0.3
4
+Version: 24.0.5
5
Release: 0
6
Summary: A recording/broadcasting program
7
Group: Productivity/Multimedia/Video/Editors and Convertors
8
_service
Changed
10
1
2
<services>
3
<service name="tar_scm" mode="disabled">
4
<param name="versionformat">@PARENT_TAG@</param>
5
- <param name="revision">refs/tags/24.0.3</param>
6
+ <param name="revision">refs/tags/24.0.5</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">d88a5a5a60bcdcbdde6d5dc54dc352ae8d431070</param>
6
+ <param name="changesrevision">99638ba69782bdb10531a305093bbd25e5d3baef</param>
7
</service>
8
</servicedata>
9
obs-studio-24.0.3.tar.xz/libobs/obs-cocoa.c
Deleted
201
1
2
-/******************************************************************************
3
- Copyright (C) 2013 by Ruwen Hahn <palana@stunned.de>
4
-
5
- This program is free software: you can redistribute it and/or modify
6
- it under the terms of the GNU General Public License as published by
7
- the Free Software Foundation, either version 2 of the License, or
8
- (at your option) any later version.
9
-
10
- This program is distributed in the hope that it will be useful,
11
- but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- GNU General Public License for more details.
14
-
15
- You should have received a copy of the GNU General Public License
16
- along with this program. If not, see <http://www.gnu.org/licenses/>.
17
-******************************************************************************/
18
-
19
-#include "util/platform.h"
20
-#include "util/dstr.h"
21
-#include "obs.h"
22
-#include "obs-internal.h"
23
-
24
-#include <unistd.h>
25
-#include <sys/types.h>
26
-#include <sys/sysctl.h>
27
-
28
-#include <objc/objc.h>
29
-#include <Carbon/Carbon.h>
30
-#include <IOKit/hid/IOHIDDevice.h>
31
-#include <IOKit/hid/IOHIDManager.h>
32
-
33
-const char *get_module_extension(void)
34
-{
35
- return ".so";
36
-}
37
-
38
-static const char *module_bin[] = {
39
- "../obs-plugins",
40
- OBS_INSTALL_PREFIX "obs-plugins",
41
-};
42
-
43
-static const char *module_data[] = {
44
- "../data/obs-plugins/%module%",
45
- OBS_INSTALL_DATA_PATH "obs-plugins/%module%",
46
-};
47
-
48
-static const int module_patterns_size =
49
- sizeof(module_bin) / sizeof(module_bin[0]);
50
-
51
-void add_default_module_paths(void)
52
-{
53
- for (int i = 0; i < module_patterns_size; i++)
54
- obs_add_module_path(module_bin[i], module_data[i]);
55
-}
56
-
57
-char *find_libobs_data_file(const char *file)
58
-{
59
- struct dstr path;
60
- dstr_init_copy(&path, OBS_INSTALL_DATA_PATH "/libobs/");
61
- dstr_cat(&path, file);
62
- return path.array;
63
-}
64
-
65
-static void log_processor_name(void)
66
-{
67
- char *name = NULL;
68
- size_t size;
69
- int ret;
70
-
71
- ret = sysctlbyname("machdep.cpu.brand_string", NULL, &size, NULL, 0);
72
- if (ret != 0)
73
- return;
74
-
75
- name = malloc(size);
76
-
77
- ret = sysctlbyname("machdep.cpu.brand_string", name, &size, NULL, 0);
78
- if (ret == 0)
79
- blog(LOG_INFO, "CPU Name: %s", name);
80
-
81
- free(name);
82
-}
83
-
84
-static void log_processor_speed(void)
85
-{
86
- size_t size;
87
- long long freq;
88
- int ret;
89
-
90
- size = sizeof(freq);
91
- ret = sysctlbyname("hw.cpufrequency", &freq, &size, NULL, 0);
92
- if (ret == 0)
93
- blog(LOG_INFO, "CPU Speed: %lldMHz", freq / 1000000);
94
-}
95
-
96
-static void log_processor_cores(void)
97
-{
98
- blog(LOG_INFO, "Physical Cores: %d, Logical Cores: %d",
99
- os_get_physical_cores(), os_get_logical_cores());
100
-}
101
-
102
-static void log_available_memory(void)
103
-{
104
- size_t size;
105
- long long memory_available;
106
- int ret;
107
-
108
- size = sizeof(memory_available);
109
- ret = sysctlbyname("hw.memsize", &memory_available, &size, NULL, 0);
110
- if (ret == 0)
111
- blog(LOG_INFO, "Physical Memory: %lldMB Total",
112
- memory_available / 1024 / 1024);
113
-}
114
-
115
-static void log_os_name(id pi, SEL UTF8String)
116
-{
117
- unsigned long os_id = (unsigned long)objc_msgSend(
118
- pi, sel_registerName("operatingSystem"));
119
-
120
- id os = objc_msgSend(pi, sel_registerName("operatingSystemName"));
121
- const char *name = (const char *)objc_msgSend(os, UTF8String);
122
-
123
- if (os_id == 5 /*NSMACHOperatingSystem*/) {
124
- blog(LOG_INFO, "OS Name: Mac OS X (%s)", name);
125
- return;
126
- }
127
-
128
- blog(LOG_INFO, "OS Name: %s", name ? name : "Unknown");
129
-}
130
-
131
-static void log_os_version(id pi, SEL UTF8String)
132
-{
133
- id vs = objc_msgSend(pi,
134
- sel_registerName("operatingSystemVersionString"));
135
- const char *version = (const char *)objc_msgSend(vs, UTF8String);
136
-
137
- blog(LOG_INFO, "OS Version: %s", version ? version : "Unknown");
138
-}
139
-
140
-static void log_os(void)
141
-{
142
- Class NSProcessInfo = objc_getClass("NSProcessInfo");
143
- id pi = objc_msgSend((id)NSProcessInfo,
144
- sel_registerName("processInfo"));
145
-
146
- SEL UTF8String = sel_registerName("UTF8String");
147
-
148
- log_os_name(pi, UTF8String);
149
- log_os_version(pi, UTF8String);
150
-}
151
-
152
-static void log_kernel_version(void)
153
-{
154
- char kernel_version[1024];
155
- size_t size = sizeof(kernel_version);
156
- int ret;
157
-
158
- ret = sysctlbyname("kern.osrelease", kernel_version, &size, NULL, 0);
159
- if (ret == 0)
160
- blog(LOG_INFO, "Kernel Version: %s", kernel_version);
161
-}
162
-
163
-void log_system_info(void)
164
-{
165
- log_processor_name();
166
- log_processor_speed();
167
- log_processor_cores();
168
- log_available_memory();
169
- log_os();
170
- log_kernel_version();
171
-}
172
-
173
-static bool dstr_from_cfstring(struct dstr *str, CFStringRef ref)
174
-{
175
- CFIndex length = CFStringGetLength(ref);
176
- CFIndex max_size = CFStringGetMaximumSizeForEncoding(
177
- length, kCFStringEncodingUTF8);
178
- dstr_reserve(str, max_size);
179
-
180
- if (!CFStringGetCString(ref, str->array, max_size,
181
- kCFStringEncodingUTF8))
182
- return false;
183
-
184
- str->len = strlen(str->array);
185
- return true;
186
-}
187
-
188
-struct obs_hotkeys_platform {
189
- volatile long refs;
190
- TISInputSourceRef tis;
191
- CFDataRef layout_data;
192
- UCKeyboardLayout *layout;
193
- IOHIDManagerRef manager;
194
- DARRAY(IOHIDElementRef) keys[OBS_KEY_LAST_VALUE];
195
-};
196
-
197
-static void hotkeys_retain(struct obs_hotkeys_platform *plat)
198
-{
199
- os_atomic_inc_long(&plat->refs);
200
-}
201
obs-studio-24.0.3.tar.xz/CI/before-deploy-osx.sh -> obs-studio-24.0.5.tar.xz/CI/before-deploy-osx.sh
Changed
109
1
2
set -e
3
4
# Generate file name variables
5
+export GIT_TAG=$(git describe --abbrev=0)
6
export GIT_HASH=$(git rev-parse --short HEAD)
7
export FILE_DATE=$(date +%Y-%m-%d.%H-%M-%S)
8
-export FILENAME=$FILE_DATE-$GIT_HASH-$TRAVIS_BRANCH-osx.pkg
9
+export FILENAME=$FILE_DATE-$GIT_HASH-$TRAVIS_BRANCH-osx.dmg
10
+
11
+echo "git tag: $GIT_TAG"
12
13
cd ./build
14
15
16
mv ./rundir/RelWithDebInfo/data/obs-scripting/obslua.so ./rundir/RelWithDebInfo/bin/
17
18
# Move obspython
19
-# hr "Moving OBS Python"
20
-# mv ./rundir/RelWithDebInfo/data/obs-scripting/_obspython.so ./rundir/RelWithDebInfo/bin/
21
-# mv ./rundir/RelWithDebInfo/data/obs-scripting/obspython.py ./rundir/RelWithDebInfo/bin/
22
+hr "Moving OBS Python"
23
+mv ./rundir/RelWithDebInfo/data/obs-scripting/_obspython.so ./rundir/RelWithDebInfo/bin/
24
+mv ./rundir/RelWithDebInfo/data/obs-scripting/obspython.py ./rundir/RelWithDebInfo/bin/
25
26
# Package everything into a nice .app
27
hr "Packaging .app"
28
29
STABLE=true
30
fi
31
32
-sudo python ../CI/install/osx/build_app.py --public-key ../CI/install/osx/OBSPublicDSAKey.pem --sparkle-framework ../../sparkle/Sparkle.framework --stable=$STABLE
33
+#sudo python ../CI/install/osx/build_app.py --public-key ../CI/install/osx/OBSPublicDSAKey.pem --sparkle-framework ../../sparkle/Sparkle.framework --stable=$STABLE
34
+
35
+../CI/install/osx/packageApp.sh
36
+
37
+# fix obs outputs
38
+cp /usr/local/opt/mbedtls/lib/libmbedtls.12.dylib ./OBS.app/Contents/Frameworks/
39
+cp /usr/local/opt/mbedtls/lib/libmbedcrypto.3.dylib ./OBS.app/Contents/Frameworks/
40
+cp /usr/local/opt/mbedtls/lib/libmbedx509.0.dylib ./OBS.app/Contents/Frameworks/
41
+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
42
+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
43
+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
44
+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
45
+install_name_tool -change @rpath/libobs.0.dylib @executable_path/../Frameworks/libobs.0.dylib ./OBS.app/Contents/Plugins/obs-outputs.so
46
+
47
+# copy sparkle into the app
48
+hr "Copying Sparkle.framework"
49
+cp -r ../../sparkle/Sparkle.framework ./OBS.app/Contents/Frameworks/
50
+install_name_tool -change @rpath/Sparkle.framework/Versions/A/Sparkle @executable_path/../Frameworks/Sparkle.framework/Versions/A/Sparkle ./OBS.app/Contents/MacOS/obs
51
52
# Copy Chromium embedded framework to app Frameworks directory
53
hr "Copying Chromium Embedded Framework.framework"
54
sudo mkdir -p OBS.app/Contents/Frameworks
55
sudo cp -r ../../cef_binary_${CEF_BUILD_VERSION}_macosx64/Release/Chromium\ Embedded\ Framework.framework OBS.app/Contents/Frameworks/
56
-sudo install_name_tool -change \
57
- @rpath/Frameworks/Chromium\ Embedded\ Framework.framework/Chromium\ Embedded\ Framework \
58
- ../../Frameworks/Chromium\ Embedded\ Framework.framework/Chromium\ Embedded\ Framework \
59
- OBS.app/Contents/Resources/obs-plugins/obs-browser.so
60
-sudo install_name_tool -change \
61
- @executable_path/../Frameworks/Chromium\ Embedded\ Framework.framework/Chromium\ Embedded\ Framework \
62
- ../../Frameworks/Chromium\ Embedded\ Framework.framework/Chromium\ Embedded\ Framework \
63
- OBS.app/Contents/Resources/obs-plugins/obs-browser.so
64
-sudo install_name_tool -change \
65
- @rpath/Frameworks/Chromium\ Embedded\ Framework.framework/Chromium\ Embedded\ Framework \
66
- ../../Frameworks/Chromium\ Embedded\ Framework.framework/Chromium\ Embedded\ Framework \
67
- OBS.app/Contents/Resources/obs-plugins/obs-browser-page
68
-sudo install_name_tool -change \
69
- @executable_path/../Frameworks/Chromium\ Embedded\ Framework.framework/Chromium\ Embedded\ Framework \
70
- ../../Frameworks/Chromium\ Embedded\ Framework.framework/Chromium\ Embedded\ Framework \
71
- OBS.app/Contents/Resources/obs-plugins/obs-browser-page
72
-
73
-# Package app
74
-hr "Generating .pkg"
75
-packagesbuild ../CI/install/osx/CMakeLists.pkgproj
76
+
77
+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
78
+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
79
+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
80
+
81
+cp ../CI/install/osx/OBSPublicDSAKey.pem OBS.app/Contents/Resources
82
+
83
+# edit plist
84
+plutil -insert CFBundleVersion -string $GIT_TAG ./OBS.app/Contents/Info.plist
85
+plutil -insert CFBundleShortVersionString -string $GIT_TAG ./OBS.app/Contents/Info.plist
86
+plutil -insert OBSFeedsURL -string https://obsproject.com/osx_update/feeds.xml ./OBS.app/Contents/Info.plist
87
+plutil -insert SUFeedURL -string https://obsproject.com/osx_update/stable/updates.xml ./OBS.app/Contents/Info.plist
88
+plutil -insert SUPublicDSAKeyFile -string OBSPublicDSAKey.pem ./OBS.app/Contents/Info.plist
89
+
90
+dmgbuild -s ../CI/install/osx/settings.json "OBS" obs.dmg
91
92
if [ -v "$TRAVIS" ]; then
93
# Signing stuff
94
95
security import ./Certificates.p12 -k build.keychain -T /usr/bin/productsign -P ""
96
# macOS 10.12+
97
security set-key-partition-list -S apple-tool:,apple: -s -k mysecretpassword build.keychain
98
- hr "Signing Package"
99
- productsign --sign 2MMRE5MTB8 ./OBS.pkg ./$FILENAME
100
-else
101
- cp ./OBS.pkg ./$FILENAME
102
fi
103
104
+cp ./OBS.dmg ./$FILENAME
105
+
106
# Move to the folder that travis uses to upload artifacts from
107
hr "Moving package to nightly folder for distribution"
108
mkdir ../nightly
109
obs-studio-24.0.3.tar.xz/CI/install-dependencies-linux.sh -> obs-studio-24.0.5.tar.xz/CI/install-dependencies-linux.sh
Changed
9
1
2
#!/bin/sh
3
set -ex
4
5
-sudo add-apt-repository ppa:jonathonf/ffmpeg-3 -y
6
curl -L https://packagecloud.io/github/git-lfs/gpgkey | sudo apt-key add -
7
8
# gets us newer clang
9
obs-studio-24.0.3.tar.xz/CI/install-dependencies-osx.sh -> obs-studio-24.0.5.tar.xz/CI/install-dependencies-osx.sh
Changed
24
1
2
/bin/bash -c "sudo xcode-select -s /Applications/Xcode_9.4.1.app/Contents/Developer"
3
fi
4
5
+git fetch origin --tags
6
+
7
# Leave obs-studio folder
8
cd ../
9
10
11
brew update
12
13
#Base OBS Deps and ccache
14
-brew install jack speexdsp ccache mbedtls clang-format
15
+brew install jack speexdsp ccache mbedtls clang-format freetype fdk-aac
16
brew install https://gist.githubusercontent.com/DDRBoxman/b3956fab6073335a4bf151db0dcbd4ad/raw/ed1342a8a86793ea8c10d8b4d712a654da121ace/qt.rb
17
brew install https://gist.githubusercontent.com/DDRBoxman/4cada55c51803a2f963fa40ce55c9d3e/raw/572c67e908bfbc1bcb8c476ea77ea3935133f5b5/swig.rb
18
19
+pip install dmgbuild
20
+
21
export PATH=/usr/local/opt/ccache/libexec:$PATH
22
ccache -s || echo "CCache is not available."
23
24
obs-studio-24.0.5.tar.xz/CI/install/osx/Info.plist
Added
32
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>CFBundleSignature</key>
19
+ <string>????</string>
20
+ <key>LSMinimumSystemVersion</key>
21
+ <string>10.8.5</string>
22
+ <key>NSHighResolutionCapable</key>
23
+ <true/>
24
+ <key>LSAppNapIsDisabled</key>
25
+ <true/>
26
+ <key>NSCameraUsageDescription</key>
27
+ <string>OBS needs to access the camera to enable camera sources to work.</string>
28
+ <key>NSMicrophoneUsageDescription</key>
29
+ <string>OBS needs to access the microphone to enable audio input.</string>
30
+</dict>
31
+</plist>
32
obs-studio-24.0.5.tar.xz/CI/install/osx/background.png
Added
obs-studio-24.0.5.tar.xz/CI/install/osx/background.pxd
Added
2
1
+(directory)
2
obs-studio-24.0.5.tar.xz/CI/install/osx/background.pxd/QuickLook
Added
2
1
+(directory)
2
obs-studio-24.0.5.tar.xz/CI/install/osx/background.pxd/QuickLook/Icon.tiff
Added
obs-studio-24.0.5.tar.xz/CI/install/osx/background.pxd/QuickLook/Preview.tiff
Added
obs-studio-24.0.5.tar.xz/CI/install/osx/background.pxd/QuickLook/Thumbnail.tiff
Added
obs-studio-24.0.5.tar.xz/CI/install/osx/background.pxd/data
Added
2
1
+(directory)
2
obs-studio-24.0.5.tar.xz/CI/install/osx/background.pxd/data/556CF265-5721-4F18-BE83-8CF39483B4C2
Added
obs-studio-24.0.5.tar.xz/CI/install/osx/background.pxd/data/8CA689C3-ED2A-459E-952C-E08026CFCD07
Added
obs-studio-24.0.5.tar.xz/CI/install/osx/background.pxd/metadata.info
Added
obs-studio-24.0.5.tar.xz/CI/install/osx/background.tiff
Added
obs-studio-24.0.5.tar.xz/CI/install/osx/background@2x.png
Added
obs-studio-24.0.5.tar.xz/CI/install/osx/buildDMG
Added
3
1
2
+dmgbuild -s ./settings.json "OBS" obs.dmg
3
obs-studio-24.0.5.tar.xz/CI/install/osx/dylibBundler
Added
obs-studio-24.0.5.tar.xz/CI/install/osx/makeRetinaBG
Added
3
1
2
+tiffutil -cathidpicheck background.png background@2x.png -out background.tiff
3
obs-studio-24.0.5.tar.xz/CI/install/osx/obs.icns
Added
obs-studio-24.0.5.tar.xz/CI/install/osx/packageApp.sh
Added
69
1
2
+rm -rf ./OBS.app
3
+
4
+mkdir OBS.app
5
+mkdir OBS.app/Contents
6
+mkdir OBS.app/Contents/MacOS
7
+mkdir OBS.app/Contents/Plugins
8
+mkdir OBS.app/Contents/Resources
9
+
10
+cp -r rundir/RelWithDebInfo/bin/ ./OBS.app/Contents/MacOS
11
+cp -r rundir/RelWithDebInfo/data ./OBS.app/Contents/Resources
12
+cp ../CI/install/osx/obs.icns ./OBS.app/Contents/Resources
13
+cp -r rundir/RelWithDebInfo/obs-plugins/ ./OBS.app/Contents/Plugins
14
+cp ../CI/install/osx/Info.plist ./OBS.app/Contents
15
+
16
+../CI/install/osx/dylibBundler -b -cd -d ./OBS.app/Contents/Frameworks -p @executable_path/../Frameworks/ \
17
+-s ./OBS.app/Contents/MacOS \
18
+-s /usr/local/opt/mbedtls/lib/ \
19
+-x ./OBS.app/Contents/Plugins/coreaudio-encoder.so \
20
+-x ./OBS.app/Contents/Plugins/decklink-ouput-ui.so \
21
+-x ./OBS.app/Contents/Plugins/frontend-tools.so \
22
+-x ./OBS.app/Contents/Plugins/image-source.so \
23
+-x ./OBS.app/Contents/Plugins/linux-jack.so \
24
+-x ./OBS.app/Contents/Plugins/mac-avcapture.so \
25
+-x ./OBS.app/Contents/Plugins/mac-capture.so \
26
+-x ./OBS.app/Contents/Plugins/mac-decklink.so \
27
+-x ./OBS.app/Contents/Plugins/mac-syphon.so \
28
+-x ./OBS.app/Contents/Plugins/mac-vth264.so \
29
+-x ./OBS.app/Contents/Plugins/obs-browser.so \
30
+-x ./OBS.app/Contents/Plugins/obs-browser-page \
31
+-x ./OBS.app/Contents/Plugins/obs-ffmpeg.so \
32
+-x ./OBS.app/Contents/Plugins/obs-filters.so \
33
+-x ./OBS.app/Contents/Plugins/obs-transitions.so \
34
+-x ./OBS.app/Contents/Plugins/obs-vst.so \
35
+-x ./OBS.app/Contents/Plugins/rtmp-services.so \
36
+-x ./OBS.app/Contents/MacOS/obs \
37
+-x ./OBS.app/Contents/MacOS/obs-ffmpeg-mux \
38
+-x ./OBS.app/Contents/MacOS/obslua.so \
39
+-x ./OBS.app/Contents/MacOS/_obspython.so \
40
+-x ./OBS.app/Contents/Plugins/obs-x264.so \
41
+-x ./OBS.app/Contents/Plugins/text-freetype2.so \
42
+-x ./OBS.app/Contents/Plugins/obs-libfdk.so
43
+# -x ./OBS.app/Contents/Plugins/obs-outputs.so \
44
+
45
+/usr/local/Cellar/qt/5.10.1/bin/macdeployqt ./OBS.app
46
+
47
+mv ./OBS.app/Contents/MacOS/libobs-opengl.so ./OBS.app/Contents/Frameworks
48
+
49
+# put qt network in here becasuse streamdeck uses it
50
+cp -r /usr/local/opt/qt/lib/QtNetwork.framework ./OBS.app/Contents/Frameworks
51
+chmod +w ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/QtNetwork
52
+install_name_tool -change /usr/local/Cellar/qt/5.10.1/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/QtNetwork
53
+
54
+# decklink ui qt
55
+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
56
+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
57
+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
58
+
59
+# frontend tools qt
60
+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
61
+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
62
+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
63
+
64
+# vst qt
65
+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
66
+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
67
+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
68
+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
69
obs-studio-24.0.5.tar.xz/CI/install/osx/settings.json
Added
15
1
2
+{
3
+ "title": "OBS",
4
+ "background": "../CI/install/osx/background.tiff",
5
+ "format": "UDZO",
6
+ "compression-level": 9,
7
+ "window": { "position": { "x": 100, "y": 100 },
8
+ "size": { "width": 540, "height": 380 } },
9
+ "contents": [
10
+ { "x": 120, "y": 180, "type": "file",
11
+ "path": "./OBS.app" },
12
+ { "x": 420, "y": 180, "type": "link", "path": "/Applications" }
13
+ ]
14
+}
15
obs-studio-24.0.3.tar.xz/UI/CMakeLists.txt -> obs-studio-24.0.5.tar.xz/UI/CMakeLists.txt
Changed
16
1
2
target_link_libraries(obs
3
Qt5::MacExtras)
4
set_target_properties(obs PROPERTIES LINK_FLAGS "-pagezero_size 10000 -image_base 100000000")
5
- set_property(
6
- TARGET obs
7
- APPEND
8
- PROPERTY INSTALL_RPATH
9
- "/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/"
10
- "/Library/Frameworks/Python.framework/Versions/3.6/lib/"
11
- "/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/"
12
- )
13
endif()
14
15
define_graphic_modules(obs)
16
obs-studio-24.0.3.tar.xz/UI/auth-twitch.cpp -> obs-studio-24.0.5.tar.xz/UI/auth-twitch.cpp
Changed
11
1
2
chat->SetWidget(browser);
3
cef->add_force_popup_url(moderation_tools_url, chat.data());
4
5
- script = bttv_script;
6
+ script = "localStorage.setItem('twilight.theme', 1);";
7
+ script += bttv_script;
8
script += ffz_script;
9
browser->setStartupScript(script);
10
11
obs-studio-24.0.3.tar.xz/UI/forms/OBSBasicSettings.ui -> obs-studio-24.0.5.tar.xz/UI/forms/OBSBasicSettings.ui
Changed
24
1
2
<item row="0" column="1">
3
<widget class="QComboBox" name="sampleRate">
4
<property name="currentText">
5
- <string notr="true">44.1khz</string>
6
+ <string notr="true">44.1 kHz</string>
7
</property>
8
<property name="currentIndex">
9
<number>0</number>
10
</property>
11
<item>
12
<property name="text">
13
- <string>44.1khz</string>
14
+ <string>44.1 kHz</string>
15
</property>
16
</item>
17
<item>
18
<property name="text">
19
- <string>48khz</string>
20
+ <string>48 kHz</string>
21
</property>
22
</item>
23
</widget>
24
obs-studio-24.0.3.tar.xz/UI/frontend-plugins/frontend-tools/auto-scene-switcher-nix.cpp -> obs-studio-24.0.5.tar.xz/UI/frontend-plugins/frontend-tools/auto-scene-switcher-nix.cpp
Changed
21
1
2
if (status >= Success && name != nullptr) {
3
std::string str(name);
4
windowTitle = str;
5
+ XFree(name);
6
+ } else {
7
+ XTextProperty xtp_new_name;
8
+ if (XGetWMName(disp(), w, &xtp_new_name) != 0 &&
9
+ xtp_new_name.value != nullptr) {
10
+ std::string str((const char *)xtp_new_name.value);
11
+ windowTitle = str;
12
+ XFree(xtp_new_name.value);
13
+ }
14
}
15
16
- XFree(name);
17
-
18
return windowTitle;
19
}
20
21
obs-studio-24.0.3.tar.xz/UI/platform-osx.mm -> obs-studio-24.0.5.tar.xz/UI/platform-osx.mm
Changed
34
1
2
3
using namespace std;
4
5
+bool isInBundle()
6
+{
7
+ NSRunningApplication *app = [NSRunningApplication currentApplication];
8
+ return [app bundleIdentifier] != nil;
9
+}
10
+
11
bool GetDataFilePath(const char *data, string &output)
12
{
13
- stringstream str;
14
- str << OBS_DATA_PATH "/obs-studio/" << data;
15
- output = str.str();
16
+ if (isInBundle()) {
17
+ NSRunningApplication *app =
18
+ [NSRunningApplication currentApplication];
19
+ NSURL *bundleURL = [app bundleURL];
20
+ NSString *path = [NSString
21
+ stringWithFormat:@"Contents/Resources/data/obs-studio/%@",
22
+ [NSString stringWithUTF8String:data]];
23
+ NSURL *dataURL = [bundleURL URLByAppendingPathComponent:path];
24
+ output = [[dataURL path] UTF8String];
25
+ } else {
26
+ stringstream str;
27
+ str << OBS_DATA_PATH "/obs-studio/" << data;
28
+ output = str.str();
29
+ }
30
+
31
return !access(output.c_str(), R_OK);
32
}
33
34
obs-studio-24.0.3.tar.xz/UI/properties-view.cpp -> obs-studio-24.0.5.tar.xz/UI/properties-view.cpp
Changed
10
1
2
break;
3
case OBS_PROPERTY_GROUP:
4
GroupChanged(setting);
5
- return;
6
+ break;
7
}
8
9
if (view->callback && !view->deferUpdate)
10
obs-studio-24.0.3.tar.xz/UI/window-basic-auto-config.cpp -> obs-studio-24.0.5.tar.xz/UI/window-basic-auto-config.cpp
Changed
10
1
2
#ifdef BROWSER_AVAILABLE
3
std::string service = QT_TO_UTF8(ui->service->currentText());
4
5
+ OAuth::DeleteCookies(service);
6
+
7
auth = OAuthStreamKey::Login(this, service);
8
if (!!auth)
9
OnAuthConnected();
10
obs-studio-24.0.3.tar.xz/UI/window-basic-interaction.cpp -> obs-studio-24.0.5.tar.xz/UI/window-basic-interaction.cpp
Changed
12
1
2
const char *name = obs_source_get_name(source);
3
setWindowTitle(QTStr("Basic.InteractionWindow").arg(QT_UTF8(name)));
4
5
+ Qt::WindowFlags flags = windowFlags();
6
+ Qt::WindowFlags helpFlag = Qt::WindowContextHelpButtonHint;
7
+ setWindowFlags(flags & (~helpFlag));
8
+
9
auto addDrawCallback = [this]() {
10
obs_display_add_draw_callback(ui->preview->GetDisplay(),
11
OBSBasicInteraction::DrawPreview,
12
obs-studio-24.0.3.tar.xz/UI/window-basic-main-outputs.cpp -> obs-studio-24.0.5.tar.xz/UI/window-basic-main-outputs.cpp
Changed
9
1
2
} else if (videoEncoder == SIMPLE_ENCODER_NVENC) {
3
UpdateRecordingSettings_nvenc(crf);
4
}
5
+ UpdateRecordingAudioSettings();
6
}
7
8
inline void SimpleOutput::SetupOutputs()
9
obs-studio-24.0.3.tar.xz/UI/window-basic-main-scene-collections.cpp -> obs-studio-24.0.5.tar.xz/UI/window-basic-main-scene-collections.cpp
Changed
92
1
2
return found;
3
}
4
5
+static bool GetUnusedSceneCollectionFile(std::string &name, std::string &file)
6
+{
7
+ char path[512];
8
+ size_t len;
9
+ int ret;
10
+
11
+ if (!GetFileSafeName(name.c_str(), file)) {
12
+ blog(LOG_WARNING, "Failed to create safe file name for '%s'",
13
+ name.c_str());
14
+ return false;
15
+ }
16
+
17
+ ret = GetConfigPath(path, sizeof(path), "obs-studio/basic/scenes/");
18
+ if (ret <= 0) {
19
+ blog(LOG_WARNING, "Failed to get scene collection config path");
20
+ return false;
21
+ }
22
+
23
+ len = file.size();
24
+ file.insert(0, path);
25
+
26
+ if (!GetClosestUnusedFileName(file, "json")) {
27
+ blog(LOG_WARNING, "Failed to get closest file name for %s",
28
+ file.c_str());
29
+ return false;
30
+ }
31
+
32
+ file.erase(file.size() - 5, 5);
33
+ file.erase(0, file.size() - len);
34
+ return true;
35
+}
36
+
37
static bool GetSceneCollectionName(QWidget *parent, std::string &name,
38
std::string &file,
39
const char *oldName = nullptr)
40
41
bool rename = oldName != nullptr;
42
const char *title;
43
const char *text;
44
- char path[512];
45
- size_t len;
46
- int ret;
47
48
if (rename) {
49
title = Str("Basic.Main.RenameSceneCollection.Title");
50
51
break;
52
}
53
54
- if (!GetFileSafeName(name.c_str(), file)) {
55
- blog(LOG_WARNING, "Failed to create safe file name for '%s'",
56
- name.c_str());
57
- return false;
58
- }
59
-
60
- ret = GetConfigPath(path, sizeof(path), "obs-studio/basic/scenes/");
61
- if (ret <= 0) {
62
- blog(LOG_WARNING, "Failed to get scene collection config path");
63
- return false;
64
- }
65
-
66
- len = file.size();
67
- file.insert(0, path);
68
-
69
- if (!GetClosestUnusedFileName(file, "json")) {
70
- blog(LOG_WARNING, "Failed to get closest file name for %s",
71
- file.c_str());
72
+ if (!GetUnusedSceneCollectionFile(name, file)) {
73
return false;
74
}
75
76
- file.erase(file.size() - 5, 5);
77
- file.erase(0, file.size() - len);
78
return true;
79
}
80
81
82
name = QT_TO_UTF8(qname);
83
if (SceneCollectionExists(name.c_str()))
84
return false;
85
+
86
+ if (!GetUnusedSceneCollectionFile(name, file)) {
87
+ return false;
88
+ }
89
}
90
91
SaveProjectNow();
92
obs-studio-24.0.3.tar.xz/UI/window-basic-settings-stream.cpp -> obs-studio-24.0.5.tar.xz/UI/window-basic-settings-stream.cpp
Changed
10
1
2
#ifdef BROWSER_AVAILABLE
3
std::string service = QT_TO_UTF8(ui->service->currentText());
4
5
+ OAuth::DeleteCookies(service);
6
+
7
auth = OAuthStreamKey::Login(this, service);
8
if (!!auth)
9
OnAuthConnected();
10
obs-studio-24.0.3.tar.xz/UI/window-basic-settings.cpp -> obs-studio-24.0.5.tar.xz/UI/window-basic-settings.cpp
Changed
22
1
2
3
const char *str;
4
if (sampleRate == 48000)
5
- str = "48khz";
6
+ str = "48 kHz";
7
else
8
- str = "44.1khz";
9
+ str = "44.1 kHz";
10
11
int sampleRateIdx = ui->sampleRate->findText(str);
12
if (sampleRateIdx != -1)
13
14
}
15
16
int sampleRate = 44100;
17
- if (sampleRateStr == "48khz")
18
+ if (sampleRateStr == "48 kHz")
19
sampleRate = 48000;
20
21
if (WidgetChanged(ui->sampleRate))
22
obs-studio-24.0.3.tar.xz/UI/window-extra-browsers.cpp -> obs-studio-24.0.5.tar.xz/UI/window-extra-browsers.cpp
Changed
26
1
2
3
dock->SetWidget(browser);
4
5
+ /* Add support for Twitch Dashboard panels */
6
+ if (url.contains("twitch.tv/popout") &&
7
+ url.contains("dashboard/live")) {
8
+ QRegularExpression re("twitch.tv\/popout\/([^/]+)\/");
9
+ QRegularExpressionMatch match = re.match(url);
10
+ QString username = match.captured(1);
11
+ if (username.length() > 0) {
12
+ std::string script;
13
+ script =
14
+ "Object.defineProperty(document, 'referrer', { get: () => '";
15
+ script += "https://twitch.tv/";
16
+ script += QT_TO_UTF8(username);
17
+ script += "/dashboard/live";
18
+ script += "'});";
19
+ browser->setStartupScript(script);
20
+ }
21
+ }
22
+
23
addDockWidget(Qt::RightDockWidgetArea, dock);
24
25
if (firstCreate) {
26
obs-studio-24.0.3.tar.xz/UI/window-projector.cpp -> obs-studio-24.0.5.tar.xz/UI/window-projector.cpp
Changed
11
1
2
source = curSource;
3
window->source = source;
4
}
5
+ } else if (window->type == ProjectorType::Preview &&
6
+ !main->IsPreviewProgramMode()) {
7
+ window->source = nullptr;
8
}
9
10
if (source)
11
obs-studio-24.0.3.tar.xz/cmake/Modules/ObsHelpers.cmake -> obs-studio-24.0.5.tar.xz/cmake/Modules/ObsHelpers.cmake
Changed
10
1
2
set(OBS_INSTALL_PREFIX "")
3
set(OBS_RELATIVE_PREFIX "../")
4
5
- set(OBS_SCRIPT_PLUGIN_DESTINATION "${OBS_DATA_DESTINATION}/obs-scripting/${_lib_suffix}bit")
6
+ set(OBS_SCRIPT_PLUGIN_DESTINATION "${OBS_DATA_DESTINATION}/obs-scripting")
7
else()
8
set(OBS_EXECUTABLE_DESTINATION "bin/${_lib_suffix}bit")
9
set(OBS_EXECUTABLE32_DESTINATION "bin/32bit")
10
obs-studio-24.0.3.tar.xz/deps/media-playback/media-playback/media.c -> obs-studio-24.0.5.tar.xz/deps/media-playback/media-playback/media.c
Changed
32
1
2
3
int ret = av_read_frame(media->fmt, &pkt);
4
if (ret < 0) {
5
- if (ret != AVERROR_EOF)
6
+ if (ret != AVERROR_EOF && ret != AVERROR_EXIT)
7
blog(LOG_WARNING, "MP: av_read_frame failed: %s (%d)",
8
av_err2str(ret), ret);
9
return ret;
10
11
while (!mp_media_ready_to_start(m)) {
12
if (!m->eof) {
13
int ret = mp_media_next_packet(m);
14
- if (ret == AVERROR_EOF)
15
+ if (ret == AVERROR_EOF || ret == AVERROR_EXIT)
16
m->eof = true;
17
else if (ret < 0)
18
return false;
19
20
av_dict_set_int(&opts, "buffer_size", m->buffering, 0);
21
22
m->fmt = avformat_alloc_context();
23
- m->fmt->interrupt_callback.callback = interrupt_callback;
24
- m->fmt->interrupt_callback.opaque = m;
25
+ if (!m->is_local_file) {
26
+ m->fmt->interrupt_callback.callback = interrupt_callback;
27
+ m->fmt->interrupt_callback.opaque = m;
28
+ }
29
30
int ret = avformat_open_input(&m->fmt, m->path, format,
31
opts ? &opts : NULL);
32
obs-studio-24.0.3.tar.xz/deps/obs-scripting/CMakeLists.txt -> obs-studio-24.0.5.tar.xz/deps/obs-scripting/CMakeLists.txt
Changed
13
1
2
w32-pthreads)
3
endif()
4
5
+if(APPLE)
6
+ set(obs-scripting_PLATFORM_DEPS
7
+ objc)
8
+endif()
9
+
10
option(DISABLE_LUA "Disable Lua scripting support" OFF)
11
option(DISABLE_PYTHON "Disable Python scripting support" OFF)
12
13
obs-studio-24.0.3.tar.xz/deps/obs-scripting/obs-scripting-lua.c -> obs-studio-24.0.5.tar.xz/deps/obs-scripting/obs-scripting-lua.c
Changed
44
1
2
for val in pairs(package.preload) do\n\
3
package.preload[val] = nil\n\
4
end\n\
5
-package.cpath = package.cpath .. \";\" .. \"%s\" .. \"/?." SO_EXT "\"\n\
6
+package.cpath = package.cpath .. \";\" .. \"%s/Contents/MacOS/?.so\" .. \";\" .. \"%s\" .. \"/?." SO_EXT
7
+ "\"\n\
8
require \"obslua\"\n";
9
10
static const char *get_script_path_func = "\
11
12
/* ---------------------------------------------- */
13
/* Initialize Lua startup script */
14
15
- dstr_printf(&tmp, startup_script_template, SCRIPT_DIR);
16
+ char *bundlePath = "./";
17
+
18
+#ifdef __APPLE__
19
+ Class nsRunningApplication = objc_lookUpClass("NSRunningApplication");
20
+ SEL currentAppSel = sel_getUid("currentApplication");
21
+
22
+ typedef id (*running_app_func)(Class, SEL);
23
+ running_app_func operatingSystemName = (running_app_func)objc_msgSend;
24
+ id app = operatingSystemName(nsRunningApplication, currentAppSel);
25
+
26
+ typedef id (*bundle_url_func)(id, SEL);
27
+ bundle_url_func bundleURL = (bundle_url_func)objc_msgSend;
28
+ id url = bundleURL(app, sel_getUid("bundleURL"));
29
+
30
+ typedef id (*url_path_func)(id, SEL);
31
+ url_path_func urlPath = (url_path_func)objc_msgSend;
32
+
33
+ id path = urlPath(url, sel_getUid("path"));
34
+
35
+ typedef id (*string_func)(id, SEL);
36
+ string_func utf8String = (string_func)objc_msgSend;
37
+ bundlePath = (char *)utf8String(path, sel_registerName("UTF8String"));
38
+#endif
39
+
40
+ dstr_printf(&tmp, startup_script_template, bundlePath, SCRIPT_DIR);
41
startup_script = tmp.array;
42
43
dstr_free(&dep_paths);
44
obs-studio-24.0.3.tar.xz/deps/obs-scripting/obs-scripting-python-import.c -> obs-studio-24.0.5.tar.xz/deps/obs-scripting/obs-scripting-python-import.c
Changed
23
1
2
#define SO_EXT ".dylib"
3
#endif
4
5
+#ifdef __APPLE__
6
+#define PYTHON_LIB_SUBDIR "lib/"
7
+#else
8
+#define PYTHON_LIB_SUBDIR ""
9
+#endif
10
+
11
bool import_python(const char *python_path)
12
{
13
struct dstr lib_path;
14
15
dstr_init_copy(&lib_path, python_path);
16
dstr_replace(&lib_path, "\\", "/");
17
if (!dstr_is_empty(&lib_path)) {
18
- dstr_cat(&lib_path, "/");
19
+ dstr_cat(&lib_path, "/" PYTHON_LIB_SUBDIR);
20
}
21
dstr_cat(&lib_path, PYTHON_LIB SO_EXT);
22
23
obs-studio-24.0.3.tar.xz/deps/obs-scripting/obs-scripting-python.c -> obs-studio-24.0.5.tar.xz/deps/obs-scripting/obs-scripting-python.c
Changed
15
1
2
3
add_to_python_path(SCRIPT_DIR);
4
5
+#if __APPLE__
6
+ char *exec_path = os_get_executable_path_ptr("");
7
+ if (exec_path)
8
+ add_to_python_path(exec_path);
9
+ bfree(exec_path);
10
+#endif
11
+
12
py_obspython = PyImport_ImportModule("obspython");
13
bool success = !py_error();
14
if (!success) {
15
obs-studio-24.0.3.tar.xz/deps/obs-scripting/obspython/CMakeLists.txt -> obs-studio-24.0.5.tar.xz/deps/obs-scripting/obspython/CMakeLists.txt
Changed
31
1
2
else()
3
SWIG_ADD_MODULE(obspython python obspython.i ../cstrcache.cpp ../cstrcache.h)
4
endif()
5
-SWIG_LINK_LIBRARIES(obspython obs-scripting libobs ${PYTHON_LIBRARIES})
6
+
7
+IF(APPLE)
8
+ SWIG_LINK_LIBRARIES(obspython obs-scripting libobs)
9
+ELSE()
10
+ SWIG_LINK_LIBRARIES(obspython obs-scripting libobs ${PYTHON_LIBRARIES})
11
+ENDIF()
12
13
function(install_plugin_bin_swig target additional_target)
14
if(APPLE)
15
16
PREFIX "")
17
18
if (APPLE)
19
- set_property(
20
- TARGET ${additional_target}
21
- APPEND
22
- PROPERTY INSTALL_RPATH
23
- "/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/"
24
- "/Library/Frameworks/Python.framework/Versions/3.6/lib/"
25
- "/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/"
26
- )
27
+ SET_TARGET_PROPERTIES(${additional_target} PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
28
endif()
29
30
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/obspython.py"
31
obs-studio-24.0.3.tar.xz/formatcode.sh -> obs-studio-24.0.5.tar.xz/formatcode.sh
Changed
17
1
2
CLANG_FORMAT=clang-format
3
fi
4
5
-find . -type d \( -path ./deps -o -path ./cmake -o -path ./plugins/decklink/win -o -path ./plugins/decklink/mac -o -path ./plugins/decklink/linux -o -path ./build \) -prune -type f -o -name '*.h' -or -name '*.hpp' -or -name '*.m' -or -name '*.mm' -or -name '*.c' -or -name '*.cpp' \
6
+find . -type d \( -path ./deps \
7
+-o -path ./cmake \
8
+-o -path ./plugins/decklink/win \
9
+-o -path ./plugins/decklink/mac \
10
+-o -path ./plugins/decklink/linux \
11
+-o -path ./plugins/enc-amf \
12
+-o -path ./plugins/mac-syphon/syphon-framework \
13
+-o -path ./plugins/obs-outputs/ftl-sdk \
14
+-o -path ./plugins/obs-vst \
15
+-o -path ./build \) -prune -type f -o -name '*.h' -or -name '*.hpp' -or -name '*.m' -or -name '*.mm' -or -name '*.c' -or -name '*.cpp' \
16
| xargs -I{} -P ${NPROC} ${CLANG_FORMAT} -i -style=file -fallback-style=none {}
17
obs-studio-24.0.3.tar.xz/libobs-d3d11/d3d11-rebuild.cpp -> obs-studio-24.0.5.tar.xz/libobs-d3d11/d3d11-rebuild.cpp
Changed
19
1
2
if (FAILED(hr))
3
throw HRError("Failed to create vertex shader", hr);
4
5
- hr = dev->CreateInputLayout(layoutData.data(), (UINT)layoutData.size(),
6
- data.data(), data.size(), &layout);
7
- if (FAILED(hr))
8
- throw HRError("Failed to create input layout", hr);
9
+ const UINT layoutSize = (UINT)layoutData.size();
10
+ if (layoutSize > 0) {
11
+ hr = dev->CreateInputLayout(layoutData.data(), layoutSize,
12
+ data.data(), data.size(), &layout);
13
+ if (FAILED(hr))
14
+ throw HRError("Failed to create input layout", hr);
15
+ }
16
17
if (constantSize) {
18
hr = dev->CreateBuffer(&bd, NULL, &constants);
19
obs-studio-24.0.3.tar.xz/libobs-d3d11/d3d11-subsystem.cpp -> obs-studio-24.0.5.tar.xz/libobs-d3d11/d3d11-subsystem.cpp
Changed
126
1
2
}
3
}
4
5
+static bool GetMonitorTarget(const MONITORINFOEX &info,
6
+ DISPLAYCONFIG_TARGET_DEVICE_NAME &target)
7
+{
8
+ bool found = false;
9
+
10
+ UINT32 numPath, numMode;
11
+ if (GetDisplayConfigBufferSizes(QDC_ONLY_ACTIVE_PATHS, &numPath,
12
+ &numMode) == ERROR_SUCCESS) {
13
+ std::vector<DISPLAYCONFIG_PATH_INFO> paths(numPath);
14
+ std::vector<DISPLAYCONFIG_MODE_INFO> modes(numMode);
15
+ if (QueryDisplayConfig(QDC_ONLY_ACTIVE_PATHS, &numPath,
16
+ paths.data(), &numMode, modes.data(),
17
+ nullptr) == ERROR_SUCCESS) {
18
+ paths.resize(numPath);
19
+ for (size_t i = 0; i < numPath; ++i) {
20
+ const DISPLAYCONFIG_PATH_INFO &path = paths[i];
21
+
22
+ DISPLAYCONFIG_SOURCE_DEVICE_NAME
23
+ source;
24
+ source.header.type =
25
+ DISPLAYCONFIG_DEVICE_INFO_GET_SOURCE_NAME;
26
+ source.header.size = sizeof(source);
27
+ source.header.adapterId =
28
+ path.sourceInfo.adapterId;
29
+ source.header.id = path.sourceInfo.id;
30
+ if (DisplayConfigGetDeviceInfo(
31
+ &source.header) == ERROR_SUCCESS &&
32
+ wcscmp(info.szDevice,
33
+ source.viewGdiDeviceName) == 0) {
34
+ target.header.type =
35
+ DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME;
36
+ target.header.size = sizeof(target);
37
+ target.header.adapterId =
38
+ path.sourceInfo.adapterId;
39
+ target.header.id = path.targetInfo.id;
40
+ found = DisplayConfigGetDeviceInfo(
41
+ &target.header) ==
42
+ ERROR_SUCCESS;
43
+ break;
44
+ }
45
+ }
46
+ }
47
+ }
48
+
49
+ return found;
50
+}
51
+
52
static inline void LogAdapterMonitors(IDXGIAdapter1 *adapter)
53
{
54
UINT i;
55
56
if (FAILED(output->GetDesc(&desc)))
57
continue;
58
59
- RECT rect = desc.DesktopCoordinates;
60
+ unsigned refresh = 0;
61
+
62
+ bool target_found = false;
63
+ DISPLAYCONFIG_TARGET_DEVICE_NAME target;
64
+
65
+ MONITORINFOEX info;
66
+ info.cbSize = sizeof(info);
67
+ if (GetMonitorInfo(desc.Monitor, &info)) {
68
+ target_found = GetMonitorTarget(info, target);
69
+
70
+ DEVMODE mode;
71
+ mode.dmSize = sizeof(mode);
72
+ mode.dmDriverExtra = 0;
73
+ if (EnumDisplaySettings(info.szDevice,
74
+ ENUM_CURRENT_SETTINGS, &mode)) {
75
+ refresh = mode.dmDisplayFrequency;
76
+ }
77
+ }
78
+
79
+ if (!target_found) {
80
+ target.monitorFriendlyDeviceName[0] = 0;
81
+ }
82
+
83
+ const RECT &rect = desc.DesktopCoordinates;
84
blog(LOG_INFO,
85
"\t output %u: "
86
"pos={%d, %d}, "
87
"size={%d, %d}, "
88
- "attached=%s",
89
+ "attached=%s, "
90
+ "refresh=%u, "
91
+ "name=%ls",
92
i, rect.left, rect.top, rect.right - rect.left,
93
rect.bottom - rect.top,
94
- desc.AttachedToDesktop ? "true" : "false");
95
+ desc.AttachedToDesktop ? "true" : "false", refresh,
96
+ target.monitorFriendlyDeviceName);
97
}
98
}
99
100
101
blog(LOG_INFO, "\t Shared VRAM: %u",
102
desc.SharedSystemMemory);
103
104
+ /* driver version */
105
+ LARGE_INTEGER umd;
106
+ hr = adapter->CheckInterfaceSupport(__uuidof(IDXGIDevice),
107
+ &umd);
108
+ if (SUCCEEDED(hr)) {
109
+ const uint64_t version = umd.QuadPart;
110
+ const uint16_t aa = (version >> 48) & 0xffff;
111
+ const uint16_t bb = (version >> 32) & 0xffff;
112
+ const uint16_t ccccc = (version >> 16) & 0xffff;
113
+ const uint16_t ddddd = version & 0xffff;
114
+ blog(LOG_INFO,
115
+ "\t Driver Version: %" PRIu16 ".%" PRIu16
116
+ ".%" PRIu16 ".%" PRIu16,
117
+ aa, bb, ccccc, ddddd);
118
+ } else {
119
+ blog(LOG_INFO, "\t Driver Version: Unknown (0x%X)",
120
+ (unsigned)hr);
121
+ }
122
+
123
LogAdapterMonitors(adapter);
124
}
125
}
126
obs-studio-24.0.3.tar.xz/libobs/CMakeLists.txt -> obs-studio-24.0.5.tar.xz/libobs/CMakeLists.txt
Changed
10
1
2
endif()
3
elseif(APPLE)
4
set(libobs_PLATFORM_SOURCES
5
- obs-cocoa.c
6
+ obs-cocoa.m
7
util/threading-posix.c
8
util/pipe-posix.c
9
util/platform-nix.c
10
obs-studio-24.0.5.tar.xz/libobs/obs-cocoa.m
Added
201
1
2
+/******************************************************************************
3
+ Copyright (C) 2013 by Ruwen Hahn <palana@stunned.de>
4
+
5
+ This program is free software: you can redistribute it and/or modify
6
+ it under the terms of the GNU General Public License as published by
7
+ the Free Software Foundation, either version 2 of the License, or
8
+ (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License
16
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+******************************************************************************/
18
+
19
+#include "util/platform.h"
20
+#include "util/dstr.h"
21
+#include "obs.h"
22
+#include "obs-internal.h"
23
+
24
+#include <unistd.h>
25
+#include <sys/types.h>
26
+#include <sys/sysctl.h>
27
+
28
+#include <objc/objc.h>
29
+#include <Carbon/Carbon.h>
30
+#include <IOKit/hid/IOHIDDevice.h>
31
+#include <IOKit/hid/IOHIDManager.h>
32
+
33
+#import <AppKit/AppKit.h>
34
+
35
+bool is_in_bundle()
36
+{
37
+ NSRunningApplication *app = [NSRunningApplication currentApplication];
38
+ return [app bundleIdentifier] != nil;
39
+}
40
+
41
+const char *get_module_extension(void)
42
+{
43
+ return ".so";
44
+}
45
+
46
+static const char *module_bin[] = {
47
+ "../obs-plugins",
48
+ OBS_INSTALL_PREFIX "obs-plugins",
49
+};
50
+
51
+static const char *module_data[] = {
52
+ "../data/obs-plugins/%module%",
53
+ OBS_INSTALL_DATA_PATH "obs-plugins/%module%",
54
+};
55
+
56
+static const int module_patterns_size =
57
+ sizeof(module_bin) / sizeof(module_bin[0]);
58
+
59
+void add_default_module_paths(void)
60
+{
61
+ for (int i = 0; i < module_patterns_size; i++)
62
+ obs_add_module_path(module_bin[i], module_data[i]);
63
+
64
+ if (is_in_bundle()) {
65
+ NSRunningApplication *app =
66
+ [NSRunningApplication currentApplication];
67
+ NSURL *bundleURL = [app bundleURL];
68
+ NSURL *pluginsURL = [bundleURL
69
+ URLByAppendingPathComponent:@"Contents/Plugins"];
70
+ NSURL *dataURL = [bundleURL
71
+ URLByAppendingPathComponent:
72
+ @"Contents/Resources/data/obs-plugins/%module%"];
73
+
74
+ const char *binPath = [[pluginsURL path]
75
+ cStringUsingEncoding:NSUTF8StringEncoding];
76
+ const char *dataPath = [[dataURL path]
77
+ cStringUsingEncoding:NSUTF8StringEncoding];
78
+
79
+ obs_add_module_path(binPath, dataPath);
80
+ }
81
+}
82
+
83
+char *find_libobs_data_file(const char *file)
84
+{
85
+ struct dstr path;
86
+
87
+ if (is_in_bundle()) {
88
+ NSRunningApplication *app =
89
+ [NSRunningApplication currentApplication];
90
+ NSURL *bundleURL = [app bundleURL];
91
+ NSURL *libobsDataURL =
92
+ [bundleURL URLByAppendingPathComponent:
93
+ @"Contents/Resources/data/libobs/"];
94
+ const char *libobsDataPath = [[libobsDataURL path]
95
+ cStringUsingEncoding:NSUTF8StringEncoding];
96
+ dstr_init_copy(&path, libobsDataPath);
97
+ dstr_cat(&path, "/");
98
+ } else {
99
+ dstr_init_copy(&path, OBS_INSTALL_DATA_PATH "/libobs/");
100
+ }
101
+
102
+ dstr_cat(&path, file);
103
+ return path.array;
104
+}
105
+
106
+static void log_processor_name(void)
107
+{
108
+ char *name = NULL;
109
+ size_t size;
110
+ int ret;
111
+
112
+ ret = sysctlbyname("machdep.cpu.brand_string", NULL, &size, NULL, 0);
113
+ if (ret != 0)
114
+ return;
115
+
116
+ name = malloc(size);
117
+
118
+ ret = sysctlbyname("machdep.cpu.brand_string", name, &size, NULL, 0);
119
+ if (ret == 0)
120
+ blog(LOG_INFO, "CPU Name: %s", name);
121
+
122
+ free(name);
123
+}
124
+
125
+static void log_processor_speed(void)
126
+{
127
+ size_t size;
128
+ long long freq;
129
+ int ret;
130
+
131
+ size = sizeof(freq);
132
+ ret = sysctlbyname("hw.cpufrequency", &freq, &size, NULL, 0);
133
+ if (ret == 0)
134
+ blog(LOG_INFO, "CPU Speed: %lldMHz", freq / 1000000);
135
+}
136
+
137
+static void log_processor_cores(void)
138
+{
139
+ blog(LOG_INFO, "Physical Cores: %d, Logical Cores: %d",
140
+ os_get_physical_cores(), os_get_logical_cores());
141
+}
142
+
143
+static void log_available_memory(void)
144
+{
145
+ size_t size;
146
+ long long memory_available;
147
+ int ret;
148
+
149
+ size = sizeof(memory_available);
150
+ ret = sysctlbyname("hw.memsize", &memory_available, &size, NULL, 0);
151
+ if (ret == 0)
152
+ blog(LOG_INFO, "Physical Memory: %lldMB Total",
153
+ memory_available / 1024 / 1024);
154
+}
155
+
156
+static void log_os_name(id pi, SEL UTF8StringSel)
157
+{
158
+ typedef int (*os_func)(id, SEL);
159
+ os_func operatingSystem = (os_func)objc_msgSend;
160
+ unsigned long os_id = (unsigned long)operatingSystem(
161
+ pi, sel_registerName("operatingSystem"));
162
+
163
+ typedef id (*os_name_func)(id, SEL);
164
+ os_name_func operatingSystemName = (os_name_func)objc_msgSend;
165
+ id os = operatingSystemName(pi,
166
+ sel_registerName("operatingSystemName"));
167
+ typedef const char *(*utf8_func)(id, SEL);
168
+ utf8_func UTF8String = (utf8_func)objc_msgSend;
169
+ const char *name = UTF8String(os, UTF8StringSel);
170
+
171
+ if (os_id == 5 /*NSMACHOperatingSystem*/) {
172
+ blog(LOG_INFO, "OS Name: Mac OS X (%s)", name);
173
+ return;
174
+ }
175
+
176
+ blog(LOG_INFO, "OS Name: %s", name ? name : "Unknown");
177
+}
178
+
179
+static void log_os_version(id pi, SEL UTF8StringSel)
180
+{
181
+ typedef id (*version_func)(id, SEL);
182
+ version_func operatingSystemVersionString = (version_func)objc_msgSend;
183
+ id vs = operatingSystemVersionString(
184
+ pi, sel_registerName("operatingSystemVersionString"));
185
+ typedef const char *(*utf8_func)(id, SEL);
186
+ utf8_func UTF8String = (utf8_func)objc_msgSend;
187
+ const char *version = UTF8String(vs, UTF8StringSel);
188
+
189
+ blog(LOG_INFO, "OS Version: %s", version ? version : "Unknown");
190
+}
191
+
192
+static void log_os(void)
193
+{
194
+ Class NSProcessInfo = objc_getClass("NSProcessInfo");
195
+ typedef id (*func)(id, SEL);
196
+ func processInfo = (func)objc_msgSend;
197
+ id pi = processInfo((id)NSProcessInfo, sel_registerName("processInfo"));
198
+
199
+ SEL UTF8String = sel_registerName("UTF8String");
200
+
201
obs-studio-24.0.3.tar.xz/libobs/obs-config.h -> obs-studio-24.0.5.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 3
6
+#define LIBOBS_API_PATCH_VER 5
7
8
#define MAKE_SEMANTIC_VERSION(major, minor, patch) \
9
((major << 24) | (minor << 16) | patch)
10
obs-studio-24.0.3.tar.xz/libobs/obs-video-gpu-encode.c -> obs-studio-24.0.5.tar.xz/libobs/obs-video-gpu-encode.c
Changed
15
1
2
video_output_inc_texture_frames(video->video);
3
4
for (size_t i = 0; i < video->gpu_encoders.num; i++) {
5
- obs_encoder_t *encoder = video->gpu_encoders.array[i];
6
- da_push_back(encoders, &encoder);
7
- obs_encoder_addref(encoder);
8
+ obs_encoder_t *encoder = obs_encoder_get_ref(
9
+ video->gpu_encoders.array[i]);
10
+ if (encoder)
11
+ da_push_back(encoders, &encoder);
12
}
13
14
pthread_mutex_unlock(&video->gpu_encoder_mutex);
15
obs-studio-24.0.3.tar.xz/plugins/linux-capture/xcompcap-main.cpp -> obs-studio-24.0.5.tar.xz/plugins/linux-capture/xcompcap-main.cpp
Changed
11
1
2
effect = obs_get_base_effect(OBS_EFFECT_DEFAULT);
3
4
while (gs_effect_loop(effect, "Draw")) {
5
- xcursor_render(p->cursor);
6
+ xcursor_render(p->cursor, -p->cur_cut_left,
7
+ -p->cur_cut_top);
8
}
9
}
10
}
11
obs-studio-24.0.3.tar.xz/plugins/linux-capture/xcursor.c -> obs-studio-24.0.5.tar.xz/plugins/linux-capture/xcursor.c
Changed
20
1
2
XFree(xc);
3
}
4
5
-void xcursor_render(xcursor_t *data)
6
+void xcursor_render(xcursor_t *data, int x_offset, int y_offset)
7
{
8
if (!data->tex)
9
return;
10
11
gs_enable_color(true, true, true, false);
12
13
gs_matrix_push();
14
- gs_matrix_translate3f(data->render_x, data->render_y, 0.0f);
15
+ gs_matrix_translate3f(data->render_x + x_offset,
16
+ data->render_y + y_offset, 0.0f);
17
gs_draw_sprite(data->tex, 0, 0, 0);
18
gs_matrix_pop();
19
20
obs-studio-24.0.3.tar.xz/plugins/linux-capture/xcursor.h -> obs-studio-24.0.5.tar.xz/plugins/linux-capture/xcursor.h
Changed
10
1
2
*
3
* This needs to be executed within a valid render context
4
*/
5
-void xcursor_render(xcursor_t *data);
6
+void xcursor_render(xcursor_t *data, int x_offset, int y_offset);
7
8
/**
9
* Specify offset for the cursor
10
obs-studio-24.0.3.tar.xz/plugins/linux-capture/xhelpers.c -> obs-studio-24.0.5.tar.xz/plugins/linux-capture/xhelpers.c
Changed
9
1
2
{
3
if (!xcb)
4
return 0;
5
-
6
xcb_screen_t *screen;
7
screen = xcb_setup_roots_iterator(xcb_get_setup(xcb)).data;
8
9
obs-studio-24.0.3.tar.xz/plugins/linux-capture/xshm-input.c -> obs-studio-24.0.5.tar.xz/plugins/linux-capture/xshm-input.c
Changed
12
1
2
")",
3
i, w, h, x, y);
4
5
- obs_property_list_add_int(screens, screen_info.array, i);
6
+ if (h > 0 && w > 0)
7
+ obs_property_list_add_int(screens, screen_info.array,
8
+ i);
9
}
10
11
/* handle missing screen */
12
obs-studio-24.0.3.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-output.c -> obs-studio-24.0.5.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-output.c
Changed
11
1
2
*assign = 0;
3
value = assign + 1;
4
5
- if (av_opt_set(context->priv_data, name, value, 0)) {
6
+ if (av_opt_set(context, name, value,
7
+ AV_OPT_SEARCH_CHILDREN)) {
8
blog(LOG_WARNING, "Failed to set %s=%s", name,
9
value);
10
ret = false;
11
obs-studio-24.0.3.tar.xz/plugins/obs-outputs/rtmp-stream.c -> obs-studio-24.0.5.tar.xz/plugins/obs-outputs/rtmp-stream.c
Changed
10
1
2
return;
3
}
4
5
- if (buffer_duration_usec >= DBR_TRIGGER_USEC) {
6
+ if ((uint64_t)buffer_duration_usec >= DBR_TRIGGER_USEC) {
7
pthread_mutex_lock(&stream->dbr_mutex);
8
bitrate_changed = dbr_bitrate_lowered(stream);
9
pthread_mutex_unlock(&stream->dbr_mutex);
10
obs-studio-24.0.3.tar.xz/plugins/rtmp-services/CMakeLists.txt -> obs-studio-24.0.5.tar.xz/plugins/rtmp-services/CMakeLists.txt
Changed
37
1
2
project(rtmp-services)
3
4
+find_package(Libcurl REQUIRED)
5
+
6
+include_directories(${LIBCURL_INCLUDE_DIRS})
7
+
8
include_directories(${OBS_JANSSON_INCLUDE_DIRS})
9
10
set(rtmp-services_SOURCES
11
twitch.c
12
+ younow.c
13
rtmp-common.c
14
rtmp-custom.c
15
rtmp-services-main.c)
16
17
set(rtmp-services_HEADERS
18
twitch.h
19
+ younow.h
20
rtmp-format-ver.h)
21
22
set(RTMP_SERVICES_URL
23
24
${rtmp-services_SOURCES}
25
${rtmp-services_HEADERS}
26
${rtmp-services_config_HEADERS})
27
+
28
target_link_libraries(rtmp-services
29
libobs
30
file-updater
31
- ${OBS_JANSSON_IMPORT})
32
+ ${OBS_JANSSON_IMPORT}
33
+ ${LIBCURL_LIBRARIES})
34
35
target_include_directories(rtmp-services
36
PUBLIC
37
obs-studio-24.0.3.tar.xz/plugins/rtmp-services/data/package.json -> obs-studio-24.0.5.tar.xz/plugins/rtmp-services/data/package.json
Changed
14
1
2
{
3
"url": "https://obsproject.com/obs2_update/rtmp-services",
4
- "version": 112,
5
+ "version": 114,
6
"files": [
7
{
8
"name": "services.json",
9
- "version": 112
10
+ "version": 114
11
}
12
]
13
}
14
obs-studio-24.0.3.tar.xz/plugins/rtmp-services/data/services.json -> obs-studio-24.0.5.tar.xz/plugins/rtmp-services/data/services.json
Changed
71
1
2
}
3
},
4
{
5
+ "name": "ChathostessModels",
6
+ "servers": [
7
+ {
8
+ "name": "ChathostessModels - Default",
9
+ "url": "rtmp://wowza01.foobarweb.com/cmschatsys_video"
10
+ }
11
+ ],
12
+ "recommended": {
13
+ "keyint": 2,
14
+ "max video bitrate": 3000,
15
+ "max audio bitrate": 128
16
+ }
17
+ },
18
+ {
19
"name": "Camplace",
20
"servers": [
21
{
22
23
}
24
},
25
{
26
+ "name": "YouNow",
27
+ "common": false,
28
+ "servers": [
29
+ {
30
+ "name": "younow.com",
31
+ "url": "https://signaling-api.younow-prod.video.propsproject.com/api/v1/ingest/server/"
32
+ }
33
+ ],
34
+ "recommended": {
35
+ "keyint": 2,
36
+ "output": "ftl_output",
37
+ "max audio bitrate": 160,
38
+ "max video bitrate": 7000,
39
+ "profile": "main",
40
+ "bframes": 0
41
+ }
42
+ },
43
+ {
44
"name": "Steam",
45
"common": false,
46
"servers": [
47
48
"max video bitrate": 7000,
49
"max audio bitrate": 128
50
}
51
+ },
52
+ {
53
+ "name": "Stars.AVN.com",
54
+ "servers": [
55
+ {
56
+ "name": "Default",
57
+ "url": "rtmp://alpha.gateway.stars.avn.com/live"
58
+ }
59
+ ],
60
+ "recommended": {
61
+ "keyint": 2,
62
+ "profile": "main",
63
+ "max video bitrate": 2500,
64
+ "max audio bitrate": 192,
65
+ "bframes": 0,
66
+ "x264opts": "tune=zerolatency"
67
+ }
68
}
69
]
70
}
71
obs-studio-24.0.3.tar.xz/plugins/rtmp-services/rtmp-common.c -> obs-studio-24.0.5.tar.xz/plugins/rtmp-services/rtmp-common.c
Changed
33
1
2
3
#include "rtmp-format-ver.h"
4
#include "twitch.h"
5
+#include "younow.h"
6
7
struct rtmp_common {
8
char *service;
9
10
obs_data_set_string(settings, "rate_control", "CBR");
11
12
item = json_object_get(recommended, "profile");
13
- if (json_is_string(item)) {
14
+ obs_data_item_t *enc_item = obs_data_item_byname(settings, "profile");
15
+ if (json_is_string(item) &&
16
+ obs_data_item_gettype(enc_item) == OBS_DATA_STRING) {
17
const char *profile = json_string_value(item);
18
obs_data_set_string(settings, "profile", profile);
19
}
20
21
}
22
}
23
24
+ if (service->service && strcmp(service->service, "YouNow") == 0) {
25
+ if (service->server && service->key) {
26
+ return younow_get_ingest(service->server, service->key);
27
+ }
28
+ }
29
+
30
return service->server;
31
}
32
33
obs-studio-24.0.5.tar.xz/plugins/rtmp-services/younow.c
Added
115
1
2
+#include <curl/curl.h>
3
+#include <stdlib.h>
4
+#include <string.h>
5
+
6
+#include <util/dstr.h>
7
+#include "util/base.h"
8
+#include "younow.h"
9
+
10
+struct younow_mem_struct {
11
+ char *memory;
12
+ size_t size;
13
+};
14
+
15
+static char *current_ingest = NULL;
16
+
17
+static size_t younow_write_cb(void *contents, size_t size, size_t nmemb,
18
+ void *userp)
19
+{
20
+ size_t realsize = size * nmemb;
21
+ struct younow_mem_struct *mem = (struct younow_mem_struct *)userp;
22
+
23
+ mem->memory = realloc(mem->memory, mem->size + realsize + 1);
24
+ if (mem->memory == NULL) {
25
+ blog(LOG_WARNING, "yyounow_write_cb: realloc returned NULL");
26
+ return 0;
27
+ }
28
+
29
+ memcpy(&(mem->memory[mem->size]), contents, realsize);
30
+ mem->size += realsize;
31
+ mem->memory[mem->size] = 0;
32
+
33
+ return realsize;
34
+}
35
+
36
+const char *younow_get_ingest(const char *server, const char *key)
37
+{
38
+ CURL *curl_handle;
39
+ CURLcode res;
40
+ struct younow_mem_struct chunk;
41
+ struct dstr uri;
42
+ long response_code;
43
+
44
+ // find the delimiter in stream key
45
+ const char *delim = strchr(key, '_');
46
+ if (delim == NULL) {
47
+ blog(LOG_WARNING,
48
+ "younow_get_ingest: delimiter not found in stream key");
49
+ return server;
50
+ }
51
+
52
+ curl_handle = curl_easy_init();
53
+
54
+ chunk.memory = malloc(1); /* will be grown as needed by realloc */
55
+ chunk.size = 0; /* no data at this point */
56
+
57
+ dstr_init(&uri);
58
+ dstr_copy(&uri, server);
59
+ dstr_ncat(&uri, key, delim - key);
60
+
61
+ curl_easy_setopt(curl_handle, CURLOPT_URL, uri.array);
62
+ curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, true);
63
+ curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYHOST, 2L);
64
+ curl_easy_setopt(curl_handle, CURLOPT_TIMEOUT, 3L);
65
+ curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, younow_write_cb);
66
+ curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);
67
+
68
+#if LIBCURL_VERSION_NUM >= 0x072400
69
+ // A lot of servers don't yet support ALPN
70
+ curl_easy_setopt(curl_handle, CURLOPT_SSL_ENABLE_ALPN, 0);
71
+#endif
72
+
73
+ res = curl_easy_perform(curl_handle);
74
+ dstr_free(&uri);
75
+
76
+ if (res != CURLE_OK) {
77
+ blog(LOG_WARNING,
78
+ "younow_get_ingest: curl_easy_perform() failed: %s",
79
+ curl_easy_strerror(res));
80
+ curl_easy_cleanup(curl_handle);
81
+ free(chunk.memory);
82
+ return server;
83
+ }
84
+
85
+ curl_easy_getinfo(curl_handle, CURLINFO_RESPONSE_CODE, &response_code);
86
+ if (response_code != 200) {
87
+ blog(LOG_WARNING,
88
+ "younow_get_ingest: curl_easy_perform() returned code: %ld",
89
+ response_code);
90
+ curl_easy_cleanup(curl_handle);
91
+ free(chunk.memory);
92
+ return server;
93
+ }
94
+
95
+ curl_easy_cleanup(curl_handle);
96
+
97
+ if (chunk.size == 0) {
98
+ blog(LOG_WARNING,
99
+ "younow_get_ingest: curl_easy_perform() returned empty response");
100
+ free(chunk.memory);
101
+ return server;
102
+ }
103
+
104
+ if (current_ingest) {
105
+ free(current_ingest);
106
+ current_ingest = NULL;
107
+ }
108
+
109
+ current_ingest = strdup(chunk.memory);
110
+ free(chunk.memory);
111
+ blog(LOG_INFO, "younow_get_ingest: returning ingest: %s",
112
+ current_ingest);
113
+ return current_ingest;
114
+}
115
obs-studio-24.0.5.tar.xz/plugins/rtmp-services/younow.h
Added
6
1
2
+#pragma once
3
+
4
+extern const char *younow_get_ingest(const char *server, const char *key);
5
\ No newline at end of file
6
obs-studio-24.0.3.tar.xz/plugins/win-capture/window-helpers.c -> obs-studio-24.0.5.tar.xz/plugins/win-capture/window-helpers.c
Changed
25
1
2
3
/* not capturable or internal windows */
4
static const char *internal_microsoft_exes[] = {
5
+ "startmenuexperiencehost",
6
"applicationframehost",
7
+ "peopleexperiencehost",
8
"shellexperiencehost",
9
+ "microsoft.notes",
10
"windowsinternal",
11
+ "systemsettings",
12
+ "textinputhost",
13
"winstore.app",
14
+ "searchapp",
15
+ "video.ui",
16
"searchui",
17
"lockapp",
18
+ "cortana",
19
+ "gamebar",
20
+ "tabtip",
21
+ "time",
22
NULL,
23
};
24
25
obs-studio-24.0.3.tar.xz/plugins/win-dshow/win-dshow.cpp -> obs-studio-24.0.5.tar.xz/plugins/win-dshow/win-dshow.cpp
Changed
14
1
2
void DShowInput::OnEncodedVideoData(enum AVCodecID id, unsigned char *data,
3
size_t size, long long ts)
4
{
5
+ /* If format changes, free and allow it to recreate the decoder */
6
+ if (ffmpeg_decode_valid(video_decoder) &&
7
+ video_decoder->codec->id != id) {
8
+ ffmpeg_decode_free(video_decoder);
9
+ }
10
+
11
if (!ffmpeg_decode_valid(video_decoder)) {
12
/* Only use MJPEG hardware decoding on resolutions higher
13
* than 1920x1080. The reason why is because we want to strike
14
obs-studio-24.0.3.tar.xz/plugins/win-wasapi/enum-wasapi.hpp -> obs-studio-24.0.5.tar.xz/plugins/win-wasapi/enum-wasapi.hpp
Changed
9
1
2
3
#define WIN32_MEAN_AND_LEAN
4
#include <windows.h>
5
+#include <initguid.h>
6
#include <mmdeviceapi.h>
7
#include <audioclient.h>
8
#include <propsys.h>
9
obs-studio-24.0.3.tar.xz/plugins/win-wasapi/win-wasapi.cpp -> obs-studio-24.0.5.tar.xz/plugins/win-wasapi/win-wasapi.cpp
Changed
42
1
2
obs_source_t *source;
3
string device_id;
4
string device_name;
5
+ string device_sample = "-";
6
bool isInputDevice;
7
bool useDeviceTiming = false;
8
bool isDefaultDevice = false;
9
10
client->Start();
11
active = true;
12
13
- blog(LOG_INFO, "WASAPI: Device '%s' initialized", device_name.c_str());
14
+ blog(LOG_INFO, "WASAPI: Device '%s' [%s Hz] initialized",
15
+ device_name.c_str(), device_sample.c_str());
16
}
17
18
void WASAPISource::Initialize()
19
20
21
device_name = GetDeviceName(device);
22
23
+ HRESULT resSample;
24
+ IPropertyStore *store = nullptr;
25
+ PWAVEFORMATEX deviceFormatProperties;
26
+ PROPVARIANT prop;
27
+ resSample = device->OpenPropertyStore(STGM_READ, &store);
28
+ if (!FAILED(resSample)) {
29
+ resSample =
30
+ store->GetValue(PKEY_AudioEngine_DeviceFormat, &prop);
31
+ if (!FAILED(resSample)) {
32
+ deviceFormatProperties =
33
+ (PWAVEFORMATEX)prop.blob.pBlobData;
34
+ device_sample = std::to_string(
35
+ deviceFormatProperties->nSamplesPerSec);
36
+ }
37
+ }
38
+
39
InitClient();
40
if (!isInputDevice)
41
InitRender();
42