Changes of Revision 71

obs-studio.changes Changed
x
 
1
@@ -1,4 +1,44 @@
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
@@ -1,5 +1,5 @@
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
@@ -1,7 +1,7 @@
2
 <services>
3
   <service name="tar_scm" mode="disabled">
4
     <param name="versionformat">@PARENT_TAG@</param>
5
-    <param name="revision">refs/tags/24.0.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
@@ -1,6 +1,6 @@
2
 <servicedata>
3
   <service name="tar_scm">
4
     <param name="url">git://github.com/jp9000/obs-studio.git</param>
5
-    <param name="changesrevision">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
@@ -1,1721 +0,0 @@
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
@@ -8,9 +8,12 @@
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
@@ -19,9 +22,9 @@
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
@@ -30,32 +33,44 @@
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
@@ -70,12 +85,10 @@
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
@@ -1,7 +1,6 @@
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
@@ -16,6 +16,8 @@
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
@@ -28,10 +30,12 @@
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
@@ -0,0 +1,30 @@
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
@@ -0,0 +1,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
@@ -0,0 +1,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
@@ -0,0 +1,67 @@
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
@@ -0,0 +1,13 @@
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
@@ -373,14 +373,6 @@
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
@@ -216,7 +216,8 @@
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
@@ -3685,19 +3685,19 @@
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
@@ -126,10 +126,17 @@
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
@@ -28,11 +28,29 @@
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
@@ -1820,7 +1820,7 @@
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
@@ -417,6 +417,8 @@
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
@@ -59,6 +59,10 @@
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
@@ -643,6 +643,7 @@
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
@@ -88,6 +88,38 @@
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
@@ -95,9 +127,6 @@
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
@@ -128,29 +157,10 @@
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
@@ -166,6 +176,10 @@
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
@@ -466,6 +466,8 @@
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
@@ -2189,9 +2189,9 @@
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
@@ -3253,7 +3253,7 @@
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
@@ -533,6 +533,24 @@
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
@@ -653,6 +653,9 @@
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
@@ -61,7 +61,7 @@
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
@@ -139,7 +139,7 @@
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
@@ -230,7 +230,7 @@
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
@@ -577,8 +577,10 @@
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
@@ -12,6 +12,11 @@
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
@@ -43,7 +43,8 @@
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
@@ -1310,7 +1311,31 @@
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
@@ -32,6 +32,12 @@
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
@@ -44,7 +50,7 @@
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
@@ -1651,6 +1651,13 @@
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
@@ -42,7 +42,12 @@
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
@@ -57,14 +62,7 @@
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
@@ -27,5 +27,14 @@
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
@@ -178,10 +178,13 @@
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
@@ -796,6 +796,53 @@
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
@@ -806,15 +853,41 @@
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
@@ -853,6 +926,25 @@
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
@@ -110,7 +110,7 @@
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
@@ -0,0 +1,1776 @@
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
@@ -41,7 +41,7 @@
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
@@ -58,9 +58,10 @@
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
@@ -664,7 +664,8 @@
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
@@ -103,7 +103,7 @@
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
@@ -117,7 +117,8 @@
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
@@ -61,7 +61,7 @@
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
@@ -108,7 +108,6 @@
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
@@ -324,7 +324,9 @@
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
@@ -183,7 +183,8 @@
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
@@ -1342,7 +1342,7 @@
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
@@ -1,15 +1,21 @@
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
@@ -28,10 +34,12 @@
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
@@ -1,10 +1,10 @@
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
@@ -1466,6 +1466,20 @@
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
@@ -1501,6 +1515,24 @@
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
@@ -1559,6 +1591,23 @@
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
@@ -5,6 +5,7 @@
2
 
3
 #include "rtmp-format-ver.h"
4
 #include "twitch.h"
5
+#include "younow.h"
6
 
7
 struct rtmp_common {
8
    char *service;
9
@@ -485,7 +486,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
@@ -594,6 +597,12 @@
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
@@ -0,0 +1,113 @@
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
@@ -0,0 +1,3 @@
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
@@ -128,12 +128,23 @@
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
@@ -468,6 +468,12 @@
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,6 +2,7 @@
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
@@ -28,6 +28,7 @@
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
@@ -289,7 +290,8 @@
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
@@ -308,6 +310,22 @@
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