Overview

Request 5280 (accepted)

- Update to version 26.1.0:
* UI: Add deferred function to update context bar
* UI: Fix installer/updater check for vs2019 32bit
* Update translations from Crowdin
* Revert #3856
* linux-jack: fix timestamp calculation
* linux-jack: fix deadlock when closing the client
* linux-jack: mark ports as JackPortIsTerminal
* linux-pulseaudio: fix race conditions
* obs-browser: Add obsExit event
* UI: Determine rate control after creating encoders
* UI: Handle (de)select scene items queued
* CI: Update macOS to Qt 5.15.2 and deps 2020-12-11
* libobs: fix the pending stop trick
* UI/updater: Fix dll check
* UI: Remove jansson requirement from UI and updater
* UI/updater: Update redist checks to VS2019
* deps/json11: Update to most recent version
* rtmp-services: Update Steam
* libobs: Update version to 26.1.0
* sndio: remove strerror_l
* UI: Fix weird spacing in adv output FFmpeg recording
* linux-v4l2: Fix bashism in v4l2loopback module detection
* obs-scripting: Fix removing signal handlers in lua
* UI: Correctly unregister Virtual Camera & Source Toolbar hotkeys
* UI: Scale Interact cursor position based on display DPI
* UI: Sync 'Copy Filters' enabled state in the Source context menu
* mac-virtualcam: Build a universal x86_64+arm64 binary for M1 Macs
* vlc-video: Free media struct
* mac-virtualcam: Fix remaining global namespaces

Submit package home:boombatow...es:Multimedia / obs-studio to package Multimedia / obs-studio

obs-studio.changes Changed
x
 
1
@@ -1,4 +1,183 @@
2
 -------------------------------------------------------------------
3
+Tue Dec 15 03:46:49 UTC 2020 - jimmy@boombatower.com
4
+
5
+- Update to version 26.1.0:
6
+  * UI: Add deferred function to update context bar
7
+  * UI: Fix installer/updater check for vs2019 32bit
8
+  * Update translations from Crowdin
9
+  * Revert #3856
10
+  * linux-jack: fix timestamp calculation
11
+  * linux-jack: fix deadlock when closing the client
12
+  * linux-jack: mark ports as JackPortIsTerminal
13
+  * linux-pulseaudio: fix race conditions
14
+  * obs-browser: Add obsExit event
15
+  * UI: Determine rate control after creating encoders
16
+  * UI: Handle (de)select scene items queued
17
+  * CI: Update macOS to Qt 5.15.2 and deps 2020-12-11
18
+  * libobs: fix the pending stop trick
19
+  * UI/updater: Fix dll check
20
+  * UI: Remove jansson requirement from UI and updater
21
+  * UI/updater: Update redist checks to VS2019
22
+  * deps/json11: Update to most recent version
23
+  * rtmp-services: Update Steam
24
+  * libobs: Update version to 26.1.0
25
+  * sndio: remove strerror_l
26
+  * UI: Fix weird spacing in adv output FFmpeg recording
27
+  * linux-v4l2: Fix bashism in v4l2loopback module detection
28
+  * obs-scripting: Fix removing signal handlers in lua
29
+  * UI: Correctly unregister Virtual Camera & Source Toolbar hotkeys
30
+  * UI: Scale Interact cursor position based on display DPI
31
+  * UI: Sync 'Copy Filters' enabled state in the Source context menu
32
+  * mac-virtualcam: Build a universal x86_64+arm64 binary for M1 Macs
33
+  * vlc-video: Free media struct
34
+  * mac-virtualcam: Fix remaining global namespaces
35
+  * UI: Allow enabling vod track on custom via ini
36
+  * UI: Fix vod track working with custom server
37
+  * UI: Fix vod track not working with twitch soundtrack
38
+  * UI: Fix aac encoder name
39
+  * libobs: Ignore non-fatal ffmpeg return values during remux
40
+  * UI: Fix disabled sliders
41
+  * UI: Remove redundant setting
42
+  * UI: fix typo
43
+  * UI/installer: Add additional VS2019 DLL check
44
+  * UI: Use Qt::MiddleButton instead of deprecated Qt::MidButton
45
+  * obs-browser: Update to 2.9.0
46
+  * UI: Don't round non-integer High DPI scale
47
+  * CI: Add decklink-captions to dylibbundler fixups
48
+  * enc-amf: Fix inability to set bitrate in latest AMD driver
49
+  * UI: Fix filter window rendering and accessible names
50
+  * UI: Log success/failure for scene collection importer
51
+  * UI: Prevent import failure for collections with slash in name
52
+  * UI: Prevent name collision during scene collection import
53
+  * UI: Various screen reader fixes
54
+  * Update translations from Crowdin
55
+  * libobs: Allow wrapping D3D11 object with gs_texture_t
56
+  * UI: Fix Save Replay button staying highlighted
57
+  * frontend-tools: Don't give every loaded filter focus
58
+  * UI: Set default source toolbar visibility to true
59
+  * obs-outputs: Log unhandled status description as debug level
60
+  * mac-virtualcam: Fix global namespace issues in DAL plugin
61
+  * cmake: Make sure to copy other mbedtls libraries
62
+  * obs-browser: Don't inject CSS if the property is empty
63
+  * UI: Force plugins to use our Qt5Network, not their own
64
+  * cmake: Add Qt5Network to copied windows libs
65
+  * CI: Remove explicit LANGUAGE flags for cmake 3.19+
66
+  * obs-ffmpeg: Treat non-network errors as fatal too
67
+  * Revert "obs-ffmpeg: Treat errors as fatal for non-network streams in ffmpeg-mux"
68
+  * mac-virtualcam: Remove old test card
69
+  * UI: fix build on older FreeBSD versions
70
+  * win-capture: Update hook version
71
+  * obs-ffmpeg: Treat errors as fatal for non-network streams in ffmpeg-mux
72
+  * obs-ffmpeg: Treat EINVAL as non-fatal in ffmpeg-mux
73
+  * win-capture: Clean up remaining /W4 warnings
74
+  * obs-ffmpeg: Treat AVERROR_INVALIDDATA as non-fatal
75
+  * obs-ffmpeg: Add error detection to ffmpeg-mux network streams
76
+  * deps/media-playback: Fix audio segment duration calc
77
+  * autotools: Remove config module
78
+  * Revert "obs-ffmpeg: Add error detection to ffmpeg-mux"
79
+  * mac-virtualcam: Update locales
80
+  * UI: Detect other instances of obs on FreeBSD
81
+  * win-capture: Fix our own Vulkan spec violation
82
+  * Add sndio support (#3715)
83
+  * Add OpenBSD support
84
+  * UI: Add Twitch VOD track to simple output mode
85
+  * cmake: Put decklink-captions in source folders
86
+  * win-dshow: Add support for YUY2 in virtualcam
87
+  * UI: Move "changed" when recreating output res widget
88
+  * UI: Show service max resolution/framerate values to user
89
+  * UI: Add service res/fps limitation support to settings
90
+  * libobs: Change service max res. to res. list
91
+  * UI: Allow blocking all signals if resetting downscales
92
+  * UI: Add SetComboItemEnabled
93
+  * win-capture: Warning fixes
94
+  * libobs-winrt: Fix misnamed function
95
+  * UI: Use macOS app icon for Qt app on macOS
96
+  * UI: Fix tray icon menu handling on macOS
97
+  * UI: Update macOS app icon
98
+  * UI: Update tray icons to use masks on macOS
99
+  * win-capture: Fix unused variables
100
+  * UI: Fix compiler-specific error
101
+  * UI: Move "enforce" setting to "ignore" stream section
102
+  * UI: Refactor to make it easier to get service object
103
+  * libobs: Implement obs_service func to get max bitrates
104
+  * rtmp-services: Increase twitch audio bitrate
105
+  * decklink: Fix compiling on linux
106
+  * rnnoise: Explicit double to float conversions
107
+  * rtmp-services: Add missing int cast
108
+  * obs-ffmpeg: Add missing int cast
109
+  * libobs-winrt: Fix BOOL/bool mismatch warning
110
+  * libobs: Fix bad type and size mismatch
111
+  * UI: Add VOD track support in advanced output
112
+  * decklink: Clean up warnings introduced by caption code
113
+  * CI: Remove caching of obs-deps for Github CI
114
+  * decklink: Upgrade sdk to version 11.6
115
+  * Remove BUILD_CAPTIONS build flag
116
+  * decklink: Fix format detection loop
117
+  * decklink: Add ability to ingest/embed cea 708 captions
118
+  * linux-v4l2: avoid OOB write
119
+  * linux-v4l2: Hide modinfo from terminal
120
+  * UI: Don't update source context bar when hidden
121
+  * vlc-video: Use case insensitive compare for valid extension check
122
+  * CONTRIBUTING.rst: Update CONTRIBUTING doc
123
+  * UI: Disable stream encoder setting in simple output with active output
124
+  * Add virtualcam plugin to OBS codebase
125
+  * UI: Detect other instances of obs on Linux
126
+  * UI/installer: Use random temp directory for security
127
+  * libobs: Add desktop session type to Linux log
128
+  * rtmp-services: Add YouTube RTMPS beta service
129
+  * rmtp-services: Add Viloud service
130
+  * linux-v4l2: Add virtual camera output
131
+  * win-dshow: Fix virtualcam crash and reference bug
132
+  * UI: Add max cx/cy/fps clamp (if service specifies)
133
+  * rtmp-services: Add max recommended cx/cy/fps for Facebook
134
+  * rtmp-services: Add specifiable max cx/cy/fps in json
135
+  * libobs: Add ability to get max cx/cy/fps from service
136
+  * obs-ffmpeg: Add MX350 to blacklist
137
+  * UI: Run Autoconfig Wizard on New Profile Creation
138
+  * CI: Update macOS build script to support alternative build configs
139
+  * obs-transitions: Expose hardware decoding for Stingers
140
+  * libobs: Return default obj and array rather than current
141
+  * UI: Report detailed output errors for Replay Buffer
142
+  * CI: Fix Windows artifact issues and housekeeping
143
+  * UI: Fix replay buffer saved event in advanced mode
144
+  * docs: Fix GitHub Actions doc check warnings
145
+  * linux-alsa: Support more device formats
146
+  * UI: Detect other instances of obs on macOS
147
+  * UI: Add duplicate filter
148
+  * obs-filter: Fix potential symbol clashing on Linux
149
+  * UI: Update Twitch Get Stream Key link
150
+  * UI: Apply minimum width to Stats fields
151
+  * UI, libobs: Add ability to copy/paste single filter
152
+  * UI: Keep showing time when paused
153
+  * obs-ffmpeg/ffmpeg-mux: Fix issue with HLS
154
+  * obs-ffmpeg: Add ability to debug ffmpeg-mux subprocess
155
+  * UI: Fix text clipping on non-English locales in certain locations
156
+  * win-capture: Fix D3D leaks on swap chain release
157
+  * rtmp-services: Add YouTube HLS service selection
158
+  * obs-ffmpeg: Add HLS output
159
+  * obs-ffmpeg: Allow using stream keys with muxer
160
+  * obs-ffmpeg: Allow specifying mux settings directly
161
+  * obs-ffmpeg/ffmpeg-mux: Use separate printable URL target
162
+  * obs-ffmpeg/ffmpeg-mux: Set codec->time_base if avformat < 59
163
+  * obs-ffmpeg/ffmpeg-mux: Add ability to get FFmpeg logging
164
+  * UI: Find YouTube via starting string, not full match
165
+  * UI: Add support for "More Info" link from service
166
+  * obs-ffmpeg/ffmpeg-mux: Fix variable case
167
+  * obs-ffmpeg: Move muxer structure/funcs to header
168
+  * UI: Fix replay buffer frontend event not triggering
169
+  * UI/obs-frontend-api: Fix replay buffer save event ABI break
170
+  * UI: Add replay buffer saved event to the frontend api (#3592)
171
+  * UI: Prevent disabling replay buffer if it's active
172
+  * CI: Add virtualcam GUID to win builds
173
+  * CI: Remove deprecated use of `set-env` in Github Actions
174
+  * Docs: Fix Frontend Finish Loading event
175
+  * UI: Set focus back to label after source rename
176
+  * UI: Apply custom_rtmp service settings to srt output
177
+  * rtmp-services/rtmp-custom: Apply repeat_headers video setting to srt output
178
+  * obs-ffmpeg: Allow video headers repetition in IDR and bitstream for jim-nvenc
179
+  * obs-x264: Allow repeat_headers and annexb parameters to be set
180
+
181
+-------------------------------------------------------------------
182
 Mon Oct 19 16:02:28 UTC 2020 - Jimmy Berry <jimmy@boombatower.com>
183
 
184
 - Remove c7f84f8fc4e90ef779a204ac268f5ee1a962e324.patch.
185
obs-studio.spec Changed
8
 
1
@@ -1,5 +1,5 @@
2
 Name:           obs-studio
3
-Version:        26.0.2
4
+Version:        26.1.0
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/26.0.2</param>
6
+    <param name="revision">refs/tags/26.1.0</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">3486c0b3633a8ff2b36170d56f37705fe7061349</param>
6
+    <param name="changesrevision">38ad3ba18fc27846e122bd56f589ccb34c4578e2</param>
7
   </service>
8
 </servicedata>
9
obs-studio-26.0.2.tar.xz/CI/scripts/macos/packageApp.sh Deleted
80
 
1
@@ -1,78 +0,0 @@
2
-#!/usr/bin/env bash
3
-
4
-# Exit if something fails
5
-set -e
6
-
7
-rm -rf ./OBS.app
8
-
9
-mkdir OBS.app
10
-mkdir OBS.app/Contents
11
-mkdir OBS.app/Contents/MacOS
12
-mkdir OBS.app/Contents/PlugIns
13
-mkdir OBS.app/Contents/Resources
14
-
15
-cp -R rundir/RelWithDebInfo/bin/ ./OBS.app/Contents/MacOS
16
-cp -R rundir/RelWithDebInfo/data ./OBS.app/Contents/Resources
17
-cp ../CI/scripts/macos/app/obs.icns ./OBS.app/Contents/Resources
18
-cp -R rundir/RelWithDebInfo/obs-plugins/ ./OBS.app/Contents/PlugIns
19
-cp ../CI/scripts/macos/app/Info.plist ./OBS.app/Contents
20
-
21
-../CI/scripts/macos/package/dylibBundler -b -cd -d ./OBS.app/Contents/Frameworks -p @executable_path/../Frameworks/ \
22
--s ./OBS.app/Contents/MacOS \
23
--x ./OBS.app/Contents/PlugIns/coreaudio-encoder.so \
24
--x ./OBS.app/Contents/PlugIns/decklink-ouput-ui.so \
25
--x ./OBS.app/Contents/PlugIns/frontend-tools.so \
26
--x ./OBS.app/Contents/PlugIns/image-source.so \
27
--x ./OBS.app/Contents/PlugIns/linux-jack.so \
28
--x ./OBS.app/Contents/PlugIns/mac-avcapture.so \
29
--x ./OBS.app/Contents/PlugIns/mac-capture.so \
30
--x ./OBS.app/Contents/PlugIns/mac-decklink.so \
31
--x ./OBS.app/Contents/PlugIns/mac-syphon.so \
32
--x ./OBS.app/Contents/PlugIns/mac-vth264.so \
33
--x ./OBS.app/Contents/PlugIns/obs-browser.so \
34
--x ./OBS.app/Contents/PlugIns/obs-browser-page \
35
--x ./OBS.app/Contents/PlugIns/obs-ffmpeg.so \
36
--x ./OBS.app/Contents/PlugIns/obs-filters.so \
37
--x ./OBS.app/Contents/PlugIns/obs-transitions.so \
38
--x ./OBS.app/Contents/PlugIns/obs-vst.so \
39
--x ./OBS.app/Contents/PlugIns/rtmp-services.so \
40
--x ./OBS.app/Contents/MacOS/obs \
41
--x ./OBS.app/Contents/MacOS/obs-ffmpeg-mux \
42
--x ./OBS.app/Contents/MacOS/obslua.so \
43
--x ./OBS.app/Contents/PlugIns/obs-x264.so \
44
--x ./OBS.app/Contents/PlugIns/text-freetype2.so \
45
--x ./OBS.app/Contents/PlugIns/obs-libfdk.so
46
-# -x ./OBS.app/Contents/MacOS/_obspython.so \
47
-# -x ./OBS.app/Contents/PlugIns/obs-outputs.so \
48
-
49
-/usr/local/Cellar/qt/${QT_VERSION}/bin/macdeployqt ./OBS.app
50
-
51
-mv ./OBS.app/Contents/MacOS/libobs-opengl.so ./OBS.app/Contents/Frameworks
52
-
53
-rm -f -r ./OBS.app/Contents/Frameworks/QtNetwork.framework
54
-
55
-# put qt network in here becasuse streamdeck uses it
56
-cp -R /usr/local/opt/qt/lib/QtNetwork.framework ./OBS.app/Contents/Frameworks
57
-chmod -R +w ./OBS.app/Contents/Frameworks/QtNetwork.framework
58
-rm -r ./OBS.app/Contents/Frameworks/QtNetwork.framework/Headers
59
-rm -r ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/Headers/
60
-chmod 644 ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/Resources/Info.plist
61
-install_name_tool -id @executable_path/../Frameworks/QtNetwork.framework/Versions/5/QtNetwork ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/QtNetwork
62
-install_name_tool -change /usr/local/Cellar/qt/${QT_VERSION}/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/QtNetwork
63
-
64
-
65
-# decklink ui qt
66
-install_name_tool -change /usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui ./OBS.app/Contents/PlugIns/decklink-ouput-ui.so
67
-install_name_tool -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./OBS.app/Contents/PlugIns/decklink-ouput-ui.so
68
-install_name_tool -change /usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets ./OBS.app/Contents/PlugIns/decklink-ouput-ui.so
69
-
70
-# frontend tools qt
71
-install_name_tool -change /usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui ./OBS.app/Contents/PlugIns/frontend-tools.so
72
-install_name_tool -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./OBS.app/Contents/PlugIns/frontend-tools.so
73
-install_name_tool -change /usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets ./OBS.app/Contents/PlugIns/frontend-tools.so
74
-
75
-# vst qt
76
-install_name_tool -change /usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui ./OBS.app/Contents/PlugIns/obs-vst.so
77
-install_name_tool -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./OBS.app/Contents/PlugIns/obs-vst.so
78
-install_name_tool -change /usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets ./OBS.app/Contents/PlugIns/obs-vst.so
79
-install_name_tool -change /usr/local/opt/qt/lib/QtMacExtras.framework/Versions/5/QtMacExtras @executable_path/../Frameworks/QtMacExtras.framework/Versions/5/QtMacExtras ./OBS.app/Contents/PlugIns/obs-vst.so
80
obs-studio-26.0.2.tar.xz/CI/scripts/macos/prepareApp.sh Deleted
43
 
1
@@ -1,41 +0,0 @@
2
-#!/usr/bin/env bash
3
-
4
-# Exit if something fails
5
-set -e
6
-
7
-cd ./build
8
-
9
-mv ./rundir/RelWithDebInfo/data/obs-scripting/obslua.so ./rundir/RelWithDebInfo/bin/
10
-mv ./rundir/RelWithDebInfo/data/obs-scripting/_obspython.so ./rundir/RelWithDebInfo/bin/
11
-mv ./rundir/RelWithDebInfo/data/obs-scripting/obspython.py ./rundir/RelWithDebInfo/bin/
12
-
13
-../CI/scripts/macos/packageApp.sh
14
-
15
-# fix obs outputs plugin it doesn't play nicely with dylibBundler at the moment
16
-chmod +w ./OBS.app/Contents/Frameworks/*.dylib
17
-install_name_tool -change libmbedtls.12.dylib @executable_path/../Frameworks/libmbedtls.12.dylib ./OBS.app/Contents/Plugins/obs-outputs.so
18
-install_name_tool -change libmbedcrypto.3.dylib @executable_path/../Frameworks/libmbedcrypto.3.dylib ./OBS.app/Contents/Plugins/obs-outputs.so
19
-install_name_tool -change libmbedx509.0.dylib @executable_path/../Frameworks/libmbedx509.0.dylib ./OBS.app/Contents/Plugins/obs-outputs.so
20
-install_name_tool -change /usr/local/opt/curl/lib/libcurl.4.dylib @executable_path/../Frameworks/libcurl.4.dylib ./OBS.app/Contents/Plugins/obs-outputs.so
21
-install_name_tool -change @rpath/libobs.0.dylib @executable_path/../Frameworks/libobs.0.dylib ./OBS.app/Contents/Plugins/obs-outputs.so
22
-install_name_tool -change /tmp/obsdeps/bin/libjansson.4.dylib @executable_path/../Frameworks/libjansson.4.dylib ./OBS.app/Contents/Plugins/obs-outputs.so
23
-
24
-cp -R ${GITHUB_WORKSPACE}/cmbuild/sparkle/Sparkle.framework ./OBS.app/Contents/Frameworks/
25
-install_name_tool -change @rpath/Sparkle.framework/Versions/A/Sparkle @executable_path/../Frameworks/Sparkle.framework/Versions/A/Sparkle ./OBS.app/Contents/MacOS/obs
26
-
27
-sudo mkdir -p ./OBS.app/Contents/Frameworks
28
-sudo cp -R ${GITHUB_WORKSPACE}/cmbuild/cef_binary_${CEF_BUILD_VERSION}_macosx64/Release/Chromium\ Embedded\ Framework.framework ./OBS.app/Contents/Frameworks/
29
-install_name_tool -change /usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui ./OBS.app/Contents/Plugins/obs-browser.so
30
-install_name_tool -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./OBS.app/Contents/Plugins/obs-browser.so
31
-install_name_tool -change /usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets ./OBS.app/Contents/Plugins/obs-browser.so
32
-
33
-cp ../CI/scripts/macos/app/OBSPublicDSAKey.pem ./OBS.app/Contents/Resources
34
-
35
-plutil -insert CFBundleVersion -string $(basename ${GITHUB_REF}) ./OBS.app/Contents/Info.plist
36
-plutil -insert CFBundleShortVersionString -string $(basename ${GITHUB_REF}) ./OBS.app/Contents/Info.plist
37
-plutil -insert OBSFeedsURL -string https://obsproject.com/osx_update/feeds.xml ./OBS.app/Contents/Info.plist
38
-plutil -insert SUFeedURL -string https://obsproject.com/osx_update/stable/updates.xml ./OBS.app/Contents/Info.plist
39
-plutil -insert SUPublicDSAKeyFile -string OBSPublicDSAKey.pem ./OBS.app/Contents/Info.plist
40
-
41
-mv ./OBS.app ../OBS.app
42
-cd -
43
obs-studio-26.0.2.tar.xz/UI/forms/NameDialog.ui Deleted
107
 
1
@@ -1,105 +0,0 @@
2
-<?xml version="1.0" encoding="UTF-8"?>
3
-<ui version="4.0">
4
- <class>NameDialog</class>
5
- <widget class="QDialog" name="NameDialog">
6
-  <property name="windowModality">
7
-   <enum>Qt::WindowModal</enum>
8
-  </property>
9
-  <property name="geometry">
10
-   <rect>
11
-    <x>0</x>
12
-    <y>0</y>
13
-    <width>555</width>
14
-    <height>102</height>
15
-   </rect>
16
-  </property>
17
-  <property name="windowTitle">
18
-   <string notr="true">Dialog</string>
19
-  </property>
20
-  <layout class="QVBoxLayout" name="verticalLayout">
21
-   <item>
22
-    <widget class="QLabel" name="label">
23
-     <property name="sizePolicy">
24
-      <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
25
-       <horstretch>0</horstretch>
26
-       <verstretch>0</verstretch>
27
-      </sizepolicy>
28
-     </property>
29
-     <property name="text">
30
-      <string notr="true">TextLabel</string>
31
-     </property>
32
-     <property name="wordWrap">
33
-      <bool>true</bool>
34
-     </property>
35
-    </widget>
36
-   </item>
37
-   <item>
38
-    <widget class="QLineEdit" name="userText">
39
-     <property name="sizePolicy">
40
-      <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
41
-       <horstretch>0</horstretch>
42
-       <verstretch>0</verstretch>
43
-      </sizepolicy>
44
-     </property>
45
-     <property name="text">
46
-      <string notr="true"/>
47
-     </property>
48
-    </widget>
49
-   </item>
50
-   <item>
51
-    <widget class="QDialogButtonBox" name="buttonBox">
52
-     <property name="sizePolicy">
53
-      <sizepolicy hsizetype="Expanding" vsizetype="Maximum">
54
-       <horstretch>0</horstretch>
55
-       <verstretch>0</verstretch>
56
-      </sizepolicy>
57
-     </property>
58
-     <property name="orientation">
59
-      <enum>Qt::Horizontal</enum>
60
-     </property>
61
-     <property name="standardButtons">
62
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
63
-     </property>
64
-     <property name="centerButtons">
65
-      <bool>true</bool>
66
-     </property>
67
-    </widget>
68
-   </item>
69
-  </layout>
70
- </widget>
71
- <resources/>
72
- <connections>
73
-  <connection>
74
-   <sender>buttonBox</sender>
75
-   <signal>accepted()</signal>
76
-   <receiver>NameDialog</receiver>
77
-   <slot>accept()</slot>
78
-   <hints>
79
-    <hint type="sourcelabel">
80
-     <x>257</x>
81
-     <y>94</y>
82
-    </hint>
83
-    <hint type="destinationlabel">
84
-     <x>157</x>
85
-     <y>274</y>
86
-    </hint>
87
-   </hints>
88
-  </connection>
89
-  <connection>
90
-   <sender>buttonBox</sender>
91
-   <signal>rejected()</signal>
92
-   <receiver>NameDialog</receiver>
93
-   <slot>reject()</slot>
94
-   <hints>
95
-    <hint type="sourcelabel">
96
-     <x>325</x>
97
-     <y>94</y>
98
-    </hint>
99
-    <hint type="destinationlabel">
100
-     <x>286</x>
101
-     <y>274</y>
102
-    </hint>
103
-   </hints>
104
-  </connection>
105
- </connections>
106
-</ui>
107
obs-studio-26.0.2.tar.xz/config Deleted
2
 
1
-(directory)
2
obs-studio-26.0.2.tar.xz/.github/workflows/main.yml -> obs-studio-26.1.0.tar.xz/.github/workflows/main.yml Changed
482
 
1
@@ -23,64 +23,57 @@
2
     name: 'macOS 64-bit'
3
     runs-on: [macos-latest]
4
     env:
5
-      MACOS_DEPS_VERSION: '2020-08-30'
6
+      MIN_MACOS_VERSION: '10.13'
7
+      MACOS_DEPS_VERSION: '2020-12-11'
8
       VLC_VERSION: '3.0.8'
9
       SPARKLE_VERSION: '1.23.0'
10
-      QT_VERSION: '5.14.1'
11
+      QT_VERSION: '5.15.2'
12
       SIGN_IDENTITY: ''
13
     steps:
14
       - name: 'Checkout'
15
-        uses: actions/checkout@v2
16
+        uses: actions/checkout@v2.3.3
17
         with:
18
           submodules: 'recursive'
19
       - name: 'Fetch Git Tags'
20
         run: |
21
           git fetch --prune --unshallow
22
-          echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD)
23
-          echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD)
24
-          echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0)
25
+          echo "OBS_GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV
26
+          echo "OBS_GIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
27
+          echo "OBS_GIT_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV
28
       - name: 'Check for Github Labels'
29
         if: github.event_name == 'pull_request'
30
         run: |
31
           LABELS_URL="$(echo ${{ github.event.pull_request.url }} | sed s'/pulls/issues/')"
32
           LABEL_FOUND="$(curl -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" "${LABELS_URL}/labels" | sed -n 's/.*"name": "\(.*\)",/\1/p' | grep 'Seeking Testers' || true)"
33
           if [ "${LABEL_FOUND}" = "Seeking Testers" ]; then
34
-            echo ::set-env name=SEEKING_TESTERS::1
35
+            echo "SEEKING_TESTERS=1" >> $GITHUB_ENV
36
           else
37
-            echo ::set-env name=SEEKING_TESTERS::0
38
+            echo "SEEKING_TESTERS=0" >> $GITHUB_ENV
39
           fi
40
       - name: 'Install prerequisites (Homebrew)'
41
         shell: bash
42
         run: |
43
-          brew update --preinstall
44
+          if [ -d /usr/local/opt/openssl@1.0.2t ]; then
45
+              brew uninstall openssl@1.0.2t
46
+              brew untap local/openssl
47
+          fi
48
+
49
+          if [ -d /usr/local/opt/python@2.7.17 ]; then
50
+              brew uninstall python@2.7.17
51
+              brew untap local/python2
52
+          fi
53
           brew bundle --file ./CI/scripts/macos/Brewfile
54
       - name: 'Restore Chromium Embedded Framework from cache'
55
         id: cef-cache
56
-        uses: actions/cache@v1
57
+        uses: actions/cache@v2.1.2
58
         env:
59
           CACHE_NAME: 'cef-cache'
60
         with:
61
           path: ${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_BUILD_VERSION }}_macosx64
62
           key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.CEF_BUILD_VERSION }}
63
-      - name: 'Restore pre-built dependencies from cache'
64
-        id: deps-cache
65
-        uses: actions/cache@v1
66
-        env:
67
-          CACHE_NAME: 'deps-cache'
68
-        with:
69
-          path: /tmp/obsdeps
70
-          key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.MACOS_DEPS_VERSION }}
71
-      - name: 'Restore pre-built Qt dependency from cache'
72
-        id: deps-qt-cache
73
-        uses: actions/cache@v1
74
-        env:
75
-          CACHE_NAME: 'deps-qt-cache'
76
-        with:
77
-          path: /tmp/obsdeps
78
-          key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.MACOS_DEPS_VERSION }}
79
       - name: 'Restore VLC dependency from cache'
80
         id: vlc-cache
81
-        uses: actions/cache@v1
82
+        uses: actions/cache@v2.1.2
83
         env:
84
           CACHE_NAME: 'vlc-cache'
85
         with:
86
@@ -88,7 +81,7 @@
87
           key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.VLC_VERSION }}
88
       - name: 'Restore Sparkle dependency from cache'
89
         id: sparkle-cache
90
-        uses: actions/cache@v1
91
+        uses: actions/cache@v2.1.2
92
         env:
93
           CACHE_NAME: 'sparkle-cache'
94
         with:
95
@@ -132,10 +125,9 @@
96
           tar -xf ./cef_binary_${{ env.CEF_BUILD_VERSION }}_macosx64.tar.bz2 -C ${{ github.workspace }}/cmbuild/
97
           cd ${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_BUILD_VERSION }}_macosx64
98
           sed -i '.orig' '/add_subdirectory(tests\/ceftests)/d' ./CMakeLists.txt
99
-          # target 10.11
100
-          sed -i '.orig' s/\"10.9\"/\"10.11\"/ ./cmake/cef_variables.cmake
101
+          sed -i '.orig' s/\"10.9\"/\"${{ env.MIN_MACOS_VERSION }}\"/ ./cmake/cef_variables.cmake
102
           mkdir build && cd build
103
-          cmake  -DCMAKE_CXX_FLAGS="-std=c++11 -stdlib=libc++" -DCMAKE_EXE_LINKER_FLAGS="-std=c++11 -stdlib=libc++" -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11  ..
104
+          cmake  -DCMAKE_CXX_FLAGS="-std=c++11 -stdlib=libc++ -Wno-deprecated-declarations" -DCMAKE_EXE_LINKER_FLAGS="-std=c++11 -stdlib=libc++" -DCMAKE_OSX_DEPLOYMENT_TARGET=${{ env.MIN_MACOS_VERSION }}  ..
105
           make -j4
106
           mkdir libcef_dll
107
           cd ../../
108
@@ -144,7 +136,7 @@
109
         run: |
110
           mkdir ./build
111
           cd ./build
112
-          cmake -DENABLE_UNIT_TESTS=YES -DENABLE_SPARKLE_UPDATER=ON -DDISABLE_PYTHON=ON -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11 -DQTDIR="/tmp/obsdeps" -DSWIGDIR="/tmp/obsdeps" -DDepsPath="/tmp/obsdeps" -DVLCPath="${{ github.workspace }}/cmbuild/vlc-${{ env.VLC_VERSION }}" -DENABLE_VLC=ON -DBUILD_BROWSER=ON -DBROWSER_DEPLOY=ON -DBUILD_CAPTIONS=ON -DWITH_RTMPS=ON -DCEF_ROOT_DIR="${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_BUILD_VERSION }}_macosx64" ..
113
+          cmake -DENABLE_UNIT_TESTS=YES -DENABLE_SPARKLE_UPDATER=ON -DDISABLE_PYTHON=ON -DCMAKE_OSX_DEPLOYMENT_TARGET=${{ env.MIN_MACOS_VERSION }} -DQTDIR="/tmp/obsdeps" -DSWIGDIR="/tmp/obsdeps" -DDepsPath="/tmp/obsdeps" -DVLCPath="${{ github.workspace }}/cmbuild/vlc-${{ env.VLC_VERSION }}" -DENABLE_VLC=ON -DBUILD_BROWSER=ON -DBROWSER_DEPLOY=ON -DWITH_RTMPS=ON -DCEF_ROOT_DIR="${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_BUILD_VERSION }}_macosx64" ..
114
       - name: 'Build'
115
         shell: bash
116
         working-directory: ${{ github.workspace }}/build
117
@@ -167,7 +159,7 @@
118
       - name: 'Set Signing Identity'
119
         if: success() && startsWith(github.ref, 'refs/tags/') && github.event_name != 'pull_request'
120
         run: |
121
-          echo "::set-env name=SIGN_IDENTITY::${{ secrets.MACOS_SIGNING_IDENTITY }}"
122
+          echo "SIGN_IDENTITY=${{ secrets.MACOS_SIGNING_IDENTITY }}" >> $GITHUB_ENV
123
       - name: 'Create macOS application bundle'
124
         if: success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1')
125
         working-directory: ${{ github.workspace }}/build
126
@@ -182,7 +174,7 @@
127
           cp rundir/RelWithDebInfo/bin/obs-ffmpeg-mux ./OBS.app/Contents/MacOS
128
           cp rundir/RelWithDebInfo/bin/libobsglad.0.dylib ./OBS.app/Contents/MacOS
129
           cp -R rundir/RelWithDebInfo/data ./OBS.app/Contents/Resources
130
-          cp ../CI/scripts/macos/app/obs.icns ./OBS.app/Contents/Resources
131
+          cp ../CI/scripts/macos/app/AppIcon.icns ./OBS.app/Contents/Resources
132
           cp -R rundir/RelWithDebInfo/obs-plugins/ ./OBS.app/Contents/PlugIns
133
           cp ../CI/scripts/macos/app/Info.plist ./OBS.app/Contents
134
 
135
@@ -199,6 +191,7 @@
136
             -s ./rundir/RelWithDebInfo/bin \
137
             -x ./OBS.app/Contents/PlugIns/coreaudio-encoder.so \
138
             -x ./OBS.app/Contents/PlugIns/decklink-ouput-ui.so \
139
+            -x ./OBS.app/Contents/PlugIns/decklink-captions.so \
140
             -x ./OBS.app/Contents/PlugIns/frontend-tools.so \
141
             -x ./OBS.app/Contents/PlugIns/image-source.so \
142
             -x ./OBS.app/Contents/PlugIns/linux-jack.so \
143
@@ -207,6 +200,7 @@
144
             -x ./OBS.app/Contents/PlugIns/mac-decklink.so \
145
             -x ./OBS.app/Contents/PlugIns/mac-syphon.so \
146
             -x ./OBS.app/Contents/PlugIns/mac-vth264.so \
147
+            -x ./OBS.app/Contents/PlugIns/mac-virtualcam.so \
148
             -x ./OBS.app/Contents/PlugIns/obs-browser.so \
149
             -x ./OBS.app/Contents/PlugIns/obs-browser-page \
150
             -x ./OBS.app/Contents/PlugIns/obs-ffmpeg.so \
151
@@ -231,8 +225,8 @@
152
           install_name_tool -id @executable_path/../Frameworks/QtNetwork.framework/Versions/5/QtNetwork ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/QtNetwork
153
           install_name_tool -change /tmp/obsdeps/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/QtNetwork
154
 
155
-          sudo cp -R "${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_BUILD_VERSION }}_macosx64/Release/Chromium Embedded Framework.framework" ./OBS.app/Contents/Frameworks/
156
-          sudo chown -R $(whoami) ./OBS.app/Contents/Frameworks/
157
+          cp -R "${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_BUILD_VERSION }}_macosx64/Release/Chromium Embedded Framework.framework" ./OBS.app/Contents/Frameworks/
158
+          chown -R $(whoami) ./OBS.app/Contents/Frameworks/
159
 
160
           cp ../CI/scripts/macos/app/OBSPublicDSAKey.pem ./OBS.app/Contents/Resources
161
 
162
@@ -258,6 +252,8 @@
163
           codesign --force --options runtime --sign "${SIGN_IDENTITY:--}" "./OBS.app/Contents/Frameworks/Chromium Embedded Framework.framework/Libraries/libswiftshader_libGLESv2.dylib"
164
           codesign --force --options runtime --sign "${SIGN_IDENTITY:--}" --deep "./OBS.app/Contents/Frameworks/Chromium Embedded Framework.framework"
165
 
166
+          codesign --force --options runtime --deep --sign "${SIGN_IDENTITY:--}" "./OBS.app/Contents/Resources/data/obs-mac-virtualcam.plugin"
167
+
168
           codesign --force --options runtime --entitlements "../CI/scripts/macos/app/entitlements.plist" --sign "${SIGN_IDENTITY:--}" --deep ./OBS.app
169
 
170
           codesign -dvv ./OBS.app
171
@@ -268,7 +264,7 @@
172
         run: |
173
           FILE_DATE=$(date +%Y-%m-%d)
174
           FILE_NAME=$FILE_DATE-${{ env.OBS_GIT_HASH }}-${{ env.OBS_GIT_TAG }}-macOS.dmg
175
-          echo "::set-env name=FILE_NAME::${FILE_NAME}"
176
+          echo "FILE_NAME=${FILE_NAME}" >> $GITHUB_ENV
177
 
178
           cp ../CI/scripts/macos/package/settings.json.template ./settings.json
179
           sed -i '' 's#\$\$VERSION\$\$#${{ env.OBS_GIT_TAG }}#g' ./settings.json
180
@@ -282,7 +278,7 @@
181
           sudo cp ./${FILE_NAME} ../nightly/${FILE_NAME}
182
       - name: 'Publish'
183
         if: success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1')
184
-        uses: actions/upload-artifact@v2-preview
185
+        uses: actions/upload-artifact@v2.2.0
186
         with:
187
           name: '${{ env.FILE_NAME }}'
188
           path: ./nightly/*.dmg
189
@@ -294,7 +290,7 @@
190
           FILE_DATE=$(date +%Y-%m-%d)
191
           FILE_NAME=$FILE_DATE-${{ env.OBS_GIT_HASH }}-${{ env.OBS_GIT_TAG }}-macOS.dmg
192
           RELEASE_FILE_NAME=$FILE_DATE-${{ env.OBS_GIT_HASH }}-${{ env.OBS_GIT_TAG }}-rel-macOS.dmg
193
-          echo "::set-env name=RELEASE_FILE_NAME::${RELEASE_FILE_NAME}"
194
+          echo "RELEASE_FILE_NAME=${RELEASE_FILE_NAME}" >> $GITHUB_ENV
195
 
196
           xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_NOTARIZATION_USERNAME }}" -p "${{ secrets.MACOS_NOTARIZATION_PASSWORD }}"
197
 
198
@@ -310,7 +306,7 @@
199
           sudo mv ./$FILE_NAME ../release/$RELEASE_FILE_NAME
200
       - name: 'Publish Release'
201
         if: success() && startsWith(github.ref, 'refs/tags/') && github.event_name != 'pull_request'
202
-        uses: actions/upload-artifact@v2-preview
203
+        uses: actions/upload-artifact@v2.2.0
204
         with:
205
           name: '${{ env.RELEASE_FILE_NAME }}'
206
           path: ./release/*.dmg
207
@@ -319,24 +315,24 @@
208
     runs-on: [ubuntu-latest]
209
     steps:
210
       - name: 'Checkout'
211
-        uses: actions/checkout@v2
212
+        uses: actions/checkout@v2.3.3
213
         with:
214
           submodules: 'recursive'
215
       - name: 'Fetch Git Tags'
216
         run: |
217
           git fetch --prune --unshallow
218
-          echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD)
219
-          echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD)
220
-          echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0)
221
+          echo "OBS_GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV
222
+          echo "OBS_GIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
223
+          echo "OBS_GIT_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV
224
       - name: 'Check for Github Labels'
225
         if: github.event_name == 'pull_request'
226
         run: |
227
           LABELS_URL="$(echo ${{ github.event.pull_request.url }} | sed s'/pulls/issues/')"
228
           LABEL_FOUND="$(curl -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" "${LABELS_URL}/labels" | sed -n 's/.*"name": "\(.*\)",/\1/p' | grep 'Seeking Testers' || true)"
229
           if [ "${LABEL_FOUND}" = "Seeking Testers" ]; then
230
-            echo ::set-env name=SEEKING_TESTERS::1
231
+            echo "SEEKING_TESTERS=1" >> $GITHUB_ENV
232
           else
233
-            echo ::set-env name=SEEKING_TESTERS::0
234
+            echo "SEEKING_TESTERS=0" >> $GITHUB_ENV
235
           fi
236
       - name: Install prerequisites (Apt)
237
         shell: bash
238
@@ -363,6 +359,7 @@
239
            libluajit-5.1-dev \
240
            libpulse-dev \
241
            libqt5x11extras5-dev \
242
+           libsndio-dev \
243
            libspeexdsp-dev \
244
            libswresample-dev \
245
            libswscale-dev \
246
@@ -383,10 +380,12 @@
247
            qtbase5-dev \
248
            libqt5svg5-dev \
249
            swig \
250
-           libcmocka-dev
251
+           libcmocka-dev \
252
+           linux-generic \
253
+           v4l2loopback-dkms
254
       - name: 'Restore Chromium Embedded Framework from cache'
255
         id: cef-cache
256
-        uses: actions/cache@v1
257
+        uses: actions/cache@v2.1.2
258
         env:
259
           CACHE_NAME: 'cef-cache'
260
         with:
261
@@ -404,7 +403,7 @@
262
         run: |
263
           mkdir ./build
264
           cd ./build
265
-          cmake -DUNIX_STRUCTURE=0 -DCMAKE_INSTALL_PREFIX="${{ github.workspace }}/obs-studio-portable" -DENABLE_UNIT_TESTS=ON -DENABLE_VLC=ON -DBUILD_CAPTIONS=ON -DWITH_RTMPS=ON -DBUILD_BROWSER=ON -DCEF_ROOT_DIR="${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_BUILD_VERSION }}_linux64" ..
266
+          cmake -DUNIX_STRUCTURE=0 -DCMAKE_INSTALL_PREFIX="${{ github.workspace }}/obs-studio-portable" -DENABLE_UNIT_TESTS=ON -DENABLE_VLC=ON -DWITH_RTMPS=ON -DBUILD_BROWSER=ON -DCEF_ROOT_DIR="${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_BUILD_VERSION }}_linux64" ..
267
       - name: 'Build'
268
         shell: bash
269
         working-directory: ${{ github.workspace }}/build
270
@@ -419,7 +418,7 @@
271
         run: |
272
           FILE_DATE=$(date +%Y-%m-%d)
273
           FILE_NAME=$FILE_DATE-${{ env.OBS_GIT_HASH }}-${{ env.OBS_GIT_TAG }}-linux64.tar.gz
274
-          echo "::set-env name=FILE_NAME::${FILE_NAME}"
275
+          echo "FILE_NAME=${FILE_NAME}" >> $GITHUB_ENV
276
           cd ./build
277
           sudo checkinstall --default --install=no --pkgname=obs-studio --fstrans=yes --backup=no --pkgversion="$(date +%Y%m%d)-git" --deldoc=yes
278
           mkdir ../nightly
279
@@ -428,7 +427,7 @@
280
           cd -
281
       - name: 'Publish'
282
         if: success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1')
283
-        uses: actions/upload-artifact@v2-preview
284
+        uses: actions/upload-artifact@v2.2.0
285
         with:
286
           name: '${{ env.FILE_NAME }}'
287
           path: './nightly/*.tar.gz'
288
@@ -445,20 +444,21 @@
289
       TWITCH-HASH: ${{ secrets.TWITCH_HASH }}
290
       RESTREAM-CLIENTID: ${{ secrets.RESTREAM-CLIENTID }}
291
       RESTREAM-HASH: ${{ secrets.RESTREAM-HASH }}
292
+      VIRTUALCAM-GUID: "A3FCE0F5-3493-419F-958A-ABA1250EC20B"
293
     steps:
294
       - name: 'Add msbuild to PATH'
295
-        uses: microsoft/setup-msbuild@v1.0.0
296
+        uses: microsoft/setup-msbuild@v1.0.2
297
       - name: 'Checkout'
298
-        uses: actions/checkout@v2
299
+        uses: actions/checkout@v2.3.3
300
         with:
301
           submodules: 'recursive'
302
       - name: 'Fetch Git Tags'
303
         shell: bash
304
         run: |
305
           git fetch --prune --unshallow
306
-          echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD)
307
-          echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD)
308
-          echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0)
309
+          echo "OBS_GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV
310
+          echo "OBS_GIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
311
+          echo "OBS_GIT_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV
312
       - name: 'Check for Github Labels'
313
         if: github.event_name == 'pull_request'
314
         shell: bash
315
@@ -466,13 +466,13 @@
316
           LABELS_URL="$(echo ${{ github.event.pull_request.url }} | sed s'/pulls/issues/')"
317
           LABEL_FOUND="$(curl -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" "${LABELS_URL}/labels" | sed -n 's/.*"name": "\(.*\)",/\1/p' | grep 'Seeking Testers' || true)"
318
           if [ "${LABEL_FOUND}" = "Seeking Testers" ]; then
319
-            echo ::set-env name=SEEKING_TESTERS::1
320
+            echo "SEEKING_TESTERS=1" >> $GITHUB_ENV
321
           else
322
-            echo ::set-env name=SEEKING_TESTERS::0
323
+            echo "SEEKING_TESTERS=0" >> $GITHUB_ENV
324
           fi
325
       - name: 'Restore QT dependency from cache'
326
         id: qt-cache
327
-        uses: actions/cache@v1
328
+        uses: actions/cache@v2.1.2
329
         env:
330
           CACHE_NAME: 'windows-qt-cache'
331
         with:
332
@@ -480,7 +480,7 @@
333
           key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.QT_VERSION }}
334
       - name: 'Restore pre-built dependencies from cache'
335
         id: deps-cache
336
-        uses: actions/cache@v1
337
+        uses: actions/cache@v2.1.2
338
         env:
339
           CACHE_NAME: 'windows-deps-cache'
340
         with:
341
@@ -488,7 +488,7 @@
342
           key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.WINDOWS_DEPS_VERSION }}
343
       - name: 'Restore VLC dependency from cache'
344
         id: vlc-cache
345
-        uses: actions/cache@v1
346
+        uses: actions/cache@v2.1.2
347
         env:
348
           CACHE_NAME: 'windows-vlc-cache'
349
         with:
350
@@ -496,7 +496,7 @@
351
           key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.VLC_VERSION }}
352
       - name: 'Restore CEF dependency from cache (64 bit)'
353
         id: cef-cache
354
-        uses: actions/cache@v1
355
+        uses: actions/cache@v2.1.2
356
         env:
357
           CACHE_NAME: 'windows-cef-64-cache'
358
         with:
359
@@ -527,7 +527,7 @@
360
           mkdir ./build
361
           mkdir ./build64
362
           cd ./build64
363
-          cmake -G"${{ env.CMAKE_GENERATOR }}" -A"x64" -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DBUILD_BROWSER=true -DBUILD_CAPTIONS=true -DCOMPILE_D3D12_HOOK=true -DVLCPath="${{ github.workspace }}/cmbuild/vlc" -DDepsPath="${{ github.workspace }}/cmbuild/deps/win64" -DQTDIR="${{ github.workspace }}/cmbuild/QT/${{ env.QT_VERSION }}/msvc2017_64" -DENABLE_VLC=ON -DCEF_ROOT_DIR="${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_VERSION }}_windows64_minimal" -DCOPIED_DEPENDENCIES=FALSE -DCOPY_DEPENDENCIES=TRUE ..
364
+          cmake -G"${{ env.CMAKE_GENERATOR }}" -A"x64" -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DBUILD_BROWSER=true -DCOMPILE_D3D12_HOOK=true -DVLCPath="${{ github.workspace }}/cmbuild/vlc" -DDepsPath="${{ github.workspace }}/cmbuild/deps/win64" -DQTDIR="${{ github.workspace }}/cmbuild/QT/${{ env.QT_VERSION }}/msvc2017_64" -DENABLE_VLC=ON -DCEF_ROOT_DIR="${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_VERSION }}_windows64_minimal" -DCOPIED_DEPENDENCIES=FALSE -DCOPY_DEPENDENCIES=TRUE -DVIRTUALCAM_GUID=${{ env.VIRTUALCAM-GUID }} ..
365
       - name: 'Build'
366
         run: msbuild /m /p:Configuration=RelWithDebInfo .\build64\obs-studio.sln
367
       - name: 'Package'
368
@@ -535,16 +535,15 @@
369
         run: |
370
           $env:FILE_DATE=(Get-Date -UFormat "%F")
371
           $env:FILE_NAME="${env:FILE_DATE}-${{ env.OBS_GIT_HASH }}-${{ env.OBS_GIT_TAG }}-win64.zip"
372
-          echo "::set-env name=FILE_NAME::${env:FILE_NAME}"
373
+          echo "FILE_NAME=${env:FILE_NAME}" >> ${env:GITHUB_ENV}
374
           robocopy .\build64\rundir\RelWithDebInfo .\build\ /E /XF .gitignore
375
           7z a ${env:FILE_NAME} .\build\*
376
       - name: 'Publish'
377
         if: success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1')
378
-        uses: actions/upload-artifact@v2-preview
379
+        uses: actions/upload-artifact@v2.2.0
380
         with:
381
           name: '${{ env.FILE_NAME }}'
382
           path: '*-win64.zip'
383
-
384
   win32:
385
     name: 'Windows 32-bit'
386
     runs-on: [windows-latest]
387
@@ -557,20 +556,21 @@
388
       TWITCH-HASH: ${{ secrets.TWITCH_HASH }}
389
       RESTREAM-CLIENTID: ${{ secrets.RESTREAM-CLIENTID }}
390
       RESTREAM-HASH: ${{ secrets.RESTREAM-HASH }}
391
+      VIRTUALCAM-GUID: "A3FCE0F5-3493-419F-958A-ABA1250EC20B"
392
     steps:
393
       - name: 'Add msbuild to PATH'
394
-        uses: microsoft/setup-msbuild@v1.0.0
395
+        uses: microsoft/setup-msbuild@v1.0.2
396
       - name: 'Checkout'
397
-        uses: actions/checkout@v2
398
+        uses: actions/checkout@v2.3.3
399
         with:
400
           submodules: 'recursive'
401
       - name: 'Fetch Git Tags'
402
         shell: bash
403
         run: |
404
           git fetch --prune --unshallow
405
-          echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD)
406
-          echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD)
407
-          echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0)
408
+          echo "OBS_GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV
409
+          echo "OBS_GIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
410
+          echo "OBS_GIT_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV
411
       - name: 'Check for Github Labels'
412
         if: github.event_name == 'pull_request'
413
         shell: bash
414
@@ -578,13 +578,13 @@
415
           LABELS_URL="$(echo ${{ github.event.pull_request.url }} | sed s'/pulls/issues/')"
416
           LABEL_FOUND="$(curl -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" "${LABELS_URL}/labels" | sed -n 's/.*"name": "\(.*\)",/\1/p' | grep 'Seeking Testers' || true)"
417
           if [ "${LABEL_FOUND}" = "Seeking Testers" ]; then
418
-            echo ::set-env name=SEEKING_TESTERS::1
419
+            echo "SEEKING_TESTERS=1" >> $GITHUB_ENV
420
           else
421
-            echo ::set-env name=SEEKING_TESTERS::0
422
+            echo "SEEKING_TESTERS=0" >> $GITHUB_ENV
423
           fi
424
       - name: 'Restore QT dependency from cache'
425
         id: qt-cache
426
-        uses: actions/cache@v1
427
+        uses: actions/cache@v2.1.2
428
         env:
429
           CACHE_NAME: 'qt-cache'
430
         with:
431
@@ -592,7 +592,7 @@
432
           key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.QT_VERSION }}
433
       - name: 'Restore pre-built dependencies from cache'
434
         id: deps-cache
435
-        uses: actions/cache@v1
436
+        uses: actions/cache@v2.1.2
437
         env:
438
           CACHE_NAME: 'deps-cache'
439
         with:
440
@@ -600,7 +600,7 @@
441
           key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.WINDOWS_DEPS_VERSION }}
442
       - name: 'Restore VLC dependency from cache'
443
         id: vlc-cache
444
-        uses: actions/cache@v1
445
+        uses: actions/cache@v2.1.2
446
         env:
447
           CACHE_NAME: 'vlc-cache'
448
         with:
449
@@ -608,7 +608,7 @@
450
           key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.WINDOWS_VLC_VERSION }}
451
       - name: 'Restore CEF dependency from cache (32 bit)'
452
         id: cef-cache
453
-        uses: actions/cache@v1
454
+        uses: actions/cache@v2.1.2
455
         env:
456
           CACHE_NAME: 'cef-32-cache'
457
         with:
458
@@ -639,7 +639,7 @@
459
           mkdir ./build
460
           mkdir ./build32
461
           cd ./build32
462
-          cmake -G"${{ env.CMAKE_GENERATOR }}" -A"Win32" -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DENABLE_VLC=ON -DBUILD_BROWSER=true -DBUILD_CAPTIONS=true -DCOMPILE_D3D12_HOOK=true -DVLCPath="${{ github.workspace }}/cmbuild/vlc" -DDepsPath="${{ github.workspace }}/cmbuild/deps/win32" -DQTDIR="${{ github.workspace }}/cmbuild/QT/${{ env.QT_VERSION }}/msvc2017" -DCEF_ROOT_DIR="${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_VERSION }}_windows32_minimal" -DCOPIED_DEPENDENCIES=FALSE -DCOPY_DEPENDENCIES=TRUE ..
463
+          cmake -G"${{ env.CMAKE_GENERATOR }}" -A"Win32" -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DENABLE_VLC=ON -DBUILD_BROWSER=true -DCOMPILE_D3D12_HOOK=true -DVLCPath="${{ github.workspace }}/cmbuild/vlc" -DDepsPath="${{ github.workspace }}/cmbuild/deps/win32" -DQTDIR="${{ github.workspace }}/cmbuild/QT/${{ env.QT_VERSION }}/msvc2017" -DCEF_ROOT_DIR="${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_VERSION }}_windows32_minimal" -DCOPIED_DEPENDENCIES=FALSE -DCOPY_DEPENDENCIES=TRUE -DVIRTUALCAM_GUID=${{ env.VIRTUALCAM-GUID }} ..
464
       - name: 'Build'
465
         run: msbuild /m /p:Configuration=RelWithDebInfo .\build32\obs-studio.sln
466
       - name: 'Package'
467
@@ -647,12 +647,12 @@
468
         run: |
469
           $env:FILE_DATE=(Get-Date -UFormat "%F")
470
           $env:FILE_NAME="${env:FILE_DATE}-${{ env.OBS_GIT_HASH }}-${{ env.OBS_GIT_TAG }}-win32.zip"
471
-          echo "::set-env name=FILE_NAME::${env:FILE_NAME}"
472
+          echo "FILE_NAME=${env:FILE_NAME}" >> ${env:GITHUB_ENV}
473
           robocopy .\build32\rundir\RelWithDebInfo .\build\ /E /XF .gitignore
474
           7z a ${env:FILE_NAME} .\build\*
475
       - name: 'Publish'
476
         if: success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1')
477
-        uses: actions/upload-artifact@v2-preview
478
+        uses: actions/upload-artifact@v2.2.0
479
         with:
480
           name: '${{ env.FILE_NAME }}'
481
           path: '*-win32.zip'
482
obs-studio-26.0.2.tar.xz/AUTHORS -> obs-studio-26.1.0.tar.xz/AUTHORS Changed
892
 
1
@@ -284,34 +284,38 @@
2
   - ZILZAL
3
   - Abdullah AL-Qahtani (Za7ef_SA)
4
   - majdcomp
5
-  - aaakjt
6
   - Tareq Almutairi (Tareq_s)
7
+  - aaakjt
8
+  - AiAF (7MR)
9
   - ibrahim younis (sintorea_incyx)
10
   - معتصم دعنا (rozana-media)
11
   - Mohamed Zain (Thecheeseman)
12
   - Gol D. Ace (goldace)
13
   - Vainock
14
   - Saleh oukiki (salehoukiki)
15
+  - Ahmad Alkurbi (DontPlay)
16
   - Tensai
17
   - Mustafa2018
18
   - BeleganStartup
19
   - Ndalabo Taema (hake_bsowq)
20
-  - Ahmad Alkurbi (DontPlay)
21
+  - Fahad Alshaya (fashaya)
22
   - Hani Sweileh (hno.sweileh)
23
-  - BWU Wheelman (Wheelman)
24
   - Nasser Bin Laboun (nasserbinlaboun)
25
+  - BWU Wheelman (Wheelman)
26
   - FC Barcelona HD (kurdnews)
27
   - osmansalih (hpcplus2016)
28
-  - unknowndomain
29
   - Yhea Ahmad (yhea.ahmad7741)
30
+  - unknowndomain
31
   - Ahmed Hawam (Hawam)
32
   - Mnsor The-Ghost (mnsor1722011)
33
   - Malaz Gold Edition (Malo7zz)
34
   - dodgepong
35
   - chaironeko
36
   - Hadi Gamer (hadigamer3131)
37
+ Aragonese:
38
+  - juanpabl
39
  Azerbaijani:
40
-  - Shahin Farzaliyev (Khan27)
41
+  - ShahinF27 (Khan27)
42
   - Javid-An
43
   - unknowndomain
44
   - Kənan Axundov (kenanaxundov2)
45
@@ -325,16 +329,18 @@
46
   - Xabier Aramendi (azpidatziak)
47
   - Osoitz
48
   - Gol D. Ace (goldace)
49
+  - Sergio Varela (IngrownMink4)
50
   - Vainock
51
   - EG Gamer (eggamer131)
52
   - txaro
53
   - etxondoko
54
   - unknowndomain
55
+  - Fiwi1265
56
   - dodgepong
57
-  - jolaus
58
+  - zientek
59
   - alaitzgabi
60
+  - jolaus
61
   - ziztazale
62
-  - zientek
63
  Bengali:
64
   - shamuntohamd
65
   - Rudro Rasel (rdrrsl)
66
@@ -350,7 +356,7 @@
67
   - Zakxaev68
68
   - kalmarin
69
   - Seyhan Halil (yildirim17)
70
-  - Martin Georgiev (DivideByNone)
71
+  - DivideByNone
72
   - Vainock
73
   - Viktor Kitov (viktorkitov)
74
   - djradimix
75
@@ -363,6 +369,8 @@
76
   - Salif Mehmed (salifm)
77
   - Warchamp7
78
   - dodgepong
79
+ Burmese:
80
+  - linwinthu
81
  Catalan:
82
   - Jaime Muñoz Martín (jmmartin_5)
83
   - Benet R. i Camps (BennyBeat) (BennyBeat)
84
@@ -374,6 +382,7 @@
85
   - Gol D. Ace (goldace)
86
   - jan (test83318)
87
   - vilagamer999
88
+  - Xavier Muntada Samà (XavierMSama)
89
   - Pere O. (gotrunks)
90
   - unknowndomain
91
   - Adolfo Jayme (fitoschido)
92
@@ -399,8 +408,8 @@
93
   - cai_miao
94
   - Opportunity (OpportunityLiu)
95
   - MarsYoung
96
-  - Inku Xuan (inkuxuan)
97
   - SR_Mango
98
+  - Inku Xuan (inkuxuan)
99
   - Yi-Jyun Pan (pan93412)
100
   - yunluzhang
101
   - copyliu
102
@@ -443,13 +452,15 @@
103
   - Watson Tsai (ashaneba)
104
   - Han-Jen Cheng (notexist)
105
   - Inndy.Lin (inndy)
106
+  - offthegrid-mike
107
   - khng300
108
   - abc0922001
109
-  - ak-47root
110
   - Meng Hao Li (GazCore)
111
+  - ak-47root
112
   - Edison Lee (edisonlee55)
113
   - Append Huang (append)
114
   - fangzheng
115
+  - yeft
116
   - zhtw
117
   - JackYeah
118
   - unknowndomain
119
@@ -460,18 +471,18 @@
120
   - FaZe Fakay (fazefakay)
121
   - chaironeko
122
   - tomoe-musashi
123
-  - watadon
124
-  - WeingHong
125
-  - Bob Wei (BobWaver)
126
   - Tatsujin (c910335)
127
+  - Bob Wei (BobWaver)
128
   - Tommy Chiang (oToToT)
129
+  - watadon
130
+  - WeingHong
131
  Croatian:
132
   - medicmomcilo
133
   - srdjan_m
134
   - Fran Kelava (fkelava)
135
+  - schwabengeiz
136
   - Runicar (dajtisina)
137
   - Wildrage
138
-  - schwabengeiz
139
   - penta (junp5i)
140
   - OfficialwobY
141
   - Gol D. Ace (goldace)
142
@@ -486,18 +497,19 @@
143
   - Matěj Kozák (GrrrandyCZ)
144
   - Kryštof Černý (cleverline1mc)
145
   - Vainock
146
+  - X3r1k (x3r1k)
147
   - Stewio MC (stepandolsky)
148
   - Gol D. Ace (goldace)
149
   - JIMMY (vopasek)
150
   - Kiznoh
151
   - Sawanyo
152
-  - MrJaroslavik#8412 (MJaroslavik)
153
+  - MrJaroslavik
154
   - TheWolfiKK
155
-  - Erik Bročko (ericek111)
156
   - unknowndomain
157
-  - dodgepong
158
-  - Martin Pilát (piltmartin)
159
+  - Erik Bročko (ericek111)
160
   - Daniel Padrta (dpadrta)
161
+  - Martin Pilát (piltmartin)
162
+  - dodgepong
163
   - Jáchym Plánička (Jacerros)
164
  Danish:
165
   - NCAA
166
@@ -521,19 +533,20 @@
167
   - Mytologi
168
  Dutch:
169
   - Eric Bataille (ThoNohT)
170
+  - A. Voogt (atvoogt)
171
   - Michel Snippe (michelsnippe)
172
   - Greendweller
173
   - exeldro
174
   - Albakham (albakham)
175
-  - Coen (Trigstur)
176
   - Lars Acou (lars.acou)
177
+  - Coen (Trigstur)
178
   - Danny (Dkamps18)
179
   - Richard Stanway (r1ch)
180
+  - Harm van den Hoek (harm27)
181
   - Nicole (Dutchess_Nicole)
182
   - robbert0891 (robbertoorschot38)
183
   - Gol D. Ace (goldace)
184
   - Kjetil Verstrepen (kjetilv)
185
-  - Harm van den Hoek (harm27)
186
   - Jasper J (JassieJ)
187
   - Vainock
188
   - b__dm
189
@@ -545,6 +558,7 @@
190
   - andymidside
191
   - F_Producktions
192
   - Thom Knepper (MrKnepp)
193
+  - Lesley Natrop (lesleynatrop)
194
   - Bo Alsemgeest (bo.alsemgeest.wausie)
195
   - lokerhp
196
   - unknowndomain
197
@@ -563,24 +577,27 @@
198
   - Noah Husby (noahhusby)
199
   - Endysis
200
   - Pete Russell (pete.russell.photos)
201
+ Esperanto:
202
+  - Matt Aaldenberg (MattAalden)
203
+  - Vainock
204
  Estonian:
205
   - MartinEwing
206
   - Oliver Jõgar (treier57lol) (difiter23)
207
   - AndresTraks
208
+  - Agu Ratas (aguratas)
209
   - C3kos (C3kos1)
210
   - Gol D. Ace (goldace)
211
   - unknowndomain
212
   - Vainock
213
-  - Agu Ratas (aguratas)
214
  Filipino:
215
   - dwaeji-aizelle
216
   - nyakayed
217
-  - Loyd Stephen Jayme (loydjayme25)
218
   - CodeYan01
219
+  - Loyd Stephen Jayme (loydjayme25)
220
   - jermel
221
+  - Raffy (Tested)
222
   - Gol D. Ace (goldace)
223
   - Vainock
224
-  - Raffy (Tested)
225
   - arnoldsecret
226
   - Raylir
227
   - unknowndomain
228
@@ -592,8 +609,8 @@
229
   - dodgepong
230
   - Tero Keso (tero.keso)
231
   - Gol D. Ace (goldace)
232
-  - Pyscowicz
233
   - Vainock
234
+  - Pyscowicz
235
   - Obama (Obama44)
236
   - unknowndomain
237
   - Ville Närhi (daimaah)
238
@@ -606,10 +623,10 @@
239
   - Tocram2 (tocram2)
240
   - Benjamin Cambour (lesinfox)
241
   - Yberion
242
+  - Guillaume Turchini (orion78fr)
243
   - Léo (leeo97one)
244
   - RisedSky (THEMINECRAFT951)
245
   - Pikana
246
-  - Guillaume Turchini (orion78fr)
247
   - BoboopTeam
248
   - DoK_-
249
   - DarckCrystale
250
@@ -618,8 +635,8 @@
251
   - DarkInFire
252
   - Theguiguix
253
   - Gol D. Ace (goldace)
254
-  - Vainock
255
   - Youtubeur FR│Giaco35 (Giaco35)
256
+  - Vainock
257
   - steve_fr
258
   - kyllian (tardigradeus)
259
   - Deski_
260
@@ -627,11 +644,13 @@
261
   - Aime23
262
   - Grisou2907
263
   - BaguetteDePain_
264
+  - Anat ROCHUT (arochut)
265
   - Keter LordFR (YorHaDen)
266
   - Jérémy LITIQUE (JeremyLTE)
267
   - illusdidi
268
-  - 🌠 DarK | #Hello 🌠 (DarKTV_FR)
269
   - Mathieu Hautebas (matteyeux)
270
+  - 🌠 DarK | #Hello 🌠 (DarKTV_FR)
271
+  - christophe (TedM)
272
   - Yolopix
273
   - Gabriel Dugny (Gabigabigo)
274
   - tburette
275
@@ -643,20 +662,25 @@
276
   - Alexis Brandner (Alexinfos)
277
   - Camille Nury (kamsdu30)
278
   - dodgepong
279
-  - Lexane Sirac (Exilexi)
280
   - Jean-Mathieu Jm Samson (sjm450666)
281
-  - Albakham (albakham)
282
+  - Lexane Sirac (Exilexi)
283
+  - Wizi_89
284
   - HistoriCode97
285
-  - Warchamp7
286
+  - Albakham (albakham)
287
   - SkylixX
288
-  - chaironeko
289
+  - Warchamp7
290
   - Lucas Juif (trycarnage)
291
-  - William Dunn (williamdunnperso)
292
-  - Marc André Audet (Manhim)
293
-  - HoPollo (HoPolloTV)
294
+  - chaironeko
295
+  - RuruDuTurfu_
296
+  - Antwan
297
   - E Ju (enuajenuaj)
298
   - Parfum
299
-  - Antwan
300
+  - HoPollo (HoPolloTV)
301
+  - William Dunn (williamdunnperso)
302
+  - Isa (isabellez_bp)
303
+  - Skew (noan.perrot)
304
+  - Marc André Audet (Manhim)
305
+  - FauconSpartiate
306
  Galician:
307
   - mbouzada
308
   - Xesús M. Mosquera Carregal (xesusmosquera)
309
@@ -664,6 +688,7 @@
310
   - Vainock
311
   - Gol D. Ace (goldace)
312
   - unknowndomain
313
+  - HexaTree (nightcamel)
314
   - chaironeko
315
   - aluaces
316
   - dodgepong
317
@@ -675,8 +700,8 @@
318
   - Gol D. Ace (goldace)
319
   - unknowndomain
320
  German:
321
-  - Gol D. Ace (goldace)
322
   - Vainock
323
+  - Gol D. Ace (goldace)
324
   - Michael Fabian Dirks (Xaymar)
325
   - Sven Kirschbaum (fallobst22) (fallobst22)
326
   - Gregor Bigalke (gregtcltk)
327
@@ -708,7 +733,6 @@
328
   - Hadi Gamer (hadigamer3131)
329
   - degra78 (degra789)
330
   - Tiim
331
-  - Dominik Weissenseel (domisum)
332
   - Lasse Niermann (TheLasseHD)
333
   - Elementies
334
   - Fabian Küntzler (tringlp)
335
@@ -728,14 +752,15 @@
336
   - Scourgemcdak
337
   - Mepharees
338
   - Pigot :P (pigot715)
339
+  - TheMetalHelper
340
   - Tasos Sahanidis (tatokis)
341
   - George T. (tzikas97)
342
   - Vainock
343
   - Alex Kalles (alexakis1997)
344
+  - Ανδρέας Γεωργόπουλος (andrewgeo)
345
   - Kostas F (Kostas-F)
346
   - Warmaster
347
   - Gol D. Ace (goldace)
348
-  - Ανδρέας Γεωργόπουλος (andrewgeo)
349
   - iosifidis
350
   - Giorgos (bigdiskboi)
351
   - Themis T. (Deminho)
352
@@ -750,21 +775,23 @@
353
   - lonelywolf11
354
   - djsavta
355
   - Omeritzics Games (omeritzicschwartz)
356
+  - idanbo27
357
+  - עידו דנה (idodana01)
358
   - nachmanpop
359
   - Vainock
360
   - Yotam Ziv (yotamziv87)
361
-  - עידו דנה (idodana01)
362
   - Chemi
363
   - Gol D. Ace (goldace)
364
   - Light1c3
365
   - Yoel (ye8323)
366
   - epic_ziver_D
367
   - Netro (roi_adler)
368
+  - Hilla Glebotzki (Hilla123)
369
   - TheOver (upmeboost)
370
   - unknowndomain
371
   - yair (5shekel)
372
-  - אפיק רוזנר (afikr333)
373
   - ghsi
374
+  - אפיק רוזנר (afikr333)
375
   - Tal Machani (talmachani)
376
  Hindi:
377
   - Saswata Banerjee (azure.saswata)
378
@@ -773,6 +800,7 @@
379
   - SneakyFish5
380
   - shamuntohamd
381
   - unknowndomain
382
+  - Vainock
383
   - Gol D. Ace (goldace)
384
  Hungarian:
385
   - Gige
386
@@ -780,12 +808,15 @@
387
   - Gol D. Ace (goldace)
388
   - Sárga Pulcsis (SargaPulcsis)
389
   - sarkanyka444
390
+  - zolikonta
391
   - Vainock
392
   - Dániel P. (Daniii_)
393
   - Balázs Meskó (meskobalazs)
394
   - TOM005
395
+  - Isti (eisti)
396
   - Adam Liszkai (adamos42)
397
   - vargag159
398
+  - Biró Bence (birobence19)
399
   - unknowndomain
400
   - abydosan (abydoshun)
401
   - dodgepong
402
@@ -794,12 +825,13 @@
403
   - EzigboOmenana
404
  Indonesian:
405
   - M Akmal (akmalcakep59)
406
+  - Rafy Shafryan (NexaForX)
407
+  - Anbiya Shafaat (Anfia)
408
   - Rendi (rendiazmi)
409
   - ziasukmana
410
   - GudankGaming GG (GudankGaming)
411
   - Vainock
412
   - Lieba Natur Brilian (naturbrilian)
413
-  - Anbiya Shafaat (Anfia)
414
   - doplank
415
   - unknowndomain
416
  Italian:
417
@@ -816,6 +848,7 @@
418
   - Alessandro Sarto (alesarto03)
419
   - Tommaso Cammelli (tomganguz) (tomganguz)
420
   - mauriziopersi
421
+  - Marco Ciampa (ciampix)
422
   - Martazza
423
   - ScemEnzo
424
   - Christian Mazzola (_Alpha06)
425
@@ -835,15 +868,16 @@
426
   - SkyLion
427
   - Asbesbopispa
428
   - unknowndomain
429
+  - Benedetto Mazza (benedetto.mazza99)
430
   - Owly
431
   - Federico Tensi (habby1337)
432
   - NightMat
433
   - Daniele02_777
434
   - Alessandro Iepure (alessandro_iepure)
435
   - Flavio Rinaldi (flaviorinaldi)
436
-  - Alessandro Levante (lallo2401)
437
   - Valerio Ragni (ragni.valerio)
438
   - Marco Scardovi (ScardracS)
439
+  - Alessandro Levante (lallo2401)
440
   - Umberto Croci (umbertolb)
441
  Japanese:
442
   - shousa
443
@@ -866,7 +900,11 @@
444
   - Yuki Yu (Yukiyu)
445
   - TH_238
446
   - Teimu Tekura (diglateam3)
447
+ Kabyle:
448
+  - Yacine Bouklif (YacineBouklif)
449
+  - Selyan Slimane AMIRI (slimane_AMIRI)
450
  Khmer:
451
+  - thuonmohasal (thuon-mohasal)
452
   - ប៉ុកណូ រ៉ូយ៉ាល់ (poknoroyal68)
453
   - បងមាន តែអូន (cheaiphone267)
454
   - Gol D. Ace (goldace)
455
@@ -875,12 +913,15 @@
456
   - Alex Lee (alex01763)
457
   - Vainock
458
   - Gol D. Ace (goldace)
459
+  - AlexKoala (alexkoala)
460
   - RedditRook
461
   - Jong Kwon Choi (dailypro)
462
   - Ra.Workspace (RaWouk)
463
+  - hykdem kim (hykdem)
464
   - Russell (crimeroyal)
465
   - unknowndomain
466
   - Charles Wallis (charlestw127)
467
+  - Tristar Corp (Charleslee)
468
   - antome
469
   - 김동현 (ehehguu)
470
   - dodgepong
471
@@ -889,11 +930,13 @@
472
   - Vainock
473
   - RanjdarAbdulrazzaq
474
   - Aga Mangure (agaesmaeel)
475
+ Lao:
476
+  - nirankoon.singpraseuth (nirankoon)
477
  Lithuanian:
478
   - Justas Vilimas (tyntas)
479
   - xNaii (lyrikas5)
480
-  - Rolic
481
   - TitasK (titukas1572)
482
+  - Rolic
483
   - dnew (dbot)
484
   - unknowndomain
485
   - Gol D. Ace (goldace)
486
@@ -908,7 +951,7 @@
487
   - dodgepong
488
  Mongolian:
489
   - begjan
490
-  - Bilguun Ochirbat (Bil0203)
491
+  - Bilguun Ochirbat (BilguunOch)
492
   - unknowndomain
493
   - Vainock
494
   - Gol D. Ace (goldace)
495
@@ -921,11 +964,12 @@
496
   - dodgepong
497
   - LandyLERThERmfLOpi
498
   - areedw
499
+  - flaeri
500
   - mgKaiztra
501
   - Tommy (nwgat)
502
   - Vainock
503
-  - Jordan Stutzmann (J-Stutzmann)
504
   - Syver Stensholt (sssandum)
505
+  - Jordan Stutzmann (J-Stutzmann)
506
   - Alex Thomassen (Decicus)
507
   - Sander Skjegstad (r530er)
508
   - Gol D. Ace (goldace)
509
@@ -944,15 +988,20 @@
510
   - Yngve Spjeld Landro (yslandro)
511
   - Gol D. Ace (goldace)
512
  Persian:
513
+  - Kiper King (kiperking1)
514
   - koper
515
   - MZ MAXIMUM (mahdigamermax)
516
-  - Alireza Firouzi (pikhoshorg)
517
+  - Pikhosh (pikhoshorg)
518
   - peymanr34
519
   - Vainock
520
+  - Mohammad jawad (mrahmani788)
521
+  - Farshid Meidani (farshid_mi)
522
   - Gol D. Ace (goldace)
523
   - KinxShar (yasharaminasghari6)
524
   - Berrely
525
   - unknowndomain
526
+  - alefvanoon
527
+  - nohaxjustoof
528
   - Amirhossein yousefi (amir.sara)
529
   - Navid Sadeghieh (nsadeghieh)
530
  Pirate English:
531
@@ -972,12 +1021,13 @@
532
   - iltrof
533
   - Berrely
534
   - Lol Wut (OldGrandmaFarts)
535
-  - chaironeko
536
   - ncb
537
+  - chaironeko
538
   - MaltahlGaming (maltahlgaming)
539
   - Redback93
540
   - Mepharees
541
   - kkartaltepe
542
+  - KennanHunter
543
  Polish:
544
   - Tomasz 'grocal' Grodzki (grocal)
545
   - Albakham (albakham)
546
@@ -997,6 +1047,7 @@
547
   - Michal (progamesmicrok)
548
   - unknowndomain
549
   - Piteriuz
550
+  - mjluszko
551
   - dodgepong
552
   - Julia Drewniak (ewagsi)
553
   - Patryk Kunda (ner.i.ol)
554
@@ -1007,6 +1058,7 @@
555
  Portuguese:
556
   - Ev1lbl0w
557
   - joaofvieira
558
+  - Rui Machado (polystation4)
559
   - Manuela Silva (mansil)
560
   - André Biscaia (LazP)
561
   - Tomás Antunes (tomasantunes)
562
@@ -1016,49 +1068,58 @@
563
   - alexandre433
564
   - Vainock
565
   - pedro.moreira.359 (pmmorsoft)
566
+  - Nuno Matos (NunoCMatos)
567
   - Gol D. Ace (goldace)
568
+  - vanscorp
569
+  - Gatinhos
570
   - Gabriel L. (realgabriell)
571
   - Diogo Soares (DabliwAga)
572
+  - kayal15948
573
   - unknowndomain
574
-  - Tiago Mesquita (tiagomesquita)
575
   - Gost_Evil
576
+  - Tiago Mesquita (tiagomesquita)
577
  Portuguese, Brazilian:
578
   - Shaolin (admshao)
579
+  - Diogo Ramos (dr03ramos)
580
   - Ramon Mendes (rbrgameplays)
581
   - Fabio Madia (Shaolin)
582
   - Burkes
583
   - Guilherme Dias (Darkaiser)
584
   - Emanoel Lopes (emanoelopes)
585
-  - TFSThiagoBR98
586
   - Lincoln H. (LincolnH)
587
+  - TFSThiagoBR98
588
   - Vainock
589
   - CaioWzy
590
   - mizifih
591
   - André Gama (ToeOficial)
592
+  - Skellingtor
593
   - Avellar (BetaTester)
594
   - ドージェ (Doges)
595
   - clr0dr1g
596
   - aalonsomb
597
   - Gol D. Ace (goldace)
598
   - LoboMetalurgico
599
-  - Pragmata
600
-  - maribatis
601
+  - mathues
602
+  - Maneschy
603
   - lakitoo
604
-  - João (fror)
605
+  - maribatis
606
+  - igorruckert
607
   - DevilLorde
608
+  - João (fror)
609
   - unknowndomain
610
-  - Ramon Gonzalez (ramon200000)
611
   - Esdras Tarsis (esdrastarsis)
612
+  - Ramon Gonzalez (ramon200000)
613
+  - Guilherme Cruz (gcrz)
614
   - dodgepong
615
+  - Finhawk
616
   - andre.krdoso
617
   - dlageBR
618
   - park (TheBugMeNot)
619
-  - Finhawk
620
-  - Guilherme Cruz (gcrz)
621
+  - ghklug
622
   - Tiago Danin (TiagoDanin)
623
-  - sauloleite_quim
624
   - hakimgrr
625
   - Eliezer de Almeida (Eliezer62)
626
+  - sauloleite_quim
627
  Punjabi:
628
   - manjotsingh0202
629
   - unknowndomain
630
@@ -1074,7 +1135,7 @@
631
   - Mihai G (babasghenciu)
632
   - Vainock
633
   - Gol D. Ace (goldace)
634
-  - Johnthenoone
635
+  - Melonoone
636
   - AlexTheDacian
637
   - Diamyx
638
   - unknowndomain
639
@@ -1087,8 +1148,8 @@
640
   - iltrof
641
   - Andrei Stepanov (adem4ik)
642
   - Pavel (Shevalie)
643
-  - VNGXR
644
   - EDNVKjldr8vyu9
645
+  - VNGXR
646
   - Bugo
647
   - MaximGribanov
648
   - dodgepong
649
@@ -1098,6 +1159,7 @@
650
   - Runoff Screen (glebpozbnakov62)
651
   - Artem4ik
652
   - Yaroslav (MrYadro)
653
+  - HexaTree (nightcamel)
654
   - Пахомов Александр (GXTrus)
655
   - fromgate
656
   - Synbulat Biishev (Syjalo)
657
@@ -1106,6 +1168,7 @@
658
   - Andy (anry025)
659
   - er123rin (se123rin)
660
   - Nemesis (Nemesis07)
661
+  - bxkr
662
   - Serge Sklyarov (sergesklyarov)
663
   - Андрей Курдюков (sandrix)
664
   - Makatavin # (makatavin0)
665
@@ -1117,41 +1180,45 @@
666
   - RaspingMango (RaspingMango637)
667
   - Myasko
668
   - Mixaill
669
-  - Иван Геймеров (hronos-2t)
670
   - Super 2004 (pe86ki)
671
+  - Иван Геймеров (hronos-2t)
672
   - Nikita Bibanaev (nicky18013)
673
-  - Sergei Fug1t1v3 (fug)
674
   - Максим Куренков (kuplay)
675
-  - Цезарь Ролл (vanessik78)
676
+  - Sergei Fug1t1v3 (fug)
677
+  - Цезарь Ролл (CeaserRoll)
678
   - Walt Gee (vovanych)
679
-  - bxkr
680
-  - unknowndomain
681
   - zy9c 1337 (zy9c228)
682
+  - unknowndomain
683
+  - Илья Кузнецов (ilyavj)
684
+  - Ninja Hacker3000 (ninjahacker3875)
685
   - allan walpy (AndreyLysenkov)
686
   - Drahonn
687
   - SandoBY
688
-  - Mr. Games (oohskofgs)
689
-  - Yuri Mihaqlov (yurijmi)
690
   - Meldone (meldone)
691
+  - BeDubber
692
+  - Yuri Mihaqlov (yurijmi)
693
+  - Mr. Games (oohskofgs)
694
   - Anatoly (Atsupak)
695
   - Kcurett TM (thekcurett)
696
+  - Leika098
697
+  - Sigge Stjärnholm (Kladdy)
698
+  - iLefty
699
   - TR1D
700
   - TOWUK (towuk118)
701
   - Evgeny Bogdanov (vtrifonov548)
702
-  - iLefty
703
-  - Sigge Stjärnholm (Kladdy)
704
-  - Kuji Kitamura (KujiKita)
705
+  - MUHADDIS MEDIA (muhaddismedia)
706
   - MeoWStraY
707
   - Kirill Arkhipov (dokl957)
708
-  - MUHADDIS MEDIA (muhaddismedia)
709
+  - Kuji Kitamura (KujiKita)
710
+  - hoserfx
711
+  - Sam Vo (samvo)
712
+  - chaironeko
713
+  - Юрій (Devinit)
714
   - Milise_Tailise
715
   - The ZedIvan (ZedIvan)
716
+  - L1Q
717
   - Churikov Radmir Sergeevich (RadMir2)
718
   - Sasha Sorokin (Sasha-Sorokin)
719
-  - Юрій (Devinit)
720
-  - chaironeko
721
-  - L1Q
722
-  - Sam Vo (samvo)
723
  Scottish Gaelic:
724
   - GunChleoc
725
   - Vainock
726
@@ -1200,6 +1267,7 @@
727
  Slovenian:
728
   - Arnold Marko (atomicmind)
729
   - kristjan.krusic (krusic22)
730
+  - admrs
731
   - Aleksander Kovač (Acookook)
732
   - MG lolenstine (mglolenstine)
733
   - Vainock
734
@@ -1223,9 +1291,10 @@
735
   - Pilar G. (TheMadnessLady)
736
   - Gol D. Ace (goldace)
737
   - Lluís R (LluisR98)
738
+  - MarioMey
739
+  - Manuel Matías (manuel.matias)
740
   - Vainock
741
   - Maximiliano Schtroumpftech Pena-Roig (som2tokmynam)
742
-  - MarioMey
743
   - Pakotoyako
744
   - Carlos Plata (carlosesgenial33)
745
   - eemiroj
746
@@ -1233,6 +1302,7 @@
747
   - Skiddome (sergiomalagonmartin)
748
   - Marcos Vidal (markitos.maki22)
749
   - Ruben Deig Ramos (rdeigramos)
750
+  - Roriita
751
   - Ray (Ipsumry)
752
   - makiza1 (micosil_2)
753
   - Santiago Pereyra (SannttVIII)
754
@@ -1240,14 +1310,15 @@
755
   - David Sonico (davidsubsonico)
756
   - Eleazar (MtrElee3)
757
   - amssusgameplays (willifake052)
758
-  - Adolfo Jayme (fitoschido)
759
+  - D E B (D_E_B)
760
   - Jaire (corpi.98)
761
+  - Adolfo Jayme (fitoschido)
762
   - Sigge Stjärnholm (Kladdy)
763
   - unknowndomain
764
   - dodgepong
765
   - Rodrigo Ipince (ipince)
766
-  - Gloriana Cocozza (gcocozza)
767
   - chaironeko
768
+  - Gloriana Cocozza (gcocozza)
769
   - Mogabie's Nation (Mogabie)
770
   - Rubén Pérez (RixzZ)
771
   - Stuttero
772
@@ -1262,12 +1333,15 @@
773
   - 0x9fff00
774
   - Gustav Ekner (ekner)
775
   - Vainock
776
+  - Victor Ahlin (VSwede)
777
   - Jonatan Nyberg (sweuser)
778
+  - Mats Karlsson (matska)
779
   - ArvidTheSwe
780
   - Olle Dahström (odahlstrom)
781
   - Gol D. Ace (goldace)
782
-  - unknowndomain
783
   - Henrik Mattsson-Mårn (rchk)
784
+  - unknowndomain
785
+  - Axel Aminoff (axel.aminoff)
786
   - chaironeko
787
   - Jonas Svensson (jonassanojj99)
788
   - Hannes Blåman (thebluis)
789
@@ -1291,18 +1365,21 @@
790
  Tamil:
791
   - anto27
792
   - Jaiganesh Kumaran (Jaiganesh)
793
+  - rooban23
794
   - Gol D. Ace (goldace)
795
   - Vainock
796
   - unknowndomain
797
  Thai:
798
   - Nawin Somprasong (thaipirch98)
799
-  - ธีรภัทร์ โยชนา (Gataro)
800
+  - zero0200
801
+  - ธีรภัทร์ โยชนา (2RD)
802
   - sakuhanachan* (sakuhanachanloli)
803
   - SurachaiJUI
804
   - Sakia Normal Human (arcanaarcana5)
805
   - PolaX3
806
   - nongnoobjung (kitcharuk_4)
807
   - 盛凤阁 (execzero)
808
+  - Rathchaarnon Threeanjuleethaan (rathchaarnon)
809
   - unknowndomain
810
   - แมน ทศพร (lovemanna456)
811
   - Vainock
812
@@ -1318,16 +1395,19 @@
813
   - Savas Tokmak (Laserist)
814
   - Umut kılıç (kilic190787)
815
   - vgezer
816
+  - Vainock
817
   - furkanbicici
818
+  - keke_ea
819
   - Murat Karagöz (anemon_1994)
820
-  - Vainock
821
   - Bilgehan Demirel (bilgehandemirel)
822
   - Gol D. Ace (goldace)
823
-  - berkcan uçan (ibnehayati)
824
   - Alperen Yıldız (Sparrow34)
825
+  - berkcan uçan (ibnehayati)
826
+  - Solusyon2
827
   - gecebekcisi1
828
-  - Furkan Korhan (furkankorhan)
829
   - Emin Can OGUZ (emincanoguz11)
830
+  - Furkan Korhan (furkankorhan)
831
+  - Ege (ekto)
832
   - Onur Yılmaz (Makaron3422)
833
   - mustafaa
834
   - Richard Stanway (r1ch)
835
@@ -1341,7 +1421,9 @@
836
   - Fatih Güneş (fatihgunes)
837
   - Türker Yıldırım (turkeryildirim)
838
   - basakbk
839
+  - Yıldırım Mehmet Nur (MehmetNY)
840
   - NOYB
841
+  - Huseyin Emre (emreemuzik)
842
   - chaironeko
843
   - Efe kemal Gürses (efetr1)
844
   - Özkan Özeşme (ozkanozsm)
845
@@ -1350,8 +1432,8 @@
846
   - SuslikV
847
   - Mykola Ronik (Mantikor)
848
   - Anatoly Belibov (anatoly136ua)
849
-  - Sergey (Megadragon)
850
   - Vainock
851
+  - Ihor Hordiichuk (ihor_ck)
852
   - Lino Bico (bicolino34)
853
   - Юрій (Devinit)
854
   - Gol D. Ace (goldace)
855
@@ -1360,21 +1442,24 @@
856
   - បងមាន តែអូន (cheaiphone267)
857
   - geimfis
858
   - L1Q
859
-  - Sergii Raboshchuk (Fallenbard)
860
   - powerdef
861
+  - Sergii Raboshchuk (Fallenbard)
862
   - unknowndomain
863
+  - lxlalexlxl
864
   - Maksym Tymoshyk (maximillian_)
865
   - dodgepong
866
  Urdu (Pakistan):
867
   - Rana Awais (ehtisham)
868
+  - Sheikh Ahmed (sheikhahmed)
869
   - tahirsada
870
   - shamuntohamd
871
   - unknowndomain
872
   - Gol D. Ace (goldace)
873
  Vietnamese:
874
   - Johnny “max20091” Utah (boostyourprogram)
875
-  - Hưng Nguyễn (hoyostudio)
876
+  - Quang Nguyen (quangnguyen.25)
877
   - IoeCmcomc (ioecmcomc)
878
+  - Hưng Nguyễn (hoyostudio)
879
   - ngoisaosang
880
   - Dũng Nguyễn (ctctk9)
881
   - Drake Strike (phjtieudoc)
882
@@ -1386,7 +1471,7 @@
883
   - rezarria
884
   - unknowndomain
885
   - Vũ Hải Tây (tayngungo1999)
886
-  - V4Ki3t_VN
887
-  - Dawkin Nguyen (dawkinit)
888
   - dodgepong
889
+  - Dawkin Nguyen (dawkinit)
890
+  - V4Ki3t_VN
891
   - NCAA
892
obs-studio-26.0.2.tar.xz/CI/before-script-linux.sh -> obs-studio-26.1.0.tar.xz/CI/before-script-linux.sh Changed
7
 
1
@@ -3,4 +3,4 @@
2
 set -ex
3
 ccache -s || echo "CCache is not available."
4
 mkdir build && cd build
5
-cmake -DBUILD_CAPTIONS=ON -DBUILD_BROWSER=ON -DCEF_ROOT_DIR="../cef_binary_${CEF_BUILD_VERSION}_linux64" ..
6
+cmake -DBUILD_BROWSER=ON -DCEF_ROOT_DIR="../cef_binary_${CEF_BUILD_VERSION}_linux64" ..
7
obs-studio-26.0.2.tar.xz/CI/before-script-osx.sh -> obs-studio-26.1.0.tar.xz/CI/before-script-osx.sh Changed
8
 
1
@@ -13,6 +13,5 @@
2
 -DVLCPath=$PWD/../../vlc-3.0.8 \
3
 -DBUILD_BROWSER=ON \
4
 -DBROWSER_DEPLOY=ON \
5
--DBUILD_CAPTIONS=ON \
6
 -DWITH_RTMPS=ON \
7
 -DCEF_ROOT_DIR=$PWD/../../cef_binary_${CEF_BUILD_VERSION}_macosx64 ..
8
obs-studio-26.0.2.tar.xz/CI/full-build-macos.sh -> obs-studio-26.1.0.tar.xz/CI/full-build-macos.sh Changed
189
 
1
@@ -38,6 +38,7 @@
2
 CHECKOUT_DIR="$(git rev-parse --show-toplevel)"
3
 DEPS_BUILD_DIR="${CHECKOUT_DIR}/../obs-build-dependencies"
4
 BUILD_DIR="${BUILD_DIR:-build}"
5
+BUILD_CONFIG=${BUILD_CONFIG:-RelWithDebInfo}
6
 CI_SCRIPTS="${CHECKOUT_DIR}/CI/scripts/macos"
7
 CI_WORKFLOW="${CHECKOUT_DIR}/.github/workflows/main.yml"
8
 CI_CEF_VERSION=$(cat ${CI_WORKFLOW} | sed -En "s/[ ]+CEF_BUILD_VERSION: '([0-9]+)'/\1/p")
9
@@ -45,6 +46,7 @@
10
 CI_VLC_VERSION=$(cat ${CI_WORKFLOW} | sed -En "s/[ ]+VLC_VERSION: '([0-9\.]+)'/\1/p")
11
 CI_SPARKLE_VERSION=$(cat ${CI_WORKFLOW} | sed -En "s/[ ]+SPARKLE_VERSION: '([0-9\.]+)'/\1/p")
12
 CI_QT_VERSION=$(cat ${CI_WORKFLOW} | sed -En "s/[ ]+QT_VERSION: '([0-9\.]+)'/\1/p" | head -1)
13
+CI_MIN_MACOS_VERSION=$(cat ${CI_WORKFLOW} | sed -En "s/[ ]+MIN_MACOS_VERSION: '([0-9\.]+)'/\1/p")
14
 
15
 BUILD_DEPS=(
16
     "obs-deps ${MACOS_DEPS_VERSION:-${CI_DEPS_VERSION}}"
17
@@ -113,13 +115,32 @@
18
 }
19
 
20
 ## CHECK AND INSTALL DEPENDENCIES ##
21
+check_macos_version() {
22
+    MIN_VERSION=${MIN_MACOS_VERSION:-${CI_MIN_MACOS_VERSION}}
23
+    MIN_MAJOR=$(echo ${MIN_VERSION} | cut -d '.' -f 1)
24
+    MIN_MINOR=$(echo ${MIN_VERSION} | cut -d '.' -f 2)
25
+
26
+    if [ "${MACOS_MAJOR}" -lt "11" ] && [ "${MACOS_MINOR}" -lt "${MIN_MINOR}" ]; then
27
+        error "WARNING: Minimum required macOS version is ${MIN_VERSION}, but running on ${MACOS_VERSION}"
28
+    fi
29
+}
30
+
31
 install_homebrew_deps() {
32
     if ! exists brew; then
33
         error "Homebrew not found - please install homebrew (https://brew.sh)"
34
         exit 1
35
     fi
36
 
37
-    brew update
38
+    if [ -d /usr/local/opt/openssl@1.0.2t ]; then
39
+        brew uninstall openssl@1.0.2t
40
+        brew untap local/openssl
41
+    fi
42
+
43
+    if [ -d /usr/local/opt/python@2.7.17 ]; then
44
+        brew uninstall python@2.7.17
45
+        brew untap local/python2
46
+    fi
47
+
48
     brew bundle --file ${CI_SCRIPTS}/Brewfile
49
 
50
     check_curl
51
@@ -195,16 +216,14 @@
52
     tar -xf ./cef_binary_${1}_macosx64.tar.bz2
53
     cd ./cef_binary_${1}_macosx64
54
     step "Fix tests..."
55
-    # remove a broken test
56
     sed -i '.orig' '/add_subdirectory(tests\/ceftests)/d' ./CMakeLists.txt
57
-    # target 10.11
58
-    sed -i '.orig' s/\"10.9\"/\"10.11\"/ ./cmake/cef_variables.cmake
59
+    sed -i '.orig' s/\"10.9\"/\"${MIN_MACOS_VERSION:-${CI_MIN_MACOS_VERSION}}\"/ ./cmake/cef_variables.cmake
60
     ensure_dir ./build
61
     step "Run CMAKE..."
62
     cmake \
63
-        -DCMAKE_CXX_FLAGS="-std=c++11 -stdlib=libc++"\
64
+        -DCMAKE_CXX_FLAGS="-std=c++11 -stdlib=libc++ -Wno-deprecated-declarations"\
65
         -DCMAKE_EXE_LINKER_FLAGS="-std=c++11 -stdlib=libc++"\
66
-        -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11 \
67
+        -DCMAKE_OSX_DEPLOYMENT_TARGET=${MIN_MACOS_VERSION:-${CI_MIN_MACOS_VERSION}} \
68
         ..
69
     step "Build..."
70
     make -j4
71
@@ -251,7 +270,7 @@
72
 
73
     hr "Run CMAKE for OBS..."
74
     cmake -DENABLE_SPARKLE_UPDATER=ON \
75
-        -DCMAKE_OSX_DEPLOYMENT_TARGET=10.13 \
76
+        -DCMAKE_OSX_DEPLOYMENT_TARGET=${MIN_MACOS_VERSION:-${CI_MIN_MACOS_VERSION}} \
77
         -DDISABLE_PYTHON=ON  \
78
         -DQTDIR="/tmp/obsdeps" \
79
         -DSWIGDIR="/tmp/obsdeps" \
80
@@ -259,9 +278,9 @@
81
         -DVLCPath="${DEPS_BUILD_DIR}/vlc-${VLC_VERSION:-${CI_VLC_VERSION}}" \
82
         -DBUILD_BROWSER=ON \
83
         -DBROWSER_DEPLOY=ON \
84
-        -DBUILD_CAPTIONS=ON \
85
         -DWITH_RTMPS=ON \
86
         -DCEF_ROOT_DIR="${DEPS_BUILD_DIR}/cef_binary_${CEF_BUILD_VERSION:-${CI_CEF_VERSION}}_macosx64" \
87
+        -DCMAKE_BUILD_TYPE="${BUILD_CONFIG}" \
88
         ..
89
 
90
 }
91
@@ -287,9 +306,10 @@
92
     ${CI_SCRIPTS}/app/dylibbundler -cd -of -a ./OBS.app -q -f \
93
         -s ./OBS.app/Contents/MacOS \
94
         -s "${DEPS_BUILD_DIR}/sparkle/Sparkle.framework" \
95
-        -s ./rundir/RelWithDebInfo/bin/ \
96
+        -s ./rundir/${BUILD_CONFIG}/bin/ \
97
         -x ./OBS.app/Contents/PlugIns/coreaudio-encoder.so \
98
         -x ./OBS.app/Contents/PlugIns/decklink-ouput-ui.so \
99
+        -x ./OBS.app/Contents/PlugIns/decklink-captions.so \
100
         -x ./OBS.app/Contents/PlugIns/frontend-tools.so \
101
         -x ./OBS.app/Contents/PlugIns/image-source.so \
102
         -x ./OBS.app/Contents/PlugIns/linux-jack.so \
103
@@ -298,6 +318,7 @@
104
         -x ./OBS.app/Contents/PlugIns/mac-decklink.so \
105
         -x ./OBS.app/Contents/PlugIns/mac-syphon.so \
106
         -x ./OBS.app/Contents/PlugIns/mac-vth264.so \
107
+        -x ./OBS.app/Contents/PlugIns/mac-virtualcam.so \
108
         -x ./OBS.app/Contents/PlugIns/obs-browser.so \
109
         -x ./OBS.app/Contents/PlugIns/obs-browser-page \
110
         -x ./OBS.app/Contents/PlugIns/obs-ffmpeg.so \
111
@@ -312,7 +333,12 @@
112
         -x ./OBS.app/Contents/PlugIns/obs-libfdk.so \
113
         -x ./OBS.app/Contents/PlugIns/obs-outputs.so
114
     step "Move libobs-opengl to final destination"
115
-    cp ./libobs-opengl/libobs-opengl.so ./OBS.app/Contents/Frameworks
116
+
117
+    if [ -f "./libobs-opengl/libobs-opengl.so" ]; then
118
+        cp ./libobs-opengl/libobs-opengl.so ./OBS.app/Contents/Frameworks
119
+    else
120
+        cp ./libobs-opengl/${BUILD_CONFIG}/libobs-opengl.so ./OBS.app/Contents/Frameworks
121
+    fi
122
 
123
     step "Copy QtNetwork for plugin support"
124
     cp -R /tmp/obsdeps/lib/QtNetwork.framework ./OBS.app/Contents/Frameworks
125
@@ -334,14 +360,14 @@
126
 
127
     hr "Adding Chromium Embedded Framework"
128
     step "Copy Framework..."
129
-    sudo cp -R "${DEPS_BUILD_DIR}/cef_binary_${CEF_BUILD_VERSION:-${CI_CEF_VERSION}}_macosx64/Release/Chromium Embedded Framework.framework" ./OBS.app/Contents/Frameworks/
130
-    sudo chown -R $(whoami) ./OBS.app/Contents/Frameworks/
131
+    cp -R "${DEPS_BUILD_DIR}/cef_binary_${CEF_BUILD_VERSION:-${CI_CEF_VERSION}}_macosx64/Release/Chromium Embedded Framework.framework" ./OBS.app/Contents/Frameworks/
132
+    chown -R $(whoami) ./OBS.app/Contents/Frameworks/
133
 }
134
 
135
 prepare_macos_bundle() {
136
     ensure_dir "${CHECKOUT_DIR}/${BUILD_DIR}"
137
 
138
-    if [ ! -d ./rundir/RelWithDebInfo/bin ]; then
139
+    if [ ! -d ./rundir/${BUILD_CONFIG}/bin ]; then
140
         error "No OBS build found"
141
         return
142
     fi
143
@@ -354,12 +380,12 @@
144
     mkdir OBS.app/Contents/PlugIns
145
     mkdir OBS.app/Contents/Resources
146
 
147
-    cp rundir/RelWithDebInfo/bin/obs ./OBS.app/Contents/MacOS
148
-    cp rundir/RelWithDebInfo/bin/obs-ffmpeg-mux ./OBS.app/Contents/MacOS
149
-    cp rundir/RelWithDebInfo/bin/libobsglad.0.dylib ./OBS.app/Contents/MacOS
150
-    cp -R rundir/RelWithDebInfo/data ./OBS.app/Contents/Resources
151
-    cp ${CI_SCRIPTS}/app/obs.icns ./OBS.app/Contents/Resources
152
-    cp -R rundir/RelWithDebInfo/obs-plugins/ ./OBS.app/Contents/PlugIns
153
+    cp rundir/${BUILD_CONFIG}/bin/obs ./OBS.app/Contents/MacOS
154
+    cp rundir/${BUILD_CONFIG}/bin/obs-ffmpeg-mux ./OBS.app/Contents/MacOS
155
+    cp rundir/${BUILD_CONFIG}/bin/libobsglad.0.dylib ./OBS.app/Contents/MacOS
156
+    cp -R rundir/${BUILD_CONFIG}/data ./OBS.app/Contents/Resources
157
+    cp ${CI_SCRIPTS}/app/AppIcon.icns ./OBS.app/Contents/Resources
158
+    cp -R rundir/${BUILD_CONFIG}/obs-plugins/ ./OBS.app/Contents/PlugIns
159
     cp ${CI_SCRIPTS}/app/Info.plist ./OBS.app/Contents
160
     # Scripting plugins are required to be placed in same directory as binary
161
     if [ -d ./OBS.app/Contents/Resources/data/obs-scripting ]; then
162
@@ -483,6 +509,11 @@
163
     codesign --force --options runtime --sign "${CODESIGN_IDENT}" --deep "./OBS.app/Contents/Frameworks/Chromium Embedded Framework.framework"
164
     echo -n "${COLOR_RESET}"
165
 
166
+    step "Code-sign DAL Plugin..."
167
+    echo -n "${COLOR_ORANGE}"
168
+    codesign --force --options runtime --deep --sign "${CODESIGN_IDENT}" "./OBS.app/Contents/Resources/data/obs-mac-virtualcam.plugin"
169
+    echo -n "${COLOR_RESET}"
170
+
171
     step "Code-sign OBS code..."
172
     echo -n "${COLOR_ORANGE}"
173
     codesign --force --options runtime --entitlements "${CI_SCRIPTS}/app/entitlements.plist" --sign "${CODESIGN_IDENT}" --deep ./OBS.app
174
@@ -603,6 +634,7 @@
175
 
176
 obs-build-main() {
177
     ensure_dir ${CHECKOUT_DIR}
178
+    check_macos_version
179
     step "Fetching OBS tags..."
180
     git fetch origin --tags
181
     GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
182
@@ -647,4 +679,4 @@
183
     cleanup
184
 }
185
 
186
-obs-build-main $*
187
\ No newline at end of file
188
+obs-build-main $*
189
obs-studio-26.0.2.tar.xz/CI/install-dependencies-linux.sh -> obs-studio-26.1.0.tar.xz/CI/install-dependencies-linux.sh Changed
12
 
1
@@ -43,7 +43,9 @@
2
         python3-dev \
3
         qtbase5-dev \
4
         libqt5svg5-dev \
5
-        swig
6
+        swig \
7
+        linux-generic \
8
+        v4l2loopback-dkms
9
 
10
 # build cef
11
 wget --quiet --retry-connrefused --waitretry=1 https://cdn-fastly.obsproject.com/downloads/cef_binary_${CEF_BUILD_VERSION}_linux64.tar.bz2
12
obs-studio-26.0.2.tar.xz/CI/install-script-win.cmd -> obs-studio-26.1.0.tar.xz/CI/install-script-win.cmd Changed
23
 
1
@@ -14,16 +14,17 @@
2
 set CEF_32=%CD%\CEF_32\cef_binary_%CEF_VERSION%_windows32_minimal
3
 set CEF_64=%CD%\CEF_64\cef_binary_%CEF_VERSION%_windows64_minimal
4
 set build_config=RelWithDebInfo
5
+set VIRTUALCAM-GUID=A3FCE0F5-3493-419F-958A-ABA1250EC20B
6
 mkdir build build32 build64
7
 if "%TWITCH-CLIENTID%"=="$(twitch_clientid)" (
8
 cd ./build32
9
-cmake -G "Visual Studio 16 2019" -A Win32 -DCMAKE_SYSTEM_VERSION=10.0 -DCOPIED_DEPENDENCIES=false -DCOPY_DEPENDENCIES=true -DENABLE_VLC=ON -DBUILD_CAPTIONS=true -DCOMPILE_D3D12_HOOK=true -DBUILD_BROWSER=true -DCEF_ROOT_DIR=%CEF_32% ..
10
+cmake -G "Visual Studio 16 2019" -A Win32 -DCMAKE_SYSTEM_VERSION=10.0 -DCOPIED_DEPENDENCIES=false -DCOPY_DEPENDENCIES=true -DENABLE_VLC=ON -DCOMPILE_D3D12_HOOK=true -DBUILD_BROWSER=true -DCEF_ROOT_DIR=%CEF_32% -DVIRTUALCAM_GUID="%VIRTUALCAM-GUID%" ..
11
 cd ../build64
12
-cmake -G "Visual Studio 16 2019" -A x64 -DCMAKE_SYSTEM_VERSION=10.0 -DCOPIED_DEPENDENCIES=false -DCOPY_DEPENDENCIES=true -DENABLE_VLC=ON -DBUILD_CAPTIONS=true -DCOMPILE_D3D12_HOOK=true -DBUILD_BROWSER=true -DCEF_ROOT_DIR=%CEF_64% ..
13
+cmake -G "Visual Studio 16 2019" -A x64 -DCMAKE_SYSTEM_VERSION=10.0 -DCOPIED_DEPENDENCIES=false -DCOPY_DEPENDENCIES=true -DENABLE_VLC=ON -DCOMPILE_D3D12_HOOK=true -DBUILD_BROWSER=true -DCEF_ROOT_DIR=%CEF_64% -DVIRTUALCAM_GUID="%VIRTUALCAM-GUID%" ..
14
 ) else (
15
 cd ./build32
16
-cmake -G "Visual Studio 16 2019" -A Win32 -DCMAKE_SYSTEM_VERSION=10.0 -DCOPIED_DEPENDENCIES=false -DCOPY_DEPENDENCIES=true -DENABLE_VLC=ON -DBUILD_CAPTIONS=true -DCOMPILE_D3D12_HOOK=true -DBUILD_BROWSER=true -DCEF_ROOT_DIR=%CEF_32% -DTWITCH_CLIENTID="%TWITCH-CLIENTID%" -DTWITCH_HASH="%TWITCH-HASH%" -DRESTREAM_CLIENTID="%RESTREAM-CLIENTID%" -DRESTREAM_HASH="%RESTREAM-HASH%" ..
17
+cmake -G "Visual Studio 16 2019" -A Win32 -DCMAKE_SYSTEM_VERSION=10.0 -DCOPIED_DEPENDENCIES=false -DCOPY_DEPENDENCIES=true -DENABLE_VLC=ON -DCOMPILE_D3D12_HOOK=true -DBUILD_BROWSER=true -DCEF_ROOT_DIR=%CEF_32% -DTWITCH_CLIENTID="%TWITCH-CLIENTID%" -DTWITCH_HASH="%TWITCH-HASH%" -DRESTREAM_CLIENTID="%RESTREAM-CLIENTID%" -DRESTREAM_HASH="%RESTREAM-HASH%" -DVIRTUALCAM_GUID="%VIRTUALCAM-GUID%" ..
18
 cd ../build64
19
-cmake -G "Visual Studio 16 2019" -A x64 -DCMAKE_SYSTEM_VERSION=10.0 -DCOPIED_DEPENDENCIES=false -DCOPY_DEPENDENCIES=true -DENABLE_VLC=ON -DBUILD_CAPTIONS=true -DCOMPILE_D3D12_HOOK=true -DBUILD_BROWSER=true -DCEF_ROOT_DIR=%CEF_64% -DTWITCH_CLIENTID="%TWITCH-CLIENTID%" -DTWITCH_HASH="%TWITCH-HASH%"  -DRESTREAM_CLIENTID="%RESTREAM-CLIENTID%" -DRESTREAM_HASH="%RESTREAM-HASH%" ..
20
+cmake -G "Visual Studio 16 2019" -A x64 -DCMAKE_SYSTEM_VERSION=10.0 -DCOPIED_DEPENDENCIES=false -DCOPY_DEPENDENCIES=true -DENABLE_VLC=ON -DCOMPILE_D3D12_HOOK=true -DBUILD_BROWSER=true -DCEF_ROOT_DIR=%CEF_64% -DTWITCH_CLIENTID="%TWITCH-CLIENTID%" -DTWITCH_HASH="%TWITCH-HASH%"  -DRESTREAM_CLIENTID="%RESTREAM-CLIENTID%" -DRESTREAM_HASH="%RESTREAM-HASH%" -DVIRTUALCAM_GUID="%VIRTUALCAM-GUID%" ..
21
 )
22
 cd ..
23
obs-studio-26.1.0.tar.xz/CI/scripts/macos/app/AppIcon.icns Added
obs-studio-26.0.2.tar.xz/CI/scripts/macos/app/Info.plist -> obs-studio-26.1.0.tar.xz/CI/scripts/macos/app/Info.plist Changed
19
 
1
@@ -3,7 +3,7 @@
2
 <plist version="1.0">
3
 <dict>
4
    <key>CFBundleIconFile</key>
5
-   <string>obs.icns</string>
6
+   <string>AppIcon.icns</string>
7
    <key>CFBundleName</key>
8
    <string>OBS</string>
9
    <key>CFBundleGetInfoString</key>
10
@@ -15,7 +15,7 @@
11
    <key>CFBundlePackageType</key>
12
    <string>APPL</string>
13
    <key>LSMinimumSystemVersion</key>
14
-   <string>10.8.5</string>
15
+   <string>10.13.0</string>
16
    <key>NSHighResolutionCapable</key>
17
    <true/>
18
    <key>LSAppNapIsDisabled</key>
19
obs-studio-26.1.0.tar.xz/CI/scripts/macos/app/big_sur_icon_template.psd Added
obs-studio-26.0.2.tar.xz/CI/scripts/macos/package/settings.json.template -> obs-studio-26.1.0.tar.xz/CI/scripts/macos/package/settings.json.template Changed
10
 
1
@@ -1,7 +1,7 @@
2
 {
3
     "title": "OBS-Studio $$VERSION$$",
4
     "background": "$$CI_PATH$$/package/background.tiff",
5
-    "icon": "$$CI_PATH$$/app/obs.icns",
6
+    "icon": "$$CI_PATH$$/app/AppIcon.icns",
7
     "format": "ULFO",
8
     "icon-size": 96,
9
     "window": {
10
obs-studio-26.0.2.tar.xz/CMakeLists.txt -> obs-studio-26.1.0.tar.xz/CMakeLists.txt Changed
10
 
1
@@ -7,7 +7,7 @@
2
 
3
 project(obs-studio)
4
 
5
-option(BUILD_CAPTIONS "Build captions" FALSE)
6
+option(DEBUG_FFMPEG_MUX "Debug FFmpeg muxer subprocess" FALSE)
7
 
8
 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
9
 
10
obs-studio-26.0.2.tar.xz/CONTRIBUTING.rst -> obs-studio-26.1.0.tar.xz/CONTRIBUTING.rst Changed
15
 
1
@@ -5,10 +5,10 @@
2
 ----------------------------
3
 
4
  - Compiling and building OBS Studio:
5
-   https://github.com/jp9000/obs-studio/wiki/Install-Instructions
6
+   https://github.com/obsproject/obs-studio/wiki/Install-Instructions
7
 
8
- - Our bug tracker (linked to forum accounts):
9
-   https://obsproject.com/mantis/
10
+ - Our bug tracker:
11
+   https://github.com/obsproject/obs-studio/issues
12
 
13
  - Discord Server: https://obsproject.com/discord
14
 
15
obs-studio-26.0.2.tar.xz/UI/CMakeLists.txt -> obs-studio-26.1.0.tar.xz/UI/CMakeLists.txt Changed
39
 
1
@@ -81,7 +81,6 @@
2
 add_definitions(${LIBCURL_DEFINITIONS})
3
 
4
 if(WIN32)
5
-   include_directories(${OBS_JANSSON_INCLUDE_DIRS})
6
    include_directories(${BLAKE2_INCLUDE_DIR})
7
 
8
    set(obs_PLATFORM_SOURCES
9
@@ -96,8 +95,7 @@
10
        win-update/win-update-helpers.hpp)
11
    set(obs_PLATFORM_LIBRARIES
12
        crypt32
13
-       blake2
14
-       ${OBS_JANSSON_IMPORT})
15
+       blake2)
16
 
17
    if(CMAKE_SIZEOF_VOID_P EQUAL 4)
18
        set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
19
@@ -132,6 +130,11 @@
20
 
21
         set(obs_PLATFORM_LIBRARIES
22
                 Qt5::X11Extras)
23
+
24
+   if("${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD")
25
+       list(APPEND obs_PLATFORM_LIBRARIES
26
+           procstat)
27
+   endif()
28
 endif()
29
 
30
 if(BROWSER_AVAILABLE_INTERNAL)
31
@@ -345,7 +348,6 @@
32
    forms/source-toolbar/color-source-toolbar.ui
33
    forms/source-toolbar/text-source-toolbar.ui
34
    forms/source-toolbar/media-controls.ui
35
-   forms/NameDialog.ui
36
    forms/AutoConfigStartPage.ui
37
    forms/AutoConfigVideoPage.ui
38
    forms/AutoConfigStreamPage.ui
39
obs-studio-26.0.2.tar.xz/UI/adv-audio-control.cpp -> obs-studio-26.1.0.tar.xz/UI/adv-audio-control.cpp Changed
113
 
1
@@ -22,7 +22,7 @@
2
 {
3
    QHBoxLayout *hlayout;
4
    signal_handler_t *handler = obs_source_get_signal_handler(source);
5
-   const char *sourceName = obs_source_get_name(source);
6
+   QString sourceName = QT_UTF8(obs_source_get_name(source));
7
    float vol = obs_source_get_volume(source);
8
    uint32_t flags = obs_source_get_flags(source);
9
    uint32_t mixers = obs_source_get_audio_mixers(source);
10
@@ -90,7 +90,7 @@
11
    iconLabel->setFixedSize(16, 16);
12
    iconLabel->setStyleSheet("background: none");
13
 
14
-   nameLabel->setText(QT_UTF8(sourceName));
15
+   nameLabel->setText(sourceName);
16
    nameLabel->setAlignment(Qt::AlignVCenter);
17
 
18
    bool isActive = obs_source_active(source);
19
@@ -100,7 +100,7 @@
20
        setThemeID(active, "error");
21
    activeContainer->layout()->addWidget(active);
22
    activeContainer->layout()->setAlignment(active, Qt::AlignVCenter);
23
-   activeContainer->setFixedWidth(50);
24
+   activeContainer->setFixedWidth(120);
25
 
26
    volume->setMinimum(MIN_DB - 0.1);
27
    volume->setMaximum(MAX_DB);
28
@@ -109,15 +109,21 @@
29
    volume->setSuffix(" dB");
30
    volume->setValue(obs_mul_to_db(vol));
31
    volume->setFixedWidth(100);
32
+   volume->setAccessibleName(
33
+       QTStr("Basic.AdvAudio.VolumeSource").arg(sourceName));
34
 
35
-   if (volume->value() < MIN_DB)
36
+   if (volume->value() < MIN_DB) {
37
        volume->setSpecialValueText("-inf dB");
38
+       volume->setAccessibleDescription("-inf dB");
39
+   }
40
 
41
    percent->setMinimum(0);
42
    percent->setMaximum(2000);
43
    percent->setSuffix("%");
44
    percent->setValue((int)(obs_source_get_volume(source) * 100.0f));
45
    percent->setFixedWidth(100);
46
+   percent->setAccessibleName(
47
+       QTStr("Basic.AdvAudio.VolumeSource").arg(sourceName));
48
 
49
    stackedWidget->addWidget(volume);
50
    stackedWidget->addWidget(percent);
51
@@ -128,6 +134,8 @@
52
    SetVolumeWidget(volType);
53
 
54
    forceMono->setChecked((flags & OBS_SOURCE_FLAG_FORCE_MONO) != 0);
55
+   forceMono->setAccessibleName(
56
+       QTStr("Basic.AdvAudio.MonoSource").arg(sourceName));
57
 
58
    forceMonoContainer->layout()->addWidget(forceMono);
59
    forceMonoContainer->layout()->setAlignment(forceMono, Qt::AlignVCenter);
60
@@ -138,6 +146,8 @@
61
    balance->setMaximum(100);
62
    balance->setTickPosition(QSlider::TicksAbove);
63
    balance->setTickInterval(50);
64
+   balance->setAccessibleName(
65
+       QTStr("Basic.AdvAudio.BalanceSource").arg(sourceName));
66
 
67
    const char *speakers =
68
        config_get_string(main->Config(), "Audio", "ChannelSetup");
69
@@ -156,6 +166,8 @@
70
    syncOffset->setSuffix(" ms");
71
    syncOffset->setValue(int(cur_sync / NSEC_PER_MSEC));
72
    syncOffset->setFixedWidth(100);
73
+   syncOffset->setAccessibleName(
74
+       QTStr("Basic.AdvAudio.SyncOffsetSource").arg(sourceName));
75
 
76
    int idx;
77
 #if defined(_WIN32) || defined(__APPLE__) || HAVE_PULSEAUDIO
78
@@ -168,20 +180,34 @@
79
    int mt = (int)obs_source_get_monitoring_type(source);
80
    idx = monitoringType->findData(mt);
81
    monitoringType->setCurrentIndex(idx);
82
+   monitoringType->setAccessibleName(
83
+       QTStr("Basic.AdvAudio.MonitoringSource").arg(sourceName));
84
 #endif
85
 
86
    mixer1->setText("1");
87
    mixer1->setChecked(mixers & (1 << 0));
88
+   mixer1->setAccessibleName(
89
+       QTStr("Basic.Settings.Output.Adv.Audio.Track1"));
90
    mixer2->setText("2");
91
    mixer2->setChecked(mixers & (1 << 1));
92
+   mixer2->setAccessibleName(
93
+       QTStr("Basic.Settings.Output.Adv.Audio.Track2"));
94
    mixer3->setText("3");
95
    mixer3->setChecked(mixers & (1 << 2));
96
+   mixer3->setAccessibleName(
97
+       QTStr("Basic.Settings.Output.Adv.Audio.Track3"));
98
    mixer4->setText("4");
99
    mixer4->setChecked(mixers & (1 << 3));
100
+   mixer4->setAccessibleName(
101
+       QTStr("Basic.Settings.Output.Adv.Audio.Track4"));
102
    mixer5->setText("5");
103
    mixer5->setChecked(mixers & (1 << 4));
104
+   mixer5->setAccessibleName(
105
+       QTStr("Basic.Settings.Output.Adv.Audio.Track5"));
106
    mixer6->setText("6");
107
    mixer6->setChecked(mixers & (1 << 5));
108
+   mixer6->setAccessibleName(
109
+       QTStr("Basic.Settings.Output.Adv.Audio.Track6"));
110
 
111
    speaker_layout sl = obs_source_get_speaker_layout(source);
112
 
113
obs-studio-26.0.2.tar.xz/UI/context-bar-controls.cpp -> obs-studio-26.1.0.tar.xz/UI/context-bar-controls.cpp Changed
34
 
1
@@ -96,14 +96,6 @@
2
    return cur_idx;
3
 }
4
 
5
-static void SetComboItemDisabled(QComboBox *c, int idx)
6
-{
7
-   QStandardItemModel *model =
8
-       dynamic_cast<QStandardItemModel *>(c->model());
9
-   QStandardItem *item = model->item(idx);
10
-   item->setFlags(Qt::NoItemFlags);
11
-}
12
-
13
 void UpdateSourceComboToolbarProperties(QComboBox *combo, OBSSource source,
14
                    obs_properties_t *props,
15
                    const char *prop_name, bool is_int)
16
@@ -131,7 +123,7 @@
17
            cur_idx = 0;
18
        }
19
 
20
-       SetComboItemDisabled(combo, cur_idx);
21
+       SetComboItemEnabled(combo, cur_idx, false);
22
    }
23
 
24
    combo->setCurrentIndex(cur_idx);
25
@@ -345,7 +337,7 @@
26
    ui->window->blockSignals(false);
27
 
28
    if (cur_idx != -1 && obs_property_list_item_disabled(p, cur_idx)) {
29
-       SetComboItemDisabled(ui->window, cur_idx);
30
+       SetComboItemEnabled(ui->window, cur_idx, false);
31
    }
32
 
33
    UpdateWindowVisibility();
34
obs-studio-26.0.2.tar.xz/UI/data/locale.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale.ini Changed
11
 
1
@@ -174,3 +174,9 @@
2
 
3
 [id-ID]
4
 Name=Bahasa Indonesia
5
+
6
+[eo-UY]
7
+Name=Esperanto
8
+
9
+[kab-KAB]
10
+Name=Taglizit
11
obs-studio-26.0.2.tar.xz/UI/data/locale/af-ZA.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/af-ZA.ini Changed
6
 
1
@@ -114,3 +114,4 @@
2
 
3
 
4
 
5
+
6
obs-studio-26.0.2.tar.xz/UI/data/locale/ar-SA.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/ar-SA.ini Changed
111
 
1
@@ -161,6 +161,7 @@
2
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="إلغاء ربط الحساب؟"
3
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="هذا التغيير سيتم تطبيقه مباشرة. هل أنت متأكد من أنك تريد إلغاء ربط حسابك؟"
4
 Basic.AutoConfig.StreamPage.GetStreamKey="جلب مفتاح البث"
5
+Basic.AutoConfig.StreamPage.MoreInfo="مزيد من المعلومات"
6
 Basic.AutoConfig.StreamPage.UseStreamKey="استخدم مفتاح البث"
7
 Basic.AutoConfig.StreamPage.Service="خدمة"
8
 Basic.AutoConfig.StreamPage.Service.ShowAll="عرض الكل..."
9
@@ -365,8 +366,6 @@
10
 Deinterlacing.TopFieldFirst="أعلى الحقل الأول"
11
 Deinterlacing.BottomFieldFirst="أسفل الحقل الأول"
12
 
13
-VolControl.SliderUnmuted="حجم شريط التمرير ل '%1': %2"
14
-VolControl.SliderMuted="حجم شريط التمرير ل '%1': %2 (كتم)"
15
 VolControl.Mute="كتم الصوت '%1'"
16
 VolControl.Properties="خصائص ل '%1'"
17
 
18
@@ -382,6 +381,7 @@
19
 
20
 AddProfile.Title="إضافة ملف تعريف"
21
 AddProfile.Text="الرجاء إدخال اسم الملف التعريفي"
22
+AddProfile.WizardCheckbox="معالج التكوين التلقائي"
23
 
24
 RenameProfile.Title="إعادة تسمية الملف التعريفي"
25
 
26
@@ -396,6 +396,9 @@
27
 Basic.SourceSelect.AddExisting="إضافة عنصر موجود"
28
 Basic.SourceSelect.AddVisible="جعل المصدر ظاهراً"
29
 
30
+Basic.Main.Sources.Visibility="الرؤية"
31
+Basic.Main.Sources.Lock="قفل"
32
+
33
 Basic.PropertiesWindow="خصائص ل '%1'"
34
 Basic.PropertiesWindow.AutoSelectFormat="%1 (اختيار تلقائي: %2)"
35
 Basic.PropertiesWindow.SelectColor="تحديد اللون"
36
@@ -608,15 +611,26 @@
37
 Basic.Settings.General.SwitchOnDoubleClick="الانتقال إلى المشهد عند النقر المزدوج"
38
 Basic.Settings.General.StudioPortraitLayout="تمكين التخطيط العامودي/الرأسي"
39
 Basic.Settings.General.TogglePreviewProgramLabels="إظهار تسميات المعاينة/البرنامج"
40
+Basic.Settings.General.Multiview="عرض متعدد"
41
+Basic.Settings.General.Multiview.MouseSwitch="انقر للتبديل بين المشاهد"
42
 Basic.Settings.General.Multiview.DrawSourceNames="إظهار أسماء المشهد"
43
+Basic.Settings.General.Multiview.DrawSafeAreas="رسم مناطق آمنة (EBU R 95)"
44
 
45
 Basic.Settings.Stream="بث"
46
 Basic.Settings.Stream.StreamType="نوع البث"
47
+Basic.Settings.Stream.Custom.UseAuthentication="استخدام المصادقة"
48
 Basic.Settings.Stream.Custom.Username="اسم المستخدم"
49
 Basic.Settings.Stream.Custom.Password="كلمة السر"
50
+Basic.Settings.Stream.TTVAddon="Twitch إضافات المحادثة"
51
 Basic.Settings.Stream.TTVAddon.None="بدون"
52
 Basic.Settings.Stream.MissingSettingAlert="إعداد البث مفقود"
53
 Basic.Settings.Stream.StreamSettingsWarning="فتح الإعدادات"
54
+Basic.Settings.Stream.IgnoreRecommended="تجاهل توصيات إعداد خدمات البث"
55
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="تجاوز الإعدادات الموصى بها"
56
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="تحذير: تجاهل قيود الخدمة قد يؤدي إلى تدهور جودة البث أو منعك من البث.\n\nالمتابعة؟"
57
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="الحد الأقصى للفيديو: %1 كيلو بايت"
58
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="أقصى معدل للصوت: %1 كيلو بايت"
59
+Basic.Settings.Stream.Recommended.MaxFPS="الحد الأقصى من FPS: %1"
60
 
61
 Basic.Settings.Output="المخرج"
62
 Basic.Settings.Output.Format="صيغة التسجيل"
63
@@ -627,27 +641,37 @@
64
 Basic.Settings.Output.Mode.Simple="بسيط"
65
 Basic.Settings.Output.Mode.Adv="متقدم"
66
 Basic.Settings.Output.Mode.FFmpeg="مخرج FFmpeg"
67
+Basic.Settings.Output.ReplayBuffer.Suffix="اللاحق"
68
 Basic.Settings.Output.Simple.SavePath="مسار التسجيل"
69
 Basic.Settings.Output.Simple.RecordingQuality="جودة التسجيل"
70
 Basic.Settings.Output.Simple.RecordingQuality.Small="جودة عالية، حجم ملف متوسط"
71
 Basic.Settings.Output.Simple.RecordingQuality.HQ="جودة لا تُميز، حجم ملف كبير"
72
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="جودة غير فقودة، حجم ملف كبير بشكل هائل"
73
+Basic.Settings.Output.Simple.Warn.VideoBitrate="تحذير: سيتم تعيين معدل بث الفيديو إلى %1، وهو الحد الأعلى لخدمة البث الحالية."
74
 Basic.Settings.Output.Simple.Warn.Lossless.Msg="هل أنت متأكد أنك تريد استخدام الجودة الغير فقودة؟"
75
 Basic.Settings.Output.Simple.Warn.Lossless.Title="تحذير الجودة الغير فقودة!"
76
 Basic.Settings.Output.Simple.Encoder.Software="برمجية (x264)"
77
 Basic.Settings.Output.Simple.Encoder.Hardware.QSV="عتاد (QSV)"
78
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="عتاد (NVENC)"
79
+Basic.Settings.Output.Simple.TwitchVodTrack="تويتر مسار VOD (استخدم المسار 2)"
80
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="دقة / معدل إطار غير متوافق"
81
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="الدقة: %1"
82
 Basic.Settings.Output.VideoBitrate="معدل البت للفيديو"
83
 Basic.Settings.Output.AudioBitrate="معدل البت للصوت"
84
 Basic.Settings.Output.Reconnect="إعادة الاتصال تلقائياً"
85
 Basic.Settings.Output.MaxRetries="أقصى عدد للمحاولات"
86
 
87
+Basic.Settings.Output.Adv.AudioTrack="مقطع صوتي"
88
 Basic.Settings.Output.Adv.Streaming="البث"
89
-Basic.Settings.Output.Adv.ApplyServiceSettings="فرض إعدادات الترميز الخاصة بمنصة البث"
90
 Basic.Settings.Output.Adv.Audio.Track1="المسار 1"
91
 Basic.Settings.Output.Adv.Audio.Track2="المسار 2"
92
 Basic.Settings.Output.Adv.Audio.Track3="المسار 3"
93
+Basic.Settings.Output.Adv.Audio.Track4="المسار 4"
94
+Basic.Settings.Output.Adv.Audio.Track5="المسار 5"
95
+Basic.Settings.Output.Adv.Audio.Track6="المسار 6"
96
 
97
+Basic.Settings.Output.Adv.Recording="جارٍ التسجيل"
98
+Basic.Settings.Output.Adv.Recording.Type="النّوع"
99
 Basic.Settings.Output.Adv.Recording.Type.Standard="قياسي"
100
 Basic.Settings.Output.Adv.FFmpeg.Type.URL="التصدير إلى رابط URL"
101
 Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile="التصدير إلى ملف"
102
@@ -715,6 +739,8 @@
103
 Basic.Settings.Advanced.Video.ColorRange.Full="كامل"
104
 
105
 Basic.AdvAudio.ActiveOnly="المصادر الفعّالة فقط"
106
+Basic.AdvAudio.Name="الاسم"
107
+Basic.AdvAudio.VolumeSource="حجم ل '%1'"
108
 
109
 
110
 
111
obs-studio-26.0.2.tar.xz/UI/data/locale/az-AZ.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/az-AZ.ini Changed
229
 
1
@@ -37,6 +37,7 @@
2
 SourceWindow="Pəncərəli Projektor (Mənbə)"
3
 MultiviewProjector="Çoxlu baxış (Tam ekran)"
4
 MultiviewWindowed="Çoxlu baxış (Pəncərəli)"
5
+ResizeProjectorWindowToContent="Pəncərəni məzmuna uyğunlaşdır"
6
 Clear="Təmizlə"
7
 Revert="Geri qaytar"
8
 Show="Göstər"
9
@@ -49,6 +50,9 @@
10
 DisableOSXVSync="macOS V-Sync-i sıradan çıxart"
11
 ResetOSXVSyncOnExit="macOS V-Sync-i Çıxışda Sıfırla"
12
 HighResourceUsage="Kodlama həddindən artıq yükləndi! Video tənzimləmələrini azaltmağı və ya daha sürətli kodlama ön tənzimini istifadə etməyi düşünün."
13
+Transition="Keçid"
14
+QuickTransitions="Cəld Keçidlər"
15
+FadeToBlack="Qara rəngə solma"
16
 Left="Sol"
17
 Right="Sa]"
18
 Top="Üst"
19
@@ -65,9 +69,12 @@
20
 Paste="Yapışdır"
21
 PasteReference="Yapışdır (İstinad)"
22
 PasteDuplicate="Yapışdır (Çoxalt)"
23
+RemuxRecordings="Qeydləri remux et"
24
 Next="Növbəti"
25
 Back="Geri"
26
 Defaults="İlkin"
27
+HideMixer="Mikserdə gizlət"
28
+TransitionOverride="Keçidə əhəmiyyət vermə"
29
 None="Heç biri"
30
 StudioMode.Preview="Önbaxış"
31
 StudioMode.Program="Proqram"
32
@@ -77,13 +84,28 @@
33
 DoNotShowAgain="Təkrar göstərmə"
34
 Default="(İlkin)"
35
 Calculating="Hesablanır..."
36
+Fullscreen="Tam ekran"
37
+Windowed="Pəncərəli"
38
+Percent="Faiz"
39
+RefreshBrowser="Təzələ"
40
+AspectRatio="Əmsal nisbəti <b>%1:%2</b>"
41
+LockVolume="Səs həcmini kilidlə"
42
+LogViewer="Jurnal bax"
43
+ShowOnStartup="Başlanğıcda göstər"
44
 OpenFile="Faylı aç"
45
+AddValue="%1 əlavə et"
46
 
47
 AlreadyRunning.Title="OBS artıq işləyir"
48
+AlreadyRunning.Text="OBS artıq işləyir! Bunu etmək istəmirsinizsə, zəhmət olmasa yeni bir nümunəni işlətməyi sınamazdan əvvəl bütün mövcud OBS nümunələrini söndürün. OBS-i sistem sinisinə kiçilməsi üçün tənzimləmisinizsə, zəhmət olmasa işlədiyini görmək üçün yoxlayın."
49
 AlreadyRunning.LaunchAnyway="Yenə də başlat"
50
 
51
+ChromeOS.Title="Dəstəklənməyən platform"
52
+ChromeOS.Text="OBS ChromeOS konteyneri içində işləyir kimi görünür. Bu platform dəstəklənmir"
53
 
54
+DockCloseWarning.Title="Qoşulan pəncərəni bağla"
55
+DockCloseWarning.Text="İndicə qoşulan pəncərəni bağladınız. Əgər yenidən göstərmək istəyirsinizsə, Menyu sətrindəki Bax → Yuvalar bölməsinə gedin."
56
 
57
+ExtraBrowsers="Özəl Səyyah Yuvaları"
58
 
59
 Auth.Authing.Title="Kimlik təsdiqlənir..."
60
 Auth.Authing.Text="%1 ilə təsdiqlənir, zəhmət olmasa gözləyin..."
61
@@ -250,11 +272,15 @@
62
 
63
 
64
 
65
+Basic.MainMenu.View="Bax (&V)"
66
 
67
 
68
 
69
+Basic.MainMenu.Help.Logs.ViewCurrentLog="Hazırki jurnala bax (&V)"
70
 
71
 
72
+Basic.Settings.General.Preview="Önbaxış"
73
+
74
 Basic.Settings.Stream.TTVAddon.None="Heç biri"
75
 
76
 
77
@@ -269,28 +295,128 @@
78
 Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="Normaldan Üstün"
79
 Basic.Settings.Advanced.General.ProcessPriority.Normal="Normal"
80
 Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Normaldan Aşağı"
81
-
82
+Basic.Settings.Advanced.Hotkeys.DisableHotkeysInFocus="Əsas pəncərə fokusda olan zaman qısayol düymələrini sıradan çıxart"
83
+Basic.Settings.Advanced.Hotkeys.DisableHotkeysOutOfFocus="Əsas pəncərə fokusda olmayan zaman qısayol düymələrini sıradan çıxart"
84
+Basic.Settings.Advanced.AutoRemux="Avtomatik olaraq mp4-ə remux et"
85
+Basic.Settings.Advanced.AutoRemux.MP4="(mkv kimi yaz)"
86
+
87
+Basic.AdvAudio="Qabaqcıl Səs Xüsusiyyətləri"
88
+Basic.AdvAudio.ActiveOnly="Yalnız Aktiv Mənbələr"
89
+Basic.AdvAudio.Name="Ad"
90
+Basic.AdvAudio.Volume="Səs səviyyəsi"
91
 Basic.AdvAudio.Mono="Mono"
92
-Basic.AdvAudio.Monitoring.None="Monitor Sönüb"
93
-
94
-
95
-
96
-
97
-
98
-
99
-
100
-
101
-
102
-
103
-
104
-
105
-
106
-
107
-
108
-
109
-
110
-
111
-
112
-
113
-
114
+Basic.AdvAudio.Balance="Balans"
115
+Basic.AdvAudio.Monitoring="Səs İzləmə"
116
+Basic.AdvAudio.Monitoring.None="Ekran bağlıdır"
117
+Basic.AdvAudio.Monitoring.MonitorOnly="Yalnız ekran (səssiz çıxış)"
118
+Basic.AdvAudio.Monitoring.Both="Ekran və çıxış"
119
+Basic.AdvAudio.AudioTracks="Treklər"
120
+
121
+Basic.Settings.Hotkeys="Qısayollar"
122
+Basic.Settings.Hotkeys.Filter="Filtr"
123
+
124
+Basic.Hotkeys.SelectScene="Səhnəyə keç"
125
+
126
+Basic.SystemTray.Show="Göstər"
127
+Basic.SystemTray.Hide="Gizlət"
128
+
129
+Basic.SystemTray.Message.Reconnecting="Bağlantı kəsildi. Yenidən bağlantı qurulur..."
130
+
131
+Hotkeys.Insert="Daxil et"
132
+Hotkeys.Delete="Sil"
133
+Hotkeys.Home="Əsas səhifə"
134
+Hotkeys.End="End"
135
+Hotkeys.PageUp="Page Up"
136
+Hotkeys.PageDown="Page Down"
137
+Hotkeys.NumLock="Num Lock"
138
+Hotkeys.ScrollLock="Scroll Lock"
139
+Hotkeys.CapsLock="Caps Lock"
140
+Hotkeys.Backspace="Backspace"
141
+Hotkeys.Tab="Tab"
142
+Hotkeys.Print="Print"
143
+Hotkeys.Pause="Pause"
144
+Hotkeys.Left="Sol"
145
+Hotkeys.Right="Sağ"
146
+Hotkeys.Up="Yuxarı"
147
+Hotkeys.Down="Aşağı"
148
+Hotkeys.Windows="Windows"
149
+Hotkeys.Super="Super"
150
+Hotkeys.Menu="Menyu"
151
+Hotkeys.Space="Boşluq"
152
+Hotkeys.AppleKeypadNum="%1 (Keypad)"
153
+Hotkeys.AppleKeypadMultiply="* (Keypad)"
154
+Hotkeys.AppleKeypadDivide="/ (Keypad)"
155
+Hotkeys.AppleKeypadAdd="+ (Keypad)"
156
+Hotkeys.AppleKeypadSubtract="- (Keypad)"
157
+Hotkeys.AppleKeypadDecimal=". (Keypad)"
158
+Hotkeys.AppleKeypadEqual="= (Keypad)"
159
+Hotkeys.MouseButton="%1 Siçan"
160
+Hotkeys.Escape="Esc"
161
+
162
+Mute="Səsi kəs"
163
+Unmute="Səsi aç"
164
+Push-to-mute="Basanda səsi kəs"
165
+Push-to-talk="Bas, danış"
166
+
167
+SceneItemShow="'%1' göstər"
168
+SceneItemHide="'%1' gizlət"
169
+
170
+OutputWarnings.NoTracksSelected="Ən azı bir trek seçməlisiniz"
171
+
172
+FinalScene.Title="Səhnəni sil"
173
+FinalScene.Text="Ən azı bir səhnə olmalıdır."
174
+
175
+NoSources.Title="Mənbələr yoxdur"
176
+NoSources.Text="Deyəsən hələ də heç bir video mənbəsi əlavə etməmisiniz, ona görə də çıxışda sadəcə boş bir ekran olacaq. Bunu etmək istədiyinizə əminsiniz?"
177
+NoSources.Text.AddSource="İstənilən vaxt əsas pəncərədə Mənbələr qutusunun altındakı + nişanına klikləyərək mənbələr əlavə edə bilərsiniz."
178
+NoSources.Label="Heç bir mənbəniz yoxdur.\nAşağıdakı + düyməsinə klikləyərək və ya sağ klikləyərək birini əlavə edin."
179
+
180
+ChangeBG="Rəngi tənzimlə"
181
+CustomColor="Özəl rəng"
182
+
183
+BrowserSource.EnableHardwareAcceleration="Səyyah Mənbə Avandanlıq Təminatı Sürətləndirməsini Fəallaşdır"
184
+
185
+About="Haqqında"
186
+About.Info="OBS Studio ödənişsiz və açıq mənbəli video yazma və canlı yayım proqram təminatıdır."
187
+About.Donate="Töhfə ver"
188
+About.GetInvolved="Qoşulun"
189
+About.Authors="Müəlliflər"
190
+About.License="Lisenziya"
191
+About.Contribute="OBS layihəsini dəstəklə"
192
+
193
+AddUrl.Title="URL ilə mənbə əlavə et"
194
+AddUrl.Text="URL-ni OBS-a gətirdiniz. Bu, bağlantını avtomatik olaraq mənbə kimi əlavə edəcəkdir. Davam edilsin?"
195
+AddUrl.Text.Url="URL: %1"
196
+
197
+ResizeOutputSizeOfSource="Çıxışı yenidən ölçüləndir (mənbə ölçüsü)"
198
+ResizeOutputSizeOfSource.Text="Təməl və çıxış ölçüləri mövcud mənbənin ölçülərinə görə yenidən ölçüləndiriləcək."
199
+ResizeOutputSizeOfSource.Continue="Davam etmək istəyirsiniz?"
200
+
201
+PreviewTransition="Əvvəlki keçid"
202
+
203
+Importer="Səhnə Kolleksiya İdxalçısı"
204
+Importer.SelectCollection="Səhnə kolleksiyası seç"
205
+Importer.Collection="Səhnə Kolleksiyası"
206
+Importer.HelpText="OBS və ya digər dəstəklənən proqramlardan bu pəncərəyə idxal etmək üçün fayllar əlavə edin."
207
+Importer.Path="Kolleksiya Yolu"
208
+Importer.Program="Aşkarlanan Tətbiqetmə"
209
+Importer.AutomaticCollectionPrompt="Səhnə Kolleksiyaları üçün Avtomatik Axtarış"
210
+Importer.AutomaticCollectionText="OBS, dəstəklənən üçüncü tərəf proqramlardan idxal edilə bilən səhnə kolleksiyalarını avtomatik olaraq tapa bilər. OBS-in səhnə kolleksiyalarını sizin üçün avtomatik tapmağını istəyirsiniz?\n\nBunu daha sonra Tənzimləmələr > Ümumi > İdxalçılar bölməsində dəyişdirə bilərsiniz."
211
+
212
+
213
+Restart="Yenidən başlat"
214
+NeedsRestart="OBS Studio yenidən başladılmalıdır. İndi yenidən başlatmaq istəyirsiniz?"
215
+
216
+ContextBar.NoSelectedSource="Mənbə seçilməyib"
217
+ContextBar.ResetTransform="Çevrilməni sıfırla"
218
+ContextBar.FitToCanvas="Kətana uyğun"
219
+
220
+ContextBar.MediaControls.PlayMedia="Medianı oynat"
221
+ContextBar.MediaControls.PauseMedia="Mediaya fasilə ver"
222
+ContextBar.MediaControls.StopMedia="Medianı dayandır"
223
+ContextBar.MediaControls.RestartMedia="Medianı yenidən başlat"
224
+ContextBar.MediaControls.PlaylistNext="Oynatma siyahısında növbəti"
225
+ContextBar.MediaControls.PlaylistPrevious="Oynatma siyahısında əvvəlki"
226
+ContextBar.MediaControls.MediaProperties="Media xüsusiyyətləri"
227
+ContextBar.MediaControls.BlindSeek="Media axtarış viceti"
228
 
229
obs-studio-26.0.2.tar.xz/UI/data/locale/ba-RU.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/ba-RU.ini Changed
34
 
1
@@ -88,6 +88,8 @@
2
 Percent="Проценттар"
3
 AspectRatio="<b>%1:%2</b> яҡтарҙың мөнәсәбәттәре"
4
 LockVolume="Тауышты билдәләү"
5
+OpenFile="Файл асырға"
6
+AddValue="Өҫтәргә: %1"
7
 
8
 AlreadyRunning.Title="OBS ҡабыҙылған инде"
9
 AlreadyRunning.LaunchAnyway="Барабер ебәреү"
10
@@ -178,6 +180,7 @@
11
 Basic.TransitionDuration="Оҙайлыҡ"
12
 
13
 
14
+TitleBar.Profile="Профиль"
15
 TitleBar.Scenes="Сәхнәләр"
16
 
17
 
18
@@ -225,6 +228,7 @@
19
 
20
 
21
 
22
+
23
 Basic.Filters="Фильтрҙар"
24
 Basic.Filters.AddFilter.Title="Фильтр исеме"
25
 
26
@@ -240,6 +244,7 @@
27
 Basic.MainMenu.File.Import="Импорт (&I)"
28
 Basic.MainMenu.File.Remux="Яҙмаларҙың ремукслау (&M)"
29
 Basic.MainMenu.File.Settings="Көйләүҙәр (&S)"
30
+Basic.MainMenu.File.Exit="Сығыу (&X)"
31
 
32
 
33
 Basic.MainMenu.View.SceneTransitions="Сәхнә әүрелеүҙәре (&C)"
34
obs-studio-26.0.2.tar.xz/UI/data/locale/bg-BG.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/bg-BG.ini Changed
43
 
1
@@ -318,8 +318,6 @@
2
 Deinterlacing.TopFieldFirst="Първо горното поле"
3
 Deinterlacing.BottomFieldFirst="Първо долното поле"
4
 
5
-VolControl.SliderUnmuted="Плъзгач за сила на звука '%1': %2"
6
-VolControl.SliderMuted="Плъзгач за сила на звука '%1': %2 (текущо заглушен)"
7
 VolControl.Mute="Заглуши '%1'"
8
 VolControl.Properties="Свойства на '%1'"
9
 
10
@@ -349,6 +347,7 @@
11
 Basic.SourceSelect.AddExisting="Добави съществуващ"
12
 Basic.SourceSelect.AddVisible="Направете видим източника"
13
 
14
+
15
 Basic.PropertiesWindow="Свойства на '%1'"
16
 Basic.PropertiesWindow.AutoSelectFormat="%1 (автоматично: %2)"
17
 Basic.PropertiesWindow.SelectColor="Избор на цвят"
18
@@ -570,7 +569,6 @@
19
 Basic.Settings.Output.Encoder="Енкодер"
20
 Basic.Settings.Output.SelectDirectory="Настройте папка за записи"
21
 Basic.Settings.Output.SelectFile="Изберете запис"
22
-Basic.Settings.Output.EnforceBitrate="Приложи горна граница спрямо мястото на излъчване"
23
 Basic.Settings.Output.Mode="Режим на излъчване"
24
 Basic.Settings.Output.Mode.Simple="Опростен"
25
 Basic.Settings.Output.Mode.Adv="Допълнителни настройки"
26
@@ -587,8 +585,6 @@
27
 Basic.Settings.Output.Simple.RecordingQuality.Small="Високо Качество, Среден Размер"
28
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Много Високо Качество, Голям Размер на Записа"
29
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Оригинално Качество, Изключително Голям размер на записа"
30
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Предупреждение: Битрейта на излъченото видео ще бъде настроен на %1, което е горната граница на текущата платформа. Ако сте сигурни че искате да надвишите %1, включете допълнителните настройки за Енкодера и махнете отметката от \"Приложи горна граница спрямо мястото на излъчване\"."
31
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Предупреждение: Битрейта на излъченият звук ще бъде настроен на %1, което е горната граница на текущата платформа. Ако сте сигурни че искате да надвишите %1, включете допълнителните настройки за Енкодера и махнете отметката от \"Приложи горна граница спрямо мястото на излъчване\"."
32
 Basic.Settings.Output.Simple.Warn.Encoder="Предупреждение: Записването със програмен енкодер при различно качество от излъчването ще изисква допълнителни ресурси от процесора ако записвате и излъчвате едновременно."
33
 Basic.Settings.Output.Simple.Warn.Lossless="Предупреждение: Оригиналното качество създава огромни файлове! Запис настроен на Оригинално качество може да заема над 7GB дисково пространство на минута, ако резолюцията и кадрите са високи. Не се препоръчва ако не разполагате със много пространство."
34
 Basic.Settings.Output.Simple.Warn.Lossless.Msg="Сигурни ли сте че искате да ползвате оригиналното качество на записа?"
35
@@ -610,7 +606,6 @@
36
 Basic.Settings.Output.Adv.Rescale="Умащабяване на Изхода"
37
 Basic.Settings.Output.Adv.AudioTrack="Звукова Писта"
38
 Basic.Settings.Output.Adv.Streaming="Предаване"
39
-Basic.Settings.Output.Adv.ApplyServiceSettings="Ползвай настройките на енкодера от платформата"
40
 Basic.Settings.Output.Adv.Audio.Track1="Писта 1"
41
 Basic.Settings.Output.Adv.Audio.Track2="Писта 2"
42
 Basic.Settings.Output.Adv.Audio.Track3="Писта 3"
43
obs-studio-26.0.2.tar.xz/UI/data/locale/bn-BD.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/bn-BD.ini Changed
26
 
1
@@ -198,8 +198,6 @@
2
 Deinterlacing.TopFieldFirst="প্রথম ক্ষেত্রে শীর্ষ"
3
 Deinterlacing.BottomFieldFirst="মাঠে প্রথমে নীচের"
4
 
5
-VolControl.SliderUnmuted="'%1'-এর জন্য ভলিয়ুম স্লাইডার: %2"
6
-VolControl.SliderMuted="'%1'-এর জন্য ভলিয়ুম স্লাইডার: %2 (বর্তমানে মিউট করা)"
7
 VolControl.Mute="কথা বলতে পারে '%1 '"
8
 VolControl.Properties="'%1'-এর জন্য বৈশিষ্ট্যসমূহ"
9
 
10
@@ -227,6 +225,7 @@
11
 Basic.SourceSelect.AddExisting="বর্তমান যুক্ত করুন"
12
 Basic.SourceSelect.AddVisible="উৎস করে প্রদর্শিত"
13
 
14
+
15
 Basic.PropertiesWindow="'%1'-এর জন্য বৈশিষ্ট্যসমূহ"
16
 Basic.PropertiesWindow.AutoSelectFormat="%1 (স্বয়ংনির্বাচন: %2)"
17
 Basic.PropertiesWindow.SelectColor="রঙ নির্বাচন করুন"
18
@@ -410,7 +409,6 @@
19
 Basic.Settings.Output.Encoder="Encoder"
20
 Basic.Settings.Output.SelectDirectory="রেকর্ডিং ডিরেক্টরি নির্বাচন করুন"
21
 Basic.Settings.Output.SelectFile="রেকর্ড করা ফাইল নির্বাচন করুন"
22
-Basic.Settings.Output.EnforceBitrate="স্ট্রিমিং সার্ভিস বিটের সীমিত প্রয়োগ"
23
 Basic.Settings.Output.Mode="আউটপুট মোড"
24
 Basic.Settings.Output.Mode.Simple="সাধারণ"
25
 Basic.Settings.Output.Mode.Adv="অ্যাডভান্সড"
26
obs-studio-26.0.2.tar.xz/UI/data/locale/ca-ES.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/ca-ES.ini Changed
130
 
1
@@ -161,6 +161,7 @@
2
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Voleu desconnectar el compte?"
3
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Aquest canvi s'aplicarà immediatament. Segur que voleu desconnectar el compte?"
4
 Basic.AutoConfig.StreamPage.GetStreamKey="Obté una clau"
5
+Basic.AutoConfig.StreamPage.MoreInfo="Més informació"
6
 Basic.AutoConfig.StreamPage.UseStreamKey="Utilitza una clau de transmissió"
7
 Basic.AutoConfig.StreamPage.Service="Servei"
8
 Basic.AutoConfig.StreamPage.Service.ShowAll="Mostra-ho tot..."
9
@@ -209,7 +210,7 @@
10
 Basic.Stats.Status.Active="Actiu"
11
 Basic.Stats.DroppedFrames="Fotogrames perduts (xarxa)"
12
 Basic.Stats.MegabytesSent="Sortida de dades total"
13
-Basic.Stats.Bitrate="Tassa de bits"
14
+Basic.Stats.Bitrate="Taxa de bits"
15
 Basic.Stats.DiskFullIn="Disc ple en (aprox.)"
16
 Basic.Stats.ResetStats="Reinicia les estadístiques"
17
 
18
@@ -365,8 +366,8 @@
19
 Deinterlacing.TopFieldFirst="Camp superior primer"
20
 Deinterlacing.BottomFieldFirst="Camp inferior primer"
21
 
22
-VolControl.SliderUnmuted="Control lliscant del volum per '%1': %2"
23
-VolControl.SliderMuted="Control lliscant del volum per '%1': %2 (silenciat)"
24
+VolControl.SliderUnmuted="Control lliscant del volum per a '%1':"
25
+VolControl.SliderMuted="Control lliscant del volum per a '%1': (silenciat)"
26
 VolControl.Mute="Silencia '%1'"
27
 VolControl.Properties="Propietats per '%1'"
28
 
29
@@ -382,6 +383,7 @@
30
 
31
 AddProfile.Title="Afegeix un perfil"
32
 AddProfile.Text="Introduïu el nom del perfil"
33
+AddProfile.WizardCheckbox="Mostra l'assistent automàtic de configuració"
34
 
35
 RenameProfile.Title="Canvia el nom del perfil"
36
 
37
@@ -396,6 +398,11 @@
38
 Basic.SourceSelect.AddExisting="Afegeix-ne una d'existent"
39
 Basic.SourceSelect.AddVisible="Fes visible l'origen"
40
 
41
+Basic.Main.Sources.Visibility="Visibilitat"
42
+Basic.Main.Sources.VisibilityDescription="Controla la visibilitat de '%1' al llenç"
43
+Basic.Main.Sources.Lock="Bloca"
44
+Basic.Main.Sources.LockDescription="Bloca la posició i l'escala de '%1' al llenç"
45
+
46
 Basic.PropertiesWindow="Propietats de «%1»"
47
 Basic.PropertiesWindow.AutoSelectFormat="%1 (autoselecció: %2)"
48
 Basic.PropertiesWindow.SelectColor="Seleccioneu un color"
49
@@ -635,13 +642,19 @@
50
 Basic.Settings.Stream.MissingUrlAndApiKey="Falta l'URL i la clau de transmissió.\n\nObriu la configuració per introduir l'URL i la clau de transmissió a la pestanya «transmissió»."
51
 Basic.Settings.Stream.MissingUrl="Falta l'URL de la transmissió.\n\nObriu la configuració per introduir l'URL a la pestanya «transmissió»."
52
 Basic.Settings.Stream.MissingStreamKey="Falta la clau de transmissió.\n\nObriu la configuració per introduir la clau de transmissió a la pestanya «transmissió»."
53
+Basic.Settings.Stream.IgnoreRecommended="Ignora la configuració recomanada del servei de retransmissió"
54
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Ignora la configuració recomanada"
55
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Atenció: Ignorar els límits del servei pot donar com a resultat una degradació o bandejament de la retransmissió.\n\nSegur que voleu continuar?"
56
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Taxa de bits màxima de vídeo: %1 kbps"
57
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Taxa de bits màxima d'àudio: %1 kbps"
58
+Basic.Settings.Stream.Recommended.MaxResolution="Resolució màxima: %1"
59
+Basic.Settings.Stream.Recommended.MaxFPS="FPS màxims: %1"
60
 
61
 Basic.Settings.Output="Sortida"
62
 Basic.Settings.Output.Format="Format d'enregistrament"
63
 Basic.Settings.Output.Encoder="Codificador"
64
 Basic.Settings.Output.SelectDirectory="Seleccioneu el directori de gravació"
65
 Basic.Settings.Output.SelectFile="Seleccioni l'arxiu de gravació"
66
-Basic.Settings.Output.EnforceBitrate="Forçar límits de tassa de bits al servei d'streaming"
67
 Basic.Settings.Output.DynamicBitrate="Canvia dinàmicament la ràtio per manegar la saturació"
68
 Basic.Settings.Output.DynamicBitrate.Beta="Canvia dinàmicament la ràtio per manegar la saturació (Beta)"
69
 Basic.Settings.Output.DynamicBitrate.TT="En comptes de perdre fotogrames per reduir la saturació, canvia dinàmicament la ràtio al vol.\n\nTingueu en compte que això pot incrementar el retard per als espectadors si hi ha cap saturació important.\nEn baixar la ràtio, pot trigar uns minuts a restaurar el valor original.\n\nActualment només suportat per a RTMP."
70
@@ -662,8 +675,8 @@
71
 Basic.Settings.Output.Simple.RecordingQuality.Small="Qualitat alta, mida d'arxiu mitjana"
72
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Qualitat molt elevada, mida de fitxer gran"
73
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Qualitat sense pèrdues, mida de l'arxiu molt gran"
74
-Basic.Settings.Output.Simple.Warn.VideoBitrate="ADVERTÈNCIA: La transmissió del vídeo s'establirà a %1, que és el límit superior per al servei de streaming actual. Si està segur que vol anar per sobre de %1, activi les opcions avançades del codificador i desactivi \"Forçar límits de tassa de bits al servei d'streaming\"."
75
-Basic.Settings.Output.Simple.Warn.AudioBitrate="ADVERTÈNCIA: La transmissió d'àudio s'establirà a %1, que és el límit superior per al servei de streaming actual. Si està segur que vol anar per sobre de %1, activi les opcions avançades del codificador i desactivi \"Forçar límits de tassa de bits al servei d'streaming\"."
76
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Atenció: La taxa de bits de vídeo s’establirà a %1, que és el límit superior per al servei de transmissió actual."
77
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Atenció: La taxa de bits d'àudio s’establirà a %1, que és el límit superior per al servei de transmissió actual."
78
 Basic.Settings.Output.Simple.Warn.CannotPause="Atenció: No es poden pausar els enregistraments si la qualitat està configurada a «Mateixa que en directe»."
79
 Basic.Settings.Output.Simple.Warn.Encoder="Advertiment: Gravar amb un software codificador en una qualitat diferent que el directe requerirà ús de CPU addicional si el directe i la gravació es fan a la vegada."
80
 Basic.Settings.Output.Simple.Warn.Lossless="Advertiment: La qualitat sense pèrdues genera mides d'arxiu gegantines! La qualitat sense pèrdues pot utilitzar un total de 7 gigabytes d'espai de disc per minut a alta resolució i FPS. Aquesta qualitat no és recomanable per a enregistraments llargs llevat que tingui una gran quantitat d'espai de disc disponible."
81
@@ -674,6 +687,11 @@
82
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Maquinari (AMD)"
83
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Maquinari (NVENC)"
84
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Programari (preconfiguració de x264 amb baix ús de CPU, augmenta la mida del fitxer)"
85
+Basic.Settings.Output.Simple.TwitchVodTrack="Pista VOD del Twitch (utilitza la pista 2)"
86
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Resolució o velocitat de fotogrames incompatible"
87
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Aquest servei de reproducció en temps real no admet la vostra resolució de sortida i/o velocitat de fotogrames actuals. Es canviaran al valor compatible més proper:\n\n%1\n\nVoleu continuar?"
88
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Resolució: %1"
89
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS: %1"
90
 Basic.Settings.Output.VideoBitrate="Bitrate de vídeo"
91
 Basic.Settings.Output.AudioBitrate="Bitrate d'àudio"
92
 Basic.Settings.Output.Reconnect="Torna a connectar automàticament"
93
@@ -688,15 +706,16 @@
94
 Basic.Settings.Output.Adv.Rescale="Reescala la sortida"
95
 Basic.Settings.Output.Adv.AudioTrack="Pista d'àudio"
96
 Basic.Settings.Output.Adv.Streaming="Directe"
97
-Basic.Settings.Output.Adv.ApplyServiceSettings="Forçar configuracions del codificador de servei de directe"
98
 Basic.Settings.Output.Adv.Audio.Track1="Pista 1"
99
 Basic.Settings.Output.Adv.Audio.Track2="Pista 2"
100
 Basic.Settings.Output.Adv.Audio.Track3="Pista 3"
101
 Basic.Settings.Output.Adv.Audio.Track4="Pista 4"
102
 Basic.Settings.Output.Adv.Audio.Track5="Pista 5"
103
 Basic.Settings.Output.Adv.Audio.Track6="Pista 6"
104
+Basic.Settings.Output.Adv.TwitchVodTrack="Pista VOD del Twitch"
105
 
106
 Basic.Settings.Output.Adv.Recording="Enregistrament"
107
+Basic.Settings.Output.Adv.Recording.RecType="Tipus de gravació"
108
 Basic.Settings.Output.Adv.Recording.Type="Tipus"
109
 Basic.Settings.Output.Adv.Recording.Type.Standard="Estàndard"
110
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Sortida personalitzada (FFmpeg)"
111
@@ -824,13 +843,18 @@
112
 Basic.AdvAudio.ActiveOnly="Només fonts actives"
113
 Basic.AdvAudio.Name="Nom"
114
 Basic.AdvAudio.Volume="Volum"
115
+Basic.AdvAudio.VolumeSource="Volum per a '%1'"
116
 Basic.AdvAudio.Mono="Mono"
117
+Basic.AdvAudio.MonoSource="Mescla monoaural per a '%1'"
118
 Basic.AdvAudio.Balance="Balanç"
119
+Basic.AdvAudio.BalanceSource="Balanç per a '%1'"
120
 Basic.AdvAudio.SyncOffset="Correcció de sincronització"
121
+Basic.AdvAudio.SyncOffsetSource="Compensació de sincronisme per a '%1'"
122
 Basic.AdvAudio.Monitoring="Monitorització d'àudio"
123
 Basic.AdvAudio.Monitoring.None="Monitorització desactivada"
124
 Basic.AdvAudio.Monitoring.MonitorOnly="Només monitorizació (silencia la sortida)"
125
 Basic.AdvAudio.Monitoring.Both="Monitorització i sortida"
126
+Basic.AdvAudio.MonitoringSource="Monitorització d'àudio per a '%1'"
127
 Basic.AdvAudio.AudioTracks="Pistes"
128
 
129
 Basic.Settings.Hotkeys="Dreceres de teclat"
130
obs-studio-26.0.2.tar.xz/UI/data/locale/cs-CZ.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/cs-CZ.ini Changed
130
 
1
@@ -161,6 +161,7 @@
2
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Odpojení účtu"
3
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Tato změna proběhne okamžitě. Opravdu si přejete odpojit účet ?"
4
 Basic.AutoConfig.StreamPage.GetStreamKey="Získat vysílací klíč"
5
+Basic.AutoConfig.StreamPage.MoreInfo="Více informací"
6
 Basic.AutoConfig.StreamPage.UseStreamKey="Použít vysílací klíč"
7
 Basic.AutoConfig.StreamPage.Service="Služba"
8
 Basic.AutoConfig.StreamPage.Service.ShowAll="Zobrazit vše..."
9
@@ -365,8 +366,8 @@
10
 Deinterlacing.TopFieldFirst="Svrchní řádek dříve"
11
 Deinterlacing.BottomFieldFirst="Spodní řádek dříve"
12
 
13
-VolControl.SliderUnmuted="Posuvník hlasitosti pro '%1': %2"
14
-VolControl.SliderMuted="Posuvník hlasitosti pro '%1': %2 (ztlumeno)"
15
+VolControl.SliderUnmuted="Posuvník hlasitosti pro '%1':"
16
+VolControl.SliderMuted="Posuvník hlasitosti pro '%1': (aktuálně ztlumeno)"
17
 VolControl.Mute="Ztlumit '%1'"
18
 VolControl.Properties="Vlastnosti pro \"%1\""
19
 
20
@@ -382,6 +383,7 @@
21
 
22
 AddProfile.Title="Přidání profilu"
23
 AddProfile.Text="Zadejte prosím jméno profilu"
24
+AddProfile.WizardCheckbox="Zobrazit Průvodce nastavením"
25
 
26
 RenameProfile.Title="Přejmenování profilu"
27
 
28
@@ -396,6 +398,11 @@
29
 Basic.SourceSelect.AddExisting="Přidat existující"
30
 Basic.SourceSelect.AddVisible="Zviditelnit zdroj"
31
 
32
+Basic.Main.Sources.Visibility="Viditelnost"
33
+Basic.Main.Sources.VisibilityDescription="Ovládá viditelnost zdroje '%1' v editoru"
34
+Basic.Main.Sources.Lock="Zamknout"
35
+Basic.Main.Sources.LockDescription="Uzamkne pozici a velikost zdroje '%1' v editoru"
36
+
37
 Basic.PropertiesWindow="Vlastnosti objektu '%1'"
38
 Basic.PropertiesWindow.AutoSelectFormat="%1 (automatické: %2)"
39
 Basic.PropertiesWindow.SelectColor="Výběr barvy"
40
@@ -635,13 +642,19 @@
41
 Basic.Settings.Stream.MissingUrlAndApiKey="Chybí vysílací klíč a adresa.\n\nPro nastavení klíče a adresy otevřete nastavení na záložce 'Vysílání'."
42
 Basic.Settings.Stream.MissingUrl="Chybí vysílací adresa.\n\nPro nastavení adresy otevřete nastavení na záložce 'Vysílání'."
43
 Basic.Settings.Stream.MissingStreamKey="Chybí vysílací klíč.\n\nPro nastavení klíče otevřete nastavení na záložce 'Vysílání'."
44
+Basic.Settings.Stream.IgnoreRecommended="Ignorovat doporučená nastavení vysílací služby"
45
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Přepsat doporučená nastavení"
46
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Varování: Ignorování limitací služby může způsobit sníženou kvalitu vysílání nebo úplně zabránit vysílání.\n\nChcete pokračovat ?"
47
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Maximální bitrate videa: %1 kbps"
48
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Maximální bitrate zvuku: %1 kbps"
49
+Basic.Settings.Stream.Recommended.MaxResolution="Maximální rozlišení: %1"
50
+Basic.Settings.Stream.Recommended.MaxFPS="Maximální FPS: %1"
51
 
52
 Basic.Settings.Output="Výstup"
53
 Basic.Settings.Output.Format="Formát nahrávání"
54
 Basic.Settings.Output.Encoder="Enkodér"
55
 Basic.Settings.Output.SelectDirectory="Vyberte složku pro nahrávání"
56
 Basic.Settings.Output.SelectFile="Vyberte soubor pro nahrávání"
57
-Basic.Settings.Output.EnforceBitrate="Vynutit omezení bitratu streamovací služby"
58
 Basic.Settings.Output.DynamicBitrate="Dynamicky měnit bitrate v závislosti na zahlcení sítě"
59
 Basic.Settings.Output.DynamicBitrate.Beta="Dynamicky měnit bitrate v závislosti na zahlcení sítě (Beta)"
60
 Basic.Settings.Output.DynamicBitrate.TT="Místo zahazování snímků, pro snížení zahlcení sítě, bude průběžně měněn bitrate.\n\nMějte na vědomí, že se může zvýšit odezva pro diváky, pokud dojde k náhlému zahlcení sítě.\nPo snížení bitratu to může trvat pár minut, než se zase navýší.\n\nZatím je podporováno pouze RTMP."
61
@@ -662,8 +675,8 @@
62
 Basic.Settings.Output.Simple.RecordingQuality.Small="Vysoká kvalita, střední velikost souboru"
63
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Nerozeznatelný pokles kvality, velké soubory"
64
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Lossless, obrovské soubory"
65
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Varování: Bitrate videa bude nastaven %1, což je maximum, které tato streamovací služba umožňuje. Pokud si jste jisti, že chcete tento limit překročit, povolte rožšířené možnosti enkodéru a odškrtněte \"Vynutit omezení bitratu streamovací služby\"."
66
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Varování: Bitrate zvuku bude nastaven %1, což je maximum, které tato streamovací služba umožňuje. Pokud si jste jisti, že chcete tento limit překročit, povolte rožšířené možnosti enkodéru a odškrtněte \"Vynutit omezení bitratu streamovací služby\"."
67
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Varování: Bitrate vysílaného videa bude nastaven na %1, což je horní mez pro aktuální vysílací službu."
68
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Varování: Bitrate vysílaného zvuku bude nastaven na %1, což je horní mez pro aktuální vysílací službu."
69
 Basic.Settings.Output.Simple.Warn.CannotPause="Varování: Nahrávání není možné pozastavit, pokud je nahrávací kvalita nastavena na \"Stejná jako vysílaná\"."
70
 Basic.Settings.Output.Simple.Warn.Encoder="Varování: Nahrávání se softwarovým enkodérem v jiné kvalitě než je vysílaná bude CPU využívat více, pokud budete vysílat a nahrávat současně."
71
 Basic.Settings.Output.Simple.Warn.Lossless="Varování: Při použití této kvality budou výsledné nahrávky obrovské! Při použití vysokého rozlišení a snímkování mohou využít až 7 GB diskového prostoru za minutu nahrávky. Tato kvalita není doporučena pro dlouhé nahrávky, pokud nemáte opravdu velký volný prostor na disku."
72
@@ -674,6 +687,11 @@
73
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardwarový (AMD)"
74
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardwarový (NVENC)"
75
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Softwarový (x264 předvolba nízkého zatížení CPU, větší soubory)"
76
+Basic.Settings.Output.Simple.TwitchVodTrack="Stopa Twitch VOD (používá stopu 2)"
77
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Nekompatibilní rozlišení/FPS"
78
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Tato vysílací služba nepodporuje aktuálně vybrané rozlišení anebo FPS. Budou změněny na nejbližší kompatibilní hodnoty:\n\n%1\n\nOpravdu chcete pokračovat ?"
79
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Rozlišení: %1"
80
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS: %1"
81
 Basic.Settings.Output.VideoBitrate="Bitrate videa"
82
 Basic.Settings.Output.AudioBitrate="Bitrate zvuku"
83
 Basic.Settings.Output.Reconnect="Automaticky obnovit spojení"
84
@@ -688,15 +706,16 @@
85
 Basic.Settings.Output.Adv.Rescale="Přeškálovat výstup"
86
 Basic.Settings.Output.Adv.AudioTrack="Zvuková stopa"
87
 Basic.Settings.Output.Adv.Streaming="Vysílání"
88
-Basic.Settings.Output.Adv.ApplyServiceSettings="Přikázat vysílací službě použití nastavení enkodéru"
89
 Basic.Settings.Output.Adv.Audio.Track1="Stopa 1"
90
 Basic.Settings.Output.Adv.Audio.Track2="Stopa 2"
91
 Basic.Settings.Output.Adv.Audio.Track3="Stopa 3"
92
 Basic.Settings.Output.Adv.Audio.Track4="Stopa 4"
93
 Basic.Settings.Output.Adv.Audio.Track5="Stopa 5"
94
 Basic.Settings.Output.Adv.Audio.Track6="Stopa 6"
95
+Basic.Settings.Output.Adv.TwitchVodTrack="Stopa Twitch VOD"
96
 
97
 Basic.Settings.Output.Adv.Recording="Nahrávání"
98
+Basic.Settings.Output.Adv.Recording.RecType="Typ záznamu"
99
 Basic.Settings.Output.Adv.Recording.Type="Typ"
100
 Basic.Settings.Output.Adv.Recording.Type.Standard="Standardní"
101
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Vlastní výstup (FFmpeg)"
102
@@ -824,13 +843,18 @@
103
 Basic.AdvAudio.ActiveOnly="Pouze aktivní zdroje"
104
 Basic.AdvAudio.Name="Název"
105
 Basic.AdvAudio.Volume="Hlasitost"
106
+Basic.AdvAudio.VolumeSource="Hlasitost pro '%1'"
107
 Basic.AdvAudio.Mono="Mono"
108
+Basic.AdvAudio.MonoSource="Mono Downmix pro '%1'"
109
 Basic.AdvAudio.Balance="Vyvážení"
110
+Basic.AdvAudio.BalanceSource="Vyvážení pro '%1'"
111
 Basic.AdvAudio.SyncOffset="Zpoždění synchronizace"
112
+Basic.AdvAudio.SyncOffsetSource="Synchronizační odsazení pro '%1'"
113
 Basic.AdvAudio.Monitoring="Monitorování zvuku"
114
 Basic.AdvAudio.Monitoring.None="Monitorování vypnuto"
115
 Basic.AdvAudio.Monitoring.MonitorOnly="Pouhé monitorování (ztlumit výstup)"
116
 Basic.AdvAudio.Monitoring.Both="Monitorovat a odesílat na výstup"
117
+Basic.AdvAudio.MonitoringSource="Monitorování zvuku pro '%1'"
118
 Basic.AdvAudio.AudioTracks="Stopy"
119
 
120
 Basic.Settings.Hotkeys="Zkratky"
121
@@ -907,7 +931,7 @@
122
 BrowserSource.EnableHardwareAcceleration="Zapnout hardwarovou akceleraci pro zdroj prohlížeče"
123
 
124
 About="O aplikaci"
125
-About.Info="OBS je otevřený software pro nahrávání videa a živé vysílání."
126
+About.Info="OBS Studio je otevřený software pro nahrávání videa a živé vysílání."
127
 About.Donate="Přispět"
128
 About.GetInvolved="Zapojte se"
129
 About.Authors="Autoři"
130
obs-studio-26.0.2.tar.xz/UI/data/locale/da-DK.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/da-DK.ini Changed
121
 
1
@@ -161,6 +161,7 @@
2
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Afbryde konto?"
3
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Denne ændring effektueres straks. Sikker på, at du vil afbryde din konto?"
4
 Basic.AutoConfig.StreamPage.GetStreamKey="Hent Streamnøgle"
5
+Basic.AutoConfig.StreamPage.MoreInfo="Yderligere info"
6
 Basic.AutoConfig.StreamPage.UseStreamKey="Benyt Streamnøgle"
7
 Basic.AutoConfig.StreamPage.Service="Tjeneste"
8
 Basic.AutoConfig.StreamPage.Service.ShowAll="Vis alle..."
9
@@ -365,8 +366,8 @@
10
 Deinterlacing.TopFieldFirst="Øverste felt først"
11
 Deinterlacing.BottomFieldFirst="Nederste felt først"
12
 
13
-VolControl.SliderUnmuted="Lydstyrkeskyder til '%1': %2"
14
-VolControl.SliderMuted="Lydstyrkeskyder til '%1': %2 (pt. på lydløs)"
15
+VolControl.SliderUnmuted="Lydstyrkeskyder for '%1':"
16
+VolControl.SliderMuted="Lydstyrkeskyder for '%1': (på lydløs i øjeblikket)"
17
 VolControl.Mute="Gør '%1' lydløs"
18
 VolControl.Properties="Egenskaber for '%1'"
19
 
20
@@ -382,6 +383,7 @@
21
 
22
 AddProfile.Title="Tilføj profil"
23
 AddProfile.Text="Angiv profilens navn"
24
+AddProfile.WizardCheckbox="Vis Auto-opsætningsguide"
25
 
26
 RenameProfile.Title="Omdøb profil"
27
 
28
@@ -396,6 +398,11 @@
29
 Basic.SourceSelect.AddExisting="Tilføj eksisterende"
30
 Basic.SourceSelect.AddVisible="Gør kilde synlig"
31
 
32
+Basic.Main.Sources.Visibility="Synlighed"
33
+Basic.Main.Sources.VisibilityDescription="Styrer synligheden af '%1' på lærredet"
34
+Basic.Main.Sources.Lock="Lås"
35
+Basic.Main.Sources.LockDescription="Fastlåser position og skalering af '%1' på lærredet"
36
+
37
 Basic.PropertiesWindow="Egenskaber for '%1'"
38
 Basic.PropertiesWindow.AutoSelectFormat="%1 (auto-vælg: %2)"
39
 Basic.PropertiesWindow.SelectColor="Vælg farve"
40
@@ -635,13 +642,19 @@
41
 Basic.Settings.Stream.MissingUrlAndApiKey="URL og Stream-nøgle mangler.\n\nÅbn Indstillinger for at angive URL og Stream-nøgle under 'Stream'-fanen."
42
 Basic.Settings.Stream.MissingUrl="Stream-URL mangler.\n\nÅbn Indstillinger for at angive URL'en under 'Stream'-fanen."
43
 Basic.Settings.Stream.MissingStreamKey="Stream-nøgle mangler.\n\nÅbn Indstillinger for at angive Stream-nøglen under 'Stream'-fanen."
44
+Basic.Settings.Stream.IgnoreRecommended="Ignorér anbefalede indstillinger for streamingtjeneste"
45
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Tilsidesæt Anbefalede Indstillinger"
46
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Advarsel: Ignoreres tjenestebegrænsningerne, kan det resultere i forringet streamkvalitet eller forhindre dig i at streame.\n\nFortsæt?"
47
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Maks. videobithastighed: %1 kbps"
48
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Maks. audiobithastighed: %1 kbps"
49
+Basic.Settings.Stream.Recommended.MaxResolution="Maks. opløsning: %1"
50
+Basic.Settings.Stream.Recommended.MaxFPS="Maks. billeder/sekund (FPS): %1"
51
 
52
 Basic.Settings.Output="Output"
53
 Basic.Settings.Output.Format="Optagelsesformat"
54
 Basic.Settings.Output.Encoder="Encoder"
55
 Basic.Settings.Output.SelectDirectory="Vælg optagelsesmappe"
56
 Basic.Settings.Output.SelectFile="Vælg optagelsesfil"
57
-Basic.Settings.Output.EnforceBitrate="Håndhæv streamingtjenestes bit-hastighedsbegrænsninger"
58
 Basic.Settings.Output.DynamicBitrate="Skift bithastighed dynamisk for at håndtere overbelastning"
59
 Basic.Settings.Output.DynamicBitrate.Beta="Skift bithastighed dynamisk for at håndtere overbelastning (Beta)"
60
 Basic.Settings.Output.DynamicBitrate.TT="I stedet for at droppe billeder for at reducere overbelastning, ændrer dette dynamisk bithastigheden løbende.\n\nBemærk at dette kan øge forsinkelsen, som seerne oplever, hvis der opstår betydelig pludselig overbelastning.\nNår bithastigheden falder, kan det tage op til et par få minutter for at gendanne den.\n\nKun RTMP understøttet pt."
61
@@ -662,8 +675,8 @@
62
 Basic.Settings.Output.Simple.RecordingQuality.Small="Høj kvalitet, medium filstørrelse"
63
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Synlig identisk kvalitet, stor filstørrelse"
64
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Tabsfri kvalitet, enorm stor filstørrelse"
65
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Advarsel: Videostreamingbit-hastigheden sættes til %1, som er den øvre grænse for den aktuelle streamingtjeneste. Er du sikker på, at du vil at gå over %1, så aktivér avancerede encoder-valg og afmarkér \"Gennemtving streamingtjenestes bit-hastighedsbegrænsninger\"."
66
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Advarsel: Audiostreamingbit-hastigheden sættes til %1, som er den øvre grænse for den aktuelle streamingtjeneste. Er du sikker på, at du vil at gå over %1, så aktivér avancerede encoder-valg og afmarkér \"Gennemtving streamingtjenestes bit-hastighedsbegrænsninger\"."
67
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Advarsel: Streamingsvideobithastigheden indstilles til %1, som er den øvre grænse for den aktuelle streamingtjeneste."
68
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Advarsel: Streamingsaudiobithastigheden indstilles til %1, som er den øvre grænse for den aktuelle streamingtjeneste."
69
 Basic.Settings.Output.Simple.Warn.CannotPause="Advarsel: Optagelser kan ikke pauses, hvis optagekvaliteten er sat til \"Samme som strream\"."
70
 Basic.Settings.Output.Simple.Warn.Encoder="Advarsel: Optagelse med en software-encoder i en anden kvalitet end den streamede vil medføre ekstra CPU-forbrug, hvis du streamer og optager samtidigt."
71
 Basic.Settings.Output.Simple.Warn.Lossless="Advarsel: Tabsfri kvalitet genererer gevaldigt store filstørrelser! Tabsfri kvalitet kan forbruge op til 7 GB diskplads pr. minut ved høje opløsninger og billedhastigheder. Tabsfri tilstand anbefales ikke til lange optagelser, medmindre du har masser af tilgængelig diskplads."
72
@@ -674,6 +687,11 @@
73
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardware (AMD)"
74
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardware (NVENC)"
75
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Software (x264 lavt, forvalgt CPU-forbrug, øger filstørrelsen)"
76
+Basic.Settings.Output.Simple.TwitchVodTrack="Twitch VOD-spor (Benytter Spor 2)"
77
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Inkompatibel opløsning/billedhastighed"
78
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Denne streamingtjeneste understøtter ikke din aktuelle outputopløsning og/eller billedhastighed. De ændres til de(n) nærmeste kompatible værdi(er):\n\n%1\n\nFortsæt?"
79
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Opløsning: %1"
80
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS (billeder/sekund): %1"
81
 Basic.Settings.Output.VideoBitrate="Videobit-hastighed"
82
 Basic.Settings.Output.AudioBitrate="Audiobit-hastighed"
83
 Basic.Settings.Output.Reconnect="Automatisk gentilslutning"
84
@@ -688,15 +706,16 @@
85
 Basic.Settings.Output.Adv.Rescale="Omskalér output"
86
 Basic.Settings.Output.Adv.AudioTrack="Lydspor"
87
 Basic.Settings.Output.Adv.Streaming="Streaming"
88
-Basic.Settings.Output.Adv.ApplyServiceSettings="Håndhæv streamingtjenestes encoder-indstillinger"
89
 Basic.Settings.Output.Adv.Audio.Track1="Spor 1"
90
 Basic.Settings.Output.Adv.Audio.Track2="Spor 2"
91
 Basic.Settings.Output.Adv.Audio.Track3="Spor 3"
92
 Basic.Settings.Output.Adv.Audio.Track4="Spor 4"
93
 Basic.Settings.Output.Adv.Audio.Track5="Sport 5"
94
 Basic.Settings.Output.Adv.Audio.Track6="Spor 6"
95
+Basic.Settings.Output.Adv.TwitchVodTrack="Twitch VOD-spor"
96
 
97
 Basic.Settings.Output.Adv.Recording="Optagelse"
98
+Basic.Settings.Output.Adv.Recording.RecType="Optagelsestype"
99
 Basic.Settings.Output.Adv.Recording.Type="Type"
100
 Basic.Settings.Output.Adv.Recording.Type.Standard="Standard"
101
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Tilpasset output (FFmpeg)"
102
@@ -824,13 +843,18 @@
103
 Basic.AdvAudio.ActiveOnly="Kun aktive kilder"
104
 Basic.AdvAudio.Name="Navn"
105
 Basic.AdvAudio.Volume="Lydstyrke"
106
+Basic.AdvAudio.VolumeSource="Lydstyrke for '%1'"
107
 Basic.AdvAudio.Mono="Mono"
108
+Basic.AdvAudio.MonoSource="Mono downmix for '%1'"
109
 Basic.AdvAudio.Balance="Balance"
110
+Basic.AdvAudio.BalanceSource="Saldo for '%1'"
111
 Basic.AdvAudio.SyncOffset="Synk-forskydning"
112
+Basic.AdvAudio.SyncOffsetSource="Synk-forskydning for '%1'"
113
 Basic.AdvAudio.Monitoring="Lydovervågning"
114
 Basic.AdvAudio.Monitoring.None="Overvågning Fra"
115
 Basic.AdvAudio.Monitoring.MonitorOnly="Kun overvågning (gør output tavs)"
116
 Basic.AdvAudio.Monitoring.Both="Overvåg og output"
117
+Basic.AdvAudio.MonitoringSource="Lydovervågning til '%1'"
118
 Basic.AdvAudio.AudioTracks="Spor"
119
 
120
 Basic.Settings.Hotkeys="Genvejstaster"
121
obs-studio-26.0.2.tar.xz/UI/data/locale/de-DE.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/de-DE.ini Changed
596
 
1
@@ -22,7 +22,7 @@
2
 Display="Bildschirm"
3
 Name="Name"
4
 Exit="Beenden"
5
-Mixer="Audio‐Mixer"
6
+Mixer="Audio-Mixer"
7
 Browse="Durchsuchen"
8
 Mono="Mono"
9
 Stereo="Stereo"
10
@@ -47,8 +47,8 @@
11
 New="Neu"
12
 Duplicate="Duplizieren"
13
 Enable="Aktivieren"
14
-DisableOSXVSync="macOS V‐Sync deaktivieren"
15
-ResetOSXVSyncOnExit="macOS V‐Sync beim Beenden zurücksetzen"
16
+DisableOSXVSync="macOS VSync deaktivieren"
17
+ResetOSXVSyncOnExit="macOS VSync beim Beenden zurücksetzen"
18
 HighResourceUsage="Codierung überlastet! Erwägen Sie Ihre Videoeinstellungen zu verringern oder benutzen Sie eine schnellere Encodervoreinstellung."
19
 Transition="Übergang"
20
 QuickTransitions="Schnellübergänge"
21
@@ -96,18 +96,18 @@
22
 AddValue="%1 hinzufügen"
23
 
24
 AlreadyRunning.Title="OBS wird bereits ausgeführt"
25
-AlreadyRunning.Text="OBS wird bereits ausgeführt! Wenn dies unabsichtlich ist, beenden Sie alle vorhandenen OBS‐Instanzen, bevor Sie eine neue starten. Wenn Sie OBS so eingestellt haben, dass es sich zum Infobereich minimiert, überprüfen Sie bitte, ob es dort läuft."
26
+AlreadyRunning.Text="OBS wird bereits ausgeführt! Wenn dies unabsichtlich ist, beenden Sie alle vorhandenen OBS-Instanzen, bevor Sie eine neue starten. Wenn Sie OBS so eingestellt haben, dass es sich zum Infobereich minimiert, überprüfen Sie bitte, ob es dort läuft."
27
 AlreadyRunning.LaunchAnyway="Trotzdem starten"
28
 
29
 ChromeOS.Title="Nicht unterstützte Plattform"
30
-ChromeOS.Text="OBS scheint in einem ChromeOS‐Container zu laufen. Diese Plattform wird nicht unterstützt."
31
+ChromeOS.Text="OBS scheint in einem ChromeOS-Container zu laufen. Diese Plattform wird nicht unterstützt."
32
 
33
 DockCloseWarning.Title="Dockbares Fenster schließen"
34
-DockCloseWarning.Text="Sie haben gerade ein dockbares Fenster geschlossen. Wenn Sie es erneut anzeigen möchten, verwenden Sie das Menü „Ansicht“ → „Docks“ in der Menüleiste."
35
+DockCloseWarning.Text="Sie haben gerade ein dockbares Fenster geschlossen. Wenn Sie es erneut anzeigen möchten, verwenden Sie das Menü Ansicht → Docks in der Menüleiste."
36
 
37
-ExtraBrowsers="Benutzerdefinierte Browser‐Docks"
38
+ExtraBrowsers="Benutzerdefinierte Browser-Docks"
39
 ExtraBrowsers.Info="Fügen Sie Docks hinzu, indem Sie ihnen einen Namen und eine URL geben und dann auf „Übernehmen“ oder „Schließen“ klicken, um diese zu öffnen. Sie können jederzeit Docks hinzufügen oder entfernen."
40
-ExtraBrowsers.DockName="Dock‐Name"
41
+ExtraBrowsers.DockName="Dock-Name"
42
 
43
 Auth.Authing.Title="Authentifizierung"
44
 Auth.Authing.Text="Authentifizierung mit %1, bitte warten …"
45
@@ -121,11 +121,11 @@
46
 Auth.ChannelFailure.Text="Fehler beim Laden der Kanalinformationen für %1\n\n%2: %3"
47
 Auth.Chat="Chat"
48
 Auth.StreamInfo="Streaminformation"
49
-TwitchAuth.Stats="Twitch‐Statistiken"
50
-TwitchAuth.Feed="Twitch‐Aktivitätsfeed"
51
+TwitchAuth.Stats="Twitch-Statistiken"
52
+TwitchAuth.Feed="Twitch-Aktivitätsfeed"
53
 TwitchAuth.TwoFactorFail.Title="Streamschlüssel konnte nicht abgefragt werden"
54
-TwitchAuth.TwoFactorFail.Text="OBS konnte sich nicht mit Ihrem Twitch‐Konto verbinden. Bitte stellen Sie sicher, dass die Zwei‐Faktor‐Authentifizierung in Ihren <a href='https://www.twitch.tv/settings/security'>Twitch‐Sicherheitseinstellungen</a> eingerichtet ist, da diese für das Sreamen benötigt wird."
55
-RestreamAuth.Channels="Restream‐Kanäle"
56
+TwitchAuth.TwoFactorFail.Text="OBS konnte sich nicht mit Ihrem Twitch-Konto verbinden. Bitte stellen Sie sicher, dass die Zwei-Faktor-Authentifizierung in Ihren <a href='https://www.twitch.tv/settings/security'>Twitch-Sicherheitseinstellungen</a> eingerichtet ist, da diese für das Sreamen benötigt wird."
57
+RestreamAuth.Channels="Restream-Kanäle"
58
 
59
 Copy.Filters="Filter kopieren"
60
 Paste.Filters="Filter einfügen"
61
@@ -153,7 +153,7 @@
62
 Basic.AutoConfig.VideoPage.FPS.UseCurrent="Aktuelle verwenden (%1)"
63
 Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="Entweder 60 oder 30, aber wenn möglich 60 bevorzugen"
64
 Basic.AutoConfig.VideoPage.FPS.PreferHighRes="Entweder 60 oder 30, aber hohe Auflösung bevorzugen"
65
-Basic.AutoConfig.VideoPage.CanvasExplanation="Hinweis: Die Basis‐(Leinwand‐)Auflösung ist nicht unbedingt die gleiche Auflösung, mit der Sie streamen oder aufnehmen. Ihre tatsächliche Stream‐/Aufnahmeauflösung kann ausgehend von der Leinwandauflösung herunterskaliert werden, um die Ressourcennutzung oder die Bitratenanforderungen zu reduzieren."
66
+Basic.AutoConfig.VideoPage.CanvasExplanation="Hinweis: Die Basis-(Leinwand-)Auflösung ist nicht unbedingt die gleiche Auflösung, mit der Sie streamen oder aufnehmen. Ihre tatsächliche Stream-/Aufnahmeauflösung kann ausgehend von der Leinwandauflösung herunterskaliert werden, um die Ressourcennutzung oder die Bitratenanforderungen zu reduzieren."
67
 Basic.AutoConfig.StreamPage="Streaminformationen"
68
 Basic.AutoConfig.StreamPage.SubTitle="Bitte geben Sie Ihre Streaminformationen ein"
69
 Basic.AutoConfig.StreamPage.ConnectAccount="Konto verbinden (empfohlen)"
70
@@ -161,6 +161,7 @@
71
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Konto trennen?"
72
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Diese Änderung wird sofort wirksam. Sind Sie sicher, dass Sie Ihr Konto trennen möchten?"
73
 Basic.AutoConfig.StreamPage.GetStreamKey="Streamschlüssel erhalten"
74
+Basic.AutoConfig.StreamPage.MoreInfo="Mehr Informationen"
75
 Basic.AutoConfig.StreamPage.UseStreamKey="Streamschlüssel verwenden"
76
 Basic.AutoConfig.StreamPage.Service="Plattform"
77
 Basic.AutoConfig.StreamPage.Service.ShowAll="Alle anzeigen …"
78
@@ -170,7 +171,7 @@
79
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Link)"
80
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Bitrate mit Bandbreitentest schätzen (kann einige Minuten dauern)"
81
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Hardwarecodierung bevorzugen"
82
-Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Hardwarecodierung beseitigt die meiste CPU‐Auslastung, kann aber mehr Bitrate erfordern, um das gleiche Maß an Qualität zu erhalten."
83
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Hardwarecodierung beseitigt die meiste CPU-Auslastung, kann aber mehr Bitrate erfordern, um das gleiche Maß an Qualität zu erhalten."
84
 Basic.AutoConfig.StreamPage.StreamWarning.Title="Streamwarnung"
85
 Basic.AutoConfig.StreamPage.StreamWarning.Text="Der Bandbreitentest streamt zufällige Videodaten ohne Ton zu Ihrem Kanal. Wenn Sie in der Lage sind, empfiehlt es sich, das Speichern von Videos vorrübergehend zu deaktivieren und den Stream privat zu schalten, bis der Test abgeschlossen ist. Fortfahren?"
86
 Basic.AutoConfig.TestPage="Endergebnisse"
87
@@ -190,10 +191,10 @@
88
 Basic.AutoConfig.TestPage.Result.Header="Das Programm hat festgestellt, dass diese geschätzten Einstellungen für Sie am besten sind:"
89
 Basic.AutoConfig.TestPage.Result.Footer="Um den Assistenten neu zu konfigurieren und es erneut zu versuchen, klicken Sie auf „Zurück“. Um die Einstellungen selbst anzupassen, klicken Sie auf „Abbrechen“ und öffnen Sie die Einstellungen."
90
 Basic.AutoConfig.Info="Der Autokonfigurationsassistent ermittelt die besten Einstellungen basierend auf Ihren Computerspezifikationen und der Internetgeschwindigkeit."
91
-Basic.AutoConfig.RunAnytime="Dies kann jederzeit über das Werkzeug‐Menü ausgeführt werden."
92
+Basic.AutoConfig.RunAnytime="Es kann jederzeit über das Werkzeug-Menü ausgeführt werden."
93
 
94
 Basic.Stats="Statistiken"
95
-Basic.Stats.CPUUsage="CPU‐Auslastung"
96
+Basic.Stats.CPUUsage="CPU-Auslastung"
97
 Basic.Stats.HDDSpaceAvailable="Speicherplatz verfügbar"
98
 Basic.Stats.MemoryUsage="Speicherauslastung"
99
 Basic.Stats.AverageTimeToRender="Durchschnittliche Framerenderzeit"
100
@@ -227,14 +228,14 @@
101
 Updater.NoUpdatesAvailable.Text="Zurzeit sind keine Updates verfügbar"
102
 Updater.FailedToLaunch="Konnte den Updater nicht starten"
103
 Updater.GameCaptureActive.Title="Spielaufnahme aktiv"
104
-Updater.GameCaptureActive.Text="Die Spielaufnahmen‐Hook‐Bibliothek wird zurzeit verwendet. Bitte schließen Sie alle derzeit aufgenommenen Programme und Spiele (oder starten Sie Windows neu) und versuchen Sie es erneut."
105
+Updater.GameCaptureActive.Text="Die Spielaufnahmen-Hook-Bibliothek wird zurzeit verwendet. Bitte schließen Sie alle derzeit aufgenommenen Programme und Spiele (oder starten Sie Windows neu) und versuchen Sie es erneut."
106
 
107
-QuickTransitions.SwapScenes="Vorschau‐/Ausgabeszene nach Übergang tauschen"
108
-QuickTransitions.SwapScenesTT="Vertauscht die Vorschau‐ und Ausgabeszenen nach dem Übergang (falls die ursprüngliche Ausgabeszene noch vorhanden ist).\nEventuelle Änderungen an der originalen Ausgabeszene werden nicht rückgängig gemacht."
109
+QuickTransitions.SwapScenes="Vorschau-/Ausgabeszene nach Übergang tauschen"
110
+QuickTransitions.SwapScenesTT="Vertauscht die Vorschau- und Ausgabeszenen nach dem Übergang (falls die ursprüngliche Ausgabeszene noch vorhanden ist).\nEventuelle Änderungen an der originalen Ausgabeszene werden nicht rückgängig gemacht."
111
 QuickTransitions.DuplicateScene="Szene duplizieren"
112
 QuickTransitions.DuplicateSceneTT="Ermöglicht das Bearbeiten von Transformationen und der Sichtbarkeit von Quellen, ohne die Ausgabe zu verändern, wenn dieselbe Szene bearbeitet wird.\nAktivieren Sie „Szene duplizieren“, um die Eigenschaften von Quellen zu bearbeiten, ohne die Ausgabe zu verändern.\nDas Ändern dieses Wertes wird die derzeitige Ausgabeszene zurücksetzen (falls sie noch existiert)."
113
 QuickTransitions.EditProperties="Quellen duplizieren"
114
-QuickTransitions.EditPropertiesTT="Ermöglicht das Bearbeiten der Eigenschaften von Quellen, ohne die Ausgabe zu verändern, wenn dieselbe Szene bearbeitet wird.\nDies kann nur verwendet werden, wenn „Szene duplizieren“ aktiviert ist.\nBestimmte Quellen (wie Aufnahme‐ oder Medienquellen) unterstützen dies nicht und können nicht separat bearbeitet werden.\nDas Ändern dieses Wertes wird die derzeitige Ausgabeszene zurücksetzen (falls sie noch existiert).\n\nWarnung: Da Quellen dupliziert werden, könnte dies zusätzliche System‐ oder Videoressourcen verbrauchen."
115
+QuickTransitions.EditPropertiesTT="Ermöglicht das Bearbeiten der Eigenschaften von Quellen, ohne die Ausgabe zu verändern, wenn dieselbe Szene bearbeitet wird.\nDies kann nur verwendet werden, wenn „Szene duplizieren“ aktiviert ist.\nBestimmte Quellen (wie Aufnahme- oder Medienquellen) unterstützen dies nicht und können nicht separat bearbeitet werden.\nDas Ändern dieses Wertes wird die derzeitige Ausgabeszene zurücksetzen (falls sie noch existiert).\n\nWarnung: Da Quellen dupliziert werden, könnte dies zusätzliche System- oder Videoressourcen verbrauchen."
116
 QuickTransitions.HotkeyName="Schnellübergang: %1"
117
 
118
 Basic.AddTransition="Konfigurierbaren Übergang hinzufügen"
119
@@ -242,7 +243,7 @@
120
 Basic.TransitionProperties="Übergangseigenschaften"
121
 Basic.SceneTransitions="Szenenübergänge"
122
 Basic.TransitionDuration="Dauer"
123
-Basic.TogglePreviewProgramMode="Studio‐Modus"
124
+Basic.TogglePreviewProgramMode="Studio-Modus"
125
 
126
 TransitionNameDlg.Text="Bitte geben Sie den Namen des Übergangs ein"
127
 TransitionNameDlg.Title="Übergangsname"
128
@@ -278,13 +279,13 @@
129
 Output.StartStreamFailed="Fehler beim Starten des Streams"
130
 Output.StartRecordingFailed="Fehler beim Starten der Aufnahme"
131
 Output.StartReplayFailed="Fehler beim Starten des Wiederholungspuffers"
132
-Output.StartFailedGeneric="Start der Ausgabe fehlgeschlagen. Bitte überprüfen Sie die Logdatei für Details.\n\nHinweis: Wenn Sie die NVENC‐ oder AMD‐Encoder verwenden, stellen Sie sicher, dass Ihre Grafiktreiber aktuell sind."
133
+Output.StartFailedGeneric="Start der Ausgabe fehlgeschlagen. Bitte überprüfen Sie die Logdatei für Details.\n\nHinweis: Wenn Sie die NVENC- oder AMD-Encoder verwenden, stellen Sie sicher, dass Ihre Grafiktreiber aktuell sind."
134
 
135
 Output.ReplayBuffer.PauseWarning.Title="Kann beim Pausieren keine Wiederholungen speichern"
136
 Output.ReplayBuffer.PauseWarning.Text="Warnung: Wiederholungen können beim Pausieren der Aufnahme nicht gespeichert werden."
137
 
138
 Output.ConnectFail.Title="Verbindung fehlgeschlagen"
139
-Output.ConnectFail.BadPath="Der Pfad oder die Verbindungs‐URL ist ungültig. Bitte überprüfen Sie Ihre Einstellungen und stellen Sie sicher, dass diese korrekt sind."
140
+Output.ConnectFail.BadPath="Der Pfad oder die Verbindungs-URL ist ungültig. Bitte überprüfen Sie Ihre Einstellungen und stellen Sie sicher, dass diese korrekt sind."
141
 Output.ConnectFail.ConnectFailed="Verbindung zum Server fehlgeschlagen"
142
 Output.ConnectFail.InvalidStream="Konnte nicht auf den angegebenen Kanal oder Streamschlüssel zugreifen. Bitte überprüfen Sie den eingegebenen Streamschlüssel. Wenn er richtig ist, kann es ein Problem beim Verbinden mit dem Server gegeben haben."
143
 Output.ConnectFail.Error="Ein unerwarteter Fehler ist beim Verbindungsversuch zum Server aufgetreten. Mehr Informationen finden Sie in der Logdatei."
144
@@ -305,39 +306,39 @@
145
 Output.BadPath.Text="Der konfigurierte Ausgabepfad ist ungültig. Bitte überprüfen Sie Ihre Einstellungen und stellen Sie sicher, dass ein gültiger Pfad angegeben wurde."
146
 
147
 LogReturnDialog="Log erfolgreich hochgeladen"
148
-LogReturnDialog.Description="Ihre Logdatei wurde hochgeladen. Sie können die URL jetzt für Debugging‐ oder Support‐Zwecke teilen."
149
-LogReturnDialog.Description.Crash="Ihr Absturzbericht wurde hochgeladen. Sie können die URL jetzt für Debugging‐Zwecke teilen."
150
+LogReturnDialog.Description="Ihre Logdatei wurde hochgeladen. Sie können die URL jetzt für Debugging- oder Support-Zwecke teilen."
151
+LogReturnDialog.Description.Crash="Ihr Absturzbericht wurde hochgeladen. Sie können die URL jetzt für Debugging-Zwecke teilen."
152
 LogReturnDialog.CopyURL="URL kopieren"
153
 LogReturnDialog.AnalyzeURL="Analysieren"
154
 LogReturnDialog.ErrorUploadingLog="Fehler beim Hochladen der Logdatei"
155
 
156
-Remux.SourceFile="OBS‐Aufnahme"
157
+Remux.SourceFile="OBS-Aufnahme"
158
 Remux.TargetFile="Zieldatei"
159
 Remux.Remux="Remuxen"
160
 Remux.Stop="Remuxen beenden"
161
 Remux.ClearFinished="Fertiggestellte Objekte entfernen"
162
 Remux.ClearAll="Alle Objekte entfernen"
163
-Remux.OBSRecording="OBS‐Aufnahme"
164
+Remux.OBSRecording="OBS-Aufnahme"
165
 Remux.FinishedTitle="Remuxen beendet"
166
 Remux.Finished="Aufnahme remuxed"
167
 Remux.FinishedError="Aufnahme remuxed, aber die Datei könnte unvollständig sein"
168
-Remux.SelectRecording="Wählen Sie eine OBS‐Aufnahme aus"
169
+Remux.SelectRecording="Wählen Sie eine OBS-Aufnahme aus"
170
 Remux.SelectTarget="Wählen Sie eine Zieldatei aus"
171
 Remux.FileExistsTitle="Zieldateien existieren bereits"
172
 Remux.FileExists="Die folgenden Zieldateien existieren bereits. Möchten Sie diese ersetzen?"
173
 Remux.ExitUnfinishedTitle="Remuxen in Bearbeitung"
174
 Remux.ExitUnfinished="Das Remuxen ist noch nicht abgeschlossen. Wenn Sie jetzt beenden, kann die Zieldatei unbrauchbar werden.\nSind Sie sicher, dass Sie das Remuxen abbrechen möchten?"
175
-Remux.HelpText="Legen Sie Dateien in diesem Fenster ab, um sie zu remuxen oder wählen Sie eine leere „OBS‐Aufnahme“‐Zelle aus, um nach einer Datei zu suchen."
176
+Remux.HelpText="Legen Sie Dateien in diesem Fenster ab, um sie zu remuxen oder wählen Sie eine leere „OBS-Aufnahme“-Zelle aus, um nach einer Datei zu suchen."
177
 
178
 UpdateAvailable="Neues Update verfügbar"
179
 UpdateAvailable.Text="Version %1.%2.%3 ist nun verfügbar. <a href='%4'>Hier klicken zum Herunterladen</a>"
180
 
181
-Basic.DesktopDevice1="Desktop‐Audio"
182
-Basic.DesktopDevice2="Desktop‐Audio 2"
183
-Basic.AuxDevice1="Mikrofon/AUX‐Audio"
184
-Basic.AuxDevice2="Mikrofon/AUX‐Audio 2"
185
-Basic.AuxDevice3="Mikrofon/AUX‐Audio 3"
186
-Basic.AuxDevice4="Mikrofon/AUX‐Audio 4"
187
+Basic.DesktopDevice1="Desktop-Audio"
188
+Basic.DesktopDevice2="Desktop-Audio 2"
189
+Basic.AuxDevice1="Mikrofon/AUX-Audio"
190
+Basic.AuxDevice2="Mikrofon/AUX-Audio 2"
191
+Basic.AuxDevice3="Mikrofon/AUX-Audio 3"
192
+Basic.AuxDevice4="Mikrofon/AUX-Audio 4"
193
 
194
 Basic.Scene="Szene"
195
 Basic.DisplayCapture="Bildschirmaufnahme"
196
@@ -365,8 +366,8 @@
197
 Deinterlacing.TopFieldFirst="Oberes Feld zuerst"
198
 Deinterlacing.BottomFieldFirst="Unteres Feld zuerst"
199
 
200
-VolControl.SliderUnmuted="Lautstärkeschieberegler für „%1“: %2"
201
-VolControl.SliderMuted="Lautstärkeschieberegler für „%1“: %2 (derzeit stummgeschaltet)"
202
+VolControl.SliderUnmuted="Lautstärkeregler für „%1“:"
203
+VolControl.SliderMuted="Lautstärkeregler für „%1“: (derzeit stummgeschaltet)"
204
 VolControl.Mute="„%1“ stummschalten"
205
 VolControl.Properties="Eigenschaften von „%1“"
206
 
207
@@ -382,6 +383,7 @@
208
 
209
 AddProfile.Title="Profil hinzufügen"
210
 AddProfile.Text="Bitte geben Sie den Namen des Profils ein"
211
+AddProfile.WizardCheckbox="Autokonfigurationsassistent anzeigen"
212
 
213
 RenameProfile.Title="Profil umbenennen"
214
 
215
@@ -396,6 +398,11 @@
216
 Basic.SourceSelect.AddExisting="Existierende hinzufügen"
217
 Basic.SourceSelect.AddVisible="Quelle sichtbar machen"
218
 
219
+Basic.Main.Sources.Visibility="Sichtbarkeit"
220
+Basic.Main.Sources.VisibilityDescription="Steuert die Sichtbarkeit von „%1“ in der Leinwand"
221
+Basic.Main.Sources.Lock="Sperren"
222
+Basic.Main.Sources.LockDescription="Sperrt die Position und Größe von „%1“ in der Leinwand"
223
+
224
 Basic.PropertiesWindow="Eigenschaften von „%1“"
225
 Basic.PropertiesWindow.AutoSelectFormat="%1 (automatisch ausgewählt: %2)"
226
 Basic.PropertiesWindow.SelectColor="Farbe auswählen"
227
@@ -411,9 +418,9 @@
228
 Basic.PropertiesWindow.AddEditableListEntry="Eintrag zu „%1“ hinzufügen"
229
 Basic.PropertiesWindow.EditEditableListEntry="Eintrag aus „%1“ bearbeiten"
230
 
231
-Basic.PropertiesView.FPS.Simple="Einfache FPS‐Werte"
232
-Basic.PropertiesView.FPS.Rational="Rationale FPS‐Werte"
233
-Basic.PropertiesView.FPS.ValidFPSRanges="Gültige FPS‐Bereiche:"
234
+Basic.PropertiesView.FPS.Simple="Einfache FPS-Werte"
235
+Basic.PropertiesView.FPS.Rational="Rationale FPS-Werte"
236
+Basic.PropertiesView.FPS.ValidFPSRanges="Gültige FPS-Bereiche:"
237
 
238
 Basic.InteractionWindow="Mit „%1“ interagieren"
239
 
240
@@ -426,7 +433,7 @@
241
 Basic.StatusBar.DelayStartingStoppingIn="Verzögerung (beende in %1 s, starte in %2 s)"
242
 
243
 Basic.Filters="Filter"
244
-Basic.Filters.AsyncFilters="Audio‐/Videofilter"
245
+Basic.Filters.AsyncFilters="Audio-/Videofilter"
246
 Basic.Filters.AudioFilters="Audiofilter"
247
 Basic.Filters.EffectFilters="Effektfilter"
248
 Basic.Filters.Title="Filter für „%1“"
249
@@ -537,10 +544,10 @@
250
 Basic.MainMenu.View="Ansicht (&V)"
251
 Basic.MainMenu.View.Toolbars="Werkzeugleisten (&T)"
252
 Basic.MainMenu.View.Docks="Docks"
253
-Basic.MainMenu.View.Docks.ResetUI="GUI zurücksetzen"
254
-Basic.MainMenu.View.Docks.LockUI="GUI sperren"
255
-Basic.MainMenu.View.Docks.CustomBrowserDocks="Benutzerdefinierte Browser‐Docks …"
256
-Basic.MainMenu.View.ListboxToolbars="Schaltflächen für Szenen‐/Quellenlisten"
257
+Basic.MainMenu.View.Docks.ResetUI="Benutzeroberfläche zurücksetzen"
258
+Basic.MainMenu.View.Docks.LockUI="Benutzeroberfläche sperren"
259
+Basic.MainMenu.View.Docks.CustomBrowserDocks="Benutzerdefinierte Browser-Docks …"
260
+Basic.MainMenu.View.ListboxToolbars="Schaltflächen für Szenen-/Quellenlisten"
261
 Basic.MainMenu.View.ContextBar="Quellenwerkzeugleiste"
262
 Basic.MainMenu.View.SceneTransitions="Szenenübergänge (&C)"
263
 Basic.MainMenu.View.SourceIcons="Quellsymbole (&I)"
264
@@ -561,7 +568,7 @@
265
 Basic.MainMenu.Help="&Hilfe"
266
 Basic.MainMenu.Help.HelpPortal="Hilfe&portal"
267
 Basic.MainMenu.Help.Website="&Webseite besuchen"
268
-Basic.MainMenu.Help.Discord="&Discord‐Server beitreten"
269
+Basic.MainMenu.Help.Discord="&Discord-Server beitreten"
270
 Basic.MainMenu.Help.Logs="&Logdateien"
271
 Basic.MainMenu.Help.Logs.ShowLogs="Logdateien anzeigen (&S)"
272
 Basic.MainMenu.Help.Logs.UploadCurrentLog="Aktuelle Logdatei ho&chladen"
273
@@ -608,8 +615,8 @@
274
 Basic.Settings.General.Importers="Importierung"
275
 Basic.Settings.General.AutomaticCollectionSearch="Beim Importieren bekannte Orte nach Szenensammlungen durchsuchen"
276
 Basic.Settings.General.SwitchOnDoubleClick="Übergang zu Szene bei Doppelklick"
277
-Basic.Settings.General.StudioPortraitLayout="Porträt‐/vertikales Layout aktivieren"
278
-Basic.Settings.General.TogglePreviewProgramLabels="Vorschau‐/Programmbeschriftung anzeigen"
279
+Basic.Settings.General.StudioPortraitLayout="Porträt-/vertikales Layout aktivieren"
280
+Basic.Settings.General.TogglePreviewProgramLabels="Vorschau-/Programmbeschriftung anzeigen"
281
 Basic.Settings.General.Multiview="Multiview"
282
 Basic.Settings.General.Multiview.MouseSwitch="Klicken, um zwischen Szenen zu wechseln"
283
 Basic.Settings.General.Multiview.DrawSourceNames="Szenennamen anzeigen"
284
@@ -627,34 +634,40 @@
285
 Basic.Settings.Stream.Custom.Username="Nutzername"
286
 Basic.Settings.Stream.Custom.Password="Passwort"
287
 Basic.Settings.Stream.BandwidthTestMode="Bandbreitentestmodus aktivieren"
288
-Basic.Settings.Stream.TTVAddon="Twitch‐Chat‐Add‐Ons"
289
+Basic.Settings.Stream.TTVAddon="Twitch-Chat-Add-Ons"
290
 Basic.Settings.Stream.TTVAddon.None="Keins"
291
 Basic.Settings.Stream.TTVAddon.Both="BetterTTV und FrankerFaceZ"
292
 Basic.Settings.Stream.MissingSettingAlert="Unvollständige Streameinrichtung"
293
 Basic.Settings.Stream.StreamSettingsWarning="Einstellungen öffnen"
294
-Basic.Settings.Stream.MissingUrlAndApiKey="URL und Streamschlüssel fehlen.\n\nÖffnen Sie die Einstellungen, um die URL und den Streamschlüssel im Stream‐Tab einzugeben."
295
-Basic.Settings.Stream.MissingUrl="Stream‐URL fehlt.\n\nÖffnen Sie die Einstellungen, um die URL im Stream‐Tab einzugeben."
296
-Basic.Settings.Stream.MissingStreamKey="Streamschlüssel fehlt.\n\nÖffnen Sie die Einstellungen, um den Streamschlüssel im Stream‐Tab einzugeben."
297
+Basic.Settings.Stream.MissingUrlAndApiKey="URL und Streamschlüssel fehlen.\n\nÖffnen Sie die Einstellungen, um die URL und den Streamschlüssel im Stream-Tab einzugeben."
298
+Basic.Settings.Stream.MissingUrl="Stream-URL fehlt.\n\nÖffnen Sie die Einstellungen, um die URL im Stream-Tab einzugeben."
299
+Basic.Settings.Stream.MissingStreamKey="Streamschlüssel fehlt.\n\nÖffnen Sie die Einstellungen, um den Streamschlüssel im Stream-Tab einzugeben."
300
+Basic.Settings.Stream.IgnoreRecommended="Empfehlungen für Einstellungen der Streamingplattform ignorieren"
301
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Empfohlene Einstellungen überschreiben"
302
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Warnung: Das Ignorieren von Limitierungen einer Plattform kann zu einer verschlechterten Streamqualität führen oder Sie komplett am Streamen hindern.\n\nFortfahren?"
303
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Maximale Videobitrate: %1 kbps"
304
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Maximale Audiobitrate: %1 kbps"
305
+Basic.Settings.Stream.Recommended.MaxResolution="Maximale Auflösung: %1"
306
+Basic.Settings.Stream.Recommended.MaxFPS="Maximale FPS: %1"
307
 
308
 Basic.Settings.Output="Ausgabe"
309
 Basic.Settings.Output.Format="Aufnahmeformat"
310
 Basic.Settings.Output.Encoder="Encoder"
311
 Basic.Settings.Output.SelectDirectory="Wählen Sie den Aufnahmeordner aus"
312
 Basic.Settings.Output.SelectFile="Wählen Sie ein Aufnahmedatei aus"
313
-Basic.Settings.Output.EnforceBitrate="Bitratenlimit des Streamingdienstes erzwingen"
314
 Basic.Settings.Output.DynamicBitrate="Bitrate dynamisch verändern, um Überlastung zu kontrollieren"
315
 Basic.Settings.Output.DynamicBitrate.Beta="Bitrate dynamisch verändern, um Überlastung zu kontrollieren (Beta)"
316
 Basic.Settings.Output.DynamicBitrate.TT="Anstatt Frames wegfallen zu lassen, um Überlastung zu verringern, wird die Bitrate dynamisch verändert.\n\nBeachten Sie, dass dies die Verzögerung zu den Zuschauern bei erheblich unerwartet hoher Überlastung erhöhen kann.\nWenn die Bitrate fällt, kann der Wiederherstellungsvorgang ein paar Minuten dauern.\n\nDerzeit nur für RTMP unterstützt."
317
 Basic.Settings.Output.Mode="Ausgabemodus"
318
 Basic.Settings.Output.Mode.Simple="Einfach"
319
 Basic.Settings.Output.Mode.Adv="Erweitert"
320
-Basic.Settings.Output.Mode.FFmpeg="FFmpeg‐Ausgabe"
321
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg-Ausgabe"
322
 Basic.Settings.Output.UseReplayBuffer="Wiederholungspuffer aktivieren"
323
 Basic.Settings.Output.ReplayBuffer.SecondsMax="Maximale Wiederholungszeit"
324
-Basic.Settings.Output.ReplayBuffer.MegabytesMax="Maximale RAM‐Nutzung in MB"
325
-Basic.Settings.Output.ReplayBuffer.Estimate="Geschätzte RAM‐Nutzung: %1 MB"
326
-Basic.Settings.Output.ReplayBuffer.EstimateUnknown="RAM‐Nutzung kann nicht geschätzt werden. Stellen Sie diese bitte ein."
327
-Basic.Settings.Output.ReplayBuffer.Prefix="Wiederholungspuffer‐Dateinamen‐Präfix"
328
+Basic.Settings.Output.ReplayBuffer.MegabytesMax="Maximale RAM-Nutzung in MB"
329
+Basic.Settings.Output.ReplayBuffer.Estimate="Geschätzte RAM-Nutzung: %1 MB"
330
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="RAM-Nutzung kann nicht geschätzt werden. Stellen Sie diese bitte ein."
331
+Basic.Settings.Output.ReplayBuffer.Prefix="Wiederholungspuffer-Dateinamen-Präfix"
332
 Basic.Settings.Output.ReplayBuffer.Suffix="Suffix"
333
 Basic.Settings.Output.Simple.SavePath="Aufnahmepfad"
334
 Basic.Settings.Output.Simple.RecordingQuality="Aufnahmequalität"
335
@@ -662,10 +675,10 @@
336
 Basic.Settings.Output.Simple.RecordingQuality.Small="Hohe Qualität; mittelgroße Dateien"
337
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Ununterscheidbare Qualität; große Dateien"
338
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Verlustfreie Qualität; enorm große Dateien"
339
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Warnung: Die Videobitrate beim Streamen wird auf %1 festgelegt, was der Obergrenze des aktuellen Streamingdienstes entspricht. Falls Sie sicher sind, dass Sie %1 überschreiten wollen, deaktivieren Sie „Bitratenlimit des Streamingdienstes erzwingen“ in den erweiterten Encodereinstellungen."
340
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Warnung: Die Audiobitrate beim Streamen wird auf %1 festgelegt, was der Obergrenze des aktuellen Streamingdienstes entspricht. Falls Sie sicher sind, dass Sie %1 überschreiten wollen, deaktivieren Sie „Bitratenlimit des Streamingdienstes erzwingen“ in den erweiterten Encodereinstellungen."
341
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Warnung: Die Streamvideobitrate wird auf %1 gesetzt, was der oberen Grenze der aktuellen Streamingplattform entspricht."
342
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Warnung: Die Streamaudiobitrate wird auf %1 gesetzt, was der oberen Grenze der aktuellen Streamingplattform entspricht."
343
 Basic.Settings.Output.Simple.Warn.CannotPause="Warnung: Aufnahmen können nicht pausiert werden, wenn die Aufnahmequalität „Gleich wie Stream“ ist."
344
-Basic.Settings.Output.Simple.Warn.Encoder="Warnung: Mit einem Softwareencoder in einer anderen Qualität als der des Streams aufzunehmen erfordert zusätzliche CPU‐Auslastung, wenn Sie gleichzeitig streamen und aufnehmen."
345
+Basic.Settings.Output.Simple.Warn.Encoder="Warnung: Mit einem Softwareencoder in einer anderen Qualität als der des Streams aufzunehmen erfordert zusätzliche CPU-Auslastung, wenn Sie gleichzeitig streamen und aufnehmen."
346
 Basic.Settings.Output.Simple.Warn.Lossless="Warnung: Verlustfreie Qualität erzeugt enorm große Dateien! Bei dieser Einstellung kann bei hohen Auflösungen und Frameraten mehr als 7 GB Speicherplatz pro Minute in Anspruch genommen werden. Sie ist für lange Aufnahmen daher nicht empfohlen, es sei denn, Sie haben eine sehr große Menge an Speicherplatz zur Verfügung."
347
 Basic.Settings.Output.Simple.Warn.Lossless.Msg="Sind Sie sicher, dass Sie verlustfreie Qualität verwenden möchten?"
348
 Basic.Settings.Output.Simple.Warn.Lossless.Title="Warnung zur verlustfreien Qualität"
349
@@ -673,7 +686,12 @@
350
 Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Hardware (QSV)"
351
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardware (AMD)"
352
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardware (NVENC)"
353
-Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Software (x264 niedrige CPU‐Auslastungsvoreinstellung; erhöht die Dateigröße)"
354
+Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Software (x264 niedrige CPU-Auslastungsvoreinstellung; erhöht die Dateigröße)"
355
+Basic.Settings.Output.Simple.TwitchVodTrack="Twitch-VOD-Spur (verwendet Spur 2)"
356
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Inkompatible Auflösung/Framerate"
357
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Diese Streamingplattform unterstützt Ihre aktuelle Ausgabeauflösung und/oder Framerate nicht. Die Werte werden auf den nächstmöglichen kompatiblen Wert geändert:\n\n%1\n\nMöchten Sie fortfahren?"
358
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Auflösung: %1"
359
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS: %1"
360
 Basic.Settings.Output.VideoBitrate="Videobitrate"
361
 Basic.Settings.Output.AudioBitrate="Audiobitrate"
362
 Basic.Settings.Output.Reconnect="Automatisch wiederverbinden"
363
@@ -688,40 +706,41 @@
364
 Basic.Settings.Output.Adv.Rescale="Ausgabe umskalieren"
365
 Basic.Settings.Output.Adv.AudioTrack="Audiospur"
366
 Basic.Settings.Output.Adv.Streaming="Streaming"
367
-Basic.Settings.Output.Adv.ApplyServiceSettings="Encodereinstellungen des Streamingdienstes erzwingen"
368
 Basic.Settings.Output.Adv.Audio.Track1="Spur 1"
369
 Basic.Settings.Output.Adv.Audio.Track2="Spur 2"
370
 Basic.Settings.Output.Adv.Audio.Track3="Spur 3"
371
 Basic.Settings.Output.Adv.Audio.Track4="Spur 4"
372
 Basic.Settings.Output.Adv.Audio.Track5="Spur 5"
373
 Basic.Settings.Output.Adv.Audio.Track6="Spur 6"
374
+Basic.Settings.Output.Adv.TwitchVodTrack="Twitch-VOD-Spur"
375
 
376
 Basic.Settings.Output.Adv.Recording="Aufnahme"
377
+Basic.Settings.Output.Adv.Recording.RecType="Aufnahmetyp"
378
 Basic.Settings.Output.Adv.Recording.Type="Art"
379
 Basic.Settings.Output.Adv.Recording.Type.Standard="Normal"
380
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Benutzerdefinierte Ausgabe (FFmpeg)"
381
 Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Streamencoder verwenden)"
382
 Basic.Settings.Output.Adv.Recording.Filename="Dateinamenformatierung"
383
 Basic.Settings.Output.Adv.Recording.OverwriteIfExists="Überschreiben, wenn Datei vorhanden"
384
-Basic.Settings.Output.Adv.FFmpeg.Type="FFmpeg‐Ausgabetyp"
385
+Basic.Settings.Output.Adv.FFmpeg.Type="FFmpeg-Ausgabetyp"
386
 Basic.Settings.Output.Adv.FFmpeg.Type.URL="Ausgabe zu URL"
387
 Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile="Ausgabe in Datei"
388
 Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Häufige Aufnahmeformate"
389
 Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Alle Dateien"
390
 Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Dateipfad oder URL"
391
-Basic.Settings.Output.Adv.FFmpeg.Format="Container‐Format"
392
+Basic.Settings.Output.Adv.FFmpeg.Format="Container-Format"
393
 Basic.Settings.Output.Adv.FFmpeg.FormatAudio="Audio"
394
 Basic.Settings.Output.Adv.FFmpeg.FormatVideo="Video"
395
 Basic.Settings.Output.Adv.FFmpeg.FormatDefault="Standardformat"
396
-Basic.Settings.Output.Adv.FFmpeg.FormatDesc="Container‐Formatbeschreibung"
397
-Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="Audio‐/Videocodec wird aus Dateipfad oder URL gebildet"
398
+Basic.Settings.Output.Adv.FFmpeg.FormatDesc="Container-Formatbeschreibung"
399
+Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="Audio-/Videocodec wird aus Dateipfad oder URL gebildet"
400
 Basic.Settings.Output.Adv.FFmpeg.AVEncoderDefault="Standardencoder"
401
 Basic.Settings.Output.Adv.FFmpeg.AVEncoderDisable="Encoder deaktivieren"
402
 Basic.Settings.Output.Adv.FFmpeg.VEncoder="Videoencoder"
403
 Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Videoencodereinstellungen (falls angegeben)"
404
 Basic.Settings.Output.Adv.FFmpeg.AEncoder="Audioencoder"
405
 Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Audioencodereinstellungen (falls angegeben)"
406
-Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Muxer‐Einstellungen (falls angegeben)"
407
+Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Muxer-Einstellungen (falls angegeben)"
408
 Basic.Settings.Output.Adv.FFmpeg.GOPSize="Keyframeintervall (Frames)"
409
 Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Alle Codecs anzeigen (auch wenn möglicherweise inkompatibel)"
410
 
411
@@ -734,18 +753,18 @@
412
 
413
 FilenameFormatting.completer="%DD-%MM-%CCYY %hh-%mm-%ss\n%DD-%MM-%YY %hh-%mm-%ss\n%d-%m-%Y %H-%M-%S\n%d-%m-%y %H-%M-%S\n%a %d-%m-%Y %H-%M-%S\n%A %d-%m-%Y %H-%M-%S\n%d-%b-%Y %H-%M-%S\n%d-%B-%Y %H-%M-%S\n%FPS\n%CRES\n%ORES\n%VF"
414
 
415
-FilenameFormatting.TT="%CCYY   Jahr; vier Ziffern\n%YY     Jahr; letzte zwei Ziffern (00–99)\n%MM      Monat als Dezimalzahl (01–12)\n%DD      Tag des Monats mit Nullen aufgefüllt (01–31)\n%hh       Stunden im 24‐Stunden‐Format (00–23)\n%mm       Minute (00–59)\n%ss     Sekunde (00–61)\n%%     ein %‐Zeichen\n%a       abgekürzter Wochentagsname (Englisch)\n%A       voller Wochentagsname (Englisch)\n%b        abgekürzer Monatsname (Englisch)\n%B        voller Monatsname (Englisch)\n%d        Tag des Monats mit Nullen aufgefüllt (01–31)\n%H        Stunden im 24‐Stunden‐Format (00–23)\n%I        Stunden im 12‐Stunden‐Format (01–12)\n%m        Monat als Dezimalzahl (01–12)\n%M       Minute (00–59)\n%p      vormittags‐ oder nachmittags‐Angabe\n%S     Sekunde (00–61)\n%y     Jahr; letzte zwei Ziffern (00–99)\n%Y       Jahr\n%z        ISO‐8601‐Verschiebung von UTC oder Zeitzone\n%Z     Zeitzonenname oder Abkürzung\n%FPS      Frames pro Sekunde\n%CRES       Basis‐(Leinwand‐)Auflösung\n%ORES       (skalierte) Ausgabeauflösung\n%VF       Videoformat"
416
+FilenameFormatting.TT="%CCYY   Jahr; vier Ziffern\n%YY     Jahr; letzte zwei Ziffern (00–99)\n%MM      Monat als Dezimalzahl (01–12)\n%DD      Tag des Monats mit Nullen aufgefüllt (01–31)\n%hh       Stunden im 24-Stunden-Format (00–23)\n%mm       Minute (00–59)\n%ss     Sekunde (00–61)\n%%     ein %-Zeichen\n%a       abgekürzter Wochentagsname (Englisch)\n%A       voller Wochentagsname (Englisch)\n%b        abgekürzer Monatsname (Englisch)\n%B        voller Monatsname (Englisch)\n%d        Tag des Monats mit Nullen aufgefüllt (01–31)\n%H        Stunden im 24-Stunden-Format (00–23)\n%I        Stunden im 12-Stunden-Format (01–12)\n%m        Monat als Dezimalzahl (01–12)\n%M       Minute (00–59)\n%p      vormittags- oder nachmittags-Angabe\n%S     Sekunde (00–61)\n%y     Jahr; letzte zwei Ziffern (00–99)\n%Y       Jahr\n%z        ISO-8601-Verschiebung von UTC oder Zeitzone\n%Z     Zeitzonenname oder Abkürzung\n%FPS      Frames pro Sekunde\n%CRES       Basis-(Leinwand-)Auflösung\n%ORES       (skalierte) Ausgabeauflösung\n%VF       Videoformat"
417
 
418
 Basic.Settings.Video="Video"
419
 Basic.Settings.Video.Adapter="Grafikkarte"
420
-Basic.Settings.Video.BaseResolution="Basis‐(Leinwand‐)Auflösung"
421
+Basic.Settings.Video.BaseResolution="Basis-(Leinwand-)Auflösung"
422
 Basic.Settings.Video.ScaledResolution="(Skalierte) Ausgabeauflösung"
423
 Basic.Settings.Video.DownscaleFilter="Skalierungsfilter"
424
 Basic.Settings.Video.DisableAeroWindows="Aero deaktivieren (nur Windows)"
425
 Basic.Settings.Video.FPS="FPS"
426
-Basic.Settings.Video.FPSCommon="Übliche FPS‐Werte"
427
-Basic.Settings.Video.FPSInteger="Ganzzahl‐FPS‐Wert"
428
-Basic.Settings.Video.FPSFraction="Bruch‐FPS‐Wert"
429
+Basic.Settings.Video.FPSCommon="Übliche FPS-Werte"
430
+Basic.Settings.Video.FPSInteger="Ganzzahl-FPS-Wert"
431
+Basic.Settings.Video.FPSFraction="Bruch-FPS-Wert"
432
 Basic.Settings.Video.Numerator="Zähler"
433
 Basic.Settings.Video.Denominator="Nenner"
434
 Basic.Settings.Video.Renderer="Renderer"
435
@@ -768,22 +787,22 @@
436
 Basic.Settings.Audio.MeterDecayRate.Slow="Langsam (Type II PPM)"
437
 Basic.Settings.Audio.PeakMeterType="Spitzenmessertyp"
438
 Basic.Settings.Audio.PeakMeterType.SamplePeak="Sample Peak"
439
-Basic.Settings.Audio.PeakMeterType.TruePeak="True Peak (höhere CPU‐Auslastung)"
440
-Basic.Settings.Audio.MultiChannelWarning.Enabled="WARNUNG: Surround‐Sound‐Audio ist aktiviert."
441
-Basic.Settings.Audio.MultichannelWarning="Überprüfen Sie beim Streamen, ob Ihr Streamingdienst sowohl die Einspeisung von Surround‐Sound als auch die Surround‐Sound‐Wiedergabe unterstützt. Facebook 360 Live ist ein Beispiel, bei dem Surround‐Sound voll unterstützt wird. Obwohl Facebook Live und YouTube Live beide die Surround‐Einspeisung akzeptieren, wird Facebook Live auf Stereo heruntergemischt und YouTube Live spielt nur zwei Kanäle ab.\n\nOBS‐Audiofilter sind mit Surround‐Sound kompatibel, die VST‐Pluginunterstützung ist aber nicht garantiert."
442
-Basic.Settings.Audio.MultichannelWarning.Title="Surround‐Sound‐Audio aktivieren?"
443
-Basic.Settings.Audio.MultichannelWarning.Confirm="Sind Sie sicher, dass Sie Surround‐Sound‐Audio wirklich aktivieren möchten?"
444
+Basic.Settings.Audio.PeakMeterType.TruePeak="True Peak (höhere CPU-Auslastung)"
445
+Basic.Settings.Audio.MultiChannelWarning.Enabled="WARNUNG: Surround-Sound-Audio ist aktiviert."
446
+Basic.Settings.Audio.MultichannelWarning="Überprüfen Sie beim Streamen, ob Ihre Streamingplattform sowohl die Einspeisung von Surround-Sound als auch die Surround-Sound-Wiedergabe unterstützt. Facebook 360 Live ist ein Beispiel, bei dem Surround-Sound voll unterstützt wird. Obwohl Facebook Live und YouTube Live beide die Surround-Einspeisung akzeptieren, wird Facebook Live auf Stereo heruntergemischt und YouTube Live spielt nur zwei Kanäle ab.\n\nOBS-Audiofilter sind mit Surround-Sound kompatibel, die VST-Pluginunterstützung ist aber nicht garantiert."
447
+Basic.Settings.Audio.MultichannelWarning.Title="Surround-Sound-Audio aktivieren?"
448
+Basic.Settings.Audio.MultichannelWarning.Confirm="Sind Sie sicher, dass Sie Surround-Sound-Audio wirklich aktivieren möchten?"
449
 Basic.Settings.Audio.Devices="Globale Audiogeräte"
450
-Basic.Settings.Audio.DesktopDevice="Desktop‐Audio"
451
-Basic.Settings.Audio.DesktopDevice2="Desktop‐Audio 2"
452
-Basic.Settings.Audio.AuxDevice="Mikrofon/AUX‐Audio"
453
-Basic.Settings.Audio.AuxDevice2="Mikrofon/AUX‐Audio 2"
454
-Basic.Settings.Audio.AuxDevice3="Mikrofon/AUX‐Audio 3"
455
-Basic.Settings.Audio.AuxDevice4="Mikrofon/AUX‐Audio 4"
456
-Basic.Settings.Audio.EnablePushToMute="Push‐To‐Mute aktivieren"
457
-Basic.Settings.Audio.PushToMuteDelay="Push‐To‐Mute‐Verzögerung"
458
-Basic.Settings.Audio.EnablePushToTalk="Push‐To‐Talk aktivieren"
459
-Basic.Settings.Audio.PushToTalkDelay="Push‐To‐Talk‐Verzögerung"
460
+Basic.Settings.Audio.DesktopDevice="Desktop-Audio"
461
+Basic.Settings.Audio.DesktopDevice2="Desktop-Audio 2"
462
+Basic.Settings.Audio.AuxDevice="Mikrofon/AUX-Audio"
463
+Basic.Settings.Audio.AuxDevice2="Mikrofon/AUX-Audio 2"
464
+Basic.Settings.Audio.AuxDevice3="Mikrofon/AUX-Audio 3"
465
+Basic.Settings.Audio.AuxDevice4="Mikrofon/AUX-Audio 4"
466
+Basic.Settings.Audio.EnablePushToMute="Push-To-Mute aktivieren"
467
+Basic.Settings.Audio.PushToMuteDelay="Push-To-Mute-Verzögerung"
468
+Basic.Settings.Audio.EnablePushToTalk="Push-To-Talk aktivieren"
469
+Basic.Settings.Audio.PushToTalkDelay="Push-To-Talk-Verzögerung"
470
 Basic.Settings.Audio.UnknownAudioDevice="[Gerät nicht angeschlossen oder nicht verfügbar]"
471
 Basic.Settings.Audio.Disabled="Deaktiviert"
472
 
473
@@ -794,25 +813,25 @@
474
 Basic.Settings.Advanced.General.ProcessPriority.Normal="Normal"
475
 Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Niedriger als normal"
476
 Basic.Settings.Advanced.General.ProcessPriority.Idle="Niedrig"
477
-Basic.Settings.Advanced.FormatWarning="Warnung: Andere Farbformate als NV12 sind in erster Linie für die Aufnahme bestimmt und sind für Streaming nicht zu empfehlen. Die erforderliche Farbformatkonvertierung kann eine erhöhte CPU‐Auslastung hervorrufen."
478
+Basic.Settings.Advanced.FormatWarning="Warnung: Andere Farbformate als NV12 sind in erster Linie für die Aufnahme bestimmt und sind für Streaming nicht zu empfehlen. Die erforderliche Farbformatkonvertierung kann eine erhöhte CPU-Auslastung hervorrufen."
479
 Basic.Settings.Advanced.Audio.BufferingTime="Audiopufferungszeit"
480
 Basic.Settings.Advanced.Video.ColorFormat="Farbformat"
481
 Basic.Settings.Advanced.Video.ColorSpace="Farbraum"
482
 Basic.Settings.Advanced.Video.ColorRange="Farbbereich"
483
 Basic.Settings.Advanced.Video.ColorRange.Partial="Begrenzt"
484
 Basic.Settings.Advanced.Video.ColorRange.Full="Voll"
485
-Basic.Settings.Advanced.Audio.MonitoringDevice="Monitoring‐Gerät"
486
+Basic.Settings.Advanced.Audio.MonitoringDevice="Monitoring-Gerät"
487
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Standard"
488
-Basic.Settings.Advanced.Audio.DisableAudioDucking="Windows‐Audioducking deaktivieren"
489
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Windows-Audioducking deaktivieren"
490
 Basic.Settings.Advanced.StreamDelay="Streamverzögerung"
491
 Basic.Settings.Advanced.StreamDelay.Duration="Dauer"
492
-Basic.Settings.Advanced.StreamDelay.Preserve="Lückenloses Wiederverbinden (erhöht Verzögerung, um Videoverlust zu vermeiden)"
493
+Basic.Settings.Advanced.StreamDelay.Preserve="Lückenloses Wiederverbinden (erhöht Verzögerung, um Videoverluste zu vermeiden)"
494
 Basic.Settings.Advanced.StreamDelay.MemoryUsage="Geschätzte Speichernutzung: %1 MB"
495
 Basic.Settings.Advanced.Network="Netzwerk"
496
 Basic.Settings.Advanced.Network.BindToIP="Interface"
497
 Basic.Settings.Advanced.Network.EnableNewSocketLoop="Netzwerkoptimierung aktivieren"
498
 Basic.Settings.Advanced.Network.EnableLowLatencyMode="TCP Pacing aktivieren"
499
-Basic.Settings.Advanced.Network.TCPPacing.Tooltip="Versucht, die RTMP‐Ausgabe für andere latenzempfindliche Anwendungen im Netzwerk durch Regulierung der Übertragungsrate zu erleichtern.\nDies kann zur Erhöhung des Risikos für ausgelassene Frames bei instabilen Verbindungen führen."
500
+Basic.Settings.Advanced.Network.TCPPacing.Tooltip="Versucht, die RTMP-Ausgabe für andere latenzempfindliche Anwendungen im Netzwerk durch Regulierung der Übertragungsrate zu erleichtern.\nDies kann zur Erhöhung des Risikos für ausgelassene Frames bei instabilen Verbindungen führen."
501
 Basic.Settings.Advanced.Hotkeys.HotkeyFocusBehavior="Hotkeyfokusverhalten"
502
 Basic.Settings.Advanced.Hotkeys.NeverDisableHotkeys="Hotkeys nie deaktivieren"
503
 Basic.Settings.Advanced.Hotkeys.DisableHotkeysInFocus="Hotkeys deaktivieren, wenn Hauptfenster im Fokus"
504
@@ -824,13 +843,18 @@
505
 Basic.AdvAudio.ActiveOnly="Nur aktive Quellen"
506
 Basic.AdvAudio.Name="Name"
507
 Basic.AdvAudio.Volume="Lautstärke"
508
+Basic.AdvAudio.VolumeSource="Lautstärke für „%1“"
509
 Basic.AdvAudio.Mono="Mono"
510
+Basic.AdvAudio.MonoSource="Mono-Downmix für „%1“"
511
 Basic.AdvAudio.Balance="Balance"
512
+Basic.AdvAudio.BalanceSource="Balance für „%1“"
513
 Basic.AdvAudio.SyncOffset="Synchronisationsausgleich"
514
-Basic.AdvAudio.Monitoring="Audio‐Monitoring"
515
+Basic.AdvAudio.SyncOffsetSource="Synchronisationsausgleich für „%1“"
516
+Basic.AdvAudio.Monitoring="Audio-Monitoring"
517
 Basic.AdvAudio.Monitoring.None="Monitor aus"
518
 Basic.AdvAudio.Monitoring.MonitorOnly="Nur Monitor (Ausgabe stummschalten)"
519
 Basic.AdvAudio.Monitoring.Both="Monitor und Ausgabe"
520
+Basic.AdvAudio.MonitoringSource="Audio-Monitoring für „%1“"
521
 Basic.AdvAudio.AudioTracks="Spuren"
522
 
523
 Basic.Settings.Hotkeys="Hotkeys"
524
@@ -850,8 +874,8 @@
525
 Hotkeys.End="Ende"
526
 Hotkeys.PageUp="Bild nach oben"
527
 Hotkeys.PageDown="Bild nach unten"
528
-Hotkeys.NumLock="Num‐Taste"
529
-Hotkeys.ScrollLock="Rollen‐Taste"
530
+Hotkeys.NumLock="Num-Taste"
531
+Hotkeys.ScrollLock="Rollen-Taste"
532
 Hotkeys.CapsLock="Feststelltaste"
533
 Hotkeys.Backspace="Rücktaste"
534
 Hotkeys.Tab="Tabulator"
535
@@ -883,14 +907,14 @@
536
 
537
 Mute="Stummschalten"
538
 Unmute="Stummschaltung aufheben"
539
-Push-to-mute="Push‐To‐Mute"
540
-Push-to-talk="Push‐To‐Talk"
541
+Push-to-mute="Push-To-Mute"
542
+Push-to-talk="Push-To-Talk"
543
 
544
 SceneItemShow="„%1“ anzeigen"
545
 SceneItemHide="„%1“ verstecken"
546
 
547
 OutputWarnings.NoTracksSelected="Sie müssen mindestens eine Spur auswählen"
548
-OutputWarnings.MP4Recording="Warnung: Aufnahmen, die in MP4/MOV gespeichert werden, sind nicht wiederherstellbar, wenn die Datei nicht abgeschlossen werden konnte (z. B. als Folge von BSODs, Stromausfällen, etc.). Wenn Sie mehrere Audiospuren aufnehmen möchten, sollten Sie MKV verwenden und die Aufnahme zu MP4/MOV remuxen, nachdem sie fertig ist. („Datei“ → „Aufnahmen remuxen“)"
549
+OutputWarnings.MP4Recording="Warnung: Aufnahmen, die in MP4/MOV gespeichert werden, sind nicht wiederherstellbar, wenn die Datei nicht abgeschlossen werden konnte (z. B. als Folge von BSODs, Stromausfällen, etc.). Wenn Sie mehrere Audiospuren aufnehmen möchten, sollten Sie MKV verwenden und die Aufnahme zu MP4/MOV remuxen, nachdem sie fertig ist. (Datei → Aufnahmen remuxen)"
550
 OutputWarnings.CannotPause="Warnung: Aufnahmen können nicht pausiert werden, wenn der Aufnahmeencoder auf „(Streamencoder verwenden)“ gesetzt ist"
551
 
552
 FinalScene.Title="Szene entfernen"
553
@@ -898,8 +922,8 @@
554
 
555
 NoSources.Title="Keine Quellen"
556
 NoSources.Text="Offenbar haben Sie noch keine Videoquellen hinzugefügt, sodass nur ein leerer Bildschirm ausgegeben wird. Sind Sie sicher, dass Sie das wollen?"
557
-NoSources.Text.AddSource="Sie können jederzeit Quellen hinzufügen, indem Sie auf das +‐Symbol unter dem Quellenfeld im Hauptfenster klicken."
558
-NoSources.Label="Sie haben bis jetzt keine Quellen hinzugefügt.\nKlicken Sie auf das +‐Symbol oder\nrechtsklicken Sie hier, um welche hinzuzufügen."
559
+NoSources.Text.AddSource="Sie können jederzeit Quellen hinzufügen, indem Sie auf das +-Symbol unter dem Quellenfeld im Hauptfenster klicken."
560
+NoSources.Label="Sie haben bis jetzt keine Quellen hinzugefügt.\nKlicken Sie auf das +-Symbol oder\nrechtsklicken Sie hier, um welche hinzuzufügen."
561
 
562
 ChangeBG="Farbe auswählen"
563
 CustomColor="Benutzerdefinierte Farbe"
564
@@ -907,19 +931,19 @@
565
 BrowserSource.EnableHardwareAcceleration="Browserhardwarebeschleunigung aktivieren"
566
 
567
 About="Über OBS Studio"
568
-About.Info="OBS Studio ist eine freie und Open‐Source‐Videoaufnahme‐ und Livestreaming‐Software."
569
+About.Info="OBS Studio ist eine freie und Open-Source-Videoaufnahme- und Livestreaming-Software."
570
 About.Donate="Leisten Sie einen Beitrag"
571
 About.GetInvolved="Wirken Sie mit"
572
 About.Authors="Autoren"
573
 About.License="Lizenzvereinbarung"
574
-About.Contribute="Unterstützen Sie das OBS‐Projekt"
575
+About.Contribute="Unterstützen Sie das OBS-Projekt"
576
 
577
 AddUrl.Title="Quelle per URL hinzufügen"
578
 AddUrl.Text="Sie haben eine URL in OBS gezogen. Dies wird automatisch den Link als Quelle hinzufügen. Fortfahren?"
579
 AddUrl.Text.Url="URL: %1"
580
 
581
 ResizeOutputSizeOfSource="Ausgabeauflösung anpassen (Quellgröße)"
582
-ResizeOutputSizeOfSource.Text="Die Basis‐ und Ausgabeauflösung wird auf die Größe der aktuellen Quelle geändert."
583
+ResizeOutputSizeOfSource.Text="Die Basis- und Ausgabeauflösung wird auf die Größe der aktuellen Quelle geändert."
584
 ResizeOutputSizeOfSource.Continue="Möchten Sie fortfahren?"
585
 
586
 PreviewTransition="Übergangsvorschau"
587
@@ -931,7 +955,7 @@
588
 Importer.Path="Sammlungspfad"
589
 Importer.Program="Erkannte Anwendung"
590
 Importer.AutomaticCollectionPrompt="Automatisch nach Szenensammlungen suchen"
591
-Importer.AutomaticCollectionText="OBS kann automatisch importierbare Szenensammlungen von Drittanbieter‐Programmen finden. Möchten Sie, dass OBS automatisch nach Sammlungen für Sie sucht?\n\nSie können diese Einstellung später unter „Einstellungen“ → „Allgemein“ → „Importierung“ ändern."
592
+Importer.AutomaticCollectionText="OBS kann automatisch importierbare Szenensammlungen von Drittanbieter-Programmen finden. Möchten Sie, dass OBS automatisch nach Sammlungen für Sie sucht?\n\nSie können diese Einstellung später unter Einstellungen → Allgemein → Importierung ändern."
593
 
594
 
595
 Restart="Neustart"
596
obs-studio-26.0.2.tar.xz/UI/data/locale/el-GR.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/el-GR.ini Changed
184
 
1
@@ -93,6 +93,7 @@
2
 LogViewer="Προβολή καταγραφών"
3
 ShowOnStartup="Εμφάνιση κατά την εκκίνηση"
4
 OpenFile="Άνοιγμα αρχείου"
5
+AddValue="Προσθήκη %1"
6
 
7
 AlreadyRunning.Title="Το OBS εκτελείται ήδη"
8
 AlreadyRunning.Text="Το OBS εκτελείται ήδη! Εκτός αν αυτός ήταν ο σκοπός σας, παρακαλούμε τερματίστε τις τρέχουσες διεργασίες OBS πριν προσπαθήσετε να εκκινήσετε μια καινούρια. Εάν έχετε ρυθμίσει το OBS να ελαχιστοποιείται στην γραμμή εργαλείων, παρακαλούμε να ελέγξετε αν τρέχει ήδη εκεί."
9
@@ -102,6 +103,7 @@
10
 ChromeOS.Text="Φαίνεται πως το OBS τρέχει σε ένα ChromeOS container. Η πλατφόρμα αυτή δεν υποστηρίζεται"
11
 
12
 DockCloseWarning.Title="Κλείσιμο \"δεμένου\" παραθύρου"
13
+DockCloseWarning.Text="Μόλις κλείσατε ένα στοιχιζόμενο παράθυρο. Αν θέλετε να το ξαναεμφανίσετε επιλέξτε Προβολή → Στοιχιζόμενα παράθυρα, στη γραμμή μενού."
14
 
15
 ExtraBrowsers="Προσαρμοσμένες αποβάθρες προγράμματος περιήγησης"
16
 ExtraBrowsers.DockName="Όνομα Dock"
17
@@ -111,6 +113,7 @@
18
 Auth.AuthFailure.Title="Αποτυχία ελέγχου ταυτότητας"
19
 Auth.AuthFailure.Text="Απέτυχε η πιστοποίηση με %1:\n\n%2: %3"
20
 Auth.InvalidScope.Title="Απαιτείται πιστοποίηση"
21
+Auth.InvalidScope.Text="Οι απαιτήσεις πιστοποίησης για το %1 έχουν αλλάξει. Κάποιες δυνατότητες μπορεί να μην είναι διαθέσιμες."
22
 Auth.LoadingChannel.Title="Φόρτωση πληροφοριών καναλιού..."
23
 Auth.ChannelFailure.Title="Απέτυχε η φόρτωση του καναλιού"
24
 Auth.Chat="Συνομιλία"
25
@@ -140,6 +143,7 @@
26
 Basic.AutoConfig.StartPage.PrioritizeRecording="Βελτιστοποίηση μόνο για καταγραφή, όχι για ροή"
27
 Basic.AutoConfig.StartPage.PrioritizeVirtualCam="Θα χρησιμοποιήσω μόνο την εικονική κάμερα"
28
 Basic.AutoConfig.VideoPage="Ρυθμίσεις βίντεο"
29
+Basic.AutoConfig.VideoPage.SubTitle="Καθορίστε τις ρυθμίσεις βίντεο που θα θέλατε να χρησιμοποιήσετε"
30
 Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Χρήση Τρέχουσας (%1x%2)"
31
 Basic.AutoConfig.VideoPage.BaseResolution.Display="Οθόνη %1 (%2x%3)"
32
 Basic.AutoConfig.VideoPage.FPS.UseCurrent="Χρήση Τρεχόντων (%1)"
33
@@ -151,7 +155,9 @@
34
 Basic.AutoConfig.StreamPage.ConnectAccount="Σύνδεση Λογαριασμού (προτείνεται)"
35
 Basic.AutoConfig.StreamPage.DisconnectAccount="Αποσύνδεση Λογαριασμού"
36
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Αποσύνδεση Λογαριασμού;"
37
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Αυτή η αλλαγή θα εφαρμοστεί άμεσα. Θέλετε σίγουρα να αποσυνδεθείτε από το λογαριασμό σας;"
38
 Basic.AutoConfig.StreamPage.GetStreamKey="Κλειδί Ροής"
39
+Basic.AutoConfig.StreamPage.MoreInfo="Περισσότερες πληροφορίες"
40
 Basic.AutoConfig.StreamPage.UseStreamKey="Χρησιμοποιήστε το κλειδί ζωντανής ροής"
41
 Basic.AutoConfig.StreamPage.Service="Υπηρεσία"
42
 Basic.AutoConfig.StreamPage.Service.ShowAll="Εμφάνιση Όλων..."
43
@@ -180,6 +186,7 @@
44
 Basic.AutoConfig.TestPage.Result.RecordingEncoder="Κωδικοποιητής Καταγραφής"
45
 Basic.AutoConfig.TestPage.Result.Header="Το πρόγραμμα έχει καθορίσει πως οι ακόλουθες ρυθμίσεις είναι οι πιο ιδανικές για σας:"
46
 Basic.AutoConfig.TestPage.Result.Footer="Για χρήση αυτών των ρυθμίσεων, κάντε κλικ στο κουμπί Εφαρμογή Ρυθμίσεων. Για να ξαναρυθμίσετε τις παραμέτρους του οδηγού και να προσπαθήσετε ξανά, κάντε κλικ στο κουμπί Πίσω. Για να ρυθμίσετε χειροκίνητα οι ίδιοι τις ρυθμίσεις, κάντε κλικ στο κουμπί Άκυρο και ανοίξτε τις ρυθμίσεις."
47
+Basic.AutoConfig.Info="Ο οδηγός αυτόματης ρύθμισης παραμέτρων θα καθορίσει τις ιδανικές ρυθμίσεις για τα χαρακτηριστικά του υπολογιστή σας και την ταχύτητα της σύνδεσής σας."
48
 Basic.AutoConfig.RunAnytime="Αυτό μπορεί να τρέξει σε κάθε στιγμή πηγαίνοντας στο μενού εργαλίων."
49
 
50
 Basic.Stats="Στατιστικά"
51
@@ -293,6 +300,8 @@
52
 Output.BadPath.Text="Η προκαθορισμένη διαδρομή αρχείου δεν ειναι έγκυρη. Παρακαλώ ελέγξτε τις ρυθμίσεις σας για να επιβεβαιώσετε ότι έχει οριστεί μια έγκυρη διαδρομή αρχείου."
53
 
54
 LogReturnDialog="Ανέβασμα αρχείου καταγραφής επιτυχές"
55
+LogReturnDialog.Description="Το αρχείο καταγραφής σας έχει ανέβει. Μπορείτε τώρα να μοιραστείτε το σύνδεσμο για βελτιώσεις και υποστήριξη."
56
+LogReturnDialog.Description.Crash="Η αναφορά σφαλμάτων σας έχει ανέβει. Μπορείτε τώρα να μοιραστείτε το σύνδεσμο για βελτιώσεις."
57
 LogReturnDialog.CopyURL="Αντιγραφή Διεύθυνσης"
58
 LogReturnDialog.AnalyzeURL="Ανάλυση"
59
 LogReturnDialog.ErrorUploadingLog="Απέτυχε η μεταφόρτωση αρχείου καταγραφής"
60
@@ -351,8 +360,6 @@
61
 Deinterlacing.TopFieldFirst="Επάνω Πεδίο Πρώτα"
62
 Deinterlacing.BottomFieldFirst="Κάτω Πεδίο Πρώτα"
63
 
64
-VolControl.SliderUnmuted="Ρυθμιστής έντασης για '%1': %2"
65
-VolControl.SliderMuted="Ρυθμιστής έντασης για '%1': %2 (προσωρινά σε σίγαση)"
66
 VolControl.Mute="Σίγαση '%1'"
67
 VolControl.Properties="Ιδιότητες για '%1'"
68
 
69
@@ -368,6 +375,7 @@
70
 
71
 AddProfile.Title="Προσθήκη Προφίλ"
72
 AddProfile.Text="Παρακαλώ εισάγετε το όνομα του προφίλ"
73
+AddProfile.WizardCheckbox="Εμφάνιση οδηγού αυτόματης ρύθμισης"
74
 
75
 RenameProfile.Title="Μετονομασία Προφίλ"
76
 
77
@@ -382,6 +390,7 @@
78
 Basic.SourceSelect.AddExisting="Προσθήκη Υπάρχουσας"
79
 Basic.SourceSelect.AddVisible="Να γίνει η πηγή ορατή"
80
 
81
+
82
 Basic.PropertiesWindow="Ιδιότητες για '%1'"
83
 Basic.PropertiesWindow.AutoSelectFormat="%1 (αυτόματη επιλογή: %2)"
84
 Basic.PropertiesWindow.SelectColor="Επιλέξτε χρώμα"
85
@@ -468,6 +477,8 @@
86
 Basic.Main.StopStreaming="Διακοπή Ροής"
87
 Basic.Main.StoppingStreaming="Διακοπή Ροής..."
88
 Basic.Main.ForceStopStreaming="Διακοπή Ροής(απόρριψη καθυστέρησης)"
89
+Basic.Main.ShowContextBar="Εμφάνιση γραμμής εργαλείων πηγής"
90
+Basic.Main.HideContextBar="Απόκρυψη γραμμής εργαλείων πηγής"
91
 Basic.Main.StopVirtualCam="Σταματήστε την εικονική κάμερα"
92
 Basic.Main.Group="Ομάδα %1"
93
 Basic.Main.GroupItems="Ομάδα Επιλεγμένων Στοιχείων"
94
@@ -520,10 +531,11 @@
95
 
96
 Basic.MainMenu.View="Προβολή (&V)"
97
 Basic.MainMenu.View.Toolbars="Γραμμές εργαλείων (&T)"
98
-Basic.MainMenu.View.Docks="Μπάρες εφαρμογών"
99
+Basic.MainMenu.View.Docks="Στοιχιζόμενα παράθυρα"
100
 Basic.MainMenu.View.Docks.ResetUI="Επαναφορά περιβάλλοντος χρήστη"
101
 Basic.MainMenu.View.Docks.LockUI="Κλείδωμα περιβάλλοντος χρήστη"
102
 Basic.MainMenu.View.Docks.CustomBrowserDocks="Προσαρμοσμένες αποβάθρες προγράμματος περιήγησης..."
103
+Basic.MainMenu.View.ContextBar="Γραμμή εργαλείων πηγής"
104
 Basic.MainMenu.View.SceneTransitions="Μεταβάσεις Σκηνών(&C)"
105
 Basic.MainMenu.View.SourceIcons="Πηγές Εικονίδια"
106
 Basic.MainMenu.View.StatusBar="Γραμμή κατάστασης(&S)"
107
@@ -623,7 +635,6 @@
108
 Basic.Settings.Output.Encoder="Κωδικοποιητής"
109
 Basic.Settings.Output.SelectDirectory="Επιλέξτε Φάκελο Καταγραφής"
110
 Basic.Settings.Output.SelectFile="Επιλέξτε Αρχείο Καταγραφής"
111
-Basic.Settings.Output.EnforceBitrate="Επιβολή υπηρεσίας ροής στα όρια ρυθμού μετάδοσης bits"
112
 Basic.Settings.Output.DynamicBitrate="Δυναμική αλλαγή ρυθμός μετάδοσης bit για τη διαχείρηση της συμφόρησης"
113
 Basic.Settings.Output.DynamicBitrate.Beta="Δυναμική αλλαγή ρυθμός μετάδοσης bit για τη διαχείρηση της συμφόρησης(Δοκιμαστική Έκδοση)"
114
 Basic.Settings.Output.Mode="Λειτουργία Εξόδου"
115
@@ -631,6 +642,7 @@
116
 Basic.Settings.Output.Mode.Adv="Για Προχωρημένους"
117
 Basic.Settings.Output.Mode.FFmpeg="Έξοδος FFmpeg"
118
 Basic.Settings.Output.UseReplayBuffer="Ενεργοποίηση Επανάληψης Προσωρινής Μνήμης"
119
+Basic.Settings.Output.ReplayBuffer.SecondsMax="Μέγιστος Χρόνος Επανάληψης"
120
 Basic.Settings.Output.ReplayBuffer.MegabytesMax="Μέγιστη Μνήμη (Megabytes)"
121
 Basic.Settings.Output.ReplayBuffer.Estimate="Εκτιμώμενη χρήση μνήμης: %1 MB"
122
 Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Δεν είναι δυνατή η εκτίμηση της χρήσης μνήμης. Ορίστε μέγιστο όριο μνήμης."
123
@@ -642,8 +654,7 @@
124
 Basic.Settings.Output.Simple.RecordingQuality.Small="Υψηλής Ποιότητας, Μεσαίου Μεγέθους Αρχείο"
125
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Δυσδιάκριτης Ποιότητας, Μεγάλου Μεγέθους Αρχείο"
126
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Ποιότητας Χωρίς Απώλειες, Εξαιρετικά Μεγάλου Μεγέθους Αρχείο"
127
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Προειδοποίηση: Το βίντεο ροής ρυθμού μετάδοσης bit θα οριστεί σε %1, που είναι το ανώτερο όριο για την τρέχουσα υπηρεσία συνεχούς ροής. Εάν είστε βέβαιοι ότι θέλετε να υπερβείτε το %1, ενεργοποιήστε τις επιλογές του κωδικοποιητή για προχωρημένους και αποεπιλέξτε την επιλογή «Επιβολή υπηρεσίας ροής στα όρια ρυθμού μετάδοσης bit»."
128
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Προειδοποίηση: Ο ρυθμος μετάδοσης bit του ήχου ροής θα οριστεί στο %1, που είναι το ανώτατο όριο για την τρέχουσα υπηρεσία συνεχούς ροής. Εάν είστε βέβαιοι ότι θέλετε να υπερβείτε το %1, ενεργοποιήστε τις επιλογές του κωδικοποιητή για προχωρημένους και αποεπιλέξτε την επιλογή «Επιβολή υπηρεσίας ροής στα όρια ρυθμού μετάδοσης bit»."
129
+Basic.Settings.Output.Simple.Warn.CannotPause="Προειδοποίηση: Δε μπορείτε να σταματήσετε την καταγραφή εάν η ποιότητα εγγραφής έχει οριστεί σε \"Ίδιο με τη ροή\"."
130
 Basic.Settings.Output.Simple.Warn.Encoder="Προειδοποίηση: Η καταγραφή με χρήση κωδικοποιητή λογισμικού σε διαφορετική ποιότητα από την ροή θα απαιτήσει πρόσθετη χρήση της CPU, αν πραγματοποιήσετε ταυτόχρονα μετάδοση ροής και καταγραφή."
131
 Basic.Settings.Output.Simple.Warn.Lossless="Προειδοποίηση: Η ποιότητα χωρίς απώλειες αυξάνει πολύ το μέγεθος των αρχείων! Η ποιότητα χωρίς απώλειες ποιότητας θα καταλάβει 7 gigabyte χώρο στον σκληρό δίσκο ανά λεπτό, σε υψηλές αναλύσεις και ρυθμό καρέ. Η επιλογή χωρίς απώλειες δεν συνιστάται για μεγάλες σε διάρκεια καταγραφές, εκτός και αν έχετε πολύ ελεύθερο χώρο διαθέσιμο στο σκληρό σας δίσκο."
132
 Basic.Settings.Output.Simple.Warn.Lossless.Msg="Είστε σίγουρος ότι θέλετε να χρησιμοποιήσετε την επιλογή ποιότητα χωρίς απώλειες;"
133
@@ -658,6 +669,7 @@
134
 Basic.Settings.Output.Reconnect="Αυτόματη Επανασύνδεση"
135
 Basic.Settings.Output.MaxRetries="Μέγιστος Αριθμός Επαναλήψεων"
136
 Basic.Settings.Output.Advanced="Ενεργοποίηση Ρυθμίσεων Κωδικοποιητή Για Προχωρημένους"
137
+Basic.Settings.Output.EncoderPreset="Προεπιλογές Κωδικοποιητή"
138
 Basic.Settings.Output.CustomEncoderSettings="Προσαρμοσμένες Ρυθμίσεις Κωδικοποιητή"
139
 Basic.Settings.Output.CustomMuxerSettings="Προσαρμοσμένες Ρυθμίσεις Πολυπλέκτη"
140
 Basic.Settings.Output.NoSpaceFileName="Δημιουργία Ονόματος Αρχείου χωρίς Κενό"
141
@@ -665,7 +677,6 @@
142
 Basic.Settings.Output.Adv.Rescale="Κλιμάκωση Εξόδου"
143
 Basic.Settings.Output.Adv.AudioTrack="Κομμάτι ήχου"
144
 Basic.Settings.Output.Adv.Streaming="Ροή"
145
-Basic.Settings.Output.Adv.ApplyServiceSettings="Επιβολή ρυθμίσεων κωδικοποιητή της υπηρεσίας ροής"
146
 Basic.Settings.Output.Adv.Audio.Track1="Κομμάτι 1"
147
 Basic.Settings.Output.Adv.Audio.Track2="Κομμάτι 2"
148
 Basic.Settings.Output.Adv.Audio.Track3="Κομμάτι 3"
149
@@ -702,6 +713,8 @@
150
 Basic.Settings.Output.Adv.FFmpeg.GOPSize="Διάστημα καρέ-κλειδιού (σε καρέ)"
151
 Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Προβολή όλων των codecs (ακόμα και αν δεν είναι συμβατοί)"
152
 
153
+Screenshot="Έξοδος Στιγμιότυπου Οθόνης"
154
+Screenshot.SourceHotkey="Επιλεγμένη Προέλευση Στιγμιότυπου Οθόνης"
155
 Screenshot.StudioProgram="Στιγμιότυπο οθόνης(Program)"
156
 Screenshot.Preview="Στιγμιότυπο οθόνης(Preview)"
157
 Screenshot.Scene="Στιγμιότυπο οθόνης(Scene)"
158
@@ -737,6 +750,7 @@
159
 Basic.Settings.Audio.SampleRate="Ρυθμός Δειγματοληψίας"
160
 Basic.Settings.Audio.Channels="Κανάλια"
161
 Basic.Settings.Audio.Meters="Μέτρα"
162
+Basic.Settings.Audio.MeterDecayRate="Ρυθμός Απόσβεσης"
163
 Basic.Settings.Audio.MeterDecayRate.Fast="Γρήγορος"
164
 Basic.Settings.Audio.MeterDecayRate.Medium="Μεσαίος (τύπος Ι PPM)"
165
 Basic.Settings.Audio.MeterDecayRate.Slow="Αργός (Τύπος ΙΙ PPM)"
166
@@ -909,5 +923,16 @@
167
 Restart="Επανεκκίνηση"
168
 NeedsRestart="Το OBS Studio χρειάζεται να γίνει επανεκκίνηση. Θέλετε να το κάνετε επανεκκίνηση τώρα;"
169
 
170
-
171
+ContextBar.NoSelectedSource="Δεν επιλέχθηκε πηγή"
172
+ContextBar.ResetTransform="Επαναφορά Μετασχηματισμού"
173
+ContextBar.FitToCanvas="Προσαρμογή στον Καμβά"
174
+
175
+ContextBar.MediaControls.PlayMedia="Αναπαραγωγή Πολυμέσων"
176
+ContextBar.MediaControls.PauseMedia="Παύση Πολυμέσων"
177
+ContextBar.MediaControls.StopMedia="Διακοπή Πολυμέσων"
178
+ContextBar.MediaControls.RestartMedia="Επανεκκίνηση Πολυμέσων"
179
+ContextBar.MediaControls.PlaylistNext="Επόμενο στη Λίστα"
180
+ContextBar.MediaControls.PlaylistPrevious="Προηγούμενο στη Λίστα"
181
+ContextBar.MediaControls.MediaProperties="Ιδιότητες Πολυμέσων"
182
+ContextBar.MediaControls.BlindSeek="Μενού Αναζήτησης Πολυμέσων"
183
 
184
obs-studio-26.0.2.tar.xz/UI/data/locale/en-GB.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/en-GB.ini Changed
816
 
1
@@ -93,6 +93,7 @@
2
 LogViewer="Log Viewer"
3
 ShowOnStartup="Show on startup"
4
 OpenFile="Open file"
5
+AddValue="Add %1"
6
 
7
 AlreadyRunning.Title="OBS is already running"
8
 AlreadyRunning.Text="OBS is already running! Unless you meant to do this, please shut down any existing instances of OBS before trying to run a new instance. If you have OBS set to minimise to the system tray, please check to see if it's still running there."
9
@@ -160,6 +161,7 @@
10
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Disconnect Account?"
11
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="This change will apply immediately. Are you sure you want to disconnect your account?"
12
 Basic.AutoConfig.StreamPage.GetStreamKey="Get Stream Key"
13
+Basic.AutoConfig.StreamPage.MoreInfo="More Info"
14
 Basic.AutoConfig.StreamPage.UseStreamKey="Use Stream Key"
15
 Basic.AutoConfig.StreamPage.Service="Service"
16
 Basic.AutoConfig.StreamPage.Service.ShowAll="Show All..."
17
@@ -236,22 +238,72 @@
18
 QuickTransitions.EditPropertiesTT="When editing the same scene, allows editing properties of sources without modifying the output.\nThis can only be used if 'Duplicate Scene' is enabled.\nCertain sources (such as capture or media sources) do not support this and cannot be edited separately.\nChanging this value will reset the current output scene (if it still exists).\n\nWarning: Because sources will be duplicated, this may require extra system or video resources."
19
 QuickTransitions.HotkeyName="Quick Transition: %1"
20
 
21
+Basic.AddTransition="Add Configurable Transition"
22
+Basic.RemoveTransition="Remove Configurable Transition"
23
+Basic.TransitionProperties="Transition Properties"
24
+Basic.SceneTransitions="Scene Transitions"
25
+Basic.TransitionDuration="Duration"
26
+Basic.TogglePreviewProgramMode="Studio Mode"
27
 
28
+TransitionNameDlg.Text="Please enter the name of the transition"
29
+TransitionNameDlg.Title="Transition Name"
30
 
31
+TitleBar.Profile="Profile"
32
+TitleBar.Scenes="Scenes"
33
 
34
+NameExists.Title="Name already exists"
35
+NameExists.Text="The name is already in use."
36
 
37
+NoNameEntered.Title="Please enter a valid name"
38
+NoNameEntered.Text="You cannot use empty names."
39
 
40
+ConfirmStart.Title="Start Stream?"
41
+ConfirmStart.Text="Are you sure you want to start the stream?"
42
 
43
+ConfirmStop.Title="Stop Stream?"
44
+ConfirmStop.Text="Are you sure you want to stop the stream?"
45
 
46
+ConfirmStopRecord.Title="Stop Recording?"
47
+ConfirmStopRecord.Text="Are you sure you want to stop recording?"
48
 
49
+ConfirmBWTest.Title="Start Bandwidth Test?"
50
+ConfirmBWTest.Text="You have OBS configured in bandwidth test mode. This mode allows for network testing without your channel going live. Once you are done testing, you will need to disable it in order for viewers to be able to see your stream.\n\nDo you want to continue?"
51
 
52
+ConfirmExit.Title="Exit OBS?"
53
+ConfirmExit.Text="OBS is currently active. All streams/recordings will be shut down. Are you sure you wish to exit?"
54
 
55
+ConfirmRemove.Title="Confirm Remove"
56
+ConfirmRemove.Text="Are you sure you wish to remove '$1'?"
57
+ConfirmRemove.TextMultiple="Are you sure you wish to remove %1 items?"
58
 
59
+Output.StartStreamFailed="Failed to start streaming"
60
+Output.StartRecordingFailed="Failed to start recording"
61
+Output.StartReplayFailed="Failed to start replay buffer"
62
+Output.StartFailedGeneric="Starting the output failed. Please check the log for details.\n\nNote: If you are using the NVENC or AMD encoders, make sure your video drivers are up to date."
63
 
64
+Output.ReplayBuffer.PauseWarning.Title="Cannot save replays while paused"
65
+Output.ReplayBuffer.PauseWarning.Text="Warning: Replays cannot be saved while recording is paused."
66
 
67
+Output.ConnectFail.Title="Failed to connect"
68
+Output.ConnectFail.BadPath="Invalid Path or Connection URL. Please check your settings to confirm that they are valid."
69
+Output.ConnectFail.ConnectFailed="Failed to connect to server"
70
+Output.ConnectFail.InvalidStream="Could not access the specified channel or stream key, please double-check your stream key. If it is correct, there may be a problem connecting to the server."
71
+Output.ConnectFail.Error="An unexpected error occurred when trying to connect to the server. More information in the log file."
72
+Output.ConnectFail.Disconnected="Disconnected from server."
73
 
74
+Output.StreamEncodeError.Title="Encoding error"
75
+Output.StreamEncodeError.Msg="An encoder error occurred while streaming."
76
 
77
+Output.RecordFail.Title="Failed to start recording"
78
+Output.RecordFail.Unsupported="The output format is either unsupported or does not support more than one audio track. Please check your settings and try again."
79
+Output.RecordNoSpace.Title="Insufficient disk space"
80
+Output.RecordNoSpace.Msg="There is not sufficient disk space to continue recording."
81
+Output.RecordError.Title="Recording error"
82
+Output.RecordError.Msg="An unspecified error occurred while recording."
83
+Output.RecordError.EncodeErrorMsg="An encoder error occurred while recording."
84
 
85
+Output.BadPath.Title="Bad File Path"
86
+Output.BadPath.Text="The configured file output path is invalid. Please check your settings to confirm that a valid file path has been set."
87
 
88
 LogReturnDialog="Log Upload Successful"
89
 LogReturnDialog.Description="Your log file has been uploaded. You can now share the URL for debugging or support purposes."
90
@@ -262,95 +314,663 @@
91
 
92
 Remux.SourceFile="OBS Recording"
93
 Remux.TargetFile="Target File"
94
-
95
-
96
-
97
-
98
-
99
-
100
-
101
-
102
-
103
-
104
-
105
-
106
-
107
-
108
-
109
-
110
-
111
-
112
-
113
+Remux.Remux="Remux"
114
+Remux.Stop="Stop Remuxing"
115
+Remux.ClearFinished="Clear Finished Items"
116
+Remux.ClearAll="Clear All Items"
117
+Remux.OBSRecording="OBS Recording"
118
+Remux.FinishedTitle="Remuxing finished"
119
+Remux.Finished="Recording remuxed"
120
+Remux.FinishedError="Recording remuxed, but the file may be incomplete"
121
+Remux.SelectRecording="Select OBS Recording..."
122
+Remux.SelectTarget="Select target file..."
123
+Remux.FileExistsTitle="Target files exist"
124
+Remux.FileExists="The following target files already exist. Do you want to replace them?"
125
+Remux.ExitUnfinishedTitle="Remuxing in progress"
126
+Remux.ExitUnfinished="Remuxing is not finished, stopping now may render the target file unusable.\nAre you sure you want to stop remuxing?"
127
+Remux.HelpText="Drop files in this window to remux, or select an empty \"OBS Recording\" cell to browse for a file."
128
+
129
+UpdateAvailable="New Update Available"
130
+UpdateAvailable.Text="Version %1.%2.%3 is now available. <a href='%4'>Click here to download</a>"
131
+
132
+Basic.DesktopDevice1="Desktop Audio"
133
+Basic.DesktopDevice2="Desktop Audio 2"
134
+Basic.AuxDevice1="Mic/Aux"
135
+Basic.AuxDevice2="Mic/Aux 2"
136
+Basic.AuxDevice3="Mic/Aux 3"
137
+Basic.AuxDevice4="Mic/Aux 4"
138
+
139
+Basic.Scene="Scene"
140
+Basic.DisplayCapture="Display Capture"
141
+
142
+Basic.Main.PreviewConextMenu.Enable="Enable Preview"
143
+
144
+Basic.Main.Preview.Disable="Disable Preview"
145
+
146
+ScaleFiltering="Scale Filtering"
147
+ScaleFiltering.Point="Point"
148
+ScaleFiltering.Bilinear="Bilinear"
149
+ScaleFiltering.Bicubic="Bicubic"
150
+ScaleFiltering.Lanczos="Lanczos"
151
+ScaleFiltering.Area="Area"
152
+
153
+Deinterlacing="Deinterlacing"
154
+Deinterlacing.Discard="Discard"
155
+Deinterlacing.Retro="Retro"
156
+Deinterlacing.Blend="Blend"
157
+Deinterlacing.Blend2x="Blend 2x"
158
+Deinterlacing.Linear="Linear"
159
+Deinterlacing.Linear2x="Linear 2x"
160
+Deinterlacing.Yadif="Yadif"
161
+Deinterlacing.Yadif2x="Yadif 2x"
162
+Deinterlacing.TopFieldFirst="Top Field First"
163
+Deinterlacing.BottomFieldFirst="Bottom Field First"
164
+
165
+VolControl.SliderUnmuted="Volume slider for '%1':"
166
+VolControl.SliderMuted="Volume slider for '%1': (currently muted)"
167
+VolControl.Mute="Mute '%1'"
168
+VolControl.Properties="Properties for '%1'"
169
+
170
+Basic.Main.AddSceneDlg.Title="Add Scene"
171
+Basic.Main.AddSceneDlg.Text="Please enter the name of the scene"
172
+
173
+Basic.Main.DefaultSceneName.Text="Scene %1"
174
+
175
+Basic.Main.AddSceneCollection.Title="Add Scene Collection"
176
+Basic.Main.AddSceneCollection.Text="Please enter the name of the scene collection"
177
+
178
+Basic.Main.RenameSceneCollection.Title="Rename Scene Collection"
179
+
180
+AddProfile.Title="Add Profile"
181
+AddProfile.Text="Please enter the name of the profile"
182
+AddProfile.WizardCheckbox="Show auto-configuration wizard"
183
+
184
+RenameProfile.Title="Rename Profile"
185
+
186
+Basic.Main.MixerRename.Title="Rename Audio Source"
187
+Basic.Main.MixerRename.Text="Please enter the name of the audio source"
188
+
189
+
190
+Basic.Main.PreviewDisabled="Preview is currently disabled"
191
+
192
+Basic.SourceSelect="Create/Select Source"
193
+Basic.SourceSelect.CreateNew="Create new"
194
+Basic.SourceSelect.AddExisting="Add Existing"
195
+Basic.SourceSelect.AddVisible="Make source visible"
196
+
197
+Basic.Main.Sources.Visibility="Visibility"
198
+Basic.Main.Sources.VisibilityDescription="Controls the visibility of '%1' in the canvas"
199
+Basic.Main.Sources.Lock="Lock"
200
+Basic.Main.Sources.LockDescription="Locks the position and scale of '%1' in the canvas"
201
+
202
+Basic.PropertiesWindow="Properties for '%1'"
203
+Basic.PropertiesWindow.AutoSelectFormat="%1 (autoselect: %2)"
204
 Basic.PropertiesWindow.SelectColor="Select colour"
205
-
206
-
207
-
208
-
209
-
210
-
211
+Basic.PropertiesWindow.SelectFont="Select font"
212
+Basic.PropertiesWindow.ConfirmTitle="Settings Changed"
213
+Basic.PropertiesWindow.Confirm="There are unsaved changes. Do you want to keep them?"
214
+Basic.PropertiesWindow.NoProperties="No properties available"
215
+Basic.PropertiesWindow.AddFiles="Add Files"
216
+Basic.PropertiesWindow.AddDir="Add Directory"
217
+Basic.PropertiesWindow.AddURL="Add Path/URL"
218
+Basic.PropertiesWindow.AddEditableListDir="Add directory to '%1'"
219
+Basic.PropertiesWindow.AddEditableListFiles="Add files to '%1'"
220
+Basic.PropertiesWindow.AddEditableListEntry="Add entry to '%1'"
221
+Basic.PropertiesWindow.EditEditableListEntry="Edit entry from '%1'"
222
+
223
+Basic.PropertiesView.FPS.Simple="Simple FPS Values"
224
+Basic.PropertiesView.FPS.Rational="Rational FPS Values"
225
+Basic.PropertiesView.FPS.ValidFPSRanges="Valid FPS Ranges:"
226
+
227
+Basic.InteractionWindow="Interacting with '%1'"
228
+
229
+Basic.StatusBar.Reconnecting="Disconnected, reconnecting in %2 second(s) (attempt %1)"
230
+Basic.StatusBar.AttemptingReconnect="Attempting to reconnect... (attempt %1)"
231
+Basic.StatusBar.ReconnectSuccessful="Reconnection successful"
232
+Basic.StatusBar.Delay="Delay (%1 sec)"
233
+Basic.StatusBar.DelayStartingIn="Delay (starting in %1 sec)"
234
+Basic.StatusBar.DelayStoppingIn="Delay (stopping in %1 sec)"
235
+Basic.StatusBar.DelayStartingStoppingIn="Delay (stopping in %1 sec, starting in %2 sec)"
236
+
237
+Basic.Filters="Filters"
238
+Basic.Filters.AsyncFilters="Audio/Video Filters"
239
+Basic.Filters.AudioFilters="Audio Filters"
240
+Basic.Filters.EffectFilters="Effect Filters"
241
+Basic.Filters.Title="Filters for '%1'"
242
+Basic.Filters.AddFilter.Title="Filter name"
243
+Basic.Filters.AddFilter.Text="Please specify the name of the filter"
244
+
245
+Basic.TransformWindow="Scene Item Transform"
246
+Basic.TransformWindow.Position="Position"
247
+Basic.TransformWindow.Rotation="Rotation"
248
+Basic.TransformWindow.Size="Size"
249
+Basic.TransformWindow.Alignment="Positional Alignment"
250
+Basic.TransformWindow.BoundsType="Bounding Box Type"
251
+Basic.TransformWindow.BoundsAlignment="Alignment in Bounding Box"
252
+Basic.TransformWindow.Bounds="Bounding Box Size"
253
+Basic.TransformWindow.Crop="Crop"
254
+
255
+Basic.TransformWindow.Alignment.TopLeft="Top Left"
256
 Basic.TransformWindow.Alignment.TopCenter="Top Centre"
257
+Basic.TransformWindow.Alignment.TopRight="Top Right"
258
 Basic.TransformWindow.Alignment.CenterLeft="Centre Left"
259
 Basic.TransformWindow.Alignment.Center="Centre"
260
 Basic.TransformWindow.Alignment.CenterRight="Centre Right"
261
+Basic.TransformWindow.Alignment.BottomLeft="Bottom Left"
262
 Basic.TransformWindow.Alignment.BottomCenter="Bottom Centre"
263
-
264
-
265
-
266
-
267
-
268
+Basic.TransformWindow.Alignment.BottomRight="Bottom Right"
269
+
270
+Basic.TransformWindow.BoundsType.None="No bounds"
271
+Basic.TransformWindow.BoundsType.MaxOnly="Maximum size only"
272
+Basic.TransformWindow.BoundsType.ScaleInner="Scale to inner bounds"
273
+Basic.TransformWindow.BoundsType.ScaleOuter="Scale to outer bounds"
274
+Basic.TransformWindow.BoundsType.ScaleToWidth="Scale to width of bounds"
275
+Basic.TransformWindow.BoundsType.ScaleToHeight="Scale to height of bounds"
276
+Basic.TransformWindow.BoundsType.Stretch="Stretch to bounds"
277
+
278
+Basic.Main.AddSourceHelp.Title="Cannot Add Source"
279
+Basic.Main.AddSourceHelp.Text="You need to have at least 1 scene to add a source."
280
+
281
+Basic.Main.Scenes="Scenes"
282
+Basic.Main.Sources="Sources"
283
+Basic.Main.Controls="Controls"
284
+Basic.Main.Connecting="Connecting..."
285
+Basic.Main.StartRecording="Start Recording"
286
+Basic.Main.StartReplayBuffer="Start Replay Buffer"
287
+Basic.Main.SaveReplay="Save Replay"
288
+Basic.Main.StartStreaming="Start Streaming"
289
+Basic.Main.StartVirtualCam="Start Virtual Camera"
290
+Basic.Main.StopRecording="Stop Recording"
291
+Basic.Main.PauseRecording="Pause Recording"
292
+Basic.Main.UnpauseRecording="Unpause Recording"
293
+Basic.Main.StoppingRecording="Stopping Recording..."
294
+Basic.Main.StopReplayBuffer="Stop Replay Buffer"
295
+Basic.Main.StoppingReplayBuffer="Stopping Replay Buffer..."
296
+Basic.Main.StopStreaming="Stop Streaming"
297
+Basic.Main.StoppingStreaming="Stopping Stream..."
298
+Basic.Main.ForceStopStreaming="Stop Streaming (discard delay)"
299
+Basic.Main.ShowContextBar="Show Source Toolbar"
300
+Basic.Main.HideContextBar="Hide Source Toolbar"
301
+Basic.Main.StopVirtualCam="Stop Virtual Camera"
302
+Basic.Main.Group="Group %1"
303
+Basic.Main.GroupItems="Group Selected Items"
304
+Basic.Main.Ungroup="Ungroup"
305
+Basic.Main.GridMode="Grid Mode"
306
+Basic.Main.ListMode="List Mode"
307
+
308
+Basic.MainMenu.File="&File"
309
+Basic.MainMenu.File.Export="&Export"
310
+Basic.MainMenu.File.Import="&Import"
311
+Basic.MainMenu.File.ShowRecordings="Show &Recordings"
312
+Basic.MainMenu.File.Remux="Re&mux Recordings"
313
+Basic.MainMenu.File.Settings="&Settings"
314
+Basic.MainMenu.File.ShowSettingsFolder="Show Settings Folder"
315
+Basic.MainMenu.File.ShowProfileFolder="Show Profile Folder"
316
+Basic.MainMenu.AlwaysOnTop="&Always On Top"
317
+Basic.MainMenu.File.Exit="E&xit"
318
+
319
+Basic.MainMenu.Edit="&Edit"
320
+Basic.MainMenu.Edit.Undo="&Undo"
321
+Basic.MainMenu.Edit.Redo="&Redo"
322
+Basic.MainMenu.Edit.UndoAction="&Undo $1"
323
+Basic.MainMenu.Edit.RedoAction="&Redo $1"
324
+Basic.MainMenu.Edit.LockPreview="&Lock Preview"
325
+Basic.MainMenu.Edit.Scale="Preview &Scaling"
326
+Basic.MainMenu.Edit.Scale.Window="Scale to Window"
327
+Basic.MainMenu.Edit.Scale.Canvas="Canvas (%1x%2)"
328
+Basic.MainMenu.Edit.Scale.Output="Output (%1x%2)"
329
+Basic.MainMenu.Edit.Transform="&Transform"
330
+Basic.MainMenu.Edit.Transform.EditTransform="&Edit Transform..."
331
+Basic.MainMenu.Edit.Transform.CopyTransform="Copy Transform"
332
+Basic.MainMenu.Edit.Transform.PasteTransform="Paste Transform"
333
+Basic.MainMenu.Edit.Transform.ResetTransform="&Reset Transform"
334
+Basic.MainMenu.Edit.Transform.Rotate90CW="Rotate 90 degrees Clockwise"
335
+Basic.MainMenu.Edit.Transform.Rotate90CCW="Rotate 90 degrees Anti-Clockwise"
336
+Basic.MainMenu.Edit.Transform.Rotate180="Rotate 180 degrees"
337
+Basic.MainMenu.Edit.Transform.FlipHorizontal="Flip &Horizontal"
338
+Basic.MainMenu.Edit.Transform.FlipVertical="Flip &Vertical"
339
+Basic.MainMenu.Edit.Transform.FitToScreen="&Fit to screen"
340
+Basic.MainMenu.Edit.Transform.StretchToScreen="&Stretch to screen"
341
 Basic.MainMenu.Edit.Transform.CenterToScreen="&Centre to screen"
342
 Basic.MainMenu.Edit.Transform.VerticalCenter="Centre Vertically"
343
 Basic.MainMenu.Edit.Transform.HorizontalCenter="Centre Horizontally"
344
-
345
-
346
-
347
-
348
-
349
-
350
+Basic.MainMenu.Edit.Order="&Order"
351
+Basic.MainMenu.Edit.Order.MoveUp="Move &Up"
352
+Basic.MainMenu.Edit.Order.MoveDown="Move &Down"
353
+Basic.MainMenu.Edit.Order.MoveToTop="Move to &Top"
354
+Basic.MainMenu.Edit.Order.MoveToBottom="Move to &Bottom"
355
+Basic.MainMenu.Edit.AdvAudio="&Advanced Audio Properties"
356
+
357
+Basic.MainMenu.View="&View"
358
+Basic.MainMenu.View.Toolbars="&Toolbars"
359
+Basic.MainMenu.View.Docks="Docks"
360
+Basic.MainMenu.View.Docks.ResetUI="Reset UI"
361
+Basic.MainMenu.View.Docks.LockUI="Lock UI"
362
+Basic.MainMenu.View.Docks.CustomBrowserDocks="Custom Browser Docks..."
363
+Basic.MainMenu.View.ListboxToolbars="Scene/Source List Buttons"
364
+Basic.MainMenu.View.ContextBar="Source Toolbar"
365
+Basic.MainMenu.View.SceneTransitions="S&cene Transitions"
366
+Basic.MainMenu.View.SourceIcons="Source &Icons"
367
+Basic.MainMenu.View.StatusBar="&Status Bar"
368
+Basic.MainMenu.View.Fullscreen.Interface="Fullscreen Interface"
369
+
370
+Basic.MainMenu.SceneCollection="&Scene Collection"
371
+Basic.MainMenu.Profile="&Profile"
372
+Basic.MainMenu.Profile.Import="Import Profile"
373
+Basic.MainMenu.Profile.Export="Export Profile"
374
+Basic.MainMenu.SceneCollection.Import="Import Scene Collection"
375
+Basic.MainMenu.SceneCollection.Export="Export Scene Collection"
376
+Basic.MainMenu.Profile.Exists="The profile already exists"
377
+Basic.MainMenu.SceneCollection.Exists="The scene collection already exists"
378
+
379
+Basic.MainMenu.Tools="&Tools"
380
+
381
+Basic.MainMenu.Help="&Help"
382
+Basic.MainMenu.Help.HelpPortal="Help &Portal"
383
+Basic.MainMenu.Help.Website="Visit &Website"
384
+Basic.MainMenu.Help.Discord="Join &Discord Server"
385
+Basic.MainMenu.Help.Logs="&Log Files"
386
+Basic.MainMenu.Help.Logs.ShowLogs="&Show Log Files"
387
+Basic.MainMenu.Help.Logs.UploadCurrentLog="Upload &Current Log File"
388
+Basic.MainMenu.Help.Logs.UploadLastLog="Upload &Last Log File"
389
+Basic.MainMenu.Help.Logs.ViewCurrentLog="&View Current Log"
390
+Basic.MainMenu.Help.CheckForUpdates="Check For Updates"
391
+Basic.MainMenu.Help.CrashLogs="Crash &Reports"
392
+Basic.MainMenu.Help.CrashLogs.ShowLogs="&Show Crash Reports"
393
+Basic.MainMenu.Help.CrashLogs.UploadLastLog="Upload &Last Crash Report"
394
+Basic.MainMenu.Help.About="&About"
395
+
396
+Basic.Settings.ProgramRestart="The program must be restarted for these settings to take effect."
397
+Basic.Settings.ConfirmTitle="Confirm Changes"
398
+Basic.Settings.Confirm="You have unsaved changes. Save changes?"
399
+
400
+Basic.Settings.General="General"
401
+Basic.Settings.General.Theme="Theme"
402
+Basic.Settings.General.Language="Language"
403
+Basic.Settings.General.EnableAutoUpdates="Automatically check for updates on startup"
404
+Basic.Settings.General.OpenStatsOnStartup="Open stats dialogue on startup"
405
+Basic.Settings.General.WarnBeforeStartingStream="Show confirmation dialogue when starting streams"
406
+Basic.Settings.General.WarnBeforeStoppingStream="Show confirmation dialogue when stopping streams"
407
+Basic.Settings.General.WarnBeforeStoppingRecord="Show confirmation dialogue when stopping recording"
408
+Basic.Settings.General.Projectors="Projectors"
409
+Basic.Settings.General.HideProjectorCursor="Hide cursor over projectors"
410
+Basic.Settings.General.ProjectorAlwaysOnTop="Make projectors always on top"
411
+Basic.Settings.General.Snapping="Source Alignment Snapping"
412
+Basic.Settings.General.ScreenSnapping="Snap Sources to edge of screen"
413
 Basic.Settings.General.CenterSnapping="Snap Sources to horizontal and vertical centre"
414
+Basic.Settings.General.SourceSnapping="Snap Sources to other sources"
415
+Basic.Settings.General.SnapDistance="Snap Sensitivity"
416
+Basic.Settings.General.RecordWhenStreaming="Automatically record when streaming"
417
+Basic.Settings.General.KeepRecordingWhenStreamStops="Keep recording when stream stops"
418
+Basic.Settings.General.ReplayBufferWhileStreaming="Automatically start replay buffer when streaming"
419
+Basic.Settings.General.KeepReplayBufferStreamStops="Keep replay buffer active when stream stops"
420
+Basic.Settings.General.SysTray="System Tray"
421
 Basic.Settings.General.SysTrayWhenStarted="Minimise to system tray when started"
422
 Basic.Settings.General.SystemTrayHideMinimize="Always minimise to system tray instead of task bar"
423
-
424
-
425
-
426
-
427
-
428
+Basic.Settings.General.SaveProjectors="Save projectors on exit"
429
+Basic.Settings.General.Preview="Preview"
430
+Basic.Settings.General.OverflowHidden="Hide overflow"
431
+Basic.Settings.General.OverflowAlwaysVisible="Overflow always visible"
432
+Basic.Settings.General.OverflowSelectionHidden="Show overflow even when source is invisible"
433
+Basic.Settings.General.Importers="Importers"
434
+Basic.Settings.General.AutomaticCollectionSearch="Search known locations for scene collections when importing"
435
+Basic.Settings.General.SwitchOnDoubleClick="Transition to scene when double-clicked"
436
+Basic.Settings.General.StudioPortraitLayout="Enable portrait/vertical layout"
437
+Basic.Settings.General.TogglePreviewProgramLabels="Show preview/program labels"
438
+Basic.Settings.General.Multiview="Multiview"
439
+Basic.Settings.General.Multiview.MouseSwitch="Click to switch between scenes"
440
+Basic.Settings.General.Multiview.DrawSourceNames="Show scene names"
441
+Basic.Settings.General.Multiview.DrawSafeAreas="Draw safe areas (EBU R 95)"
442
+Basic.Settings.General.MultiviewLayout="Multiview Layout"
443
+Basic.Settings.General.MultiviewLayout.Horizontal.Top="Horizontal, Top (8 Scenes)"
444
+Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Horizontal, Bottom (8 Scenes)"
445
+Basic.Settings.General.MultiviewLayout.Vertical.Left="Vertical, Left (8 Scenes)"
446
+Basic.Settings.General.MultiviewLayout.Vertical.Right="Vertical, Right (8 Scenes)"
447
+Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Horizontal, Top (24 Scenes)"
448
+
449
+Basic.Settings.Stream="Stream"
450
+Basic.Settings.Stream.StreamType="Stream Type"
451
+Basic.Settings.Stream.Custom.UseAuthentication="Use authentication"
452
+Basic.Settings.Stream.Custom.Username="Username"
453
+Basic.Settings.Stream.Custom.Password="Password"
454
+Basic.Settings.Stream.BandwidthTestMode="Enable Bandwidth Test Mode"
455
+Basic.Settings.Stream.TTVAddon="Twitch Chat Add-Ons"
456
+Basic.Settings.Stream.TTVAddon.None="None"
457
+Basic.Settings.Stream.TTVAddon.Both="BetterTTV and FrankerFaceZ"
458
+Basic.Settings.Stream.MissingSettingAlert="Missing Stream Setup"
459
+Basic.Settings.Stream.StreamSettingsWarning="Open Settings"
460
+Basic.Settings.Stream.MissingUrlAndApiKey="URL and Stream Key are missing.\n\nOpen settings to enter the URL and Stream Key in the 'stream' tab."
461
+Basic.Settings.Stream.MissingUrl="Stream URL is missing.\n\nOpen settings to enter the URL in the 'Stream' tab."
462
+Basic.Settings.Stream.MissingStreamKey="Stream key is missing.\n\nOpen settings to enter the stream key in the 'Stream' tab."
463
+Basic.Settings.Stream.IgnoreRecommended="Ignore streaming service setting recommendations"
464
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Override Recommended Settings"
465
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Warning: Ignoring the service's limitations may result in degraded stream quality or prevent you from streaming.\n\nContinue?"
466
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Maximum Video Bitrate: %1 kbps"
467
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Maximum Audio Bitrate: %1 kbps"
468
+Basic.Settings.Stream.Recommended.MaxResolution="Maximum Resolution: %1"
469
+Basic.Settings.Stream.Recommended.MaxFPS="Maximum FPS: %1"
470
+
471
+Basic.Settings.Output="Output"
472
+Basic.Settings.Output.Format="Recording Format"
473
+Basic.Settings.Output.Encoder="Encoder"
474
+Basic.Settings.Output.SelectDirectory="Select Recording Directory"
475
+Basic.Settings.Output.SelectFile="Select Recording File"
476
+Basic.Settings.Output.DynamicBitrate="Dynamically change bitrate to manage congestion"
477
+Basic.Settings.Output.DynamicBitrate.Beta="Dynamically change bitrate to manage congestion (Beta)"
478
+Basic.Settings.Output.DynamicBitrate.TT="Instead of dropping frames to reduce congestion, dynamically changes bitrate on the fly.\n\nNote that this can increase delay to viewers if there is significant sudden congestion.\nWhen the bitrate drops, it can take up to a few minutes to restore.\n\nCurrently only supported for RTMP."
479
+Basic.Settings.Output.Mode="Output Mode"
480
+Basic.Settings.Output.Mode.Simple="Simple"
481
+Basic.Settings.Output.Mode.Adv="Advanced"
482
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg Output"
483
+Basic.Settings.Output.UseReplayBuffer="Enable Replay Buffer"
484
+Basic.Settings.Output.ReplayBuffer.SecondsMax="Maximum Replay Time"
485
+Basic.Settings.Output.ReplayBuffer.MegabytesMax="Maximum Memory (Megabytes)"
486
+Basic.Settings.Output.ReplayBuffer.Estimate="Estimated memory usage: %1 MB"
487
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Cannot estimate memory usage. Please set maximum memory limit."
488
+Basic.Settings.Output.ReplayBuffer.Prefix="Replay Buffer Filename Prefix"
489
+Basic.Settings.Output.ReplayBuffer.Suffix="Suffix"
490
+Basic.Settings.Output.Simple.SavePath="Recording Path"
491
+Basic.Settings.Output.Simple.RecordingQuality="Recording Quality"
492
+Basic.Settings.Output.Simple.RecordingQuality.Stream="Same as stream"
493
+Basic.Settings.Output.Simple.RecordingQuality.Small="High Quality, Medium File Size"
494
+Basic.Settings.Output.Simple.RecordingQuality.HQ="Indistinguishable Quality, Large File Size"
495
+Basic.Settings.Output.Simple.RecordingQuality.Lossless="Lossless Quality, Tremendously Large File Size"
496
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Warning: The streaming video bitrate will be set to %1, which is the upper limit for the current streaming service."
497
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Warning: The streaming audio bitrate will be set to %1, which is the upper limit for the current streaming service."
498
+Basic.Settings.Output.Simple.Warn.CannotPause="Warning: Recordings cannot be paused if the recording quality is set to \"Same as stream\"."
499
+Basic.Settings.Output.Simple.Warn.Encoder="Warning: Recording with a software encoder at a different quality than the stream will require extra CPU usage if you stream and record at the same time."
500
+Basic.Settings.Output.Simple.Warn.Lossless="Warning: Lossless quality generates tremendously large file sizes! Lossless quality can use upward of 7 Gigabytes of disk space per minute at high resolutions and frame rates. Lossless is not recommended for long recordings unless you have a very large amount of disk space available."
501
+Basic.Settings.Output.Simple.Warn.Lossless.Msg="Are you sure you want to use lossless quality?"
502
+Basic.Settings.Output.Simple.Warn.Lossless.Title="Lossless quality warning!"
503
+Basic.Settings.Output.Simple.Encoder.Software="Software (x264)"
504
+Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Hardware (QSV)"
505
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardware (AMD)"
506
+Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardware (NVENC)"
507
+Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Software (x264 low CPU usage preset, increases file size)"
508
+Basic.Settings.Output.Simple.TwitchVodTrack="Twitch VOD Track (Uses Track 2)"
509
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Incompatible Resolution/Framerate"
510
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="This streaming service does not support your current output resolution and/or framerate. They will be changed to the closest compatible value:\n\n%1\n\nDo you want to continue?"
511
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Resolution: %1"
512
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS: %1"
513
+Basic.Settings.Output.VideoBitrate="Video Bitrate"
514
+Basic.Settings.Output.AudioBitrate="Audio Bitrate"
515
+Basic.Settings.Output.Reconnect="Automatically Reconnect"
516
+Basic.Settings.Output.RetryDelay="Retry Delay"
517
+Basic.Settings.Output.MaxRetries="Maximum Retries"
518
+Basic.Settings.Output.Advanced="Enable Advanced Encoder Settings"
519
+Basic.Settings.Output.EncoderPreset="Encoder Preset"
520
+Basic.Settings.Output.CustomEncoderSettings="Custom Encoder Settings"
521
+Basic.Settings.Output.CustomMuxerSettings="Custom Muxer Settings"
522
+Basic.Settings.Output.NoSpaceFileName="Generate File Name without Space"
523
+
524
+Basic.Settings.Output.Adv.Rescale="Rescale Output"
525
+Basic.Settings.Output.Adv.AudioTrack="Audio Track"
526
+Basic.Settings.Output.Adv.Streaming="Streaming"
527
+Basic.Settings.Output.Adv.Audio.Track1="Track 1"
528
+Basic.Settings.Output.Adv.Audio.Track2="Track 2"
529
+Basic.Settings.Output.Adv.Audio.Track3="Track 3"
530
+Basic.Settings.Output.Adv.Audio.Track4="Track 4"
531
+Basic.Settings.Output.Adv.Audio.Track5="Track 5"
532
+Basic.Settings.Output.Adv.Audio.Track6="Track 6"
533
+Basic.Settings.Output.Adv.TwitchVodTrack="Twitch VOD Track"
534
+
535
+Basic.Settings.Output.Adv.Recording="Recording"
536
+Basic.Settings.Output.Adv.Recording.RecType="Recording Type"
537
+Basic.Settings.Output.Adv.Recording.Type="Type"
538
+Basic.Settings.Output.Adv.Recording.Type.Standard="Standard"
539
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Custom Output (FFmpeg)"
540
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Use stream encoder)"
541
+Basic.Settings.Output.Adv.Recording.Filename="Filename Formatting"
542
+Basic.Settings.Output.Adv.Recording.OverwriteIfExists="Overwrite if file exists"
543
+Basic.Settings.Output.Adv.FFmpeg.Type="FFmpeg Output Type"
544
+Basic.Settings.Output.Adv.FFmpeg.Type.URL="Output to URL"
545
+Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile="Output to File"
546
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Common recording formats"
547
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="All Files"
548
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="File path or URL"
549
+Basic.Settings.Output.Adv.FFmpeg.Format="Container Format"
550
+Basic.Settings.Output.Adv.FFmpeg.FormatAudio="Audio"
551
+Basic.Settings.Output.Adv.FFmpeg.FormatVideo="Video"
552
+Basic.Settings.Output.Adv.FFmpeg.FormatDefault="Default Format"
553
+Basic.Settings.Output.Adv.FFmpeg.FormatDesc="Container Format Description"
554
+Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="Audio/Video Codec guessed from File path or URL"
555
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDefault="Default Encoder"
556
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDisable="Disable Encoder"
557
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Video Encoder"
558
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Video Encoder Settings (if any)"
559
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Audio Encoder"
560
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Audio Encoder Settings (if any)"
561
+Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Muxer Settings (if any)"
562
+Basic.Settings.Output.Adv.FFmpeg.GOPSize="Keyframe interval (frames)"
563
+Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Show all codecs (even if potentially incompatible)"
564
+
565
+Screenshot="Screenshot Output"
566
+Screenshot.SourceHotkey="Screenshot Selected Source"
567
+Screenshot.StudioProgram="Screenshot (Program)"
568
+Screenshot.Preview="Screenshot (Preview)"
569
+Screenshot.Scene="Screenshot (Scene)"
570
+Screenshot.Source="Screenshot (Source)"
571
 
572
 FilenameFormatting.completer="%CCYY-%MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %Y-%m-%d %H-%M-%S\n%A %Y-%m-%d %H-%M-%S\n%Y-%b-%d %H-%M-%S\n%Y-%B-%d %H-%M-%S\n%Y-%m-%d %I-%M-%S-%p\n%Y-%m-%d %H-%M-%S-%z\n%Y-%m-%d %H-%M-%S-%Z\n%FPS\n%CRES\n%ORES\n%VF"
573
 
574
-
575
-
576
-
577
-
578
+FilenameFormatting.TT="%CCYY   Year, four digits\n%YY      Year, last two digits (00-99)\n%MM      Month as a decimal number (01-12)\n%DD      Day of the month, zero-padded (01-31)\n%hh      Hour in 24h format (00-23)\n%mm     Minute (00-59)\n%ss     Second (00-61)\n%%      A % sign\n%a        Abbreviated weekday name\n%A        Full weekday name\n%b       Abbreviated month name\n%B      Full month name\n%d     Day of the month, zero-padded (01-31)\n%H       Hour in 24h format (00-23)\n%I      Hour in 12h format (01-12)\n%m      Month as a decimal number (01-12)\n%M       Minute (00-59)\n%p      AM or PM designation\n%S        Second (00-61)\n%y      Year, last two digits (00-99)\n%Y       Year\n%z        ISO 8601 offset from UTC in timezone\n%Z        Timezone name or abbreviation\n%FPS     Frames per second\n%CRES        Base (canvas) resolution\n%ORES     Output (scaled) resolution\n%VF     Video format"
579
+
580
+Basic.Settings.Video="Video"
581
+Basic.Settings.Video.Adapter="Video Adapter"
582
+Basic.Settings.Video.BaseResolution="Base (Canvas) Resolution"
583
+Basic.Settings.Video.ScaledResolution="Output (Scaled) Resolution"
584
+Basic.Settings.Video.DownscaleFilter="Downscale Filter"
585
+Basic.Settings.Video.DisableAeroWindows="Disable Aero (Windows only)"
586
+Basic.Settings.Video.FPS="FPS"
587
+Basic.Settings.Video.FPSCommon="Common FPS Values"
588
+Basic.Settings.Video.FPSInteger="Integer FPS Value"
589
+Basic.Settings.Video.FPSFraction="Fractional FPS Value"
590
+Basic.Settings.Video.Numerator="Numerator"
591
+Basic.Settings.Video.Denominator="Denominator"
592
+Basic.Settings.Video.Renderer="Renderer"
593
+Basic.Settings.Video.InvalidResolution="Invalid resolution value. Must be [width]x[height] (i.e. 1920x1080)"
594
+Basic.Settings.Video.CurrentlyActive="Video output is currently active. Please turn off any outputs to change video settings."
595
+Basic.Settings.Video.DisableAero="Disable Aero"
596
+
597
+Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (Fastest, but blurry if scaling)"
598
+Basic.Settings.Video.DownscaleFilter.Bicubic="Bicubic (Sharpened scaling, 16 samples)"
599
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (Sharpened scaling, 36 samples)"
600
+Basic.Settings.Video.DownscaleFilter.Area="Area (Weighted sum, 4/6/9 samples)"
601
+
602
+Basic.Settings.Audio="Audio"
603
+Basic.Settings.Audio.SampleRate="Sample Rate"
604
+Basic.Settings.Audio.Channels="Channels"
605
+Basic.Settings.Audio.Meters="Meters"
606
+Basic.Settings.Audio.MeterDecayRate="Decay Rate"
607
+Basic.Settings.Audio.MeterDecayRate.Fast="Fast"
608
+Basic.Settings.Audio.MeterDecayRate.Medium="Medium (Type I PPM)"
609
+Basic.Settings.Audio.MeterDecayRate.Slow="Slow (Type II PPM)"
610
+Basic.Settings.Audio.PeakMeterType="Peak Meter Type"
611
+Basic.Settings.Audio.PeakMeterType.SamplePeak="Sample Peak"
612
+Basic.Settings.Audio.PeakMeterType.TruePeak="True Peak (Higher CPU usage)"
613
+Basic.Settings.Audio.MultiChannelWarning.Enabled="WARNING: Surround sound audio is enabled."
614
+Basic.Settings.Audio.MultichannelWarning="If streaming, check to see if your streaming service supports both surround sound ingest and surround sound playback. Facebook 360 Live is one example where surround sound is fully supported. Although Facebook Live and YouTube Live both accept surround ingest, Facebook Live downmixes to stereo, and YouTube Live plays only two channels.\n\nOBS audio filters are compatible with surround sound, though VST plugin support isn't guaranteed."
615
+Basic.Settings.Audio.MultichannelWarning.Title="Enable surround sound audio?"
616
+Basic.Settings.Audio.MultichannelWarning.Confirm="Are you sure you want to enable surround sound audio?"
617
+Basic.Settings.Audio.Devices="Global Audio Devices"
618
+Basic.Settings.Audio.DesktopDevice="Desktop Audio"
619
+Basic.Settings.Audio.DesktopDevice2="Desktop Audio 2"
620
+Basic.Settings.Audio.AuxDevice="Mic/Auxiliary Audio"
621
+Basic.Settings.Audio.AuxDevice2="Mic/Auxiliary Audio 2"
622
+Basic.Settings.Audio.AuxDevice3="Mic/Auxiliary Audio 3"
623
+Basic.Settings.Audio.AuxDevice4="Mic/Auxiliary Audio 4"
624
+Basic.Settings.Audio.EnablePushToMute="Enable Push-to-mute"
625
+Basic.Settings.Audio.PushToMuteDelay="Push-to-mute delay"
626
+Basic.Settings.Audio.EnablePushToTalk="Enable Push-to-talk"
627
+Basic.Settings.Audio.PushToTalkDelay="Push-to-talk delay"
628
+Basic.Settings.Audio.UnknownAudioDevice="[Device not connected or not available]"
629
+Basic.Settings.Audio.Disabled="Disabled"
630
+
631
+Basic.Settings.Advanced="Advanced"
632
+Basic.Settings.Advanced.General.ProcessPriority="Process Priority"
633
+Basic.Settings.Advanced.General.ProcessPriority.High="High"
634
+Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="Above Normal"
635
+Basic.Settings.Advanced.General.ProcessPriority.Normal="Normal"
636
+Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Below Normal"
637
+Basic.Settings.Advanced.General.ProcessPriority.Idle="Idle"
638
 Basic.Settings.Advanced.FormatWarning="Warning: Colour formats other than NV12 are primarily intended for recording, and are not recommended when streaming. Streaming may incur increased CPU usage due to colour format conversion."
639
+Basic.Settings.Advanced.Audio.BufferingTime="Audio Buffering Time"
640
 Basic.Settings.Advanced.Video.ColorFormat="Colour Format"
641
 Basic.Settings.Advanced.Video.ColorSpace="Colour Space"
642
 Basic.Settings.Advanced.Video.ColorRange="Colour Range"
643
+Basic.Settings.Advanced.Video.ColorRange.Partial="Partial"
644
+Basic.Settings.Advanced.Video.ColorRange.Full="Full"
645
+Basic.Settings.Advanced.Audio.MonitoringDevice="Monitoring Device"
646
+Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Default"
647
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Disable Windows audio ducking"
648
+Basic.Settings.Advanced.StreamDelay="Stream Delay"
649
+Basic.Settings.Advanced.StreamDelay.Duration="Duration"
650
+Basic.Settings.Advanced.StreamDelay.Preserve="Preserve cutoff point (increase delay) when reconnecting"
651
+Basic.Settings.Advanced.StreamDelay.MemoryUsage="Estimated Memory Usage: %1 MB"
652
+Basic.Settings.Advanced.Network="Network"
653
+Basic.Settings.Advanced.Network.BindToIP="Bind to IP"
654
 Basic.Settings.Advanced.Network.EnableNewSocketLoop="Enable network optimisations"
655
-
656
-
657
-
658
-
659
-
660
-
661
-
662
-
663
-
664
+Basic.Settings.Advanced.Network.EnableLowLatencyMode="Enable TCP pacing"
665
+Basic.Settings.Advanced.Network.TCPPacing.Tooltip="Attempts to make RTMP output friendlier to other latency sensitive applications on the network by regulating the rate of transmission.\nIt may increase the risk of dropped frames on unstable connections."
666
+Basic.Settings.Advanced.Hotkeys.HotkeyFocusBehavior="Hotkey Focus Behaviour"
667
+Basic.Settings.Advanced.Hotkeys.NeverDisableHotkeys="Never disable hotkeys"
668
+Basic.Settings.Advanced.Hotkeys.DisableHotkeysInFocus="Disable hotkeys when main window is in focus"
669
+Basic.Settings.Advanced.Hotkeys.DisableHotkeysOutOfFocus="Disable hotkeys when main window is not in focus"
670
+Basic.Settings.Advanced.AutoRemux="Automatically remux to mp4"
671
+Basic.Settings.Advanced.AutoRemux.MP4="(record as mkv)"
672
+
673
+Basic.AdvAudio="Advanced Audio Properties"
674
+Basic.AdvAudio.ActiveOnly="Active Sources Only"
675
+Basic.AdvAudio.Name="Name"
676
+Basic.AdvAudio.Volume="Volume"
677
+Basic.AdvAudio.VolumeSource="Volume for '%1'"
678
+Basic.AdvAudio.Mono="Mono"
679
+Basic.AdvAudio.MonoSource="Mono Downmix for '%1'"
680
+Basic.AdvAudio.Balance="Balance"
681
+Basic.AdvAudio.BalanceSource="Balance for '%1'"
682
+Basic.AdvAudio.SyncOffset="Sync Offset"
683
+Basic.AdvAudio.SyncOffsetSource="Sync Offset for '%1'"
684
+Basic.AdvAudio.Monitoring="Audio Monitoring"
685
+Basic.AdvAudio.Monitoring.None="Monitor Off"
686
+Basic.AdvAudio.Monitoring.MonitorOnly="Monitor Only (mute output)"
687
+Basic.AdvAudio.Monitoring.Both="Monitor and Output"
688
+Basic.AdvAudio.MonitoringSource="Audio Monitoring for '%1'"
689
+Basic.AdvAudio.AudioTracks="Tracks"
690
+
691
+Basic.Settings.Hotkeys="Hotkeys"
692
+Basic.Settings.Hotkeys.Pair="Key combinations shared with '%1' act as toggles"
693
+Basic.Settings.Hotkeys.Filter="Filter"
694
+
695
+Basic.Hotkeys.SelectScene="Switch to scene"
696
+
697
+Basic.SystemTray.Show="Show"
698
+Basic.SystemTray.Hide="Hide"
699
+
700
+Basic.SystemTray.Message.Reconnecting="Disconnected. Reconnecting..."
701
+
702
+Hotkeys.Insert="Insert"
703
+Hotkeys.Delete="Delete"
704
+Hotkeys.Home="Home"
705
+Hotkeys.End="End"
706
+Hotkeys.PageUp="Page Up"
707
+Hotkeys.PageDown="Page Down"
708
+Hotkeys.NumLock="Num Lock"
709
+Hotkeys.ScrollLock="Scroll Lock"
710
+Hotkeys.CapsLock="Caps Lock"
711
+Hotkeys.Backspace="Backspace"
712
+Hotkeys.Tab="Tab"
713
+Hotkeys.Print="Print"
714
+Hotkeys.Pause="Pause"
715
+Hotkeys.Left="Left"
716
+Hotkeys.Right="Right"
717
+Hotkeys.Up="Up"
718
+Hotkeys.Down="Down"
719
+Hotkeys.Windows="Windows"
720
+Hotkeys.Super="Super"
721
+Hotkeys.Menu="Menu"
722
+Hotkeys.Space="Space"
723
+Hotkeys.NumpadNum="Numpad %1"
724
+Hotkeys.NumpadMultiply="Numpad Multiply"
725
+Hotkeys.NumpadDivide="Numpad Divide"
726
+Hotkeys.NumpadAdd="Numpad Add"
727
+Hotkeys.NumpadSubtract="Numpad Subtract"
728
+Hotkeys.NumpadDecimal="Numpad Decimal"
729
+Hotkeys.AppleKeypadNum="%1 (Keypad)"
730
+Hotkeys.AppleKeypadMultiply="* (Keypad)"
731
+Hotkeys.AppleKeypadDivide="/ (Keypad)"
732
+Hotkeys.AppleKeypadAdd="+ (Keypad)"
733
+Hotkeys.AppleKeypadSubtract="- (Keypad)"
734
+Hotkeys.AppleKeypadDecimal=". (Keypad)"
735
+Hotkeys.AppleKeypadEqual="= (Keypad)"
736
+Hotkeys.MouseButton="Mouse %1"
737
+Hotkeys.Escape="Esc"
738
+
739
+Mute="Mute"
740
+Unmute="Unmute"
741
+Push-to-mute="Push-to-mute"
742
+Push-to-talk="Push-to-talk"
743
+
744
+SceneItemShow="Show '%1'"
745
+SceneItemHide="Hide '%1'"
746
+
747
+OutputWarnings.NoTracksSelected="You must select at least one track"
748
 OutputWarnings.MP4Recording="Warning: Recordings saved to MP4/MOV will be unrecoverable if the file cannot be finalised (e.g. as a result of BSODs, power losses, etc.). If you want to record multiple audio tracks consider using MKV and remux the recording to MP4/MOV after it is finished (File → Remux Recordings)"
749
+OutputWarnings.CannotPause="Warning: Recordings cannot be paused if the recording encoder is set to \"(Use stream encoder)\""
750
 
751
+FinalScene.Title="Delete Scene"
752
+FinalScene.Text="There needs to be at least one scene."
753
 
754
+NoSources.Title="No Sources"
755
+NoSources.Text="It looks like you haven't added any video sources yet, so you will only be outputting a blank screen. Are you sure you want to do this?"
756
+NoSources.Text.AddSource="You can add sources by clicking the + icon under the Sources box in the main window at any time."
757
+NoSources.Label="You don't have any sources.\nClick the + button below,\nor right click here to add one."
758
 
759
 ChangeBG="Set Colour"
760
 CustomColor="Custom Colour"
761
 
762
+BrowserSource.EnableHardwareAcceleration="Enable Browser Source Hardware Acceleration"
763
 
764
+About="About"
765
+About.Info="OBS Studio is a free and open source video recording and live streaming software."
766
+About.Donate="Make a Contribution"
767
+About.GetInvolved="Get Involved"
768
+About.Authors="Authors"
769
 About.License="Licence"
770
-
771
-
772
-
773
-
774
-
775
-
776
-
777
-
778
+About.Contribute="Support the OBS Project"
779
+
780
+AddUrl.Title="Add Source via URL"
781
+AddUrl.Text="You have dragged a URL into OBS. This will automatically add the link as a source. Continue?"
782
+AddUrl.Text.Url="URL: %1"
783
+
784
+ResizeOutputSizeOfSource="Resize output (source size)"
785
+ResizeOutputSizeOfSource.Text="The base and output resolutions will be resized to the size of the current source."
786
+ResizeOutputSizeOfSource.Continue="Do you want to continue?"
787
+
788
+PreviewTransition="Preview Transition"
789
+
790
+Importer="Scene Collection Importer"
791
+Importer.SelectCollection="Select a Scene Collection"
792
+Importer.Collection="Scene Collection"
793
+Importer.HelpText="Add files to this window to import collections from OBS or other supported programs."
794
+Importer.Path="Collection Path"
795
+Importer.Program="Detected Application"
796
+Importer.AutomaticCollectionPrompt="Automatically Search for Scene Collections"
797
+Importer.AutomaticCollectionText="OBS can automatically find importable scene collections from supported third-party programs. Would you like OBS to automatically find collections for you?\n\nYou can change this later in Settings > General > Importers."
798
+
799
+
800
+Restart="Restart"
801
+NeedsRestart="OBS Studio needs to be restarted. Do you want to restart now?"
802
+
803
+ContextBar.NoSelectedSource="No source selected"
804
+ContextBar.ResetTransform="Reset Transform"
805
+ContextBar.FitToCanvas="Fit to Canvas"
806
+
807
+ContextBar.MediaControls.PlayMedia="Play Media"
808
+ContextBar.MediaControls.PauseMedia="Pause Media"
809
+ContextBar.MediaControls.StopMedia="Stop Media"
810
+ContextBar.MediaControls.RestartMedia="Restart Media"
811
+ContextBar.MediaControls.PlaylistNext="Next in Playlist"
812
+ContextBar.MediaControls.PlaylistPrevious="Previous in Playlist"
813
+ContextBar.MediaControls.MediaProperties="Media Properties"
814
+ContextBar.MediaControls.BlindSeek="Media Seek Widget"
815
 
816
obs-studio-26.0.2.tar.xz/UI/data/locale/en-US.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/en-US.ini Changed
124
 
1
@@ -174,6 +174,7 @@
2
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Disconnect Account?"
3
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="This change will apply immediately. Are you sure you want to disconnect your account?"
4
 Basic.AutoConfig.StreamPage.GetStreamKey="Get Stream Key"
5
+Basic.AutoConfig.StreamPage.MoreInfo="More Info"
6
 Basic.AutoConfig.StreamPage.UseStreamKey="Use Stream Key"
7
 Basic.AutoConfig.StreamPage.Service="Service"
8
 Basic.AutoConfig.StreamPage.Service.ShowAll="Show All..."
9
@@ -407,8 +408,8 @@
10
 Deinterlacing.BottomFieldFirst="Bottom Field First"
11
 
12
 # volume control accessibility text
13
-VolControl.SliderUnmuted="Volume slider for '%1': %2"
14
-VolControl.SliderMuted="Volume slider for '%1': %2 (currently muted)"
15
+VolControl.SliderUnmuted="Volume slider for '%1':"
16
+VolControl.SliderMuted="Volume slider for '%1': (currently muted)"
17
 VolControl.Mute="Mute '%1'"
18
 VolControl.Properties="Properties for '%1'"
19
 
20
@@ -429,6 +430,7 @@
21
 # add profile dialog
22
 AddProfile.Title="Add Profile"
23
 AddProfile.Text="Please enter the name of the profile"
24
+AddProfile.WizardCheckbox="Show auto-configuration wizard"
25
 
26
 # rename profile dialog
27
 RenameProfile.Title="Rename Profile"
28
@@ -447,6 +449,12 @@
29
 Basic.SourceSelect.AddExisting="Add Existing"
30
 Basic.SourceSelect.AddVisible="Make source visible"
31
 
32
+# source box
33
+Basic.Main.Sources.Visibility="Visibility"
34
+Basic.Main.Sources.VisibilityDescription="Controls the visibility of '%1' in the canvas"
35
+Basic.Main.Sources.Lock="Lock"
36
+Basic.Main.Sources.LockDescription="Locks the position and scale of '%1' in the canvas"
37
+
38
 # properties window
39
 Basic.PropertiesWindow="Properties for '%1'"
40
 Basic.PropertiesWindow.AutoSelectFormat="%1 (autoselect: %2)"
41
@@ -705,6 +713,13 @@
42
 Basic.Settings.Stream.MissingUrlAndApiKey="URL and Stream Key are missing.\n\nOpen settings to enter the URL and Stream Key in the 'stream' tab."
43
 Basic.Settings.Stream.MissingUrl="Stream URL is missing.\n\nOpen settings to enter the URL in the 'Stream' tab."
44
 Basic.Settings.Stream.MissingStreamKey="Stream key is missing.\n\nOpen settings to enter the stream key in the 'Stream' tab."
45
+Basic.Settings.Stream.IgnoreRecommended="Ignore streaming service setting recommendations"
46
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Override Recommended Settings"
47
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Warning: Ignoring the service's limitations may result in degraded stream quality or prevent you from streaming.\n\nContinue?"
48
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Maximum Video Bitrate: %1 kbps"
49
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Maximum Audio Bitrate: %1 kbps"
50
+Basic.Settings.Stream.Recommended.MaxResolution="Maximum Resolution: %1"
51
+Basic.Settings.Stream.Recommended.MaxFPS="Maximum FPS: %1"
52
 
53
 # basic mode 'output' settings
54
 Basic.Settings.Output="Output"
55
@@ -712,7 +727,6 @@
56
 Basic.Settings.Output.Encoder="Encoder"
57
 Basic.Settings.Output.SelectDirectory="Select Recording Directory"
58
 Basic.Settings.Output.SelectFile="Select Recording File"
59
-Basic.Settings.Output.EnforceBitrate="Enforce streaming service bitrate limits"
60
 Basic.Settings.Output.DynamicBitrate="Dynamically change bitrate to manage congestion"
61
 Basic.Settings.Output.DynamicBitrate.Beta="Dynamically change bitrate to manage congestion (Beta)"
62
 Basic.Settings.Output.DynamicBitrate.TT="Instead of dropping frames to reduce congestion, dynamically changes bitrate on the fly.\n\nNote that this can increase delay to viewers if there is significant sudden congestion.\nWhen the bitrate drops, it can take up to a few minutes to restore.\n\nCurrently only supported for RTMP."
63
@@ -733,8 +747,8 @@
64
 Basic.Settings.Output.Simple.RecordingQuality.Small="High Quality, Medium File Size"
65
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Indistinguishable Quality, Large File Size"
66
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Lossless Quality, Tremendously Large File Size"
67
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Warning: The streaming video bitrate will be set to %1, which is the upper limit for the current streaming service. If you're sure you want to go above %1, enable advanced encoder options and uncheck \"Enforce streaming service bitrate limits\"."
68
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Warning: The streaming audio bitrate will be set to %1, which is the upper limit for the current streaming service. If you're sure you want to go above %1, enable advanced encoder options and uncheck \"Enforce streaming service bitrate limits\"."
69
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Warning: The streaming video bitrate will be set to %1, which is the upper limit for the current streaming service."
70
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Warning: The streaming audio bitrate will be set to %1, which is the upper limit for the current streaming service."
71
 Basic.Settings.Output.Simple.Warn.CannotPause="Warning: Recordings cannot be paused if the recording quality is set to \"Same as stream\"."
72
 Basic.Settings.Output.Simple.Warn.Encoder="Warning: Recording with a software encoder at a different quality than the stream will require extra CPU usage if you stream and record at the same time."
73
 Basic.Settings.Output.Simple.Warn.Lossless="Warning: Lossless quality generates tremendously large file sizes! Lossless quality can use upward of 7 gigabytes of disk space per minute at high resolutions and framerates. Lossless is not recommended for long recordings unless you have a very large amount of disk space available."
74
@@ -745,6 +759,11 @@
75
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardware (AMD)"
76
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardware (NVENC)"
77
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Software (x264 low CPU usage preset, increases file size)"
78
+Basic.Settings.Output.Simple.TwitchVodTrack="Twitch VOD Track (Uses Track 2)"
79
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Incompatible Resolution/Framerate"
80
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="This streaming service does not support your current output resolution and/or framerate. They will be changed to the closest compatible value:\n\n%1\n\nDo you want to continue?"
81
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Resolution: %1"
82
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS: %1"
83
 Basic.Settings.Output.VideoBitrate="Video Bitrate"
84
 Basic.Settings.Output.AudioBitrate="Audio Bitrate"
85
 Basic.Settings.Output.Reconnect="Automatically Reconnect"
86
@@ -760,16 +779,17 @@
87
 Basic.Settings.Output.Adv.Rescale="Rescale Output"
88
 Basic.Settings.Output.Adv.AudioTrack="Audio Track"
89
 Basic.Settings.Output.Adv.Streaming="Streaming"
90
-Basic.Settings.Output.Adv.ApplyServiceSettings="Enforce streaming service encoder settings"
91
 Basic.Settings.Output.Adv.Audio.Track1="Track 1"
92
 Basic.Settings.Output.Adv.Audio.Track2="Track 2"
93
 Basic.Settings.Output.Adv.Audio.Track3="Track 3"
94
 Basic.Settings.Output.Adv.Audio.Track4="Track 4"
95
 Basic.Settings.Output.Adv.Audio.Track5="Track 5"
96
 Basic.Settings.Output.Adv.Audio.Track6="Track 6"
97
+Basic.Settings.Output.Adv.TwitchVodTrack="Twitch VOD Track"
98
 
99
 # basic mode 'output' settings - advanced section - recording subsection
100
 Basic.Settings.Output.Adv.Recording="Recording"
101
+Basic.Settings.Output.Adv.Recording.RecType="Recording Type"
102
 Basic.Settings.Output.Adv.Recording.Type="Type"
103
 Basic.Settings.Output.Adv.Recording.Type.Standard="Standard"
104
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Custom Output (FFmpeg)"
105
@@ -905,13 +925,18 @@
106
 Basic.AdvAudio.ActiveOnly="Active Sources Only"
107
 Basic.AdvAudio.Name="Name"
108
 Basic.AdvAudio.Volume="Volume"
109
+Basic.AdvAudio.VolumeSource="Volume for '%1'"
110
 Basic.AdvAudio.Mono="Mono"
111
+Basic.AdvAudio.MonoSource="Mono Downmix for '%1'"
112
 Basic.AdvAudio.Balance="Balance"
113
+Basic.AdvAudio.BalanceSource="Balance for '%1'"
114
 Basic.AdvAudio.SyncOffset="Sync Offset"
115
+Basic.AdvAudio.SyncOffsetSource="Sync Offset for '%1'"
116
 Basic.AdvAudio.Monitoring="Audio Monitoring"
117
 Basic.AdvAudio.Monitoring.None="Monitor Off"
118
 Basic.AdvAudio.Monitoring.MonitorOnly="Monitor Only (mute output)"
119
 Basic.AdvAudio.Monitoring.Both="Monitor and Output"
120
+Basic.AdvAudio.MonitoringSource="Audio Monitoring for '%1'"
121
 Basic.AdvAudio.AudioTracks="Tracks"
122
 
123
 # basic mode 'hotkeys' settings
124
obs-studio-26.1.0.tar.xz/UI/data/locale/eo-UY.ini Added
326
 
1
@@ -0,0 +1,324 @@
2
+
3
+Language="Esperanto"
4
+
5
+OK="Bone"
6
+Apply="Apliki"
7
+Cancel="Nuligi"
8
+Close="Fermi"
9
+Save="Konservi"
10
+Discard="Forĵeti"
11
+Disable="Malebligi"
12
+Yes="Jes"
13
+No="Ne"
14
+Add="Aldoni"
15
+Remove="Forigi"
16
+Rename="Renomi"
17
+Interact="Interagi"
18
+Filters="Filtriloj"
19
+Properties="Ecoj"
20
+MoveUp="Movi supren"
21
+MoveDown="Movi malsupren"
22
+Settings="Agordoj"
23
+Display="Ekrano"
24
+Name="Nomo"
25
+Exit="Eliri"
26
+Mixer="Sonmiksilo"
27
+Browse="Foliumi"
28
+Mono="Monofonia"
29
+Stereo="Stereofonia"
30
+DroppedFrames="Perditaj kadroj %1 (%2%)"
31
+StudioProgramProjector="Plenekrana projekciilo (programaro)"
32
+PreviewProjector="Plenekrana projekciilo (antaŭvido)"
33
+SceneProjector="Plenekrana projekciilo (sceno)"
34
+SourceProjector="Plenekrana projekciilo (fonto)"
35
+StudioProgramWindow="Fenestra projekciilo (programaro)"
36
+PreviewWindow="Fenestra projekciilo (antaŭvido)"
37
+SceneWindow="Fenestra projekciilo (sceno)"
38
+SourceWindow="Fenestra projekciilo (fonto)"
39
+MultiviewProjector="Multvido (plenekrana)"
40
+MultiviewWindowed="Multvido (fenestra)"
41
+ResizeProjectorWindowToContent="Mezurigi fenestron laŭ enhavo"
42
+Clear="Viŝi"
43
+Revert="Malfari"
44
+Show="Montri"
45
+Hide="Kaŝi"
46
+UnhideAll="Malkaŝi ĉiujn"
47
+Untitled="Sentitola"
48
+New="Nova"
49
+Duplicate="Duobligi"
50
+Enable="Ebligi"
51
+DisableOSXVSync="Malebligi v-sinkon de macOS"
52
+ResetOSXVSyncOnExit="Restarigi v-sinkon de macOS je eliro"
53
+HighResourceUsage="Kodado troŝarĝita! Konsideru malpliigi video-agordojn aŭ uzi pli rapidan kodado-antaŭagordon."
54
+Transition="Transpaso"
55
+QuickTransitions="Rapidaj transpasoj"
56
+FadeToBlack="Dissolvi al nigro"
57
+Left="Maldekstre"
58
+Right="Dekstre"
59
+Top="Supre"
60
+Bottom="Malsupre"
61
+Reset="Restarigi"
62
+Hours="Horoj"
63
+Minutes="Minutoj"
64
+Seconds="Sekundoj"
65
+Deprecated="Evitindaj"
66
+ReplayBuffer="Reluda bufro"
67
+Import="Importi"
68
+Export="Eksporti"
69
+Copy="Kopii"
70
+Paste="Alglui"
71
+PasteReference="Alglui (referenco)"
72
+PasteDuplicate="Alglui (duobligi)"
73
+RemuxRecordings="Konverti registraĵojn"
74
+Next="Sekve"
75
+Back="Antaŭe"
76
+Defaults="Defaŭltoj"
77
+HideMixer="Malkaŝi en miksilo"
78
+TransitionOverride="Devigi transpason"
79
+None="Neniu"
80
+StudioMode.Preview="Antaŭvido"
81
+StudioMode.Program="Programaro"
82
+ShowInMultiview="Montri en multivido"
83
+VerticalLayout="Vertikala aranĝo"
84
+Group="Grupo"
85
+DoNotShowAgain="Ne montru denove"
86
+Default="(Defaŭlta)"
87
+Calculating="Kalkulado..."
88
+Fullscreen="Plenekrano"
89
+Windowed="En fenestro"
90
+Percent="Procento"
91
+RefreshBrowser="Aktualigi"
92
+AspectRatio="Ekranformato <b>%1:%2</b>"
93
+LockVolume="Ŝlosi laŭtecon"
94
+LogViewer="Vidilo de protokoloj"
95
+ShowOnStartup="Montri je lanĉo"
96
+OpenFile="Malfermi dosieron"
97
+AddValue="Aldoni %1"
98
+
99
+AlreadyRunning.Title="OBS jam ruliĝas"
100
+AlreadyRunning.Text="OBS estas jam ruliĝanta! Krom se vi intencis fari tion, bonvolu fermi ajnajn ekzistantajn aperojn de OBS antaŭ ol provi ruli novan. Se vi agordis OBS por plejetiĝi al la taskopleto, bonvolu kontroli ĉu ĝi ankoraŭ ruliĝas tie."
101
+AlreadyRunning.LaunchAnyway="Lanĉi ĉiuokaze"
102
+
103
+ChromeOS.Title="Nesubtenata platformo"
104
+ChromeOS.Text="OBS ŝajnas ruliĝi ene de entenilo de ChromeOS. Tiu ĉi platformo estas nesubtenata"
105
+
106
+DockCloseWarning.Title="Fermado de dokebla fenestro"
107
+DockCloseWarning.Text="Vi ĵus fermis dokeblan fenestron. Se vi volas ĝin remontrigi, uzu la menuon Vido → Dokoj sur la menustrio."
108
+
109
+ExtraBrowsers="Laŭmendaj esploril-dokoj"
110
+ExtraBrowsers.Info="Aldonu dokojn per doni al ili nomon kaj retadreso, kaj tiam alklaku Apliki aŭ Fermi por malfermi la dokojn. Vi povas aldoni aŭ forigi dokojn iam ajn."
111
+ExtraBrowsers.DockName="Dok-nomo"
112
+
113
+Auth.Authing.Title="Aŭtentigado..."
114
+Auth.Authing.Text="Aŭtentigado per %1, bonvole atendu..."
115
+Auth.AuthFailure.Title="Malsukceso de aŭtentigo"
116
+Auth.AuthFailure.Text="Malsukcesis aŭtentigi per %1:\n\n%2: %3"
117
+Auth.InvalidScope.Title="Aŭtentigo deviga"
118
+Auth.InvalidScope.Text="La aŭtentigaj postuloj por %1 ŝanĝiĝis. Iuj trajtoj eble ne disponeblas."
119
+Auth.LoadingChannel.Title="Ŝargado de kanal-informoj..."
120
+Auth.LoadingChannel.Text="Ŝargado de kanal-informoj por %1, bonvole atendu..."
121
+Auth.ChannelFailure.Title="Malsukcesis ŝargi kanalon"
122
+Auth.ChannelFailure.Text="Malsukcesis ŝargi kanal-informojn por %1\n\n%2: %3"
123
+Auth.Chat="Babilejo"
124
+Auth.StreamInfo="Elsend-informoj"
125
+TwitchAuth.Stats="Statistikoj de Twitch"
126
+TwitchAuth.Feed="Aktivec-fluo de Twitch"
127
+TwitchAuth.TwoFactorFail.Title="Ne povis informpeti elsend-ŝlosilon"
128
+TwitchAuth.TwoFactorFail.Text="OBS ne povis konekti al via Twitch-konto. Bonvolu certigi ke dufaktora aŭtentigo estas agordita en viaj <a href='https://www.twitch.tv/settings/security'>agordoj de sekureco en Twitch</a>, pro ke tio estas necesa por elsendi."
129
+RestreamAuth.Channels="Kanaloj de Restream"
130
+
131
+Copy.Filters="Kopii filtrilojn"
132
+Paste.Filters="Alglui filtrilojn"
133
+
134
+BrowserPanelInit.Title="Pravalorizado de esplorilo..."
135
+BrowserPanelInit.Text="Pravalorizado de esplorilo, bonvole atendu..."
136
+
137
+BandwidthTest.Region="Regiono"
138
+BandwidthTest.Region.US="Usono"
139
+BandwidthTest.Region.EU="Eŭropo"
140
+BandwidthTest.Region.Asia="Azio"
141
+BandwidthTest.Region.Other="Alia"
142
+
143
+Basic.AutoConfig="Aŭtomata agordilo"
144
+Basic.AutoConfig.ApplySettings="Apliki agordojn"
145
+Basic.AutoConfig.StartPage="Informoj pri uzado"
146
+Basic.AutoConfig.StartPage.SubTitle="Indiku por kio vi volas uzi la programaron"
147
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Optimumigu por elsendado, registrado estas akcesora"
148
+Basic.AutoConfig.StartPage.PrioritizeRecording="Optimumigi nur por registrado, mi ne elsendos"
149
+Basic.AutoConfig.StartPage.PrioritizeVirtualCam="Mi nur uzos la virtualan kameraon"
150
+Basic.AutoConfig.VideoPage="Video-agordoj"
151
+Basic.AutoConfig.VideoPage.SubTitle="Indiku la video-agordojn, kiujn vi volas uzi"
152
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Uzi aktualan (%1x%2)"
153
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Ekrano %1 (%2x%3)"
154
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Uzi aktualan (%1)"
155
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="Aŭ 60 aŭ 30, sed preferu 60 kiam eblas"
156
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="Aŭ 60 aŭ 30, sed preferu altan distingivon"
157
+Basic.AutoConfig.VideoPage.CanvasExplanation="Notu: La kanvasa (baza) distingivo ne necese samas kiel la distingivo per kiu vi elsendos aŭ registros. Via efektiva distingivo de elsendado/registrado eble reduktiĝos de la kanvasa distingivo por malpliigi rimed-uzadon aŭ bitrapidaj postuloj."
158
+Basic.AutoConfig.StreamPage="Elsend-informoj"
159
+Basic.AutoConfig.StreamPage.SubTitle="Bonvole enigi viajn elsend-informojn"
160
+Basic.AutoConfig.StreamPage.ConnectAccount="Konekti konton (rekomendite)"
161
+Basic.AutoConfig.StreamPage.DisconnectAccount="Malkonekti konton"
162
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Ĉu malkonektu konton?"
163
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Tiu ĉi ŝanĝo aplikiĝos tuj. Ĉu vi certas, ke vi volas malkonekti vian konton?"
164
+Basic.AutoConfig.StreamPage.GetStreamKey="Akiri elsend-ŝlosilon"
165
+Basic.AutoConfig.StreamPage.MoreInfo="Pli da informoj"
166
+Basic.AutoConfig.StreamPage.UseStreamKey="Uzi elsend-ŝlosilon"
167
+Basic.AutoConfig.StreamPage.Service="Servo"
168
+Basic.AutoConfig.StreamPage.Service.ShowAll="Montri ĉiujn..."
169
+Basic.AutoConfig.StreamPage.Service.Custom="Laŭmenda..."
170
+Basic.AutoConfig.StreamPage.Server="Servilo"
171
+Basic.AutoConfig.StreamPage.StreamKey="Elsend-ŝlosilo"
172
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(ligilo)"
173
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="Taksi bitrapidon per kapacita testo (eble necesos kelkaj minutoj)"
174
+
175
+
176
+
177
+Updater.Skip="Preterpasi version"
178
+Updater.Running.Title="Programaro aktuale aktiva"
179
+Updater.Running.Text="Eligoj estas aktuale aktivaj, bonvolu fermi ajnajn aktivajn eligojn antaŭ ol provi ĝisdatigi"
180
+Updater.NoUpdatesAvailable.Title="Neniuj ĝisdatigoj disponeblas"
181
+Updater.NoUpdatesAvailable.Text="Neniuj ĝisdatigoj estas nuntempe disponeblaj"
182
+Updater.FailedToLaunch="Malsukcesis lanĉi ĝisdatigilon"
183
+Updater.GameCaptureActive.Title="Ludkaptado aktiva"
184
+Updater.GameCaptureActive.Text="La ludkapta hok-biblioteko estas aktuale uzata. Bonvolu fermi ajnajn ludojn/programarojn kaptatajn (aŭ restartigu Windows) kaj reprovu."
185
+
186
+QuickTransitions.SwapScenes="Interŝanĝi antaŭvidan/eligan scenojn post transpasi"
187
+QuickTransitions.SwapScenesTT="Interŝanĝas la antaŭvidan kaj eligan scenojn post transpasi (se la originala sceno de la eligo ankoraŭ ekzistas).\nTio ne malfaros ajnajn ŝanĝojn, kiuj eble fariĝis al la originala sceno de la eligo."
188
+QuickTransitions.DuplicateScene="Duobligi scenon"
189
+QuickTransitions.DuplicateSceneTT="Dum redaktado de la sama sceno, permesas redakti transformon/videblecon de fontoj sen modifi la eligon.\nPor redakti ecoj de fontoj sen modifi la eligon, ebligu 'Duobligi fontojn'.\nŜanĝi tiun ĉi valuton restarigos la aktualan elig-scenon (se ĝi ankoraŭ ekzistas)."
190
+QuickTransitions.EditProperties="Duobligi fontojn"
191
+QuickTransitions.EditPropertiesTT="Dum redaktado de la sama sceno, permesas redakti ecojn de fontoj sen modifi la eligon.\nTio ĉi nur uzeblas se 'Duobligi scenon' estas ebligita.\nIuj fontoj (kiel kaptaj aŭ aŭdvidaĵaj fontoj) ne subtenas tion ĉi kaj ne povas redaktiĝi aparte.\nŜanĝi tiun ĉi valuton restarigos la aktualan elig-scenon (se ĝi ankoraŭ ekzistas).\n\nAverto: Pro ke fontoj duobliĝos, tio ĉi eble necesigas ekstrajn sistem- aŭ video-rimedojn."
192
+QuickTransitions.HotkeyName="Rapida transpaso: %1"
193
+
194
+Basic.AddTransition="Aldoni agordeblan transpason"
195
+Basic.RemoveTransition="Forigi agordeblan transpason"
196
+Basic.TransitionProperties="Ecoj de transpaso"
197
+Basic.SceneTransitions="Scen-transpasoj"
198
+Basic.TransitionDuration="Daŭro"
199
+Basic.TogglePreviewProgramMode="Studio-reĝimo"
200
+
201
+TransitionNameDlg.Text="Bonvolu enigi la nomon de la transpaso"
202
+TransitionNameDlg.Title="Nomo de transpaso"
203
+
204
+TitleBar.Profile="Agordaro"
205
+TitleBar.Scenes="Scenoj"
206
+
207
+NameExists.Title="Nomo jam ekzistas"
208
+NameExists.Text="La nomo jam estas uzata."
209
+
210
+NoNameEntered.Title="Bonvolu enigi validan nomon"
211
+NoNameEntered.Text="La nomo estas deviga."
212
+
213
+ConfirmStart.Title="Ĉu komenci elsendon?"
214
+ConfirmStart.Text="Ĉu vi certas, ke vi volas komenci la elsendon?"
215
+
216
+ConfirmStop.Title="Ĉu ĉesigi elsendon?"
217
+ConfirmStop.Text="Ĉu vi certas ke vi volas ĉesigi la elsendon?"
218
+
219
+ConfirmStopRecord.Title="Ĉu ĉesigi registradon?"
220
+ConfirmStopRecord.Text="Ĉu vi certas ke vi volas ĉesigi la registradon?"
221
+
222
+ConfirmBWTest.Title="Ĉu komenci kapacitan teston?"
223
+ConfirmBWTest.Text="Vi havas OBS agorditan en reĝimo de kapacita testo. Tiu ĉi reĝimo ebligas ret-testadon sen vere tujelsendi. Kiam vi finiĝas pri testado, vi devos malebligi ĝin por ke spektantoj povu vidi vian elsendon.\n\nĈu vi volas daŭrigi?"
224
+
225
+ConfirmExit.Title="Ĉu eliri OBS?"
226
+ConfirmExit.Text="OBS estas aktuale aktiva. Ĉiuj elsendoj/registradoj fermiĝos. Ĉu vi vere volas eliri?"
227
+
228
+ConfirmRemove.Title="Konfirmado de forigo"
229
+ConfirmRemove.Text="Ĉu vi vere volas forigi '$1'?"
230
+ConfirmRemove.TextMultiple="Ĉu vi vere volas forigi %1 erojn?"
231
+
232
+Output.StartStreamFailed="Malsukcesis ekelsendi"
233
+Output.StartRecordingFailed="Malsukcesis ekregistri"
234
+Output.StartReplayFailed="Malsukcesis komenci reludan bufron"
235
+Output.StartFailedGeneric="Komencado de la eligo malsukcesis. Bonvolu kontroli la protokolon por detaloj.\n\nNotu: Se vi uzas la kodiloj NVENC aŭ AMD, certigu ke viaj videopeliloj estas ĝisdataj."
236
+
237
+Output.ReplayBuffer.PauseWarning.Title="Ne povas konservi reludojn dum paŭzo"
238
+Output.ReplayBuffer.PauseWarning.Text="Averto: Reludoj ne konserveblas dum registrado estas paŭzigita."
239
+
240
+Output.ConnectFail.Title="Malsukcesis konekti"
241
+Output.ConnectFail.BadPath="Nevalida indiko aŭ konekt-retadreso. Bonvole kontrolu viajn agordojn por certigi, ke ili validas."
242
+
243
+
244
+
245
+
246
+
247
+
248
+
249
+
250
+
251
+
252
+
253
+ScaleFiltering="Skal-filtrado"
254
+
255
+
256
+
257
+
258
+
259
+
260
+
261
+
262
+
263
+
264
+
265
+
266
+
267
+
268
+
269
+
270
+
271
+
272
+
273
+
274
+
275
+
276
+
277
+
278
+
279
+
280
+
281
+
282
+
283
+
284
+
285
+
286
+Basic.Settings.Stream.IgnoreRecommended="Malatenti rekomendojn de elsend-servaj agordoj"
287
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Transpasi rekomenditajn agordojn"
288
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Averto: Malatenti la limojn de la servo eble rezultos en malaltigita elsend-kvalito aŭ preventos vin de elsendi.\n\nĈu daŭrigi?"
289
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Maksimuma video-bitrapido: %1 kbps"
290
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Maksimuma son-bitrapido: %1 kbps"
291
+
292
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Averto: La elsenda video-bitrapido agordiĝos al %1, kio estas la supra limo por la aktuala elsend-servo."
293
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Averto: La elsenda son-bitrapido agordiĝos al %1, kio estas la supra limo por la aktuala elsend-servo."
294
+
295
+
296
+
297
+
298
+
299
+
300
+
301
+
302
+
303
+
304
+
305
+
306
+
307
+
308
+
309
+
310
+
311
+
312
+
313
+
314
+
315
+
316
+
317
+
318
+
319
+
320
+
321
+
322
+
323
+
324
+
325
+
326
obs-studio-26.0.2.tar.xz/UI/data/locale/es-ES.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/es-ES.ini Changed
130
 
1
@@ -93,7 +93,7 @@
2
 LogViewer="Visor de registros"
3
 ShowOnStartup="Mostrar al inicio"
4
 OpenFile="Abrir archivo"
5
-AddValue="Añadir %1"
6
+AddValue="Agregar %1"
7
 
8
 AlreadyRunning.Title="OBS ya se está ejecutando"
9
 AlreadyRunning.Text="¡OBS ya se está ejecutando! A no ser que quieras hacer esto, por favor, cierra todas las ventanas de OBS antes de intentar iniciar una nueva. Si tienes configurado OBS para que se minimice a la barra de tareas, comprueba si sigue ejecutándose ahí."
10
@@ -161,6 +161,7 @@
11
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="¿Desconectar cuenta?"
12
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Este cambio se aplicará inmediatamente. ¿Está seguro de que desea desconectar su cuenta?"
13
 Basic.AutoConfig.StreamPage.GetStreamKey="Obtener clave de transmisión"
14
+Basic.AutoConfig.StreamPage.MoreInfo="Más información"
15
 Basic.AutoConfig.StreamPage.UseStreamKey="Usar clave de emisión"
16
 Basic.AutoConfig.StreamPage.Service="Servicio"
17
 Basic.AutoConfig.StreamPage.Service.ShowAll="Mostrar todos..."
18
@@ -365,8 +366,8 @@
19
 Deinterlacing.TopFieldFirst="Campo Superior Primero"
20
 Deinterlacing.BottomFieldFirst="Campo Inferior Primero"
21
 
22
-VolControl.SliderUnmuted="Deslizador de volumen para '%1': %2"
23
-VolControl.SliderMuted="Deslizador de volumen para '%1': %2 (silenciado)"
24
+VolControl.SliderUnmuted="Deslizador de volumen para '%1':"
25
+VolControl.SliderMuted="Deslizador de volumen para '%1': (actualmente silenciado)"
26
 VolControl.Mute="Silenciar '%1'"
27
 VolControl.Properties="Propiedades para '%1'"
28
 
29
@@ -382,6 +383,7 @@
30
 
31
 AddProfile.Title="Añadir perfil"
32
 AddProfile.Text="Escriba el nombre del perfil"
33
+AddProfile.WizardCheckbox="Mostrar el asistente de configuración automática"
34
 
35
 RenameProfile.Title="Renombrar perfil"
36
 
37
@@ -396,6 +398,11 @@
38
 Basic.SourceSelect.AddExisting="Añadir existentes"
39
 Basic.SourceSelect.AddVisible="Hacer visible la fuente"
40
 
41
+Basic.Main.Sources.Visibility="Visibilidad"
42
+Basic.Main.Sources.VisibilityDescription="Controla la visibilidad de '%1' en el lienzo"
43
+Basic.Main.Sources.Lock="Bloquear"
44
+Basic.Main.Sources.LockDescription="Bloquea la posición y la escala de '%1' en el lienzo"
45
+
46
 Basic.PropertiesWindow="Propiedades para '%1'"
47
 Basic.PropertiesWindow.AutoSelectFormat="%1 (seleccionar: %2)"
48
 Basic.PropertiesWindow.SelectColor="Seleccionar color"
49
@@ -635,13 +642,19 @@
50
 Basic.Settings.Stream.MissingUrlAndApiKey="Falta la URL y clave de retransmisión.\n\nAbre los ajustes para introducir la URL y la clave de retransmisión en la pestaña 'Emisión'."
51
 Basic.Settings.Stream.MissingUrl="Falta la URL del stream.\n\nAbre la configuración para introducir la URL en la pestaña 'Emisión'."
52
 Basic.Settings.Stream.MissingStreamKey="Falta la clave de retransmisión.\n\nAbre los ajustes para introducir la clave de retransmisión en la pestaña 'Emisión'."
53
+Basic.Settings.Stream.IgnoreRecommended="Ignorar las recomendaciones de configuración del servicio de streaming"
54
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Anular los ajustes recomendados"
55
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Advertencia: Ignorar las limitaciones del servicio puede provocar una degradación en la calidad del stream o impedir que se emita.\n\n¿Continuar?"
56
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Máxima tasa de bits de vídeo: %1 kbps"
57
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Máxima tasa de bits de audio: %1 kbps"
58
+Basic.Settings.Stream.Recommended.MaxResolution="Resolución máxima: %1"
59
+Basic.Settings.Stream.Recommended.MaxFPS="Tasa máxima de fotogramas: %1"
60
 
61
 Basic.Settings.Output="Salida"
62
 Basic.Settings.Output.Format="Formato de grabación"
63
 Basic.Settings.Output.Encoder="Codificador"
64
 Basic.Settings.Output.SelectDirectory="Seleccione Directorio de grabación"
65
 Basic.Settings.Output.SelectFile="Seleccione archivo de grabación"
66
-Basic.Settings.Output.EnforceBitrate="Aplicar los límites de bitrate del servicio de streaming"
67
 Basic.Settings.Output.DynamicBitrate="Cambia dinámicamente la tasa de bits para gestionar la congestión"
68
 Basic.Settings.Output.DynamicBitrate.Beta="Cambia dinámicamente la tasa de bits para gestionar la congestión (Beta)"
69
 Basic.Settings.Output.DynamicBitrate.TT="En lugar de saltar fotogramas para reducir la congestión, cambia dinámicamente el bitrate sobre la marcha.\n\nTen en cuenta que esto puede aumentar el retardo de la transmisión si hay una congestión repentina significativa.\nCuando el bitrate baja, puede tardar unos minutos en restaurarse.\n\nActualmente sólo es compatible con RTMP."
70
@@ -662,8 +675,8 @@
71
 Basic.Settings.Output.Simple.RecordingQuality.Small="Alta calidad, tamaño de archivo medio"
72
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Tamaño de archivo grande, calidad indistinguible"
73
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Tamaño del archivo sin pérdida de calidad, tremendamente grande"
74
-Basic.Settings.Output.Simple.Warn.VideoBitrate="ADVERTENCIA: El streaming de vídeo se establecerá a %1, que es el límite superior para el servicio de streaming actual. Si estás seguro que quieres ir por encima de %1, active las opciones avanzadas del codificador y desactive \"Forzar limites de bitrate en el servicio de streaming\"."
75
-Basic.Settings.Output.Simple.Warn.AudioBitrate="ADVERTENCIA: El streaming de audio se establecerá a %1, que es el límite superior para el servicio de streaming actual. Si estás seguro que quieres ir por encima de %1, active las opciones avanzadas del codificador y desactive \"Forzar limites de bitrate en el servicio de streaming\"."
76
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Advertencia: La tasa de bits de vídeo del stream se establecerá en %1, que es el límite superior para el servicio de streaming actual."
77
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Advertencia: La tasa de bits de audio del stream se establecerá en %1, que es el límite superior para el servicio de streaming actual."
78
 Basic.Settings.Output.Simple.Warn.CannotPause="Advertencia: Las grabaciones no se pueden pausar si la calidad de grabación se establece en \"Igual al stream\"."
79
 Basic.Settings.Output.Simple.Warn.Encoder="ADVERTENCIA: Grabar con un codificador de software de una calidad diferente a la de la transmisión requerirá un uso adicional de la CPU si transmite y graba al mismo tiempo."
80
 Basic.Settings.Output.Simple.Warn.Lossless="ADVERTENCIA: ¡La calidad sin perdidas genera tamaños de archivo muy grandes! La calidad sin pérdidas puede utilizar más de 7 gigabytes de espacio en disco por minuto en alta resolución y con alta tasa de fotogramas. La calidad sin pérdidas no se recomienda para grabaciones largas, a menos que tenga una gran cantidad de espacio en disco disponible."
81
@@ -674,6 +687,11 @@
82
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardware (AMD)"
83
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardware (NVENC)"
84
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Software (x264 bajo uso de CPU, aumenta el tamaño de archivo)"
85
+Basic.Settings.Output.Simple.TwitchVodTrack="Pista VOD de Twitch (utiliza la pista 2)"
86
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Resolución o tasa de fotogramas incompatible"
87
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Este servicio de streaming no admite su resolución y/o tasa de fotogramas actual. Se cambiarán a los valores compatibles más cercanos\n\n%1\n\n¿Desea continuar?"
88
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Resolución: %1"
89
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="Tasa de fotogramas: %1"
90
 Basic.Settings.Output.VideoBitrate="Bitrate de vídeo"
91
 Basic.Settings.Output.AudioBitrate="Bitrate de audio"
92
 Basic.Settings.Output.Reconnect="Reconectar automáticamente"
93
@@ -688,15 +706,16 @@
94
 Basic.Settings.Output.Adv.Rescale="Cambiar la escala de salida"
95
 Basic.Settings.Output.Adv.AudioTrack="Pista de audio"
96
 Basic.Settings.Output.Adv.Streaming="Emisión"
97
-Basic.Settings.Output.Adv.ApplyServiceSettings="Aplicar ajustes de codificador de servicio streaming"
98
 Basic.Settings.Output.Adv.Audio.Track1="Pista 1"
99
 Basic.Settings.Output.Adv.Audio.Track2="Pista 2"
100
 Basic.Settings.Output.Adv.Audio.Track3="Pista 3"
101
 Basic.Settings.Output.Adv.Audio.Track4="Pista 4"
102
 Basic.Settings.Output.Adv.Audio.Track5="Pista 5"
103
 Basic.Settings.Output.Adv.Audio.Track6="Pista 6"
104
+Basic.Settings.Output.Adv.TwitchVodTrack="Pista VOD de Twitch"
105
 
106
 Basic.Settings.Output.Adv.Recording="Grabación"
107
+Basic.Settings.Output.Adv.Recording.RecType="Tipo de grabación"
108
 Basic.Settings.Output.Adv.Recording.Type="Tipo"
109
 Basic.Settings.Output.Adv.Recording.Type.Standard="Estándar"
110
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Salida personalizada (FFmpeg)"
111
@@ -824,13 +843,18 @@
112
 Basic.AdvAudio.ActiveOnly="Sólo fuentes activas"
113
 Basic.AdvAudio.Name="Nombre"
114
 Basic.AdvAudio.Volume="Volumen"
115
+Basic.AdvAudio.VolumeSource="Volumen para '%1'"
116
 Basic.AdvAudio.Mono="Mono"
117
+Basic.AdvAudio.MonoSource="Mezcla monoaural para '%1'"
118
 Basic.AdvAudio.Balance="Balance"
119
+Basic.AdvAudio.BalanceSource="Balance para '%1'"
120
 Basic.AdvAudio.SyncOffset="Intervalo de sincronización"
121
+Basic.AdvAudio.SyncOffsetSource="Compensación de sincronismo para '%1'"
122
 Basic.AdvAudio.Monitoring="Monitorización de audio"
123
 Basic.AdvAudio.Monitoring.None="Monitorización desactivada"
124
 Basic.AdvAudio.Monitoring.MonitorOnly="Solo monitorización (silenciar la salida)"
125
 Basic.AdvAudio.Monitoring.Both="Monitorización y salida"
126
+Basic.AdvAudio.MonitoringSource="Monitorización de audio para '%1'"
127
 Basic.AdvAudio.AudioTracks="Pistas"
128
 
129
 Basic.Settings.Hotkeys="Atajos"
130
obs-studio-26.0.2.tar.xz/UI/data/locale/et-EE.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/et-EE.ini Changed
44
 
1
@@ -85,13 +85,18 @@
2
 Fullscreen="Täisekraan"
3
 Windowed="Akendatud"
4
 Percent="Protsent"
5
+RefreshBrowser="Värskenda"
6
 AspectRatio="Kuvasuhe <b>%1:%2</b>"
7
 LockVolume="Lukusta helitugevus"
8
+ShowOnStartup="Kuva käivitamisel"
9
+OpenFile="Ava fail"
10
+AddValue="Lisa %1"
11
 
12
 AlreadyRunning.Title="OBS juba töötab"
13
 AlreadyRunning.Text="OBS on juba käivitatud! Palun välju olemasolevatest protsessidest enne kui alustad uut. Kui OBS on minimeeritud süsteemi salve, siis kontrolli kas see on seal."
14
 AlreadyRunning.LaunchAnyway="Käivita siiski"
15
 
16
+ChromeOS.Title="Toetuseta platvorm"
17
 
18
 DockCloseWarning.Title="Dokitava akna sulgemine"
19
 DockCloseWarning.Text="Sa just sulgesid dokitava akna. Kui sa tahad seda näidata uuesti, kasuta Vaade → Dokid menüüd menüüribal."
20
@@ -149,6 +154,7 @@
21
 Basic.AutoConfig.StreamPage.DisconnectAccount="Katkesta ühendus kontoga"
22
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Katkesta ühendus kontoga?"
23
 Basic.AutoConfig.StreamPage.GetStreamKey="Taotle voogedastuse võti"
24
+Basic.AutoConfig.StreamPage.MoreInfo="Lisateave"
25
 Basic.AutoConfig.StreamPage.UseStreamKey="Kasuta voogedastuse võtit"
26
 Basic.AutoConfig.StreamPage.Service="Teenus"
27
 Basic.AutoConfig.StreamPage.Service.ShowAll="Kuva kõik..."
28
@@ -157,6 +163,7 @@
29
 Basic.AutoConfig.StreamPage.StreamKey="Voogedastuse võti"
30
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Link)"
31
 Basic.AutoConfig.TestPage="Lõpptulemused"
32
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Ühendamine: %1..."
33
 
34
 Basic.Stats="Statistika"
35
 Basic.Stats.CPUUsage="CPU kasutus"
36
@@ -305,6 +312,7 @@
37
 Basic.SourceSelect.AddExisting="Lisa olemasolev"
38
 Basic.SourceSelect.AddVisible="Tee allikas nähtavaks"
39
 
40
+
41
 Basic.PropertiesWindow="'%1' omadused"
42
 Basic.PropertiesWindow.SelectColor="Vali värv"
43
 Basic.PropertiesWindow.SelectFont="Vali font"
44
obs-studio-26.0.2.tar.xz/UI/data/locale/eu-ES.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/eu-ES.ini Changed
174
 
1
@@ -37,6 +37,7 @@
2
 SourceWindow="Leihodun proiektorea (iturburua)"
3
 MultiviewProjector="Ikuspegi anitza (pantaila osoan)"
4
 MultiviewWindowed="Ikuspegi anitza (leihoan)"
5
+ResizeProjectorWindowToContent="Leihoa edukiari egokitu"
6
 Clear="Garbitu"
7
 Revert="Leheneratu"
8
 Show="Erakutsi"
9
@@ -86,13 +87,20 @@
10
 Fullscreen="Pantaila osoa"
11
 Windowed="Leihoan"
12
 Percent="Ehunekoa"
13
+RefreshBrowser="Eguneratu"
14
 AspectRatio="Aspektu-erlazioa <b>%1:%2</b>"
15
 LockVolume="Blokeatu bolumena"
16
+LogViewer="Ikusi Erregistroa"
17
+ShowOnStartup="Ireki hasterakoan"
18
+OpenFile="Ireki fitxategia"
19
+AddValue="Gehitu %1"
20
 
21
 AlreadyRunning.Title="OBS dagoeneko martxan dago"
22
 AlreadyRunning.Text="OBS dagoeneko martxan dago! Bestelakorik nahi ez baduzu Itxi irekita dagoen saioa beste saio bat ireki baino lehen. Ezarri baduzu OBS agertzea minimizatua sistemaren erretiluan begiratu eta oraindik exekutatzen ari den bertan."
23
 AlreadyRunning.LaunchAnyway="Abiarazi hala ere"
24
 
25
+ChromeOS.Title="Euskarririk gabeko plataforma"
26
+ChromeOS.Text="Badirudi OBS ChromeOS edukiontzi baten barruan dabilela. Plataforma honek ez du euskarririk"
27
 
28
 DockCloseWarning.Title="Leiho moldagarria ixten"
29
 DockCloseWarning.Text="Leiho moldagarri bat itxi berri duzu. Berriro bistaratu nahi baduzu, erabili menu barrako Ikusi → Leiho moldagarriak menua."
30
@@ -137,7 +145,9 @@
31
 Basic.AutoConfig.StartPage.SubTitle="Zehaztu zertarako erabili nahi duzun programa"
32
 Basic.AutoConfig.StartPage.PrioritizeStreaming="Optimizatu transmisiorako, grabazioa bigarren mailakoa da"
33
 Basic.AutoConfig.StartPage.PrioritizeRecording="Optimizatu grabazioa, ez du transmitituko"
34
+Basic.AutoConfig.StartPage.PrioritizeVirtualCam="Kamera birtuala bakarrik erabiliko dut"
35
 Basic.AutoConfig.VideoPage="Bideo-ezarpenak"
36
+Basic.AutoConfig.VideoPage.SubTitle="Zehaztu erabili nahi dituzun bideo-ezarpenak"
37
 Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Erabili unekoa (%1x%2)"
38
 Basic.AutoConfig.VideoPage.BaseResolution.Display="Erakutsi %1 (%2x%3)"
39
 Basic.AutoConfig.VideoPage.FPS.UseCurrent="Erabili unekoa (%1)"
40
@@ -151,6 +161,7 @@
41
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Kontua deskonektatu?"
42
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Aldaketa hau berehalakoan aplika daiteke. Ziur zaude kontua deskonektatu nahi duzula?"
43
 Basic.AutoConfig.StreamPage.GetStreamKey="Lortu transmisio giltza"
44
+Basic.AutoConfig.StreamPage.MoreInfo="Informazio Gehiago"
45
 Basic.AutoConfig.StreamPage.UseStreamKey="Erabili transmisio giltza"
46
 Basic.AutoConfig.StreamPage.Service="Zerbitzua"
47
 Basic.AutoConfig.StreamPage.Service.ShowAll="Erakutsi denak..."
48
@@ -179,6 +190,8 @@
49
 Basic.AutoConfig.TestPage.Result.RecordingEncoder="Grabazioaren kodetzailea"
50
 Basic.AutoConfig.TestPage.Result.Header="Programaren arabera hauek dira zuretzako ezarpenik egokienak:"
51
 Basic.AutoConfig.TestPage.Result.Footer="Ezarpen hauek onartzeko, klika Aplikatu ezarpenak. Morroiaren bidez birkonfiguratzeko eta saiatzeko berriro klika Atzera. Ezarpenak eskuz zehazteko klika Utzi eta ireki Ezarpenak."
52
+Basic.AutoConfig.Info="Autokonfigurazio-laguntzaileak konfiguraziorik onena zehaztuko du, bere ordenagailuaren zehaztapenen eta Interneteko abiaduraren arabera."
53
+Basic.AutoConfig.RunAnytime="Hori edozein unetan exekutatu daiteke, Tresnak menura joatean."
54
 
55
 Basic.Stats="Estatistikak"
56
 Basic.Stats.CPUUsage="PUZ erabilpena"
57
@@ -293,7 +306,10 @@
58
 Output.BadPath.Text="Ezarritako fitxategiaren irteera-bidea baliogabea da. Egiaztatu zure ezarpenak baieztatzeko baliozko fitxategi-bidea ezarri dela."
59
 
60
 LogReturnDialog="Egunkaria ongi kargatu da"
61
+LogReturnDialog.Description="Istripuaren txostena igo da. Orain, URLa partekatu dezakezu, arazteko."
62
+LogReturnDialog.Description.Crash="Istripuaren txostena igo da. Orain, URLa partekatu dezakezu, arazteko."
63
 LogReturnDialog.CopyURL="Kopiatu URL-a"
64
+LogReturnDialog.AnalyzeURL="Aztertu"
65
 LogReturnDialog.ErrorUploadingLog="Errorea egunkari-fitxategia kargatzean"
66
 
67
 Remux.SourceFile="OBS grabazioa"
68
@@ -350,8 +366,6 @@
69
 Deinterlacing.TopFieldFirst="Goiko eremua lehenik"
70
 Deinterlacing.BottomFieldFirst="Beheko eremua lehenik"
71
 
72
-VolControl.SliderUnmuted="Bolumen graduatzailea '%1'-rentzat: %2"
73
-VolControl.SliderMuted="Bolumen graduatzailea '%1'-rentzat: %2 (une honetan mutu)"
74
 VolControl.Mute="Mututu '%1'"
75
 VolControl.Properties="'%1'-ren ezaugarriak"
76
 
77
@@ -367,6 +381,7 @@
78
 
79
 AddProfile.Title="Gehitu profila"
80
 AddProfile.Text="Sartu profilaren izena"
81
+AddProfile.WizardCheckbox="Ezarpen automatikoen laguntzailea"
82
 
83
 RenameProfile.Title="Aldatu izena profilari"
84
 
85
@@ -381,6 +396,7 @@
86
 Basic.SourceSelect.AddExisting="Gehitu lehendik dagoena"
87
 Basic.SourceSelect.AddVisible="Egin iturburua ikusgarri"
88
 
89
+
90
 Basic.PropertiesWindow="'%1'-ren ezaugarriak"
91
 Basic.PropertiesWindow.AutoSelectFormat="%1 (berez-hautatu: %2)"
92
 Basic.PropertiesWindow.SelectColor="Hautatu kolorea"
93
@@ -457,6 +473,7 @@
94
 Basic.Main.StartReplayBuffer="Abiatu erreprodukzio bufferra"
95
 Basic.Main.SaveReplay="Gorde erreprodukzioa"
96
 Basic.Main.StartStreaming="Hasi transmisioa"
97
+Basic.Main.StartVirtualCam="Hasi Kamera Birtuala"
98
 Basic.Main.StopRecording="Gelditu grabazioa"
99
 Basic.Main.PauseRecording="Pausatu grabazioa"
100
 Basic.Main.UnpauseRecording="Amaitu grabazioaren pausa"
101
@@ -466,6 +483,9 @@
102
 Basic.Main.StopStreaming="Gelditu transmisioa"
103
 Basic.Main.StoppingStreaming="Transmisioa gelditzen..."
104
 Basic.Main.ForceStopStreaming="Gelditu transmisioa (baztertu atzerapena)"
105
+Basic.Main.ShowContextBar="Erakutsi Iturriko Tresna-Barra"
106
+Basic.Main.HideContextBar="Izkutatu Iturriko Tresna-Barra"
107
+Basic.Main.StopVirtualCam="Amaitu Kamera Birtuala"
108
 Basic.Main.Group="%1 taldea"
109
 Basic.Main.GroupItems="Batu hautatutako elementuak"
110
 Basic.Main.Ungroup="Banatu"
111
@@ -614,13 +634,14 @@
112
 Basic.Settings.Stream.MissingUrlAndApiKey="Transmisioaren URLa eta gakoa falta dira.\n\nIreki ezarpenak sartzeko URLa eta transmisioaren gakoa 'transmisioa' fitxan."
113
 Basic.Settings.Stream.MissingUrl="Trasnsmisioaren URLa falta da.\n\nIreki ezarpenak sartzeko URLa 'Transmisioa' fitxan."
114
 Basic.Settings.Stream.MissingStreamKey="Transmisioaren gakoa falta da.\n\nIreki ezarpenak sartzeko transmisioaren gakoa 'Transmisioa' fitxan."
115
+Basic.Settings.Stream.IgnoreRecommended="Streaming zerbitzua konfiguratzeko gomendioak alde batera utzi"
116
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Gomendatutako Doikuntzak Baliogabetu"
117
 
118
 Basic.Settings.Output="Irteera"
119
 Basic.Settings.Output.Format="Grabazio-formatua"
120
 Basic.Settings.Output.Encoder="Kodetzailea"
121
 Basic.Settings.Output.SelectDirectory="Hautatu grabazioaren karpeta"
122
 Basic.Settings.Output.SelectFile="Hautatu grabazioaren fitxategia"
123
-Basic.Settings.Output.EnforceBitrate="Behartu transmisio zerbitzuaren bit-tasaren mugak"
124
 Basic.Settings.Output.DynamicBitrate="Aldatu bit-emaria dinamikoki pilaketa kudeatzeko"
125
 Basic.Settings.Output.DynamicBitrate.Beta="Aldatu bit-emaria dinamikoki pilaketa kudeatzeko (Beta)"
126
 Basic.Settings.Output.DynamicBitrate.TT="Pilaketa murrizteko fotogramak askatu beharrean, abiadura dinamikoki aldatzen du.\n\n Kontuan izan horrek ikuslearentzat atzerapena areagotu dezakeela bat-bateko pilaketak nabarmenak badira.\nBit-emaria jaisten denean, minutu batzuk iraun dezake berreskuratzeak.\n\nUne honetan bakarrik RTMPrako onartzen da."
127
@@ -641,8 +662,6 @@
128
 Basic.Settings.Output.Simple.RecordingQuality.Small="Kalitate altua. Fitxategi-tamaina ertaina"
129
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Bereizigabeko kalitatea. Fitxategi-tamaina handia"
130
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Galerarik gabeko kalitatea. Fitxategi-tamaina izugarri handia"
131
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Kontuz: transmisioaren bideoaren bit-tasa %1 ean ezarriko da; hau izango da oraingo transmisio zerbitzuaren goiko muga. Seguru bazaude %1 aren gainetik nahi duzula, gaitu kodetze aukera aurreratuak eta desautatu \"Behartu transmisio zerbitzuaren bit-tasaren mugak\"."
132
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Kontuz: transmisioaren audioaren bit-tasa %1 ean ezarriko da; hau izango da oraingo transmisio zerbitzuaren goiko muga. Seguru bazaude %1 aren gainetik nahi duzula, gaitu kodetze aukera aurreratuak eta desautatu \"Behartu transmisio zerbitzuaren bit-tasaren mugak\"."
133
 Basic.Settings.Output.Simple.Warn.CannotPause="Kontuz: Grabazioa ezin da pausatu grabazioaren kalitatearen konfigurazioa \"jarioaren berdina\" bada."
134
 Basic.Settings.Output.Simple.Warn.Encoder="Oharra: Transmisioak duen kalitatea ez bestelako kalitate batez grabatzeak PUZ-ren aparteko erabilera eskatzen du une berean transmititzen eta grabatzen baduzu."
135
 Basic.Settings.Output.Simple.Warn.Lossless="Oharra: Galerarik gabeko kalitateak neurri izugarri handiko fitxategiak sortzen ditu! Galerarik gabeko kalitateak minutuko 7 gigabytetik gorako tokia erabili dezake diskoan bereizmen eta fotograma-emari handietan. Galerarik gabeko kalitatea ez dago gomendatua grabazio luzeetarako disko toki eskuragarri oso handi bat ez baduzu."
136
@@ -653,6 +672,7 @@
137
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardwarea (AMD)"
138
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardwarea (NVENC)"
139
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Softwarea (x264 PUZ erabilpen apaleko aurre-ezarpena, fitxategiaren tamaina handitzen du)"
140
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Ebazpen Bateraezina"
141
 Basic.Settings.Output.VideoBitrate="Bideo bit-emaria"
142
 Basic.Settings.Output.AudioBitrate="Audio bit-emaria"
143
 Basic.Settings.Output.Reconnect="Automatikoki birkonektatu"
144
@@ -667,7 +687,6 @@
145
 Basic.Settings.Output.Adv.Rescale="Eskala-aldaketaren Irteera"
146
 Basic.Settings.Output.Adv.AudioTrack="Audio-pista"
147
 Basic.Settings.Output.Adv.Streaming="Transmisioa"
148
-Basic.Settings.Output.Adv.ApplyServiceSettings="Behartu transmisio-zerbitzu kodetzaileren ezarpenak"
149
 Basic.Settings.Output.Adv.Audio.Track1="1 pista"
150
 Basic.Settings.Output.Adv.Audio.Track2="2 pista"
151
 Basic.Settings.Output.Adv.Audio.Track3="3 pista"
152
@@ -745,6 +764,7 @@
153
 Basic.Settings.Audio.MultiChannelWarning.Enabled="Kontu: soinu inguratzailea aktibatuta dago."
154
 Basic.Settings.Audio.MultichannelWarning.Title="Nahi duzu soinu inguratzailea aktibatzea?"
155
 Basic.Settings.Audio.MultichannelWarning.Confirm="Seguru zaude soinu inguratzailea aktibatu nahi duzula?"
156
+Basic.Settings.Audio.Devices="Audio-Gailu Globala"
157
 Basic.Settings.Audio.DesktopDevice="Mahaigaineko audioa"
158
 Basic.Settings.Audio.DesktopDevice2="Mahaigaineko audioa 2"
159
 Basic.Settings.Audio.AuxDevice="Mik/Audio osagarria"
160
@@ -908,5 +928,13 @@
161
 Restart="Berrabiarazi"
162
 NeedsRestart="OBS Studio berrabiarazi behar da. Nahi duzu orain berrabiaraztea?"
163
 
164
+ContextBar.NoSelectedSource="Ez da iturririk hautatu"
165
 
166
+ContextBar.MediaControls.PlayMedia="Erreproduzitu Media"
167
+ContextBar.MediaControls.PauseMedia="Media Pausatu"
168
+ContextBar.MediaControls.StopMedia="Gelditu media"
169
+ContextBar.MediaControls.RestartMedia="Berrabiarazi Media"
170
+ContextBar.MediaControls.PlaylistNext="Hurrengoa Erreprodukzio-zerrendan"
171
+ContextBar.MediaControls.PlaylistPrevious="Aurrekoa Erreprodukzio-zerrendan"
172
+ContextBar.MediaControls.MediaProperties="Media propietateak"
173
 
174
obs-studio-26.0.2.tar.xz/UI/data/locale/fa-IR.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/fa-IR.ini Changed
508
 
1
@@ -37,6 +37,7 @@
2
 SourceWindow="پروژکتور پنجره ای (منبع)"
3
 MultiviewProjector="حالت چند نمایی (تمام صفحه)"
4
 MultiviewWindowed="حالت چند نمایی (پنجره ای)"
5
+ResizeProjectorWindowToContent="ست کردن پنجره بر روی محتوا"
6
 Clear="پاک کردن"
7
 Revert="برگرداندن"
8
 Show="نمایش"
9
@@ -86,13 +87,20 @@
10
 Fullscreen="تمام صفحه"
11
 Windowed="پنجره"
12
 Percent="درصد"
13
+RefreshBrowser="تازه سازی"
14
 AspectRatio="نسبت ابعاد <b>%1:%2</b>"
15
 LockVolume="قفل تنظیم صدا"
16
+LogViewer="نمایشگر گزارش"
17
+ShowOnStartup="نمایش هنگام راه اندازی"
18
+OpenFile="بازکردن پرونده"
19
+AddValue="افزودن %1"
20
 
21
 AlreadyRunning.Title="OBS از قبل در حال اجراست"
22
 AlreadyRunning.Text="OBS از قبل در حال اجراست! در صورتی که به صورت عمد این کار را کرده اید، لطفاً قبل از اجرای یک نمونه جدید سایر نمونه های باز شدهی OBS را ببندید. اگر OBS را در حالت کوچک کردن در system try قرار داده اید، لطفاً چک کنید که آیا در آن جا هنوز در حال اجراست."
23
 AlreadyRunning.LaunchAnyway="در هر حال اجرا کن"
24
 
25
+ChromeOS.Title="پلتفرم پشتیبانی نشده"
26
+ChromeOS.Text="به نظر می رسد OBS در داخل ظرف سیستم عامل Chrome در حال اجرا است. این سیستم عامل پشتیبانی نمی شود"
27
 
28
 DockCloseWarning.Title="بسته شدن پنجره قابل حمل"
29
 DockCloseWarning.Text="شما فقط یک پنجره قابل حمل را بسته اید. اگر می خواهید دوباره آن را نشان دهید ، از منوی نما زیر منوی بخش ها در نوار فهرست استفاده کنید."
30
@@ -110,6 +118,7 @@
31
 Auth.LoadingChannel.Title="بارگیری اطلاعات کانال..."
32
 Auth.LoadingChannel.Text="در حال بارگیری اطلاعات کانال %1، لطفاً صبر کنید..."
33
 Auth.ChannelFailure.Title="کانال بارگیری نشد"
34
+Auth.ChannelFailure.Text="اطلاعات کانال برای %1\n\n%2: %3 بارگیری نشد"
35
 Auth.Chat="چت"
36
 Auth.StreamInfo="اطلاعات پخش زنده"
37
 TwitchAuth.Stats="وضعیت توییچ"
38
@@ -136,7 +145,9 @@
39
 Basic.AutoConfig.StartPage.SubTitle="تعیین کنید که از برنامه برای چه کاری میخواهید استفاده کنید"
40
 Basic.AutoConfig.StartPage.PrioritizeStreaming="بهینه سازی برای پخش زنده، ضبط اولویت دوم است"
41
 Basic.AutoConfig.StartPage.PrioritizeRecording="فقط برای ضبط بهینه سازی می کنم ، پخش زنده ندارم"
42
+Basic.AutoConfig.StartPage.PrioritizeVirtualCam="من فقط از دوربین مجازی استفاده خواهم کرد"
43
 Basic.AutoConfig.VideoPage="تنظیمات ویدئو"
44
+Basic.AutoConfig.VideoPage.SubTitle="تنظیمات ویدئویی را که می خواهید استفاده کنید مشخص کنید"
45
 Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="استفاده از فعلی (%1x%2)"
46
 Basic.AutoConfig.VideoPage.BaseResolution.Display="صفحه نمایش %1 (%2x%3)"
47
 Basic.AutoConfig.VideoPage.FPS.UseCurrent="استفاده از فعلی (%1)"
48
@@ -150,6 +161,7 @@
49
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="آیا می خواهید از حساب کاربری خارج شوید?"
50
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="این تغییر بلافاصله اعمال می شود. آیا مطمئن هستید که می خواهید از حساب کاربری خود خارج شوید?"
51
 Basic.AutoConfig.StreamPage.GetStreamKey="دریافت کلید پخش زنده"
52
+Basic.AutoConfig.StreamPage.MoreInfo="اطلاعات بیشتر"
53
 Basic.AutoConfig.StreamPage.UseStreamKey="کلید پخش زنده"
54
 Basic.AutoConfig.StreamPage.Service="سرویس"
55
 Basic.AutoConfig.StreamPage.Service.ShowAll="نمایش همه..."
56
@@ -172,39 +184,69 @@
57
 Basic.AutoConfig.TestPage.TestingStreamEncoder="در حال تست encoder استریم، این عملیات ممکن است کمی طول بکشد..."
58
 Basic.AutoConfig.TestPage.TestingRecordingEncoder="در حال تست encoder ضبط، این عملیات ممکن است کمی طول بکشد..."
59
 Basic.AutoConfig.TestPage.TestingRes="در حال تست رزولوشنها، این عملیات ممکن است چند دقیقهای طول بکشد..."
60
+Basic.AutoConfig.TestPage.TestingRes.Fail="رمزگذار راه اندازی نشد"
61
+Basic.AutoConfig.TestPage.TestingRes.Resolution="تست کردن %1x%2 %3 فبس..."
62
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="استریم"
63
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="رمزگذار ضبط"
64
+Basic.AutoConfig.TestPage.Result.Header="این برنامه تعیین کرده است که این تنظیمات تخمینی بهترین گزینه برای شما هستند:"
65
+Basic.AutoConfig.TestPage.Result.Footer="برای استفاده از این تنظیمات، روی اعمال تنظیمات کلیک کنید. برای پیکربندی مجدد جادوگر و دوباره امتحان کردن، روی بازگشت کلیک کنید. برای پیکربندی دستی تنظیمات خود، روی لغو کلیک کنید و تنظیمات را باز کنید."
66
+Basic.AutoConfig.Info="جادوگر پیکربندی خودکار بهترین تنظیمات را براساس مشخصات رایانه و سرعت اینترنت شما تعیین می کند."
67
+Basic.AutoConfig.RunAnytime="این کار در هر زمان با رفتن به منوی ابزار قابل اجرا است."
68
 
69
 Basic.Stats="آمارها"
70
 Basic.Stats.CPUUsage="میزان استفاده CPU"
71
 Basic.Stats.HDDSpaceAvailable="فضای در دسترس دیسک"
72
 Basic.Stats.MemoryUsage="میزان استفاده حافظه"
73
 Basic.Stats.AverageTimeToRender="متوسط زمان ارائه فریم"
74
+Basic.Stats.SkippedFrames="فریمها به دلیل تأخیر رمزگذاری رد شدند"
75
+Basic.Stats.MissedFrames="فریم ها به دلیل تأخیر در رندر رد شدند"
76
 Basic.Stats.Output.Stream="پخش جریانی"
77
 Basic.Stats.Output.Recording="درحال ضبط"
78
 Basic.Stats.Status="وضعیت"
79
 Basic.Stats.Status.Recording="درحال ضبط"
80
-Basic.Stats.Status.Live="زنده"
81
+Basic.Stats.Status.Live="پخش زنده"
82
 Basic.Stats.Status.Reconnecting="اتصال مجدد"
83
 Basic.Stats.Status.Inactive="غیر فعال"
84
 Basic.Stats.Status.Active="فعال"
85
 Basic.Stats.DroppedFrames="فریم های از دست رفته (شبکه)"
86
 Basic.Stats.MegabytesSent="مجموع خروجی داده ها"
87
 Basic.Stats.Bitrate="نرخ بیت"
88
+Basic.Stats.DiskFullIn="دیسک کامل (تقریباً)"
89
 Basic.Stats.ResetStats="تنظیم مجدد آمار"
90
 
91
 ResetUIWarning.Title="آیا مطمئنید که میخواهید رابط کاربری را مجدداً تنظیم کنید؟"
92
+ResetUIWarning.Text="با بازنشانی رابط کاربری، اسکله های اضافی پنهان می شوند. اگر می خواهید این اسکله ها قابل مشاهده باشند، باید از فهرست نمایش قبال نمایش شوند.\n\nآیا مطمئن هستید که می خواهید رابط را مجدداً تنظیم کنید?"
93
 
94
 Updater.Title="بروزرسانی جدید موجود است"
95
 Updater.Text="نسخه جدیدی در دسترس است:"
96
 Updater.UpdateNow="اکنون بروزرسانی شود"
97
 Updater.RemindMeLater="بعدا یادآوری کن"
98
+Updater.Skip="رد شدن از نسخه"
99
+Updater.Running.Title="درحال حاضر برنامه فعال است"
100
+Updater.Running.Text="درحال حاضر خروجی ها فعال هستند ، لطفا پیش از بروزرسانی هر خروجی فعال را خاموش کنید"
101
 Updater.NoUpdatesAvailable.Title="بروزرسانی موجود نیست"
102
 Updater.NoUpdatesAvailable.Text="در حال حاظر بروزرسانی در دسترس نیست"
103
 Updater.FailedToLaunch="اجرای بروزرسانی کننده ناموفق بود"
104
-
105
-
106
+Updater.GameCaptureActive.Title="گیم کپچر فعال است"
107
+Updater.GameCaptureActive.Text="گیرنده کتابخانه گیم کپچر درحال استفاده شدن است. لطفا هر گیم / برنامه ای را قبل از گرفتن ببندید. (یا ویندوز را راه اندازی مجدد کنید) و دوباره تلاش کنید."
108
+
109
+QuickTransitions.SwapScenes="تغییر صحنه های پیشنمایش / خروجی پس از انتقال دادن"
110
+QuickTransitions.SwapScenesTT="صحنه های پیش نمایش و خروجی را پس از انتقال عوض می کند (اگر صحنه اصلی خروجی هنوز وجود داشته باشد). \n با این کار هیچ تغییری در صحنه اصلی خروجی خنثی نمی شود."
111
+QuickTransitions.DuplicateScene="صحنه تکراری"
112
+QuickTransitions.DuplicateSceneTT="هنگام ویرایش همان صحنه ، امکان ویرایش/مشاهده منابع بدون تغییر در خروجی را فراهم می کند. \n برای ویرایش خصوصیات منابع بدون تغییر در خروجی ، \"منابع تکراری\" را فعال کنید. \n با تغییر این مقدار صحنه خروجی فعلی تنظیم مجدد می شود (اگر هنوز وجود دارد)."
113
+QuickTransitions.EditProperties="منابع تکراری"
114
+QuickTransitions.EditPropertiesTT="هنگام ویرایش همان صحنه ، اجازه ویرایش خصوصیات منابع را بدون تغییر در خروجی می دهد. \n این تنها در صورت فعال بودن \"صحنه تکراری\" قابل استفاده است. \n منابع خاصی (مانند منابع ضبط یا رسانه) از این پشتیبانی نمی کنند و نمی توانند جداگانه ویرایش شوند. \n با تغییر این مقدار صحنه خروجی فعلی بازنشانی می شود (اگر هنوز وجود داشته باشد).\n\nهشدار: از آنجا که منابع کپی می شوند، این ممکن است به سیستم یا منابع ویدئویی اضافی نیاز داشته باشد."
115
+QuickTransitions.HotkeyName="انتقال سریع: %1"
116
+
117
+Basic.AddTransition="اضافه کردن انتقال قابل تنظیم"
118
+Basic.RemoveTransition="حذف انتقال قابل تنظیم"
119
+Basic.TransitionProperties="ویژگیهای انتقال"
120
+Basic.SceneTransitions="انتقال صحنهها"
121
 Basic.TransitionDuration="مدت زمان"
122
 Basic.TogglePreviewProgramMode="حالت استودیو"
123
 
124
+TransitionNameDlg.Text="لطفا نام انتقال را وارد کنید"
125
+TransitionNameDlg.Title="نام انتقال"
126
 
127
 TitleBar.Profile="پروفایل"
128
 TitleBar.Scenes="صحنه ها"
129
@@ -222,18 +264,28 @@
130
 ConfirmStop.Text="آیا مطمئنید که میخواهید استریم را قطع کنید؟"
131
 
132
 ConfirmStopRecord.Title="توقف ضبط؟"
133
+ConfirmStopRecord.Text="مطمئن هستید که می خواهید ضبط کردن را متوقف کنید؟"
134
 
135
+ConfirmBWTest.Title="شروع تست پهنای باند؟"
136
+ConfirmBWTest.Text="شما OBS را در حالت آزمایش پهنای باند پیکربندی کرده اید. این حالت امکان آزمایش شبکه بدون فعال شدن کانال شما را فراهم می کند. پس از پایان آزمایش ، برای اینکه بینندگان بتوانند جریان شما را ببینند ، باید آن را غیرفعال کنید.\n\nآیا می خواهید ادامه دهید?"
137
 
138
 ConfirmExit.Title="خروج از OBS؟"
139
 ConfirmExit.Text="OBS در حال حاظر فعال است. تمامی استریم/ضبط ها قطع خاموش خواهند شد. آیا مطمئنید که میخواهید خارج شوید؟"
140
 
141
 ConfirmRemove.Title="تایید حذف"
142
+ConfirmRemove.Text="آیا مطمئن هستید که میخواهید '$1' را حذف کنید؟"
143
+ConfirmRemove.TextMultiple="آیا مطمئن هستید که میخواهید %1 آیتم را حذف کنید؟"
144
 
145
 Output.StartStreamFailed="شروع استریم ناموفق بود"
146
 Output.StartRecordingFailed="شروع ضبط ناموفق بود"
147
+Output.StartReplayFailed="بافر پخش مجدد شروع نشد"
148
+Output.StartFailedGeneric="شروع خروجی ناموفق بود. لطفاً جزئیات گزارش را وارد کنید.\n\nتوجه: اگر از رمزگذارهای NVENC یا AMD استفاده می کنید، مطمئن شوید که درایورهای ویدئویی شما به روز هستند."
149
 
150
+Output.ReplayBuffer.PauseWarning.Title="ذخیره مجدد هنگام مکث امکان پذیر نیست"
151
+Output.ReplayBuffer.PauseWarning.Text="هشدار: هنگام مکث ضبط، امکان بارگیری مجدد وجود ندارد."
152
 
153
 Output.ConnectFail.Title="اتصال ناموفق بود"
154
+Output.ConnectFail.BadPath="آدرس اینترنتی یا مسیر اتصال نامعتبر است. لطفاً تنظیمات خود را بررسی کنید تا معتبر بودن آنها را تأیید کنید."
155
 Output.ConnectFail.ConnectFailed="اتصال به سرور ممکن نشد"
156
 Output.ConnectFail.InvalidStream="نمی توانید به کانال مشخص شده یا کلید پخش زنده دسترسی داشته باشید ، لطفاً کلید جریان خود را دو بار بررسی کنید. اگر صحیح باشد ، ممکن است هنگام اتصال به سرور مشکلی ایجاد شود."
157
 Output.ConnectFail.Error="هنگام تلاش برای اتصال به سرور ، یک خطای غیرمنتظره رخ داد. اطلاعات بیشتر در پرونده لاگ."
158
@@ -250,35 +302,103 @@
159
 Output.RecordError.Msg="هنگام ضبط خطای نامشخص رخ داده است."
160
 Output.RecordError.EncodeErrorMsg="هنگام ضبط خطای رمزگذار رخ داده است."
161
 
162
-
163
-
164
+Output.BadPath.Title="مسیر فایل غیر قابل قبول است"
165
+Output.BadPath.Text="مسیر خروجی فایل پیکربندی شده نامعتبر است. لطفاً تنظیمات خود را بررسی کنید تا تأیید کنید مسیر پرونده معتبری تنظیم شده است."
166
+
167
+LogReturnDialog="گزارش با موفقیت آپلود شد"
168
+LogReturnDialog.Description="فایل گزارش شما آپلود شد. اکنون می توانید آدرس اینترنتی را برای اشکال زدایی یا اهداف پشتیبانی به اشتراک بگذارید."
169
+LogReturnDialog.Description.Crash="گزارش خرابی شما آپلود شد. اکنون می توانید آدرس اینترنتی را برای اهداف رفع اشکال به اشتراک بگذارید."
170
+LogReturnDialog.CopyURL="رونوشت نشانی"
171
+LogReturnDialog.AnalyzeURL="تجزیه و تحلیل"
172
+LogReturnDialog.ErrorUploadingLog="خطا در آپلود فایل گزارش"
173
+
174
+Remux.SourceFile="ضبط کننده او بی اس"
175
+Remux.TargetFile="فایل مورد نظر"
176
+Remux.Remux="بازسازی"
177
+Remux.Stop="توقف بازسازی"
178
+Remux.ClearFinished="پاک کردن موارد تمام شده"
179
+Remux.ClearAll="پاک کردن آیتم ها"
180
+Remux.OBSRecording="ضبط کننده او بی اس"
181
+Remux.FinishedTitle="بازسازی به پایان رسید"
182
+Remux.Finished="ضبط کردن بازسازی شد"
183
+Remux.FinishedError="ضبط کردن بازسازی شد، اما ممکن است پرونده ناقص باشد"
184
+Remux.SelectRecording="انتخاب ضبط OBS..."
185
+Remux.SelectTarget="انتخاب فایل مورد نظر..."
186
 Remux.FileExistsTitle="فایل های مورد نظر وجود دارند"
187
 Remux.FileExists="فایل های زیر از قبل وجود دارند. آیا میخوهید آنها را جایگزین کنید؟"
188
+Remux.ExitUnfinishedTitle="بازسازی در حال انجام"
189
+Remux.ExitUnfinished="بازسازی به پایان نرسیده است ، توقف اکنون ممکن است فایل هدف را غیر قابل استفاده کند. \nآیا مطمئن هستید که می خواهید بازسازی را متوقف کنید?"
190
+Remux.HelpText="پرونده ها را در این پنجره رها کنید تا دوباره اصلاح شود، یا یک سلول خالی \"ضبط OBS\" را انتخاب کنید تا یک فایل را مرور کنید."
191
 
192
 UpdateAvailable="بروزرسانی جدید در دسترس است"
193
+UpdateAvailable.Text="نسخه %1.%2.%3 اکنون در دسترس است. <a href='%4'> برای بارگیری اینجا کلیک کنید </a>"
194
 
195
 Basic.DesktopDevice1="صدای دسکتاپ"
196
 Basic.DesktopDevice2="صدای دسکتاپ 2"
197
+Basic.AuxDevice1="میکروفون / Aux"
198
+Basic.AuxDevice2="میکروفون / Aux2"
199
+Basic.AuxDevice3="میکروفون / Aux3"
200
+Basic.AuxDevice4="میکروفون / Aux4"
201
 
202
+Basic.Scene="صحنهها"
203
+Basic.DisplayCapture="ضبط صفحه نمایش"
204
 
205
 Basic.Main.PreviewConextMenu.Enable="فعال سازی پیشنمایش"
206
 
207
 Basic.Main.Preview.Disable="غیرفعال سازی پیشنمایش"
208
 
209
+ScaleFiltering="فیلتر مقیاس"
210
+ScaleFiltering.Point="نقطه"
211
+ScaleFiltering.Bilinear="دو خطی"
212
+ScaleFiltering.Bicubic="دو مکعبی"
213
+ScaleFiltering.Lanczos="لانچوس"
214
+ScaleFiltering.Area="ناحیه"
215
 
216
+Deinterlacing="ضد انعطاف پذیری"
217
+Deinterlacing.Discard="دور انداختن"
218
+Deinterlacing.Retro="گذشته"
219
+Deinterlacing.Blend="مخلوط کردن"
220
+Deinterlacing.Blend2x="مخلوط 2x"
221
+Deinterlacing.Linear="خطی"
222
+Deinterlacing.Linear2x="خطی 2x"
223
+Deinterlacing.Yadif="یدیف"
224
+Deinterlacing.Yadif2x="یدیف 2x"
225
+Deinterlacing.TopFieldFirst="ابتدا فیلد برتر"
226
+Deinterlacing.BottomFieldFirst="ابتدا فیلد پایین"
227
 
228
+VolControl.SliderUnmuted="لغزنده میزان صدا برای \"%1\":"
229
+VolControl.SliderMuted="لغزنده میزان صدا برای \"%1\": (فعلا بی صدا)"
230
+VolControl.Mute="بی صدا \"%1\""
231
+VolControl.Properties="ویژگیهای \"%1\""
232
 
233
+Basic.Main.AddSceneDlg.Title="اضافه کردن صحنه"
234
+Basic.Main.AddSceneDlg.Text="لطفا نامی را برای این صحنه انتخاب کنید"
235
 
236
+Basic.Main.DefaultSceneName.Text="صحنه %1"
237
 
238
+Basic.Main.AddSceneCollection.Title="اضافه کردن مجموعه صحنه"
239
+Basic.Main.AddSceneCollection.Text="لطفاً نام مجموعه صحنه را وارد کنید"
240
 
241
+Basic.Main.RenameSceneCollection.Title="تغییر نام مجموعه صحنه"
242
 
243
 AddProfile.Title="افزودن پروفایل"
244
+AddProfile.Text="لطفاً نام نمایه را وارد کنید"
245
+AddProfile.WizardCheckbox="نمایش جادوگر پیکربندی خودکار"
246
 
247
 RenameProfile.Title="تغییر نام پروفایل"
248
 
249
+Basic.Main.MixerRename.Title="تغییر نام منبع صوتی"
250
+Basic.Main.MixerRename.Text="لطفاً نام منبع صوتی را وارد کنید"
251
+
252
 
253
+Basic.Main.PreviewDisabled="پیش نمایش در حال حاضر غیرفعال است"
254
 
255
+Basic.SourceSelect="ایجاد / انتخاب منبع"
256
+Basic.SourceSelect.CreateNew="ایجاد جدید"
257
+Basic.SourceSelect.AddExisting="اضافه کردن موجود"
258
 
259
+Basic.Main.Sources.Visibility="قابلیت نمایش"
260
+Basic.Main.Sources.Lock="قفل"
261
 
262
 Basic.PropertiesWindow.SelectColor="انتخاب رنگ"
263
 Basic.PropertiesWindow.SelectFont="انتخاب فونت"
264
@@ -294,45 +414,200 @@
265
 Basic.Filters="فیلتر ها"
266
 Basic.Filters.AsyncFilters="فلیتر های صوتی/ویدیویی"
267
 Basic.Filters.AudioFilters="فیلتر های صوتی"
268
+Basic.Filters.AddFilter.Title="نام فیلتر"
269
 
270
+Basic.TransformWindow.Position="موقعیت"
271
+Basic.TransformWindow.Rotation="چرخش"
272
 Basic.TransformWindow.Size="اندازه"
273
+Basic.TransformWindow.Crop="بریدن"
274
+
275
+Basic.TransformWindow.Alignment.TopLeft="بالا سمت چپ"
276
+Basic.TransformWindow.Alignment.TopCenter="بالا وسط"
277
+Basic.TransformWindow.Alignment.TopRight="بالا سمت راست"
278
+Basic.TransformWindow.Alignment.Center="مرکز"
279
+
280
+
281
+
282
+Basic.Main.Scenes="صحنه ها"
283
+Basic.Main.Sources="منابع"
284
+Basic.Main.Controls="کنترل ها"
285
+Basic.Main.Connecting="در حال اتصال..."
286
+Basic.Main.StartRecording="شروع ضبط"
287
+Basic.Main.SaveReplay="ذخیره پخش مجدد"
288
+Basic.Main.StartStreaming="شروع استریم"
289
+Basic.Main.StartVirtualCam="شروع دوربین مجازی"
290
+Basic.Main.StopRecording="پایان ضبط"
291
+Basic.Main.PauseRecording="توقف ضبط"
292
+Basic.Main.UnpauseRecording="ادامه ضبط"
293
+Basic.Main.StoppingRecording="درحال پایان ضبط..."
294
+Basic.Main.StopReplayBuffer="توقف بافر پخش مجدد"
295
+Basic.Main.StopStreaming="توقف پخش جریانی"
296
+Basic.Main.StoppingStreaming="توقف پخش جریان..."
297
+Basic.Main.ForceStopStreaming="توقف پخش جریانی (تأخیر در صرف نظر کردن)"
298
+Basic.Main.ShowContextBar="نمایش نوار ابزار منبع"
299
+Basic.Main.HideContextBar="پنهان کردن نوار ابزار منبع"
300
+Basic.Main.StopVirtualCam="توقف دوربین مجازی"
301
+Basic.Main.Group="گروه %1"
302
+Basic.Main.Ungroup="لغو گروه بندی"
303
+Basic.Main.GridMode="حالت شبکه"
304
+Basic.Main.ListMode="حالت لیست"
305
+
306
+Basic.MainMenu.File="فایل"
307
+Basic.MainMenu.File.Export="&خروجی گرفتن"
308
+Basic.MainMenu.File.Import="&وارد کردن"
309
+Basic.MainMenu.File.ShowRecordings="&نمایش فایلهای ضبط شده"
310
+Basic.MainMenu.File.Remux="باز&سازی ضبط های مجدد"
311
+Basic.MainMenu.File.Settings="&تنظیمات"
312
+Basic.MainMenu.File.ShowSettingsFolder="نمایش پوشه تنظیمات"
313
+Basic.MainMenu.File.ShowProfileFolder="نمایش پوشه نمایه"
314
+Basic.MainMenu.AlwaysOnTop="&همیشه در بالا"
315
+Basic.MainMenu.File.Exit="خروج"
316
+
317
+Basic.MainMenu.Edit="ویرایش"
318
+Basic.MainMenu.Edit.Undo="لغو عمل&"
319
+Basic.MainMenu.Edit.Redo="& ازنو"
320
+Basic.MainMenu.Edit.UndoAction="&واگرد 1 دلار"
321
+Basic.MainMenu.Edit.RedoAction="&مجدد 1 دلار"
322
+Basic.MainMenu.Edit.LockPreview="&پیش نمایش قفل"
323
+Basic.MainMenu.Edit.Order.MoveUp="رفتن به &بالا"
324
+Basic.MainMenu.Edit.Order.MoveDown="حرکت به &پایین"
325
+
326
+Basic.MainMenu.View="&نما"
327
+Basic.MainMenu.View.Toolbars="&نوارابزارها"
328
+Basic.MainMenu.View.Docks="اسکله ها"
329
+Basic.MainMenu.View.Docks.ResetUI="بازیابی رابط"
330
+Basic.MainMenu.View.Docks.LockUI="قفل رابط"
331
+
332
+Basic.MainMenu.Profile.Import="وارد کردن نمایه"
333
+Basic.MainMenu.Profile.Export="صادر کردن نمایه"
334
+
335
+Basic.MainMenu.Tools="&ابزارها"
336
+
337
+Basic.MainMenu.Help="&راهنما"
338
+Basic.MainMenu.Help.CheckForUpdates="بررسی برای بروزرسانی"
339
+Basic.MainMenu.Help.About="&درباره"
340
+
341
+Basic.Settings.ConfirmTitle="تایید تغییرات"
342
+
343
+Basic.Settings.General="عمومی"
344
+Basic.Settings.General.Theme="پوسته"
345
+Basic.Settings.General.Language="زبان"
346
+Basic.Settings.General.Projectors="پروژکتورها"
347
+Basic.Settings.General.SysTray="سینی سیستم"
348
+Basic.Settings.General.Preview="پیشنمایش"
349
+Basic.Settings.General.Multiview="چند دید"
350
+
351
+Basic.Settings.Stream="پخش جریانی"
352
+Basic.Settings.Stream.StreamType="نوع پخش جریانی"
353
+Basic.Settings.Stream.Custom.UseAuthentication="استفاده از تایید اعتبار"
354
+Basic.Settings.Stream.Custom.Username="نام کاربری"
355
+Basic.Settings.Stream.Custom.Password="رمزعبور"
356
+Basic.Settings.Stream.TTVAddon.None="هیچکدام"
357
+Basic.Settings.Stream.StreamSettingsWarning="باز کردن تنظیمات"
358
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="حداکثر نرخِ بیت ویدیو: %1 کبس"
359
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="حداکثر نرخِ بیت صدا: %1 کبس"
360
+
361
+Basic.Settings.Output="خروجی"
362
+Basic.Settings.Output.Format="فرمت ضبط"
363
+Basic.Settings.Output.Encoder="مبدل فرمت"
364
+Basic.Settings.Output.SelectDirectory="انتخاب پوشه ضبط"
365
+Basic.Settings.Output.Mode="نوع خروجی"
366
+Basic.Settings.Output.Mode.Simple="معمولی"
367
+Basic.Settings.Output.Mode.Adv="پیشرفته"
368
+Basic.Settings.Output.Simple.SavePath="مسیر پوشه ضبط"
369
+Basic.Settings.Output.Simple.RecordingQuality="کیفیت ضبط"
370
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="رزولوشن: %1"
371
+Basic.Settings.Output.VideoBitrate="ترخ ویدئو"
372
+Basic.Settings.Output.AudioBitrate="نرخ صدا"
373
+Basic.Settings.Output.Reconnect="اتصال دوباره خودکار"
374
+
375
+Basic.Settings.Output.Adv.AudioTrack="تراک صدا"
376
+Basic.Settings.Output.Adv.Streaming="پخش جریانی"
377
+
378
+Basic.Settings.Output.Adv.Recording="درحال ضبط"
379
+Basic.Settings.Output.Adv.Recording.Type="نوع"
380
+Basic.Settings.Output.Adv.Recording.Type.Standard="استاندارد"
381
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="همه فایل ها"
382
+Basic.Settings.Output.Adv.FFmpeg.FormatAudio="صدا"
383
+Basic.Settings.Output.Adv.FFmpeg.FormatVideo="ویدئو"
384
+
385
+
386
+
387
+
388
+Basic.Settings.Video="ویدئو"
389
+Basic.Settings.Video.FPS="فریم"
390
+Basic.Settings.Video.Renderer="خروجی"
391
+Basic.Settings.Video.DisableAero="غیر فعال کردن Aero"
392
+
393
+
394
+Basic.Settings.Audio="صدا"
395
+Basic.Settings.Audio.SampleRate="نرخ نمونه"
396
+Basic.Settings.Audio.Channels="کانالها"
397
+Basic.Settings.Audio.MeterDecayRate.Fast="سریع"
398
+Basic.Settings.Audio.DesktopDevice2="صدای دسکتاپ 2"
399
+Basic.Settings.Audio.Disabled="غیر فعال"
400
+
401
+Basic.Settings.Advanced="پیشرفته"
402
+Basic.Settings.Advanced.General.ProcessPriority="اولویت پردازش"
403
+Basic.Settings.Advanced.General.ProcessPriority.High="بالا"
404
+Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="بیشتر از عادی"
405
+Basic.Settings.Advanced.General.ProcessPriority.Normal="معمولی"
406
+Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="کمتر از عادی"
407
+Basic.Settings.Advanced.General.ProcessPriority.Idle="بیکار"
408
+Basic.Settings.Advanced.Video.ColorSpace="فضای رنگی"
409
+Basic.Settings.Advanced.Video.ColorRange="محدوده رنگ"
410
+Basic.Settings.Advanced.Video.ColorRange.Partial="جزئی"
411
+Basic.Settings.Advanced.Video.ColorRange.Full="کامل"
412
+Basic.Settings.Advanced.Audio.MonitoringDevice.Default="پیش فرض"
413
+Basic.Settings.Advanced.StreamDelay.Duration="مدت زمان"
414
+Basic.Settings.Advanced.Network="شبکه"
415
+
416
+Basic.AdvAudio.Name="نام"
417
+Basic.AdvAudio.Volume="درجه صدا"
418
+Basic.AdvAudio.VolumeSource="میزان صدا برای \"%1\""
419
+Basic.AdvAudio.Mono="مونو"
420
+Basic.AdvAudio.Balance="بالانس"
421
+Basic.AdvAudio.AudioTracks="قطعهها"
422
+
423
+Basic.Settings.Hotkeys="کلیدهای میانبر"
424
+Basic.Settings.Hotkeys.Filter="فیلتر"
425
+
426
+
427
+Basic.SystemTray.Show="نمایش"
428
+Basic.SystemTray.Hide="پنهان"
429
+
430
+
431
+Hotkeys.Insert="درج کردن"
432
+Hotkeys.Delete="حذف"
433
+Hotkeys.Home="خانه"
434
+Hotkeys.End="پایان"
435
+Hotkeys.PageUp="بالای صفحه"
436
+Hotkeys.PageDown="پایین صفحه"
437
+Hotkeys.NumLock="قفل اعداد"
438
+Hotkeys.Backspace="برگشت عقب"
439
+Hotkeys.Tab="زبانه"
440
+Hotkeys.Print="چاپ"
441
+Hotkeys.Pause="مکث"
442
+Hotkeys.Left="چپ"
443
+Hotkeys.Right="راست"
444
+Hotkeys.Up="بالا"
445
+Hotkeys.Down="پایین"
446
+Hotkeys.Windows="ویندوز"
447
+Hotkeys.Menu="منو"
448
+Hotkeys.Space="فاصله"
449
+Hotkeys.Escape="Esc"
450
+
451
+Mute="بيصدا"
452
+Unmute="صدادار"
453
+
454
+
455
+
456
+
457
 
458
 
459
 
460
-
461
-
462
-
463
-
464
-
465
-
466
-
467
-
468
-
469
-
470
-
471
-
472
-
473
-
474
-
475
-
476
-
477
-
478
-
479
-
480
-
481
-
482
-
483
-
484
-
485
-
486
-
487
-
488
-
489
-
490
-
491
-
492
-
493
-
494
+About="درباره"
495
+About.License="مجوز"
496
 
497
 
498
 ResizeOutputSizeOfSource.Continue="آیا مایلید ادامه دهید؟"
499
@@ -340,6 +615,8 @@
500
 
501
 
502
 
503
+Restart="اجرا مجدد"
504
 
505
 
506
+ContextBar.MediaControls.PlayMedia="اجرا رسانه"
507
 
508
obs-studio-26.0.2.tar.xz/UI/data/locale/fi-FI.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/fi-FI.ini Changed
129
 
1
@@ -93,6 +93,7 @@
2
 LogViewer="Näytä loki"
3
 ShowOnStartup="Näytä käynnistyksessä"
4
 OpenFile="Avaa tiedosto"
5
+AddValue="Lisää %1"
6
 
7
 AlreadyRunning.Title="OBS on jo käynnissä"
8
 AlreadyRunning.Text="OBS on jo käynnissä! Ellet tarkoittanut tehdä näin, ole hyvä ja sulje aikaisemmat OBS-prosessit ennen uuden käynnistämistä. Jos olet asettanut OBS:n pienentymään ilmaisinalueelle, varmista ettei se ole siellä yhä päällä."
9
@@ -160,6 +161,7 @@
10
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Katkaise yhteys tiliin?"
11
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Tämä muutos tulee voimaan välittömästi. Oletko varma että haluat katkaista yhteyden tiliin?"
12
 Basic.AutoConfig.StreamPage.GetStreamKey="Hae striimiavain"
13
+Basic.AutoConfig.StreamPage.MoreInfo="Lisää tietoa"
14
 Basic.AutoConfig.StreamPage.UseStreamKey="Käytä striimiavainta"
15
 Basic.AutoConfig.StreamPage.Service="Palvelu"
16
 Basic.AutoConfig.StreamPage.Service.ShowAll="Näytä kaikki..."
17
@@ -364,8 +366,8 @@
18
 Deinterlacing.TopFieldFirst="Ylin kenttä ensin"
19
 Deinterlacing.BottomFieldFirst="Alin kenttä ensin"
20
 
21
-VolControl.SliderUnmuted="Äänenvoimakkuus '%1': %2"
22
-VolControl.SliderMuted="Äänenvoimakkuus '%1': %2 (mykistetty)"
23
+VolControl.SliderUnmuted="Äänenvoimakkuus '%1':"
24
+VolControl.SliderMuted="Äänenvoimakkuus '%1': (mykistetty)"
25
 VolControl.Mute="Mykistä %1"
26
 VolControl.Properties="Ominaisuudet %1:lle"
27
 
28
@@ -381,6 +383,7 @@
29
 
30
 AddProfile.Title="Lisää profiili"
31
 AddProfile.Text="Syötä profiilin nimi"
32
+AddProfile.WizardCheckbox="Näytä automaattinen määritystoiminto"
33
 
34
 RenameProfile.Title="Uudelleennimeä profiili"
35
 
36
@@ -395,6 +398,11 @@
37
 Basic.SourceSelect.AddExisting="Lisää olemassaoleva"
38
 Basic.SourceSelect.AddVisible="Tee lähteestä näkyvä"
39
 
40
+Basic.Main.Sources.Visibility="Näkyvyys"
41
+Basic.Main.Sources.VisibilityDescription="Hallitsee '%1' näkyvyyttä piirtoalueella"
42
+Basic.Main.Sources.Lock="Lukitus"
43
+Basic.Main.Sources.LockDescription="Lukitsee '%1' sijainnin ja koon piirtoalueella"
44
+
45
 Basic.PropertiesWindow="Ominaisuudet: %1"
46
 Basic.PropertiesWindow.AutoSelectFormat="%1 (automaat.: %2)"
47
 Basic.PropertiesWindow.SelectColor="Valitse väri"
48
@@ -634,13 +642,19 @@
49
 Basic.Settings.Stream.MissingUrlAndApiKey="URL-osoite ja Striimiavain puuttuu.\n\nAvaa Asetukset syöttääksesi URL-osoitteen ja Striimiavaimen 'Lähetys' -osiossa."
50
 Basic.Settings.Stream.MissingUrl="URL-osoite puuttuu.\n\nAvaa Asetukset syöttääksesi URL-osoitteen 'Lähetys' -osiossa."
51
 Basic.Settings.Stream.MissingStreamKey="Lähetysavain puuttuu.\n\nAvaa Asetukset syöttääksesi URL-osoitteen 'Lähetys' -osiossa."
52
+Basic.Settings.Stream.IgnoreRecommended="Älä huomioi palvelun asetusten suosituksia"
53
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Ohita suositellut asetukset"
54
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Varoitus: Rajoitusten ohittaminen saattaa huonontaa lähetyksen laatua tai estää sinua lähettämästä.\n\nJatka?"
55
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Kuvan bitrate-maksimi: %1 kbps"
56
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Äänen bitrate-maksimi: %1 kbps"
57
+Basic.Settings.Stream.Recommended.MaxResolution="Maksimiresoluutio: %1"
58
+Basic.Settings.Stream.Recommended.MaxFPS="Maksimi-FPS: %1"
59
 
60
 Basic.Settings.Output="Ulostulo"
61
 Basic.Settings.Output.Format="Tallennuksen muoto"
62
 Basic.Settings.Output.Encoder="Enkooderi"
63
 Basic.Settings.Output.SelectDirectory="Valitse tallennuskansio"
64
 Basic.Settings.Output.SelectFile="Valitse tallennustiedosto"
65
-Basic.Settings.Output.EnforceBitrate="Rajoita bitrate lähetyspalvelun suosituksiin"
66
 Basic.Settings.Output.DynamicBitrate="Muuta bitratea verkon ruuhkautumisen mukaan"
67
 Basic.Settings.Output.DynamicBitrate.Beta="Muuta bitratea verkon ruuhkautumisen mukaan (Beta)"
68
 Basic.Settings.Output.DynamicBitrate.TT="Framejen pudottamisen sijaan vähentää bitratea automaattisesti verkon ruuhkaantumisen aikana.\n\nHuomaa että tämä saattaa lisätä viivettä katsojille, mikäli verkko ruuhkautuu merkittävästi.\nKun bitrate tippuu, sen nousemisessa saattaa kestää muutamia minuutteja.\n\nTällä hetkellä tuettu vain RTMP:ssä."
69
@@ -661,8 +675,8 @@
70
 Basic.Settings.Output.Simple.RecordingQuality.Small="Korkea laatu, keskikokoinen tiedostokoko"
71
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Erottamaton laatu, suuri tiedostokoko"
72
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Häviötön laatu, valtava tiedostokoko"
73
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Varoitus: Kuvan bitrate asetetaan arvoon %1, joka on yläraja valitsemassasi palvelussa. Jos haluat varmasti mennä %1:n yli, poista valinta lisäasetuksista kohdasta \"Rajoita bitrate lähetyspalvelun suosituksiin\"."
74
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Varoitus: Äänen bitrate asetetaan arvoon %1, joka on yläraja valitsemassasi palvelussa. Jos haluat varmasti mennä %1:n yli, poista valinta lisäasetuksista kohdasta \"Rajoita bitrate lähetyspalvelun suosituksiin\"."
75
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Varoitus: Kuvan bitrate asetetaan %1, joka on valitun palvelun yläraja."
76
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Varoitus: Äänen bitrate asetetaan %1, joka on valitun palvelun yläraja."
77
 Basic.Settings.Output.Simple.Warn.CannotPause="Varoitus: Tallennusta ei voi pysäyttää jos laatu on asetettu \"Sama kuin lähetyksessä\"."
78
 Basic.Settings.Output.Simple.Warn.Encoder="Varoitus: Tallentaminen lähetyksestä eroavalla laadulla vaatii prosessorilta lisätyötä jos lähetät ja tallennat samanaikaisesti."
79
 Basic.Settings.Output.Simple.Warn.Lossless="Varoitus: Häviötön laatu luo järjettömän kokoisia tiedostoja! Häviötön laatu saattaa käyttää jopa 7 gigatavua levytilastasi minuutissa, mikäli käytät suuria resoluutioita ja korkeita FPS-arvoja. Häviötöntä pakkausta ei suositella pitkiin tallennuksiin ellei sinulla ole todella paljon tallennustilaa käytettävissäsi."
80
@@ -673,6 +687,11 @@
81
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Laitteisto (AMD)"
82
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Laitteistopohjainen (NVENC)"
83
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Ohjelmistopohjainen (x264 matala CPU-käyttö, lisää tiedostokokoa)"
84
+Basic.Settings.Output.Simple.TwitchVodTrack="Twitch VOD ääniraita (Käyttää raitaa 2)"
85
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Epäyhteensopiva resoluutio/FPS"
86
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Tämä palvelu ei tue nykyistä ulostulon resoluutiota ja/tai FPS:ää. Nämä asetukset muutetaan lähimpään yhteensopivaan arvoon:\n\n%1\n\nHaluatko jatkaa?"
87
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Resoluutio: %1"
88
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS: %1"
89
 Basic.Settings.Output.VideoBitrate="Kuvan bitrate"
90
 Basic.Settings.Output.AudioBitrate="Äänen bitrate"
91
 Basic.Settings.Output.Reconnect="Automaattinen uudelleenyhdistys"
92
@@ -687,15 +706,16 @@
93
 Basic.Settings.Output.Adv.Rescale="Uudelleenskaalaa ulostulo"
94
 Basic.Settings.Output.Adv.AudioTrack="Ääniraita"
95
 Basic.Settings.Output.Adv.Streaming="Lähetys"
96
-Basic.Settings.Output.Adv.ApplyServiceSettings="Pakota asetukset palvelun suosituksiin"
97
 Basic.Settings.Output.Adv.Audio.Track1="Raita 1"
98
 Basic.Settings.Output.Adv.Audio.Track2="Raita 2"
99
 Basic.Settings.Output.Adv.Audio.Track3="Raita 3"
100
 Basic.Settings.Output.Adv.Audio.Track4="Raita 4"
101
 Basic.Settings.Output.Adv.Audio.Track5="Raita 5"
102
 Basic.Settings.Output.Adv.Audio.Track6="Raita 6"
103
+Basic.Settings.Output.Adv.TwitchVodTrack="Twitch VOD ääniraita"
104
 
105
 Basic.Settings.Output.Adv.Recording="Tallennus"
106
+Basic.Settings.Output.Adv.Recording.RecType="Tallennuksen tyyppi"
107
 Basic.Settings.Output.Adv.Recording.Type="Tyyppi"
108
 Basic.Settings.Output.Adv.Recording.Type.Standard="Tavallinen"
109
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Mukautettu lähtö (FFmpeg)"
110
@@ -823,13 +843,18 @@
111
 Basic.AdvAudio.ActiveOnly="Vain aktiiviset lähteet"
112
 Basic.AdvAudio.Name="Nimi"
113
 Basic.AdvAudio.Volume="Äänenvoimakkuus"
114
+Basic.AdvAudio.VolumeSource="Äänenvoimakkuus '%1'"
115
 Basic.AdvAudio.Mono="Mono"
116
+Basic.AdvAudio.MonoSource="Muuttaa '%1' yksikanavaiseksi"
117
 Basic.AdvAudio.Balance="Balanssi"
118
+Basic.AdvAudio.BalanceSource="Äänen tasapaino '%1'"
119
 Basic.AdvAudio.SyncOffset="Synkronoinnin viivästys"
120
+Basic.AdvAudio.SyncOffsetSource="Synkronoinnin viivästys '%1'"
121
 Basic.AdvAudio.Monitoring="Äänen monitorointi"
122
 Basic.AdvAudio.Monitoring.None="Monitorointi pois"
123
 Basic.AdvAudio.Monitoring.MonitorOnly="Vain monitorointi (hiljennä ulostulo)"
124
 Basic.AdvAudio.Monitoring.Both="Monitorointi ja ulostulo"
125
+Basic.AdvAudio.MonitoringSource="Äänen monitorointi '%1'"
126
 Basic.AdvAudio.AudioTracks="Raidat"
127
 
128
 Basic.Settings.Hotkeys="Pikanäppäimet"
129
obs-studio-26.0.2.tar.xz/UI/data/locale/fil-PH.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/fil-PH.ini Changed
297
 
1
@@ -93,6 +93,7 @@
2
 LogViewer="Viewer para sa Log"
3
 ShowOnStartup="Ipakita sa pasimula"
4
 OpenFile="Buksan ang file"
5
+AddValue="Magdagdag ng %1"
6
 
7
 AlreadyRunning.Title="Tumatakbo na ang OBS"
8
 AlreadyRunning.Text="Tumatakbo na ang OBS! Maliban na lamang kung gusto mong gawin ito, pakiusap patayin ang anomang umiiral na instansiya ng OBS bago subukang magpatakbo ng panibagong instansiya. Kung itinakda sa OBS na lumiit tungo sa system tray, pakitingnan kung ito ay tumatakbo pa rin doon."
9
@@ -159,6 +160,7 @@
10
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="I-disconnect ang Account?"
11
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Ang pagbabagong ito ay mangyayari agad. Sigurado ka bang nais mong i-disconnect ang iyong account?"
12
 Basic.AutoConfig.StreamPage.GetStreamKey="Ang susi ng iyong stream"
13
+Basic.AutoConfig.StreamPage.MoreInfo="Karagdagang Impormasyon"
14
 Basic.AutoConfig.StreamPage.UseStreamKey="Gumamit ang Stream key"
15
 Basic.AutoConfig.StreamPage.Service="Serbisyo"
16
 Basic.AutoConfig.StreamPage.Service.ShowAll="Ipakita lahat..."
17
@@ -231,12 +233,12 @@
18
 QuickTransitions.DuplicateScene="Doblehin ang Eksena"
19
 QuickTransitions.DuplicateSceneTT="Kapag ineedit ang parehas na eksena, pinapayagan ang pagbabago ng anyo/kakayahang makita ng mga bukal nang hindi binabago ang bunga.\nPara mabago ang mga katangian ng mga bukal nang hindi binabago ang bunga, paganahin ang 'Doblehin ang mga Bukal'.\nMare-reset ang kasalukuyang eksenang bunga kapag binago ito (kung ito ay umiiral pa rin)."
20
 QuickTransitions.EditProperties="Gayahin ang mga pinagmulang"
21
-QuickTransitions.EditPropertiesTT="Kung mag i-edit ng kaparehas na eksena. payagan mag edit ng katangian ng mga pinagkukunan nang hindi binabago ang output.\nIto ay magagamit king 'Duplicate Scene' ay pinagana.\nAng mga pinagkukunan(gaya ng nakuhang media sources) hindi suportado at di pwede ma edit nang hiwalay.\nAng pagbago ng value nito ay maaaring ma reset ang kasulukuyang output scene(kung mayroon pa).\n\nBabala: Dahil sa pinagkukunan ay magiging doble, ito ay nangangailangan ng ekstrang sistema or video pagkukunan."
22
+QuickTransitions.EditPropertiesTT="Kapag binabago ang kaparehong eksena, pinapayagang baguhin ang mga katangian ng mga source na hindi binabago ang output.\nMagagamit lang ito kung ang 'Doblehin ang Eksena' ay naka-enable.\nAng ilang mga source (gaya ng mga capture at media source) ay hindi ito suportado at di pwede mababago nang hiwalay.\nAng pagbago ng value nito ay magrereset ng kasulukuyang eksenang output (kung mayroon pa).\n\nBabala: Dahil ang mga source ay magiging doble, maaaring mangailangan ito ng dagdag na resources ng sistema o video."
23
 QuickTransitions.HotkeyName="Ilipat ng mabilis: %1"
24
 
25
 Basic.AddTransition="Magdagdag ng configurable na transisyon"
26
 Basic.RemoveTransition="Tangalin ang configurable transition"
27
-Basic.TransitionProperties="Mga Properties ng Transisyon"
28
+Basic.TransitionProperties="Mga Katangian ng Transisyon"
29
 Basic.SceneTransitions="Pagbabago ng mga Eksena"
30
 Basic.TransitionDuration="Katagalan"
31
 Basic.TogglePreviewProgramMode="Ang Studio Mode"
32
@@ -285,6 +287,8 @@
33
 Output.ConnectFail.Error="Isang di-inaasahang error ng subukang kumunekta sa serber. Karagdagang impormasyon ay nasa log file."
34
 Output.ConnectFail.Disconnected="Nadiskonek mula sa serber."
35
 
36
+Output.StreamEncodeError.Title="May error sa pag-encode"
37
+Output.StreamEncodeError.Msg="Mayroong error ang lumabas habang ikaw ay nag-si-stream."
38
 
39
 Output.RecordFail.Title="Bigong simulang ang pag record"
40
 Output.RecordFail.Unsupported="Ang output format ay maaring di suportado or di sinusuportahan ang higit sa isang audio track. Pakitingnan ang iyong settings at simulan ulet."
41
@@ -292,6 +296,7 @@
42
 Output.RecordNoSpace.Msg="Di sapat ang espasyo para ipatuloy ang pagrerekord."
43
 Output.RecordError.Title="May error sa pagrekord"
44
 Output.RecordError.Msg="Hindi tiyak na error habang nagrerekord."
45
+Output.RecordError.EncodeErrorMsg="Mayroong error ang lumabas habang ikaw ay nag-re-rekord."
46
 
47
 Output.BadPath.Title="Di mabuting File Path"
48
 Output.BadPath.Text="Ang na configured na file output path ay di di-wasto. Pakitignan ang iyong settings para ma kumpirma na balido ang file path at na i-set ito."
49
@@ -333,6 +338,7 @@
50
 
51
 Basic.Main.PreviewConextMenu.Enable="Ipakita muli ang Larawan"
52
 
53
+Basic.Main.Preview.Disable="Di-pinagana ang Preview"
54
 
55
 ScaleFiltering="I-filter iskala"
56
 ScaleFiltering.Point="Punto"
57
@@ -353,10 +359,8 @@
58
 Deinterlacing.TopFieldFirst="Pang unang itaas na field"
59
 Deinterlacing.BottomFieldFirst="Pang unang ibaba na field"
60
 
61
-VolControl.SliderUnmuted="Pandausdos ng volume para '%1': %2"
62
-VolControl.SliderMuted="Pandausdos ng volume para '%1': %2 (kasulukuyang naka mute)"
63
 VolControl.Mute="Mute '%1'"
64
-VolControl.Properties="Mga katangian '%1'"
65
+VolControl.Properties="Mga Katangian para sa '%1'"
66
 
67
 Basic.Main.AddSceneDlg.Title="Magdagdag ng mga Eksena"
68
 Basic.Main.AddSceneDlg.Text="Pakilagay ang pangalan ng eksena"
69
@@ -384,7 +388,9 @@
70
 Basic.SourceSelect.AddExisting="Magdagdag ng Umiiral na"
71
 Basic.SourceSelect.AddVisible="Gawing nakikita ang mapagkukunan"
72
 
73
-Basic.PropertiesWindow="Mga Properties para sa '%1'"
74
+
75
+Basic.PropertiesWindow="Mga Katangian para sa '%1'"
76
+Basic.PropertiesWindow.AutoSelectFormat="%1 (awtomatikang-pagpili: %2)"
77
 Basic.PropertiesWindow.SelectColor="Pumili ng kulay"
78
 Basic.PropertiesWindow.SelectFont="Piliin ang font"
79
 Basic.PropertiesWindow.ConfirmTitle="Binago ang Mga Setting"
80
@@ -400,7 +406,7 @@
81
 
82
 Basic.PropertiesView.FPS.Simple="Mga Simpleng FPS na Halaga"
83
 Basic.PropertiesView.FPS.Rational="Mga Rational Value FPS"
84
-Basic.PropertiesView.FPS.ValidFPSRanges="Mga saklaw na wastong FPS:"
85
+Basic.PropertiesView.FPS.ValidFPSRanges="Mga wastong saklaw ng FPS:"
86
 
87
 Basic.InteractionWindow="Nakikisalamuha... '%1'"
88
 
89
@@ -457,6 +463,7 @@
90
 Basic.Main.Connecting="Kumukonekta..."
91
 Basic.Main.StartRecording="Simula ng Pagtatala"
92
 Basic.Main.StartReplayBuffer="Simulan na ang pag Replay Buffer"
93
+Basic.Main.SaveReplay="I-save ang Replay"
94
 Basic.Main.StartStreaming="Simulan ang mag stream"
95
 Basic.Main.StartVirtualCam="Simulan ang Virtual Camera"
96
 Basic.Main.StopRecording="Itigil ang Pagtatala"
97
@@ -474,6 +481,8 @@
98
 Basic.Main.Group="Grupo %1"
99
 Basic.Main.GroupItems="I-grupo ang napiling mga aytem"
100
 Basic.Main.Ungroup="Alisin sa Grupo"
101
+Basic.Main.GridMode="Grid na Paraan"
102
+Basic.Main.ListMode="Listahang Paraan"
103
 
104
 Basic.MainMenu.File="Talaksan (&F)"
105
 Basic.MainMenu.File.Export="I-&export"
106
@@ -525,6 +534,7 @@
107
 Basic.MainMenu.View.Docks.LockUI="I-lock ang UI"
108
 Basic.MainMenu.View.ListboxToolbars="Listahan ng Pindutan ng Eksena/Bukal"
109
 Basic.MainMenu.View.SceneTransitions="Pagbabagong Eksena (&c)"
110
+Basic.MainMenu.View.SourceIcons="Source &Icons"
111
 Basic.MainMenu.View.StatusBar="&Status bar"
112
 Basic.MainMenu.View.Fullscreen.Interface="Fullscreen Interface"
113
 
114
@@ -549,6 +559,7 @@
115
 Basic.MainMenu.Help.Logs.UploadLastLog="Mag-up&load Huling pagla-log ng File"
116
 Basic.MainMenu.Help.Logs.ViewCurrentLog="Tignan ang Kasalukuyang pagla-log (&V)"
117
 Basic.MainMenu.Help.CheckForUpdates="Maghanap ng mga Update"
118
+Basic.MainMenu.Help.CrashLogs.ShowLogs="&Ipakita ang Humintong Balita"
119
 Basic.MainMenu.Help.About="&Tungkol"
120
 
121
 Basic.Settings.ProgramRestart="Ang mga programa ay dapat na-restart para sa mga maaapektuhan na setting."
122
@@ -579,9 +590,11 @@
123
 Basic.Settings.General.SystemTrayHideMinimize="Palaging magbawas sa bandehadong sistema sa halip na task bar"
124
 Basic.Settings.General.SaveProjectors="I-save ang mga prodyektor sa labasan"
125
 Basic.Settings.General.Preview="Pribyu"
126
+Basic.Settings.General.Importers="Mga taga-import"
127
 Basic.Settings.General.AutomaticCollectionSearch="Maghanap sa mga kilalang lugar para sa mga koleksyon ng eksena kapag nag-aangkat"
128
 Basic.Settings.General.SwitchOnDoubleClick="Lumipat sa eksena kapag nakadalawang-pindot"
129
 Basic.Settings.General.StudioPortraitLayout="Paganahin ang larawan/vertical layout"
130
+Basic.Settings.General.Multiview="Kadaming-pagtingin"
131
 Basic.Settings.General.Multiview.MouseSwitch="Pindutin para lumipat sa mga eksena"
132
 Basic.Settings.General.Multiview.DrawSourceNames="Ipakita ang mga pangalan ng eksena"
133
 Basic.Settings.General.MultiviewLayout="Multiview Layout"
134
@@ -605,7 +618,6 @@
135
 Basic.Settings.Output.Encoder="Encoder"
136
 Basic.Settings.Output.SelectDirectory="Piliin ang direktoryong pagtatala"
137
 Basic.Settings.Output.SelectFile="Piliin ang file ng pagtatala"
138
-Basic.Settings.Output.EnforceBitrate="Ipatupad ang serbisyo ng limitadong bitrate"
139
 Basic.Settings.Output.Mode="Uri ng Pagbunga"
140
 Basic.Settings.Output.Mode.Simple="Simple"
141
 Basic.Settings.Output.Mode.Adv="Pagsulong"
142
@@ -622,7 +634,6 @@
143
 Basic.Settings.Output.Simple.RecordingQuality.Small="Mataas na Kalidad, Katamtamang Laki ng File"
144
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Indistinguishable Quality, Large File Size"
145
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Lossless Quality, Napakalaki ng Laki ng File"
146
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Babala: Ang bitrate ng streaming video ay itatakda sa%1, na kung saan ay ang itaas na limitasyon para sa kasalukuyang streaming service. Kung sigurado ka na gusto mong pumunta sa itaas%1, paganahin ang mga advanced na mga pagpipilian sa encoder at alisan ng tsek ang \"Ipatupad ang mga limitasyong bitrate ng service streaming\"."
147
 Basic.Settings.Output.Simple.Warn.Encoder="Babala: Ang pagrekord sa isang encoder ng software sa ibang kalidad kaysa sa stream ay mangangailangan ng dagdag na paggamit ng CPU kung mag-stream at mag-record ka sa parehong oras."
148
 Basic.Settings.Output.Simple.Warn.Lossless="Babala: Hindi mawawalan ng kalidad ang bumubuo ng napakalaking malalaking sukat ng file! Maaaring gumamit ng walang humpay na kalidad ng hanggang 7 gigabytes ng puwang ng disk kada minuto sa mataas na resolution at framerates. Ang hindi nawawala ay hindi inirerekomenda para sa mahabang pag-record maliban kung mayroon kang isang napakalaking halaga ng disk space na magagamit."
149
 Basic.Settings.Output.Simple.Warn.Lossless.Msg="Sigurado ka bang gusto mong gumamit ng kalidad na walang pagkawala?"
150
@@ -644,7 +655,6 @@
151
 Basic.Settings.Output.Adv.Rescale="Rescale Output"
152
 Basic.Settings.Output.Adv.AudioTrack="Audio Track"
153
 Basic.Settings.Output.Adv.Streaming="Streaming"
154
-Basic.Settings.Output.Adv.ApplyServiceSettings="Ipatupad ang mga setting ng encoder ng streaming service"
155
 Basic.Settings.Output.Adv.Audio.Track1="Subaybayan ang 1"
156
 Basic.Settings.Output.Adv.Audio.Track2="Subaybayan ang 2"
157
 Basic.Settings.Output.Adv.Audio.Track3="Subaybayan ang 3"
158
@@ -656,7 +666,7 @@
159
 Basic.Settings.Output.Adv.Recording.Type="Uri"
160
 Basic.Settings.Output.Adv.Recording.Type.Standard="Standard"
161
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Custom Output (FFmpeg)"
162
-Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Gamitin ang stream encoder)"
163
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Gamitin ang encoder para sa stream)"
164
 Basic.Settings.Output.Adv.Recording.Filename="Pag-format ng Filename"
165
 Basic.Settings.Output.Adv.Recording.OverwriteIfExists="I-overwrite kung umiiral ang file"
166
 Basic.Settings.Output.Adv.FFmpeg.Type="FFmpeg Output Type"
167
@@ -683,6 +693,7 @@
168
 
169
 Screenshot.Scene="Kuha ng Screen (Eksena)"
170
 
171
+FilenameFormatting.completer="%CCYY-%MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %Y-%m-%d %H-%M-%S\n%A %Y-%m-%d %H-%M-%S\n%Y-%b-%d %H-%M-%S\n%Y-%B-%d %H-%M-%S\n%Y-%m-%d %I-%M-%S-%p\n%Y-%m-%d %H-%M-%S-%z\n%Y-%m-%d %H-%M-%S-%Z\n%FPS\n%CRES\n%ORES\n%VF"
172
 
173
 
174
 Basic.Settings.Video="Bidyo"
175
@@ -709,9 +720,12 @@
176
 Basic.Settings.Audio="Tunog"
177
 Basic.Settings.Audio.SampleRate="Halimbawa ng Antas"
178
 Basic.Settings.Audio.Channels="Mga Channel"
179
+Basic.Settings.Audio.Meters="Mga Metro"
180
+Basic.Settings.Audio.MeterDecayRate="Bilis ng Pagkupas"
181
 Basic.Settings.Audio.MeterDecayRate.Fast="Pabilisin"
182
 Basic.Settings.Audio.MeterDecayRate.Medium="Katamtaman (Tipo I PPM)"
183
 Basic.Settings.Audio.MeterDecayRate.Slow="Mabagal (Tipo II PPM)"
184
+Basic.Settings.Audio.PeakMeterType="Uri ng Tuktok ng Metro"
185
 Basic.Settings.Audio.MultiChannelWarning.Enabled="Babala: Ang Surround sound audio ay naka andar."
186
 Basic.Settings.Audio.MultichannelWarning.Title="Paganahin ang surround sound audio?"
187
 Basic.Settings.Audio.MultichannelWarning.Confirm="Sigurado ka ba gusto mong paganahin ang surround sound audio?"
188
@@ -720,6 +734,7 @@
189
 Basic.Settings.Audio.EnablePushToTalk="Paganahin ang Push-to-talk"
190
 Basic.Settings.Audio.PushToTalkDelay="Push-to-talk delay"
191
 Basic.Settings.Audio.UnknownAudioDevice="[Hindi konektado o hindi magagamit ang device]"
192
+Basic.Settings.Audio.Disabled="Di-napagana"
193
 
194
 Basic.Settings.Advanced="Advanced"
195
 Basic.Settings.Advanced.General.ProcessPriority="Prayoridad sa Proseso"
196
@@ -731,8 +746,11 @@
197
 Basic.Settings.Advanced.FormatWarning="Babala: Ang mga format ng kulay maliban sa NV12 ay pangunahing inilaan para sa pag-record, at hindi inirerekomenda kapag nag-stream. Maaaring mapalawak ng streaming ang paggamit ng CPU dahil sa conversion ng format ng kulay."
198
 Basic.Settings.Advanced.Audio.BufferingTime="Audio Buffering Time"
199
 Basic.Settings.Advanced.Video.ColorFormat="Format ng Kulay"
200
+Basic.Settings.Advanced.Video.ColorSpace="Espasyo ng Kulay"
201
+Basic.Settings.Advanced.Video.ColorRange="Lawak ng Kulay"
202
 Basic.Settings.Advanced.Video.ColorRange.Partial="Bahagyang"
203
 Basic.Settings.Advanced.Video.ColorRange.Full="Buo"
204
+Basic.Settings.Advanced.Audio.MonitoringDevice="Tagapayong Aparato"
205
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="I-Default"
206
 Basic.Settings.Advanced.Audio.DisableAudioDucking="Huwag paganahin ang Windows audio ducking"
207
 Basic.Settings.Advanced.StreamDelay="Ang Antala ng Stream"
208
@@ -741,9 +759,18 @@
209
 Basic.Settings.Advanced.StreamDelay.MemoryUsage="Ang na estimang nagamit na memorya: %1 MB"
210
 Basic.Settings.Advanced.Network="Network"
211
 Basic.Settings.Advanced.Network.BindToIP="Ibigkis sa IP"
212
+Basic.Settings.Advanced.Hotkeys.HotkeyFocusBehavior="Ugali ng Pokus ng Hotkey"
213
+Basic.Settings.Advanced.Hotkeys.NeverDisableHotkeys="Huwag i-pagana ang hotkeys"
214
+Basic.Settings.Advanced.Hotkeys.DisableHotkeysInFocus="Di-pinagana ang hotkeys kung ang main window ay nasa fokus"
215
+Basic.Settings.Advanced.Hotkeys.DisableHotkeysOutOfFocus="Di-pinagana ang hotkeys kung ang main window ay hindi nasa fokus"
216
+Basic.Settings.Advanced.AutoRemux="Awtomatikang remux sa mp4"
217
+Basic.Settings.Advanced.AutoRemux.MP4="(i-rekord bilang mkv)"
218
 
219
 Basic.AdvAudio="Ang aria-arian ng Advanced Audio"
220
+Basic.AdvAudio.ActiveOnly="Lamang Actibong Sources"
221
 Basic.AdvAudio.Name="Pangalan"
222
+Basic.AdvAudio.Volume="Tunog"
223
+Basic.AdvAudio.Mono="Mono"
224
 Basic.AdvAudio.Balance="Balanse"
225
 Basic.AdvAudio.Monitoring="Ang subaybay ng Audio"
226
 Basic.AdvAudio.Monitoring.None="I-Off ang Monitor"
227
@@ -753,6 +780,7 @@
228
 
229
 Basic.Settings.Hotkeys="Ang mga Hotkeys"
230
 Basic.Settings.Hotkeys.Pair="Ang nabahaging kombinasyon ng susi na may '%1' akto sa toggles"
231
+Basic.Settings.Hotkeys.Filter="Salain"
232
 
233
 Basic.Hotkeys.SelectScene="Lumipat sa eksena"
234
 
235
@@ -796,6 +824,7 @@
236
 Hotkeys.AppleKeypadDecimal=". (Keypad)"
237
 Hotkeys.AppleKeypadEqual="= (Keypad)"
238
 Hotkeys.MouseButton="Mouse %1"
239
+Hotkeys.Escape="Esc"
240
 
241
 Mute="I-Mute"
242
 Unmute="I-Unmute"
243
@@ -806,16 +835,29 @@
244
 SceneItemHide="Itago ang '%1'"
245
 
246
 OutputWarnings.NoTracksSelected="Dapat pumili ka ng kahit isang track"
247
+OutputWarnings.MP4Recording="Babala: Ang mga rekord na naka-save sa MP4/MOV ay hindi na mababawi kung ang file ay hindi natapos (hal. dulot ng BSODs, pagkawala ng kuryente, atbp.). Kung nais mong magrekord ng maraming audio tracks, isaalang-alang ang paggamit ng MKV at i-remux ang recording sa MP4/MOV pagkatapos nitong matapos (File → Remux Recordings)"
248
+OutputWarnings.CannotPause="Babala: Ang pagrerekord ay hindi mapapahintong sandali kung ang encoder sa pagrerekord ay nakatakda sa \"(Gamitin ang encoder para sa stream)\""
249
 
250
 FinalScene.Title="Tanggal-Eksena"
251
 FinalScene.Text="Kailangang mayroong kahit isang eksena."
252
 
253
+NoSources.Title="Walang Sources"
254
+NoSources.Label="Walang kang mga sources. \nPindutin mo ang + button sa baba,\no kanang-pindutan mo dito upang magdagdag ng isa."
255
 
256
+ChangeBG="I-takda ang Kulay"
257
+CustomColor="Pasadyang Kulay"
258
 
259
 
260
 About="Tungkol dito"
261
+About.Info="Ang OBS Studio ay isang libre at open source na software para sa parerercord ng bidyo at pag-iistream nang live."
262
+About.Donate="Tumulong"
263
+About.GetInvolved="Makisali"
264
+About.Authors="Mga Nag-gawa"
265
 About.License="Lisensya"
266
+About.Contribute="I-suporta ang OBS Project"
267
 
268
+AddUrl.Title="Magdagdag ng Source gamit ang URL"
269
+AddUrl.Text="Hinila mo ang isang URL papunta sa OBS. Kusang madaragdag ang link bilang isang source. Tuloy?"
270
 AddUrl.Text.Url="URL: %1"
271
 
272
 ResizeOutputSizeOfSource.Continue="Gusto mo bang magpatuloy?"
273
@@ -824,11 +866,22 @@
274
 Importer="Pang-angkat ng Koleksyon ng Eksena"
275
 Importer.SelectCollection="Pumili ng Koleksyon ng Eksena"
276
 Importer.Collection="Koleksyon ng Eksena"
277
+Importer.HelpText="Magdagdag ng mga file sa window na ito upang mag-angkat ng mga koleksyon mula sa OBS o sa ibang mga suportadong program."
278
 Importer.AutomaticCollectionPrompt="Awtomatikong Maghanap ng mga Koleksyon ng Eksena"
279
 Importer.AutomaticCollectionText="Kaya ng OBS na kusang maghanap ng maaangkas na koleksyon ng eksena mula sa mga suportadong third-party program. Nais mo bang kusang maghanap ng mga koleksyon ang OBS para sa iyo?\n\nMaaari mo itong palitan mamaya sa Settings > General > Importers."
280
 
281
 
282
 Restart="I-restart"
283
 
284
-
285
+ContextBar.NoSelectedSource="Walang piniling source"
286
+ContextBar.ResetTransform="I-reset ang Pag-transform"
287
+ContextBar.FitToCanvas="Ayusin sa Canvas"
288
+
289
+ContextBar.MediaControls.PlayMedia="Maglaro ng Media"
290
+ContextBar.MediaControls.PauseMedia="I-pause ang Media"
291
+ContextBar.MediaControls.StopMedia="I-tigil ang Media"
292
+ContextBar.MediaControls.RestartMedia="Ulitin ang Media"
293
+ContextBar.MediaControls.PlaylistNext="Kasunod sa Playlist"
294
+ContextBar.MediaControls.PlaylistPrevious="Nakaraan sa Playlist"
295
+ContextBar.MediaControls.MediaProperties="Mga Katangian ng Media"
296
 
297
obs-studio-26.0.2.tar.xz/UI/data/locale/fr-FR.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/fr-FR.ini Changed
121
 
1
@@ -161,6 +161,7 @@
2
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Déconnecter le compte ?"
3
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Cette modification s'appliquera immédiatement. Êtes-vous sûr de vouloir déconnecter votre compte ?"
4
 Basic.AutoConfig.StreamPage.GetStreamKey="Récupérer la clé de stream"
5
+Basic.AutoConfig.StreamPage.MoreInfo="Plus d'info"
6
 Basic.AutoConfig.StreamPage.UseStreamKey="Utiliser la clé de stream"
7
 Basic.AutoConfig.StreamPage.Service="Service"
8
 Basic.AutoConfig.StreamPage.Service.ShowAll="Afficher tout..."
9
@@ -365,8 +366,8 @@
10
 Deinterlacing.TopFieldFirst="Champ du haut prioritaire"
11
 Deinterlacing.BottomFieldFirst="Champ du bas prioritaire"
12
 
13
-VolControl.SliderUnmuted="Curseur de volume pour '%1': %2"
14
-VolControl.SliderMuted="Curseur de volume pour '%1' : %2 (actuellement muet)"
15
+VolControl.SliderUnmuted="Curseur de volume pour \"%1\":"
16
+VolControl.SliderMuted="Curseur de volume pour \"%1\": (actuellement muet)"
17
 VolControl.Mute="Muet '%1'"
18
 VolControl.Properties="Propriétés pour '%1'"
19
 
20
@@ -382,6 +383,7 @@
21
 
22
 AddProfile.Title="Ajouter un profil"
23
 AddProfile.Text="Veuillez entrer le nom du profil"
24
+AddProfile.WizardCheckbox="Afficher l'assistant de configuration automatique"
25
 
26
 RenameProfile.Title="Renommer le profil"
27
 
28
@@ -396,6 +398,11 @@
29
 Basic.SourceSelect.AddExisting="Ajouter une source existante"
30
 Basic.SourceSelect.AddVisible="Rendre la source visible"
31
 
32
+Basic.Main.Sources.Visibility="Visibilité"
33
+Basic.Main.Sources.VisibilityDescription="Contrôle la visibilité de \"%1\" sur la toile"
34
+Basic.Main.Sources.Lock="Verrouiller"
35
+Basic.Main.Sources.LockDescription="Verrouille la position et la taille de \"%1\" sur la toile"
36
+
37
 Basic.PropertiesWindow="Propriétés pour '%1'"
38
 Basic.PropertiesWindow.AutoSelectFormat="%1 (sélection automatique : %2)"
39
 Basic.PropertiesWindow.SelectColor="Sélectionner une couleur"
40
@@ -635,13 +642,19 @@
41
 Basic.Settings.Stream.MissingUrlAndApiKey="L'URL et la clé de diffusion sont manquantes.\n\nOuvrez les paramètres et entrez l'URL et la clé de diffusion dans l'onglet Stream."
42
 Basic.Settings.Stream.MissingUrl="L'URL de diffusion est manquante.\n\nOuvrez les paramètres et entrez l'URL de diffusion dans l'onglet Stream."
43
 Basic.Settings.Stream.MissingStreamKey="La clé de diffusion est manquante.\n\nOuvrez les paramètres et entrez la clé de diffusion dans l'onglet Stream."
44
+Basic.Settings.Stream.IgnoreRecommended="Ignorer les paramètres recommandés du service de streaming"
45
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Remplacer les paramètres recommandés"
46
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Attention : ignorer les limitations du service de diffusion peut entraîner une dégradation de la qualité du flux voir vous empêcher de diffuser.\n\nContinuer ?"
47
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Débit vidéo maximal : %1 kbps"
48
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Débit audio maximal : %1 kbps"
49
+Basic.Settings.Stream.Recommended.MaxResolution="Résolution maximale: %1"
50
+Basic.Settings.Stream.Recommended.MaxFPS="IPS Maximum: %1"
51
 
52
 Basic.Settings.Output="Sortie"
53
 Basic.Settings.Output.Format="Format d'enregistrement"
54
 Basic.Settings.Output.Encoder="Encodeur"
55
 Basic.Settings.Output.SelectDirectory="Sélectionnez le répertoire d'enregistrement"
56
 Basic.Settings.Output.SelectFile="Sélectionnez le fichier cible"
57
-Basic.Settings.Output.EnforceBitrate="Imposer les limites de débit du service de streaming"
58
 Basic.Settings.Output.DynamicBitrate="Ajuster dynamiquement le débit de streaming en cas de congestion réseau"
59
 Basic.Settings.Output.DynamicBitrate.Beta="Ajuster dynamiquement le débit de streaming en cas de congestion réseau (Beta)"
60
 Basic.Settings.Output.DynamicBitrate.TT="Ajuste automatiquement le débit de streaming pour éviter les pertes d'images en cas de congestion ou de surcharge réseau.\n\nCela peut augmenter le délai entre vous et vos spectateurs si la congestion est significative.\nQuand le débit est réduit automatiquement, plusieurs minutes peuvent s'écouler avant qu'il ne revienne à la normale.\n\nN'est supporté que pour RTMP pour l'instant."
61
@@ -662,8 +675,8 @@
62
 Basic.Settings.Output.Simple.RecordingQuality.Small="Haute qualité, taille de fichier moyenne"
63
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Qualité indistinguable, grande taille de fichier "
64
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Qualité sans perte, énorme taille de fichier"
65
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Attention: le débit vidéo de streaming va être fixé à %1, qui est la limite maximale pour le service de streaming actuel. Si vous êtes surs de vouloir aller au delà de %1, activez les options avancées de l'encodeur & décochez \"Imposer les limites de débit du service de streaming\"."
66
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Attention: le débit audio de streaming va être fixé à %1, qui est la limite maximale pour le service de streaming actuel. Si vous êtes surs de vouloir aller au delà de %1, activez les options avancées de l'encodeur & décochez \"Imposer les limites de débit du service de streaming\"."
67
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Attention : le débit vidéo de la diffusion sera réglé à %1, ce qui est la valeur maximale pour le service de diffusion actuel."
68
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Attention : le débit audio de la diffusion sera réglé à %1, ce qui est la valeur maximale pour le service de diffusion actuel."
69
 Basic.Settings.Output.Simple.Warn.CannotPause="Attention : l'enregistrement ne peut pas être mis en pause si la qualité d'enregistrement est configurée sur \"Identique au stream\"."
70
 Basic.Settings.Output.Simple.Warn.Encoder="Attention : enregistrer via un encodeur logiciel avec une qualité autre que celle du stream sollicitera encore plus le CPU si vous streamez et enregistrez simultanément."
71
 Basic.Settings.Output.Simple.Warn.Lossless="Attention: la qualité sans perte génère des fichiers de taille énorme ! Elle peut utiliser jusqu'à 7 gigaoctets d'espace disque par minute pour de hautes résolutions et fréquences d'image. Cette qualité n'est pas recommandée pour de longs enregistrements à moins d'avoir énormément d'espace disque disponible."
72
@@ -674,6 +687,11 @@
73
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Matériel (AMD)"
74
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Matériel (NVENC)"
75
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Logiciel (pré-réglage x264 \"faible utilisation du CPU\", augmente la taille du fichier)"
76
+Basic.Settings.Output.Simple.TwitchVodTrack="Piste de VOD Twitch (utilise la piste 2)"
77
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Résolution/Framerate incompatible"
78
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Ce service de streaming ne prend pas en charge la résolution de sortie et/ou le framerate actuel. Ils seront modifiés à la valeur compatible la plus proche : \n\n%1\n\n Voulez vous continuer ?"
79
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Résolution: %1"
80
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS: %1"
81
 Basic.Settings.Output.VideoBitrate="Débit vidéo"
82
 Basic.Settings.Output.AudioBitrate="Débit audio"
83
 Basic.Settings.Output.Reconnect="Reconnexion automatique"
84
@@ -688,15 +706,16 @@
85
 Basic.Settings.Output.Adv.Rescale="Mise à l'échelle pour la Sortie"
86
 Basic.Settings.Output.Adv.AudioTrack="Piste audio"
87
 Basic.Settings.Output.Adv.Streaming="Streaming"
88
-Basic.Settings.Output.Adv.ApplyServiceSettings="Imposer les paramètres d'encodage du service de streaming"
89
 Basic.Settings.Output.Adv.Audio.Track1="Piste 1"
90
 Basic.Settings.Output.Adv.Audio.Track2="Piste 2"
91
 Basic.Settings.Output.Adv.Audio.Track3="Piste 3"
92
 Basic.Settings.Output.Adv.Audio.Track4="Piste 4"
93
 Basic.Settings.Output.Adv.Audio.Track5="Piste 5"
94
 Basic.Settings.Output.Adv.Audio.Track6="Piste 6"
95
+Basic.Settings.Output.Adv.TwitchVodTrack="Piste VOD Twitch"
96
 
97
 Basic.Settings.Output.Adv.Recording="Enregistrement"
98
+Basic.Settings.Output.Adv.Recording.RecType="Type d'enregistrement"
99
 Basic.Settings.Output.Adv.Recording.Type="Type "
100
 Basic.Settings.Output.Adv.Recording.Type.Standard="Standard"
101
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Sortie Personnalisée (FFmpeg)"
102
@@ -824,13 +843,18 @@
103
 Basic.AdvAudio.ActiveOnly="Sources actives uniquement"
104
 Basic.AdvAudio.Name="Nom"
105
 Basic.AdvAudio.Volume="Volume"
106
+Basic.AdvAudio.VolumeSource="Volume pour \"%1\""
107
 Basic.AdvAudio.Mono="Mono"
108
+Basic.AdvAudio.MonoSource="Conversion en mono pour \"%1\""
109
 Basic.AdvAudio.Balance="Balance"
110
+Basic.AdvAudio.BalanceSource="Balance audio pour \"%1\""
111
 Basic.AdvAudio.SyncOffset="Décalage de synchronisation"
112
+Basic.AdvAudio.SyncOffsetSource="Décalage de synchronisation pour \"%1\""
113
 Basic.AdvAudio.Monitoring="Monitoring Audio"
114
 Basic.AdvAudio.Monitoring.None="Monitoring Désactivé"
115
 Basic.AdvAudio.Monitoring.MonitorOnly="Monitoring uniquement (couper la sortie)"
116
 Basic.AdvAudio.Monitoring.Both="Monitoring et Sortie"
117
+Basic.AdvAudio.MonitoringSource="Monitoring audio pour \"%1\""
118
 Basic.AdvAudio.AudioTracks="Pistes"
119
 
120
 Basic.Settings.Hotkeys="Raccourcis clavier"
121
obs-studio-26.0.2.tar.xz/UI/data/locale/gd-GB.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/gd-GB.ini Changed
43
 
1
@@ -341,8 +341,6 @@
2
 Deinterlacing.TopFieldFirst="An raon air a’ bharr an toiseach"
3
 Deinterlacing.BottomFieldFirst="An raon aig a’ bhonn an toiseach"
4
 
5
-VolControl.SliderUnmuted="Sleamhnachan àirde airson “%1”: %2"
6
-VolControl.SliderMuted="Sleamhnachan àirde airson “%1”: %2 (mùchte an-dràsta)"
7
 VolControl.Mute="Mùch “%1”"
8
 VolControl.Properties="Roghainnean airson “%1”"
9
 
10
@@ -372,6 +370,7 @@
11
 Basic.SourceSelect.AddExisting="Cuir ris tùs a tha ann"
12
 Basic.SourceSelect.AddVisible="Seall an tùs"
13
 
14
+
15
 Basic.PropertiesWindow="Roghainnean airson “%1”"
16
 Basic.PropertiesWindow.AutoSelectFormat="%1 (taghadh fèin-obrachail: %2)"
17
 Basic.PropertiesWindow.SelectColor="Tagh dath"
18
@@ -597,7 +596,6 @@
19
 Basic.Settings.Output.Encoder="Inneal-còdachaidh"
20
 Basic.Settings.Output.SelectDirectory="Tagh pasgan a’ chlàraidh"
21
 Basic.Settings.Output.SelectFile="Tagh faidhle clàraidh"
22
-Basic.Settings.Output.EnforceBitrate="Èignich cuingeachaidhean reat bhiotaichean aig an t-seirbheis sruthaidh"
23
 Basic.Settings.Output.DynamicBitrate="Atharraich an reat bhiotaichean gu h-innsgineach a sheachnadh dùmhlachd"
24
 Basic.Settings.Output.DynamicBitrate.Beta="Atharraich an reat bhiotaichean gu h-innsgineach a sheachnadh dùmhlachd (Beta)"
25
 Basic.Settings.Output.DynamicBitrate.TT="Atharraichidh seo an reat bhiotaichean seach tuiteam fhrèamaichean nuair a bhios dùmhlachd ann.\n\nThoir an aire gum bi barrachd dàil air dhan amharc ma dh’fhaoidte ma thachras dùmhlachd gu h-obann.\nNuair a thuiteas an reat bhiotaichean, dh’fhaoidte gun toir e mionaid no dhà mus dèid a shlànachadh.\n\nCha chuir sinn taic ach ri RTMP aig an àm seo."
26
@@ -618,8 +616,6 @@
27
 Basic.Settings.Output.Simple.RecordingQuality.Small="Càileachd àrd, faidhle meadhanach mòr"
28
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Cha ghabh diofar aithneachadh, faidhle mòr"
29
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Càileachd gun chall, faidhle uabhasach mòr"
30
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Rabhadh: Thèid reat bhiotaichean video an t-sruthaidh a shuidheachadh air %1, seo a’ chrìoch as àirde aig an t-seirbheis sruthaidh làithreach. Ma tha thu cinnteach bu bheil thu airson corr is %1 a chleachdadh, cuir an comas roghainnean adhartach an inneil-chòdachaidh agus thoir a’ chromag far “Èignich cuingeachaidhean reat bhiotaichean aig an t-seirbheis sruthaidh”."
31
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Rabhadh: Thèid reat bhiotaichean fuaime an t-sruthaidh a shuidheachadh air %1, seo a’ chrìoch as àirde aig an t-seirbheis sruthaidh làithreach. Ma tha thu cinnteach bu bheil thu airson corr is %1 a chleachdadh, cuir an comas roghainnean adhartach an inneil-chòdachaidh agus thoir a’ chromag far “Èignich cuingeachaidhean reat bhiotaichean aig an t-seirbheis sruthaidh”."
32
 Basic.Settings.Output.Simple.Warn.CannotPause="Rabhadh: Cha ghabh clàradh a chur ’na stad nuair a bhios càileachd “Co-ionnann ri tè an t-sruthaidh” air a’ chlàradh."
33
 Basic.Settings.Output.Simple.Warn.Encoder="Rabhadh: Ma nì thu clàradh le inneal-còdachaidh bathair-bhog air nach eil an aon chàileachd ’s a th’ air an t-sruthadh, bi feum air barrachd cleachdadh a’ CPU nuair a bhios tu a’ sruthadh ’s a’ clàradh aig an aon àm."
34
 Basic.Settings.Output.Simple.Warn.Lossless="Rabhadh: Cruthaichidh càileachd gun chall faidhlichean uabhasach mòr! Faodaidh càileachd gun chall corr is 7 giga-baidht a dh’àite a chleachdadh air an diosg gach mionaid ma tha an dùmhlachd-bhreacaidh agus an reat fhrèamaichean àrd. Cha mholamaid càileachd gun chall airson clàraidhean fada ach ma tha torr àite agad air an diosg."
35
@@ -644,7 +640,6 @@
36
 Basic.Settings.Output.Adv.Rescale="Ath-sgèilich an t-às-chur"
37
 Basic.Settings.Output.Adv.AudioTrack="Traca fuaime"
38
 Basic.Settings.Output.Adv.Streaming="Sruthadh"
39
-Basic.Settings.Output.Adv.ApplyServiceSettings="Èignich na roghainnean inneil-chòdachaidh aig an t-seirbheis sruthaidh"
40
 Basic.Settings.Output.Adv.Audio.Track1="Traca 1"
41
 Basic.Settings.Output.Adv.Audio.Track2="Traca 2"
42
 Basic.Settings.Output.Adv.Audio.Track3="Traca 3"
43
obs-studio-26.0.2.tar.xz/UI/data/locale/gl-ES.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/gl-ES.ini Changed
139
 
1
@@ -161,6 +161,7 @@
2
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Desconectar a conta?"
3
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Este cambio aplicarase de inmediato. Está seguro de que quere desconectar a súa conta?"
4
 Basic.AutoConfig.StreamPage.GetStreamKey="Obter a clave da emisión"
5
+Basic.AutoConfig.StreamPage.MoreInfo="Máis Información"
6
 Basic.AutoConfig.StreamPage.UseStreamKey="Usar a clave da emisión"
7
 Basic.AutoConfig.StreamPage.Service="Servizo"
8
 Basic.AutoConfig.StreamPage.Service.ShowAll="Amosar todo..."
9
@@ -365,8 +366,8 @@
10
 Deinterlacing.TopFieldFirst="Primeiro o campo superior"
11
 Deinterlacing.BottomFieldFirst="Primeiro o campo inferior"
12
 
13
-VolControl.SliderUnmuted="Potenciómetro de volume para «%1»: %2"
14
-VolControl.SliderMuted="Potenciómetro de volume para «%1»: %2 (actualmente silenciado)"
15
+VolControl.SliderUnmuted="Potenciómetro de volume para «%1»:"
16
+VolControl.SliderMuted="Potenciómetro de volume para «%1»: (actualmente silenciado)"
17
 VolControl.Mute="Silenciar «%1»"
18
 VolControl.Properties="Propiedades para «%1»"
19
 
20
@@ -382,6 +383,7 @@
21
 
22
 AddProfile.Title="Engadir perfil"
23
 AddProfile.Text="Insira o nome do perfil"
24
+AddProfile.WizardCheckbox="Amosar o asistente de configuración automática"
25
 
26
 RenameProfile.Title="Renomear o perfil"
27
 
28
@@ -396,6 +398,11 @@
29
 Basic.SourceSelect.AddExisting="Engadir existente"
30
 Basic.SourceSelect.AddVisible="Facer visíbel a fonte"
31
 
32
+Basic.Main.Sources.Visibility="Visibilidade"
33
+Basic.Main.Sources.VisibilityDescription="Controla a visibilidade de «%1» no lenzo"
34
+Basic.Main.Sources.Lock="Bloquear"
35
+Basic.Main.Sources.LockDescription="Bloquea a posición e escala de «%1» no lenzo"
36
+
37
 Basic.PropertiesWindow="Propiedades para «%1»"
38
 Basic.PropertiesWindow.AutoSelectFormat="%1 (seleccionar automaticamente: %2)"
39
 Basic.PropertiesWindow.SelectColor="Seleccionar cor"
40
@@ -635,13 +642,19 @@
41
 Basic.Settings.Stream.MissingUrlAndApiKey="Non se atopa o URL e a clave da emisión.\n\nAbra os axustes para introducir o URL e a clave da emisión na lapela «Emisión»."
42
 Basic.Settings.Stream.MissingUrl="Non se atopa o URL.\n\nAbra os axustes para introducir o URL na lapela «Emisión»."
43
 Basic.Settings.Stream.MissingStreamKey="Non se atopa a clave da emisión.\n\nAbra os axustes para introducir a clave da emisión na lapela «Emisión»."
44
+Basic.Settings.Stream.IgnoreRecommended="Ignorar as recomendacións de axuste do servizo de transmisión"
45
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Anular os axustes recomendados"
46
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Advertencia: ignorar as limitacións do servizo pode provocar unha degradación da calidade do fluxo ou impedir a transmisión.\n\nQuere continuar?"
47
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Taxa máxima de bits de vídeo: %1 kbps"
48
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Taxa máxima de bits de son: %1 kbps"
49
+Basic.Settings.Stream.Recommended.MaxResolution="Resolución máxima: %1"
50
+Basic.Settings.Stream.Recommended.MaxFPS="Taxa máxima de cadros por segundo: %1"
51
 
52
 Basic.Settings.Output="Saída"
53
 Basic.Settings.Output.Format="Formato de gravación"
54
 Basic.Settings.Output.Encoder="Codificador"
55
 Basic.Settings.Output.SelectDirectory="Seleccionar o directorio de gravación"
56
 Basic.Settings.Output.SelectFile="Seleccionar o ficheiro de gravación"
57
-Basic.Settings.Output.EnforceBitrate="Aplicar os límites de taxa de bits do servizo de emisión"
58
 Basic.Settings.Output.DynamicBitrate="Cambiar dinamicamente a taxa de bits para xestionar a conxestión"
59
 Basic.Settings.Output.DynamicBitrate.Beta="Cambiar dinamicamente a taxa de bits para xestionar a conxestión (beta)"
60
 Basic.Settings.Output.DynamicBitrate.TT="No canto de deixar perder cadros para reducir a conxestión, cambia dinamicamente a taxa de bits.\n\nTeña en conta que isto pode aumentar o atraso para os espectadores se hai unha conxestión súbita importante.\n\n Cando a taxa de bits cae, pode tardar uns minutos en restaurarse.\n\nActualmente só é compatible con RTMP."
61
@@ -662,8 +675,8 @@
62
 Basic.Settings.Output.Simple.RecordingQuality.Small="Alta calidade, tamaño medio do ficheiro"
63
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Calidade indistinguíbel, tamaño de ficheiro grande"
64
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Calidade sen perda, tamaño inmenso de ficheiro"
65
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Aviso: A taxa de bits do vídeo en emisión estabelecerase en %1, que é o límite superior para o servizo de emisión actual. Se está seguro de que quere superar %1, active as opcións avanzadas do codificador e desmarque «Aplicar os límites de taxa de bits do servizo de emisión»."
66
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Aviso: A taxa de bits do son en emisión estabelecerase en %1, que é o límite superior para o servizo deemisión actual. Se está seguro de que quere superar %1, active as opcións avanzadas do codificador e desmarque «Aplicar os límites de taxa de bits do servizo de emisión»."
67
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Advertencia: a taxa de bits de vídeo en transmisión estabelecerase en %1, que é o límite superior para o servizo de transmisión actual."
68
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Advertencia: a taxa de bits de son en transmisión estabelecerase en %1, que é o límite superior para o servizo de transmisión actual."
69
 Basic.Settings.Output.Simple.Warn.CannotPause="Aviso: Non é posíbel deter as gravacións se a calidade da gravación está estabelecida como «A mesma da emisión»."
70
 Basic.Settings.Output.Simple.Warn.Encoder="Aviso: a gravación cun codificador de software cunha calidade diferente á da emisión requirirá un uso de CPU adicional se se emite e grava ao mesmo tempo."
71
 Basic.Settings.Output.Simple.Warn.Lossless="Aviso: A calidade sen perda xera tamaños de ficheiro inmensamente grandes. A calidade sen perdas pode empregar á alza de 7 xigabytes de espazo de disco por minuto a altas resolucións e taxa de cadros. Non se recomenda «sen perdas» para gravacións longas a menos que dispoña dunha cantidade moi grande de espazo no disco."
72
@@ -674,6 +687,11 @@
73
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardware (AMD)"
74
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardware (NVENC)"
75
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Software (x264 preaxustado o uso de CPU baixo, aumenta o tamaño do ficheiro)"
76
+Basic.Settings.Output.Simple.TwitchVodTrack="Pista VOD de Twitch (utiliza a pista 2)"
77
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Resolución ou taxa de cadros por segundo incompatíbel"
78
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Este servizo de transmisión non admite a súa resolución de saída e/ou taxa de cadros por segundo actual. Cambiaranse aos valores compatíbeis máis próximos\n\n%1\n\nQuere continuar?"
79
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Resolución: %1"
80
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="Cadros por segundo: %1"
81
 Basic.Settings.Output.VideoBitrate="Taxa de bits de vídeo"
82
 Basic.Settings.Output.AudioBitrate="Taxa de bits de son"
83
 Basic.Settings.Output.Reconnect="Volver conectar automaticamente"
84
@@ -688,15 +706,16 @@
85
 Basic.Settings.Output.Adv.Rescale="Cambiar a escala da saída"
86
 Basic.Settings.Output.Adv.AudioTrack="Pista de son"
87
 Basic.Settings.Output.Adv.Streaming="Emisión"
88
-Basic.Settings.Output.Adv.ApplyServiceSettings="Aplicar os axustes de codificador do servizo de emisión"
89
 Basic.Settings.Output.Adv.Audio.Track1="Pista 1"
90
 Basic.Settings.Output.Adv.Audio.Track2="Pista 2"
91
 Basic.Settings.Output.Adv.Audio.Track3="Pista 3"
92
 Basic.Settings.Output.Adv.Audio.Track4="Pista 4"
93
 Basic.Settings.Output.Adv.Audio.Track5="Pista 5"
94
 Basic.Settings.Output.Adv.Audio.Track6="Pista 6"
95
+Basic.Settings.Output.Adv.TwitchVodTrack="Pista VOD do Twitch"
96
 
97
 Basic.Settings.Output.Adv.Recording="Gravando"
98
+Basic.Settings.Output.Adv.Recording.RecType="Tipo de gravación"
99
 Basic.Settings.Output.Adv.Recording.Type="Tipo"
100
 Basic.Settings.Output.Adv.Recording.Type.Standard="Estándar"
101
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Saída personalizada (FFmpeg)"
102
@@ -749,7 +768,7 @@
103
 Basic.Settings.Video.Numerator="Numerador"
104
 Basic.Settings.Video.Denominator="Denominador"
105
 Basic.Settings.Video.Renderer="Xerador"
106
-Basic.Settings.Video.InvalidResolution="Valor da resolución non válido. Debe ser [width] x [height] (por exemplo, 1920 x 1080)"
107
+Basic.Settings.Video.InvalidResolution="Valor da resolución non válido. Debe ser [width] x [height] (p. ex.: 1920 x 1080)"
108
 Basic.Settings.Video.CurrentlyActive="A saída de vídeo está activa neste momento. Apaga calquera saída para cambiar a configuración de vídeo."
109
 Basic.Settings.Video.DisableAero="Desactivar Aero"
110
 
111
@@ -824,13 +843,18 @@
112
 Basic.AdvAudio.ActiveOnly="Só fontes activas"
113
 Basic.AdvAudio.Name="Nome"
114
 Basic.AdvAudio.Volume="Volume"
115
+Basic.AdvAudio.VolumeSource="Volume para «%1»"
116
 Basic.AdvAudio.Mono="Mono"
117
+Basic.AdvAudio.MonoSource="Mestura monoaural para «%1»"
118
 Basic.AdvAudio.Balance="Balance"
119
+Basic.AdvAudio.BalanceSource="Balance para «%1»"
120
 Basic.AdvAudio.SyncOffset="Desprazamento da sincronización"
121
+Basic.AdvAudio.SyncOffsetSource="Desprazamento do sincronismo para «%1»"
122
 Basic.AdvAudio.Monitoring="Monitorización do son"
123
 Basic.AdvAudio.Monitoring.None="Monitor apagado"
124
 Basic.AdvAudio.Monitoring.MonitorOnly="Só o monitor (silenciar a saída)"
125
 Basic.AdvAudio.Monitoring.Both="Monitor e saída"
126
+Basic.AdvAudio.MonitoringSource="Monitorización de son para «%1»"
127
 Basic.AdvAudio.AudioTracks="Pistas"
128
 
129
 Basic.Settings.Hotkeys="Teclas rápidas"
130
@@ -890,7 +914,7 @@
131
 SceneItemHide="Agochar «%1»"
132
 
133
 OutputWarnings.NoTracksSelected="Debe seleccionar, cando menos, unha pista"
134
-OutputWarnings.MP4Recording="Aviso: as gravacións gardadas en MP4/MOV non serán recuperábeis se non se pode rematar o ficheiro (por exemplo, como resultado de BSOD, perdas de enerxía, etc.). Se quere gravar varias pistas de son, considere empregar MKV e converter a gravación a MP4/MOV unha vez rematada (Ficheiro → Gravacións de conversións)"
135
+OutputWarnings.MP4Recording="Advertencia: as gravacións gardadas en MP4/MOV non serán recuperábeis se non se pode rematar o ficheiro (por exemplo, como resultado de BSOD, perdas de enerxía, etc.). Se quere gravar varias pistas de son, considere empregar MKV e converter a gravación a MP4/MOV unha vez rematada (Ficheiro → Gravacións de conversións)"
136
 OutputWarnings.CannotPause="Aviso: Non é posíbel deter as gravacións se está estabelecido o codificador da gravación «(Utilizar o codificador da emisión)»"
137
 
138
 FinalScene.Title="Eliminar escena"
139
obs-studio-26.0.2.tar.xz/UI/data/locale/he-IL.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/he-IL.ini Changed
167
 
1
@@ -93,12 +93,14 @@
2
 LogViewer="מציג היומן"
3
 ShowOnStartup="הצג בעת הפעלה"
4
 OpenFile="פתיחת קובץ"
5
+AddValue="הוספת %1"
6
 
7
 AlreadyRunning.Title="OBS פועל כבר"
8
 AlreadyRunning.Text="OBS פועל כבר! אלא אם התכוונת לעשות את זה, אנא סגור כל מופע קיים לפני נסיון להפעיל מופע חדש. אנא בדוק אם קיים מופע הגדר ממוזער במגש המערכת."
9
 AlreadyRunning.LaunchAnyway="הפעל בכל מקרה"
10
 
11
 ChromeOS.Title="פלטפורמה לא נתמכת"
12
+ChromeOS.Text="נראה שOBS הופעל בתוך מכל של ChromeOS. פלטפורמה זו אינה נתמכת"
13
 
14
 DockCloseWarning.Title="סגירת חלון ניתן להצמדה"
15
 DockCloseWarning.Text="סגרת עכשיו חלון הניתן להצמדה. אם ברצונך להציג אותו שוב, השתמש בתפריט תצוגה -> הצמדות בשורת התפריט."
16
@@ -145,6 +147,7 @@
17
 Basic.AutoConfig.StartPage.PrioritizeRecording="מיטוב רק עבור הקלטה, לא תהיה הזרמה"
18
 Basic.AutoConfig.StartPage.PrioritizeVirtualCam="אני אשתמש רק במצלמה הווירטואלית"
19
 Basic.AutoConfig.VideoPage="הגדרות וידאו"
20
+Basic.AutoConfig.VideoPage.SubTitle="ציין בספציפיות את הגדרות הווידאו המבוקשות עבורך"
21
 Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="השתמש בנוכחי (%1x%2)"
22
 Basic.AutoConfig.VideoPage.BaseResolution.Display="תצוגה %1 (%2x%3)"
23
 Basic.AutoConfig.VideoPage.FPS.UseCurrent="השתמש בנוכחי (%1)"
24
@@ -158,6 +161,7 @@
25
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="לנתק את חשבון?"
26
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="שינוי זה יחול באופן מיידי. האם אתה בטוח שברצונך לנתק את החשבון שלך?"
27
 Basic.AutoConfig.StreamPage.GetStreamKey="קבלת מפתח הזרמת נתונים"
28
+Basic.AutoConfig.StreamPage.MoreInfo="מידע נוסף"
29
 Basic.AutoConfig.StreamPage.UseStreamKey="השתמש במפתח הזרמת נתונים"
30
 Basic.AutoConfig.StreamPage.Service="שירות"
31
 Basic.AutoConfig.StreamPage.Service.ShowAll="הצג הכל..."
32
@@ -186,6 +190,8 @@
33
 Basic.AutoConfig.TestPage.Result.RecordingEncoder="מקודד הקלטה"
34
 Basic.AutoConfig.TestPage.Result.Header="התוכנית קבעה כי אלה ההגדרות המיטביות עבורך:"
35
 Basic.AutoConfig.TestPage.Result.Footer="כדי להשתמש בהגדרות אלה, לחץ על החל הגדרות. כדי להגדיר מחדש את האשף ולנסות שוב, לחץ על אחורה. להגדיר ידנית את הגדרות, לחץ על ביטול ולאחר מכן פתח את הגדרות."
36
+Basic.AutoConfig.Info="אשף ההגדרה האוטומטית ימצא את ההגדרות הטובות ביותר בהתבסס על מפרט המחשב ומהירות האינטרנט שלך."
37
+Basic.AutoConfig.RunAnytime="זה יכול לרוץ בכל זמן על ידי כניסה לתפריט הכלים."
38
 
39
 Basic.Stats="סטטיסטיקות"
40
 Basic.Stats.CPUUsage="שימוש במעבד"
41
@@ -360,8 +366,6 @@
42
 Deinterlacing.TopFieldFirst="שדה עליון ראשון"
43
 Deinterlacing.BottomFieldFirst="שדה תחתון ראשון"
44
 
45
-VolControl.SliderUnmuted="מחוון העוצמה עבור '%1': %2"
46
-VolControl.SliderMuted="מחוון העוצמה עבור '%1': %2 (כרגע מושתק)"
47
 VolControl.Mute="השתק '%1'"
48
 VolControl.Properties="מאפיינים עבור '%1'"
49
 
50
@@ -377,6 +381,7 @@
51
 
52
 AddProfile.Title="הוסף פרופיל"
53
 AddProfile.Text="אנא הזן את שם הפרופיל"
54
+AddProfile.WizardCheckbox="הראה את אשף ההגדרה האוטומית"
55
 
56
 RenameProfile.Title="שנה שם פרופיל"
57
 
58
@@ -391,6 +396,7 @@
59
 Basic.SourceSelect.AddExisting="הוסף קיימים"
60
 Basic.SourceSelect.AddVisible="הפוך מקור לגלוי"
61
 
62
+
63
 Basic.PropertiesWindow="מאפיינים עבור \"%1\""
64
 Basic.PropertiesWindow.AutoSelectFormat="%1 (בחירה אוטומטית: %2)"
65
 Basic.PropertiesWindow.SelectColor="בחר צבע"
66
@@ -477,6 +483,8 @@
67
 Basic.Main.StopStreaming="עצור זרם נתונים"
68
 Basic.Main.StoppingStreaming="עוצר זרם נתונים..."
69
 Basic.Main.ForceStopStreaming="עצור זרם נתונים (בטל השהייה)"
70
+Basic.Main.ShowContextBar="הראה את לוח הכלים של המקורות"
71
+Basic.Main.HideContextBar="החבא את לוח הכלים של המקורות"
72
 Basic.Main.StopVirtualCam="עצור מצלמה וירטואלית"
73
 Basic.Main.Group="קבוצה %1"
74
 Basic.Main.GroupItems="קבץ פריטים נבחרים"
75
@@ -533,6 +541,8 @@
76
 Basic.MainMenu.View.Docks.ResetUI="איפוס UI"
77
 Basic.MainMenu.View.Docks.LockUI="נעילת UI"
78
 Basic.MainMenu.View.Docks.CustomBrowserDocks="חלונות הצמדה מותאמים אישית של דפדפן..."
79
+Basic.MainMenu.View.ListboxToolbars="כפתורי רישמת המקורות\סצנות"
80
+Basic.MainMenu.View.ContextBar="לוח הכלים של המקורות"
81
 Basic.MainMenu.View.SceneTransitions="מעברי סצינות (&C)"
82
 Basic.MainMenu.View.SourceIcons="אייקוני מקור"
83
 Basic.MainMenu.View.StatusBar="שורת מצב (&S)"
84
@@ -626,13 +636,19 @@
85
 Basic.Settings.Stream.MissingUrlAndApiKey="שרת ומפתח הזרמת נתונים חסרים\n\nגש לתפריט ההגדרות בכדי להכניס שרת ומפתח הזרמת נתונים בלשונית 'זרם נתונים'."
86
 Basic.Settings.Stream.MissingUrl="מפתח הזרמת נתונים חסר\n\nגש לתפריט ההגדרות בכדי להכניס מפתח הזרמת נתונים בלשונית 'זרם נתונים'."
87
 Basic.Settings.Stream.MissingStreamKey="מפתח הזרמת נתונים חסר\n\nגש לתפריט ההגדרות בכדי להכניס מפתח הזרמה בלשונית 'הזרמת נתונים'."
88
+Basic.Settings.Stream.IgnoreRecommended="התעלם מהמלצות להגדרות של שירות ההזרמה"
89
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="עקיפת ההגדרות המומלצות"
90
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="אזהרה: התעלמות מגבולות השירות יכולה לגרום לאיכות הזרמה ירודה או אפילו למנוע הזרמה. להמשיך?"
91
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="קצב סיביות וידאו מקסימלי: %1 קילובייט לשנייה"
92
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="קצב סיביות אודיו מקסימלי: %1 קילובייט לשנייה"
93
+Basic.Settings.Stream.Recommended.MaxResolution="רזולוציה מקסימלית: %1"
94
+Basic.Settings.Stream.Recommended.MaxFPS="קצב פריימים לשנייה מקסימלי: %1"
95
 
96
 Basic.Settings.Output="פלט"
97
 Basic.Settings.Output.Format="פורמט הקלטה"
98
 Basic.Settings.Output.Encoder="מקודד"
99
 Basic.Settings.Output.SelectDirectory="בחר ספריית הקלטות"
100
 Basic.Settings.Output.SelectFile="בחר קובץ הקלטה"
101
-Basic.Settings.Output.EnforceBitrate="אכוף מגבלות קצב נתונים של שירות הזרמת הנתונים"
102
 Basic.Settings.Output.DynamicBitrate="התאם דינאמית את קצב הביטים בהתאם לעומס על הרשת"
103
 Basic.Settings.Output.DynamicBitrate.Beta="התאם דינאמית את קצב הביטים בהתאם לעומס על הרשת (בטא)"
104
 Basic.Settings.Output.DynamicBitrate.TT="במקום שפריימים יפלו כתוצאה מעומס על הרשת, קצב הביטים ישתנה באופן דינאמי.\n\nיש לשים לב כי הגדרה זו עלולה להעלות את ההשהייה לצופים בעת עומס פתאומי על הרשת.\nכאשר קצב הביטים יורד, עשויות לעבור כמה דקות עד שישוחזר.\n\nכרגע נתמך רק עבור RTMP."
105
@@ -653,8 +669,8 @@
106
 Basic.Settings.Output.Simple.RecordingQuality.Small="איכות גבוהה, גודל קובץ בינוני"
107
 Basic.Settings.Output.Simple.RecordingQuality.HQ="איכות בלתי מובחנת, גודל קובץ גדול"
108
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="ללא אובדן איכות, גודל קובץ עצום"
109
-Basic.Settings.Output.Simple.Warn.VideoBitrate="אזהרה: קצב הזרמת הוידאו יוגדר ל %1, כאשר זה הגבול העליון עבור שירות הזרמת הנתונים הנוכחי. אם אתה בטוח שאתה רוצה לעבור מעל %1, אפשר את אפשרויות קידוד מתקדמות ובטל סימון \"אכוף הגבלות קצב הזרמת נתונים\"."
110
-Basic.Settings.Output.Simple.Warn.AudioBitrate="אזהרה: קצב הזרמת האודיו יוגדר ל %1, כאשר זה הגבול העליון עבור שירות הזרמת הנתונים הנוכחי. אם אתה בטוח שאתה רוצה לעבור מעל %1, אפשר את אפשרויות קידוד מתקדמות ובטל סימון \"אכוף הגבלות קצב הזרמת נתונים\"."
111
+Basic.Settings.Output.Simple.Warn.VideoBitrate="אזהרה, קצב הסיביות של הזרמת הוווידאו יוגדר ל%1, שהוא הגבול הכי גבוה לשירות ההזרמה הנוכחי."
112
+Basic.Settings.Output.Simple.Warn.AudioBitrate="אזהרה, קצב הסיביות של הזרמת האודיו יוגדר ל%1, שהוא הגבול הכי גבוה לשירות ההזרמה הנוכחי."
113
 Basic.Settings.Output.Simple.Warn.CannotPause="אזהרה: לא ניתן להשהות הקלטות אם מקודד ההקלטה מוגדר על \"השתמש במקודד זרם נתונים\"."
114
 Basic.Settings.Output.Simple.Warn.Encoder="אזהרה: הקלטה עם מקודד תוכנה באיכות שונה מאשר זרם הנתונים ידרוש שימוש במשאבי מעבד נוספים אם מתבצעת הקלטה וזרם נתונים במקביל."
115
 Basic.Settings.Output.Simple.Warn.Lossless="אזהרה: איכות ללא אובדן יוצר גדלי קבצים גדולים מאוד! איכות ללא אובדן נתונים יכול להשתמש ביותר מ-7 ג'יגה-בתים של שטח דיסק לדקה ברזולוציות גבוהות ופריימים. שימוש באיכות ללא אובדן אינו מומלץ להקלטות ארוכות אלא אם קיים שטח דיסק פנוי גדול מאד."
116
@@ -665,6 +681,11 @@
117
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="חומרה (AMD)"
118
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="חומרה (NVENC)"
119
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="תוכנה (x 264 השימוש בהגדרת מעבד נמוך, גודל הקובץ גדל)"
120
+Basic.Settings.Output.Simple.TwitchVodTrack="החלף פס VOD (שימוש בפס מספר 2)"
121
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="קצב פריימים\רזולוציה לא נתמכת"
122
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="שירות הזרמה זה לא תומך ברזולציה ובקצב הפריימים הנוכחים שהגדרת. הם ישתנו לערך הכי קרוב ונתמך: \n\n%1\n\n האם תרצי\ה להמשיך?"
123
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="רזולוציה: %1"
124
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="פריימים לשנייה: %1"
125
 Basic.Settings.Output.VideoBitrate="קצב סיביות וידאו"
126
 Basic.Settings.Output.AudioBitrate="קצב סיביות שמע"
127
 Basic.Settings.Output.Reconnect="חיבור מחדש באופן אוטומטי"
128
@@ -679,13 +700,13 @@
129
 Basic.Settings.Output.Adv.Rescale="שנה קנה מידה של הפלט"
130
 Basic.Settings.Output.Adv.AudioTrack="ערוץ שמע"
131
 Basic.Settings.Output.Adv.Streaming="זרם נתונים"
132
-Basic.Settings.Output.Adv.ApplyServiceSettings="אכוף הגדרות מקודד של שירות זרם נתונים"
133
 Basic.Settings.Output.Adv.Audio.Track1="ערוץ 1"
134
 Basic.Settings.Output.Adv.Audio.Track2="רצועה 2"
135
 Basic.Settings.Output.Adv.Audio.Track3="רצועה 3"
136
 Basic.Settings.Output.Adv.Audio.Track4="רצועה 4"
137
 Basic.Settings.Output.Adv.Audio.Track5="רצועה 5"
138
 Basic.Settings.Output.Adv.Audio.Track6="רצועה 6"
139
+Basic.Settings.Output.Adv.TwitchVodTrack="פס VOD של טוויץ'"
140
 
141
 Basic.Settings.Output.Adv.Recording="הקלטה"
142
 Basic.Settings.Output.Adv.Recording.Type="סוג"
143
@@ -761,6 +782,7 @@
144
 Basic.Settings.Audio.PeakMeterType.SamplePeak="שיא דגימה"
145
 Basic.Settings.Audio.PeakMeterType.TruePeak="שיא אמיתי (שימוש גבוה יותר ב-CPU)"
146
 Basic.Settings.Audio.MultiChannelWarning.Enabled="אזהרה: שמע צליל היקפי מאופשר."
147
+Basic.Settings.Audio.MultichannelWarning="עבור הזרמה, יש לבדוק האם שירות ההזרמה שלך תומך בקבלת והשמעת צליל סראונד. דוגמאות לשירותים התומכים בסאונד סראונד באופן מלא: Facebook 360 Live, Mixer RTMP, Smashcast. למרות ש-Facebook Live ו-YouTube Live שניהם תומכים בקבלת סראונד, שירות Facebook Live מבצע הפחתת ערבול לסטריאו, בעוד YouTube Live מנגן רק שני ערוצים.\n\nערוצי האודיו של OBS מותאמים לסאונד סראונד, אך תמיכה בתוספי VST אינה מובטחת."
148
 Basic.Settings.Audio.MultichannelWarning.Title="האם להפעיל שמע צליל היקפי?"
149
 Basic.Settings.Audio.MultichannelWarning.Confirm="אתה בטוח שאתה רוצה לאפשר קול שמע מקיף?"
150
 Basic.Settings.Audio.Devices="התקני קול גלובליים"
151
@@ -928,11 +950,15 @@
152
 NeedsRestart="OBS Studio צריך לאתחל. ברצונך לאתחל עכשיו?"
153
 
154
 ContextBar.NoSelectedSource="לא נבחר מקור"
155
+ContextBar.ResetTransform="אפס שינויים"
156
 ContextBar.FitToCanvas="התאם לקנבס"
157
 
158
 ContextBar.MediaControls.PlayMedia="ניגון מדיה"
159
 ContextBar.MediaControls.PauseMedia="השהה מדיה"
160
 ContextBar.MediaControls.StopMedia="עצור מדיה"
161
+ContextBar.MediaControls.RestartMedia="התחל מדיה מחדש"
162
 ContextBar.MediaControls.PlaylistNext="הבא בפלייליסט"
163
 ContextBar.MediaControls.PlaylistPrevious="הקודם בפלייליסט"
164
+ContextBar.MediaControls.MediaProperties="מאפייני מדיה"
165
+ContextBar.MediaControls.BlindSeek="ווידג'ט חיפוש מדיה"
166
 
167
obs-studio-26.0.2.tar.xz/UI/data/locale/hi-IN.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/hi-IN.ini Changed
9
 
1
@@ -174,6 +174,7 @@
2
 
3
 
4
 
5
+
6
 Basic.Main.PauseRecording="रिकॉर्डिंग रोकें"
7
 
8
 
9
obs-studio-26.0.2.tar.xz/UI/data/locale/hr-HR.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/hr-HR.ini Changed
42
 
1
@@ -91,6 +91,7 @@
2
 LogViewer="Prikaz zapisnika"
3
 ShowOnStartup="Prikaži na startu"
4
 OpenFile="Otvori datoteku"
5
+AddValue="Dodaj %1"
6
 
7
 AlreadyRunning.Title="OBS je već pokrenut"
8
 AlreadyRunning.Text="OBS je već pokrenut! Osim ako si mislio da biste to učinili, isključite sve postojeće pojave OBS prije nego što pokušate pokrenuti novu instancu. Ako imate OBS postavljen na smanjivanje u traku sustava, provjerite ako to još uvijek radi tamo."
9
@@ -311,6 +312,7 @@
10
 Basic.SourceSelect.AddExisting="Dodaj postojeći"
11
 Basic.SourceSelect.AddVisible="Prikaži izvor"
12
 
13
+
14
 Basic.PropertiesWindow="Svojstva za '%1'"
15
 Basic.PropertiesWindow.AutoSelectFormat="%1 (automatski odabir: %2)"
16
 Basic.PropertiesWindow.SelectColor="Odaberi boju"
17
@@ -494,7 +496,6 @@
18
 Basic.Settings.Output.Encoder="Enkoder"
19
 Basic.Settings.Output.SelectDirectory="Odaberi direktorijum za snimanje"
20
 Basic.Settings.Output.SelectFile="Odaberi datoteku za snimanje"
21
-Basic.Settings.Output.EnforceBitrate="Sprovedi ograničenja u protoku striming servisa"
22
 Basic.Settings.Output.Mode="Režim izlaza"
23
 Basic.Settings.Output.Mode.Simple="Jednostavno"
24
 Basic.Settings.Output.Mode.Adv="Napredno"
25
@@ -505,8 +506,6 @@
26
 Basic.Settings.Output.Simple.RecordingQuality.Small="Visoki kvalitet, osrednja veličina datoteke"
27
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Kvalitet sa neprimetnim razlikama, velika datoteka"
28
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Kvalitet bez gubitka, izričito velika datoteka"
29
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Upozorenje: Video protok strima će biti postavljen na %1, što je gornja granica za trenutni striming servis. Ako ste sigurni da želite ići preko %1, omogućite napredne opcije enkodera i isključite \"Sprovedi ograničenja u protoku striming servisa\"."
30
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Upozorenje: Zvučni protok strima će biti postavljen na %1, što je gornja granica za trenutni striming servis. Ako ste sigurni da želite ići preko %1, omogućite napredne opcije enkodera i isključite \"Sprovedi ograničenja u protoku striming servisa\"."
31
 Basic.Settings.Output.Simple.Warn.Encoder="Upozorenje: Snimanje sa softverskim enkoderom drugačijeg kvaliteta u odnosu na strim će zahtevati dodatnu procesorsku snagu ako strimujete i snimate u isto vreme."
32
 Basic.Settings.Output.Simple.Warn.Lossless="Upozorenje: Kvalitet bez gubitka stvara izričito velike datoteke! Kvalitet bez gubitka može koristiti više od 7 gigabajta prostora na disku po minutu pri visokim rezolucijama i framerate-om. Kvalitet bez gubitka nije preporučen za duže snimanje osim ako imate veliku količinu slobodnog prostora na disku."
33
 Basic.Settings.Output.Simple.Warn.Lossless.Msg="Da li ste sigurni da želite koristiti kvalitet bez gubitka?"
34
@@ -528,7 +527,6 @@
35
 Basic.Settings.Output.Adv.Rescale="Skaliraj izlaz"
36
 Basic.Settings.Output.Adv.AudioTrack="Zvučni izvor"
37
 Basic.Settings.Output.Adv.Streaming="Strimovanje"
38
-Basic.Settings.Output.Adv.ApplyServiceSettings="Prisilna podešavanja enkodera striming servisa"
39
 Basic.Settings.Output.Adv.Audio.Track1="Izvor 1"
40
 Basic.Settings.Output.Adv.Audio.Track2="Izvor 2"
41
 Basic.Settings.Output.Adv.Audio.Track3="Izvor 3"
42
obs-studio-26.0.2.tar.xz/UI/data/locale/hu-HU.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/hu-HU.ini Changed
131
 
1
@@ -28,10 +28,10 @@
2
 Stereo="Sztereó"
3
 DroppedFrames="Eldobott képkockák: %1 (%2%)"
4
 StudioProgramProjector="Teljes képernyős projektor (program)"
5
-PreviewProjector="Teljes képernyős projektor (előnézet)"
6
-SceneProjector="Teljes képernyős projektor (jelenet)"
7
-SourceProjector="Teljes képernyős projektor (forrás)"
8
-StudioProgramWindow="Ablakos projektor (program)"
9
+PreviewProjector="Teljes képernyős projektor (Előnézet)"
10
+SceneProjector="Teljes képernyős projektor (Jelenet)"
11
+SourceProjector="Teljes képernyős projektor (Forrás)"
12
+StudioProgramWindow="Ablakos projektor (Program)"
13
 PreviewWindow="Ablakos projektor (Előnézet)"
14
 SceneWindow="Ablakos projektor (Jelenet)"
15
 SourceWindow="Ablakos projektor (Forrás)"
16
@@ -90,7 +90,7 @@
17
 RefreshBrowser="Frissítés"
18
 AspectRatio="Képarány <b>%1:%2</b>"
19
 LockVolume="Hangerő zárolása"
20
-LogViewer="Log Megjelenítő"
21
+LogViewer="Napló megjelenítő"
22
 ShowOnStartup="Mutatás indításkor"
23
 OpenFile="Fájl megnyitása"
24
 AddValue="%1 hozzáadása"
25
@@ -161,6 +161,7 @@
26
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Felhasználó szétkapcsolása?"
27
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Ez a változtatás azonnal érvénybe lép. Biztosan megszakítja a kapcsolatot a fiókjával?"
28
 Basic.AutoConfig.StreamPage.GetStreamKey="Stream Kulcs lekérése"
29
+Basic.AutoConfig.StreamPage.MoreInfo="További információk"
30
 Basic.AutoConfig.StreamPage.UseStreamKey="Stream kulcs használata"
31
 Basic.AutoConfig.StreamPage.Service="Szolgáltatás"
32
 Basic.AutoConfig.StreamPage.Service.ShowAll="Összes megjelenítése…"
33
@@ -365,8 +366,8 @@
34
 Deinterlacing.TopFieldFirst="Felső mező először"
35
 Deinterlacing.BottomFieldFirst="Alsó mező először"
36
 
37
-VolControl.SliderUnmuted="Hangerő csúszka a '%1'-hez: %2"
38
-VolControl.SliderMuted="Hangerő csúszka '%1'-hez: %2 (jelenleg némítva)"
39
+VolControl.SliderUnmuted="'%1' hangerő csúszkája:"
40
+VolControl.SliderMuted="'%1' hangerő csúszkája: (jelenleg némítva)"
41
 VolControl.Mute="Némítás '%1'"
42
 VolControl.Properties="Tulajdonságok a '%1'-hez"
43
 
44
@@ -382,6 +383,7 @@
45
 
46
 AddProfile.Title="Profil hozzáadása"
47
 AddProfile.Text="Kérjük, adja meg a profil nevét"
48
+AddProfile.WizardCheckbox="Automatikus beállításvarázsló megjelenítése"
49
 
50
 RenameProfile.Title="Profil átnevezése"
51
 
52
@@ -396,6 +398,11 @@
53
 Basic.SourceSelect.AddExisting="Létező tartalom hozzáadása"
54
 Basic.SourceSelect.AddVisible="Forrás láthatóvá tétele"
55
 
56
+Basic.Main.Sources.Visibility="Láthatóság"
57
+Basic.Main.Sources.VisibilityDescription="Beállítja '%1' láthatóságát a vásznon"
58
+Basic.Main.Sources.Lock="Zárolás"
59
+Basic.Main.Sources.LockDescription="Zárolja '%1' pozícióját és méretét a vásznon"
60
+
61
 Basic.PropertiesWindow="Tulajdonságok: '%1'"
62
 Basic.PropertiesWindow.AutoSelectFormat="%1 (autokiválasztás: %2)"
63
 Basic.PropertiesWindow.SelectColor="Szín kiválasztása"
64
@@ -635,13 +642,19 @@
65
 Basic.Settings.Stream.MissingUrlAndApiKey="Hiányzó elérési út és stream kulcs.\n\nNyissa meg a beállításokat, hogy megadja az elérési utat és a stream kulcsot a 'stream' fülön."
66
 Basic.Settings.Stream.MissingUrl="Hiányzó elérési út.\n\nNyissa meg a beállításokat, hogy megadja az elérési utat a 'stream' fülön."
67
 Basic.Settings.Stream.MissingStreamKey="Hiányzó stream kulcs.\n\nNyissa meg a beállításokat, hogy megadja a stream kulcsot a 'stream' fülön."
68
+Basic.Settings.Stream.IgnoreRecommended="Streamkiszolgáló ajánlott beállításainak figyelmen kívül hagyása"
69
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Ajánlott Beállítások Felülbírálása"
70
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Figyelem: A kiszolgáló limitációinak figyelmen kívül hagyása gyengébb minőséget eredményezhet vagy megakadályozhatja az adást.\n\nFolytatja?"
71
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Maximum Video Bitráta: %1 kbps"
72
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Maximum Audio Bitráta: %1 kbps"
73
+Basic.Settings.Stream.Recommended.MaxResolution="Maximális Felbontás: %1"
74
+Basic.Settings.Stream.Recommended.MaxFPS="Maximális FPS: %1"
75
 
76
 Basic.Settings.Output="Kimenet"
77
 Basic.Settings.Output.Format="Felvétel formátuma"
78
 Basic.Settings.Output.Encoder="Kódoló"
79
 Basic.Settings.Output.SelectDirectory="Felvételi könyvtár kiválasztása"
80
 Basic.Settings.Output.SelectFile="Felvétel fájljának kiválasztása"
81
-Basic.Settings.Output.EnforceBitrate="Stream kiszolgáló bitsebesség korlátainak kényszerítése"
82
 Basic.Settings.Output.DynamicBitrate="Dinamikus bitráta változtatás a hálózati terheléssel való megbirkózás érdekében"
83
 Basic.Settings.Output.DynamicBitrate.Beta="Dinamikus bitráta változtatás a hálózati terheléssel való megbirkózás érdekében (Béta)"
84
 Basic.Settings.Output.DynamicBitrate.TT="Hálózati terhelés esetén a képkockák eldobása helyett, dinamikusan változik a bitráta menet közben.\n\nTartsa észben, hogy ez növelheti a késleltetést ön és a nézők között, hogyha hirtelen megnövekszik a terhelés.\nAmikor a bitráta lezuhan, akár percekig is eltarthat, amíg helyreáll.\n\nAktuálisan csak RTMP használata esetén támogatott."
85
@@ -662,8 +675,8 @@
86
 Basic.Settings.Output.Simple.RecordingQuality.Small="Jó minőség, közepes fájlméret"
87
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Megkülönböztethetetlen minőség, nagy fájlméret"
88
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Veszteségmentes minőség, hatalmas fájlméret"
89
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Figyelem: Az adás videó bitsebessége %1 értéken áll, ami a kiválasztott kiszolgáló felső határértéke. Amennyiben túl kívánja lépni a megadott %1 értéket, úgy engedélyezze a haladó kódolási opciókat és törölje a \"stream kiszolgáló bitsebesség korlátainak kényszerítése\" opciót."
90
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Figyelem: Az adás audio bitsebessége %1 értéken áll, ami a kiválasztott kiszolgáló felső határértéke. Amennyiben túl kívánja lépni a megadott %1 értéket, úgy engedélyezze a haladó kódolási opciókat és törölje a \"stream kiszolgáló bitsebesség korlátainak kényszerítése\" opciót."
91
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Figyelem: A stream-elés video bitrátája be lesz állítva a következőre: %1, mivel ennyi a kiválasztott streaming szolgáltatás felső határa."
92
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Figyelem: A stream-elés audio bitrátája be lesz állítva a következőre: %1, mivel ennyi a kiválasztott streaming szolgáltatás felső határa."
93
 Basic.Settings.Output.Simple.Warn.CannotPause="Figyelmeztetés: A felvételeket nem lehet szüneteltetni, ha a felvétel minősége \"Ugyanaz mint a stream\"-re van állítva."
94
 Basic.Settings.Output.Simple.Warn.Encoder="Figyelem: A streamtől eltérő minőséggel történő rögzítés, további CPU erőforrásokat igényel, ha egyidejűleg használja mindkettőt."
95
 Basic.Settings.Output.Simple.Warn.Lossless="Figyelem: A veszteségmentes minőséggel történő felvétel hatalmas fájlméretet generál. Ezzel a minőséggel percenként akár 7 gigabájt adatot is generálhat nagy felbontáson és képkockasebességen. Ez az eljárás nem ajánlott hosszú felvételekhez, kivéve ha hatalmas lemezterület áll rendelkezésre."
96
@@ -674,6 +687,8 @@
97
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardver (AMD)"
98
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardver (NVENC)"
99
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Szoftveres (x264 alacsony CPU használati készlet, növekvő fájlméret)"
100
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Felbontás: %1"
101
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS: %1"
102
 Basic.Settings.Output.VideoBitrate="Videó bitsebesség"
103
 Basic.Settings.Output.AudioBitrate="Audio bitsebesség"
104
 Basic.Settings.Output.Reconnect="Automatikus újracsatlakozás"
105
@@ -688,15 +703,16 @@
106
 Basic.Settings.Output.Adv.Rescale="Kimenet átméretezése"
107
 Basic.Settings.Output.Adv.AudioTrack="Hangsáv"
108
 Basic.Settings.Output.Adv.Streaming="Streamelés"
109
-Basic.Settings.Output.Adv.ApplyServiceSettings="A kiszolgáló kódoló beállításainak kényszerítése"
110
 Basic.Settings.Output.Adv.Audio.Track1="Sáv 1"
111
 Basic.Settings.Output.Adv.Audio.Track2="Sáv 2"
112
 Basic.Settings.Output.Adv.Audio.Track3="Sáv 3"
113
 Basic.Settings.Output.Adv.Audio.Track4="Sáv 4"
114
 Basic.Settings.Output.Adv.Audio.Track5="Sáv 5"
115
 Basic.Settings.Output.Adv.Audio.Track6="Sáv 6"
116
+Basic.Settings.Output.Adv.TwitchVodTrack="Twitch VOD Track"
117
 
118
 Basic.Settings.Output.Adv.Recording="Rögzítés"
119
+Basic.Settings.Output.Adv.Recording.RecType="Felvétel típusa"
120
 Basic.Settings.Output.Adv.Recording.Type="Típus"
121
 Basic.Settings.Output.Adv.Recording.Type.Standard="Szabvány"
122
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Egyéni kimenet (FFmpeg)"
123
@@ -824,6 +840,7 @@
124
 Basic.AdvAudio.ActiveOnly="Csak Aktív Források"
125
 Basic.AdvAudio.Name="Név"
126
 Basic.AdvAudio.Volume="Hangerő"
127
+Basic.AdvAudio.VolumeSource="'%1' hangereje"
128
 Basic.AdvAudio.Mono="Mono"
129
 Basic.AdvAudio.Balance="Egyensúly"
130
 Basic.AdvAudio.SyncOffset="Szinkron eltolás"
131
obs-studio-26.0.2.tar.xz/UI/data/locale/id-ID.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/id-ID.ini Changed
426
 
1
@@ -7,36 +7,36 @@
2
 Close="Tutup"
3
 Save="Simpan"
4
 Discard="Buang"
5
-Disable="Nonaktifkan"
6
+Disable="Nonaktif"
7
 Yes="Ya"
8
 No="Tidak"
9
-Add="Tambah"
10
+Add="Tambahkan"
11
 Remove="Hapus"
12
 Rename="Ubah Nama"
13
 Interact="Interaksi"
14
 Filters="Filter"
15
 Properties="Properti"
16
-MoveUp="Ke Atas"
17
-MoveDown="Ke Bawah"
18
+MoveUp="Pindah Ke Atas"
19
+MoveDown="Pindah Ke Bawah"
20
 Settings="Pengaturan"
21
-Display="Tampilan"
22
+Display="Layar"
23
 Name="Nama"
24
 Exit="Keluar"
25
 Mixer="Mixer Audio"
26
 Browse="Telusuri"
27
 Mono="Mono"
28
 Stereo="Stereo"
29
-DroppedFrames="Frame drop %1 (%2%)"
30
+DroppedFrames="Frame Ter-drop %1 (%2%)"
31
 StudioProgramProjector="Proyektor Layar Penuh (Program)"
32
 PreviewProjector="Proyektor Layar Penuh (Pratinjau)"
33
 SceneProjector="Proyektor Layar Penuh (Adegan)"
34
 SourceProjector="Proyektor Layar Penuh (Sumber)"
35
-StudioProgramWindow="Proyektor Windowed (Program)"
36
-PreviewWindow="Proyektor Windowed (Pratinjau)"
37
-SceneWindow="Proyektor Windowed (Adegan)"
38
-SourceWindow="Proyektor Windowed (Sumber)"
39
-MultiviewProjector="Multiview (Layar Penuh)"
40
-MultiviewWindowed="Multiview (Windowed)"
41
+StudioProgramWindow="Proyektor Berjendela (Program)"
42
+PreviewWindow="Proyektor Berjendela (Pratinjau)"
43
+SceneWindow="Proyektor Berjendela (Adegan)"
44
+SourceWindow="Proyektor Berjendela (Sumber)"
45
+MultiviewProjector="Tampilan Multi (Layar Penuh)"
46
+MultiviewWindowed="Tampilan Multi (Berjendela)"
47
 ResizeProjectorWindowToContent="Sesuaikan jendela dengan konten"
48
 Clear="Bersihkan"
49
 Revert="Pulihkan"
50
@@ -48,8 +48,8 @@
51
 Duplicate="Duplikat"
52
 Enable="Aktifkan"
53
 DisableOSXVSync="Nonaktifkan macOS V-Sync"
54
-ResetOSXVSyncOnExit="Reset macOS V-Sync saat Keluar"
55
-HighResourceUsage="Pengkodean kelebihan beban! Pertimbangkan untuk mengecilkan pengaturan video atau memakai preset pengkodean yang lebih cepat."
56
+ResetOSXVSyncOnExit="Setel Ulang macOS V-Sync saat Keluar"
57
+HighResourceUsage="Pengkodean kelebihan beban! Pertimbangkan untuk menurunkan pengaturan video atau gunakan preset pengkodean yang lebih cepat."
58
 Transition="Transisi"
59
 QuickTransitions="Transisi Cepat"
60
 FadeToBlack="Pudar jadi Hitam"
61
@@ -57,7 +57,7 @@
62
 Right="Kanan"
63
 Top="Atas"
64
 Bottom="Bawah"
65
-Reset="Reset"
66
+Reset="Atur Ulang"
67
 Hours="Jam"
68
 Minutes="Menit"
69
 Seconds="Detik"
70
@@ -68,69 +68,70 @@
71
 Copy="Salin"
72
 Paste="Tempel"
73
 PasteReference="Tempel (Referensi)"
74
-PasteDuplicate="Rekatkan (Duplikat)"
75
+PasteDuplicate="Tempel (Duplikat)"
76
 RemuxRecordings="Remux Rekaman"
77
-Next="Selanjutnya"
78
+Next="Berikutnya"
79
 Back="Kembali"
80
-Defaults="Default"
81
+Defaults="Bawaan"
82
 HideMixer="Sembunyikan di Mixer"
83
-TransitionOverride="Paksa Transisi"
84
+TransitionOverride="Menimpa Transisi"
85
 None="Tidak ada"
86
-StudioMode.Preview="Preview"
87
+StudioMode.Preview="Pratinjau"
88
 StudioMode.Program="Program"
89
-ShowInMultiview="Tampilkan di Multiview"
90
+ShowInMultiview="Tampilkan di Tampilan Multi"
91
 VerticalLayout="Tata Letak Vertikal"
92
-Group="Kelompok"
93
+Group="Grup"
94
 DoNotShowAgain="Jangan tampilkan lagi"
95
-Default="(Default)"
96
+Default="(Bawaan)"
97
 Calculating="Menghitung..."
98
 Fullscreen="Layar Penuh"
99
-Windowed="Windowed"
100
+Windowed="Berjendela"
101
 Percent="Persen"
102
-RefreshBrowser="Refresh"
103
+RefreshBrowser="Muat Ulang"
104
 AspectRatio="Rasio Aspek <b>%1:%2</b>"
105
 LockVolume="Kunci Volume"
106
-LogViewer="Penampil Log"
107
+LogViewer="Penampil Catatan"
108
 ShowOnStartup="Tampilkan saat memulai"
109
-OpenFile="Buka file"
110
+OpenFile="Buka berkas"
111
+AddValue="Tambah %1"
112
 
113
 AlreadyRunning.Title="OBS sudah berjalan"
114
-AlreadyRunning.Text="OBS sudah berjalan! Kecuali Anda bermaksud melakukan ini, harap matikan semua jendela OBS yang ada sebelum mencoba menjalankan jendela baru. Jika Anda memiliki OBS yang diatur untuk minimalkan ke system tray, periksa apakah OBS masih berjalan di situ."
115
-AlreadyRunning.LaunchAnyway="Jalankan Saja"
116
+AlreadyRunning.Text="OBS sudah berjalan! Kecuali jika Anda bermaksud melakukan ini, harap matikan semua instansi-instansi OBS yang ada sebelum mencoba menjalankan instansi baru. Jika Anda memiliki OBS yang diatur untuk di minimalkan ke baki sistem, mohon diperiksa apakah OBS masih berjalan atau tidak."
117
+AlreadyRunning.LaunchAnyway="Jalankan Bagaimanapun Juga"
118
 
119
 ChromeOS.Title="Platform Tidak Didukung"
120
 ChromeOS.Text="Tampaknya OBS berjalan di dalam kontainer ChromeOS. Platform ini tidak didukung"
121
 
122
-DockCloseWarning.Title="Menutup Jendela Dockable"
123
-DockCloseWarning.Text="Anda baru saja menutup jendela dockable. Jika Anda ingin menampilkannya lagi, gunakan menu Tampilan → Dock pada bar menu."
124
+DockCloseWarning.Title="Menutup Jendela yang Bisa Didok"
125
+DockCloseWarning.Text="Anda baru saja menutup jendela yang bisa di dok. Jika Anda ingin menampilkannya lagi, gunakan menu Tampilan → Dok pada bar menu."
126
 
127
-ExtraBrowsers="Dock Browser Kustom"
128
-ExtraBrowsers.Info="Tambahkan dock dengan memberi nama dan URL, lalu klik Terapkan atau Tutup untuk membuka dock. Anda dapat menambah atau menghapus dock kapan saja."
129
-ExtraBrowsers.DockName="Nama dock"
130
+ExtraBrowsers="Dok Browser Kustom"
131
+ExtraBrowsers.Info="Tambahkan dok dengan memberi nama dan URL, lalu klik Terapkan atau Tutup untuk membuka dok. Anda dapat menambah atau menghapus dok kapan saja."
132
+ExtraBrowsers.DockName="Nama dok"
133
 
134
-Auth.Authing.Title="Otentikasi..."
135
-Auth.Authing.Text="Otentikasi dengan %1, tunggu sebentar..."
136
-Auth.AuthFailure.Title="Otentikasi Gagal"
137
+Auth.Authing.Title="Mengautentikasi..."
138
+Auth.Authing.Text="Mengautentikasi dengan %1, silahkan tunggu..."
139
+Auth.AuthFailure.Title="Autentikasi Gagal"
140
 Auth.AuthFailure.Text="Gagal mengautentikasi dengan %1:\n\n%2: %3"
141
-Auth.InvalidScope.Title="Otentikasi Diperlukan"
142
+Auth.InvalidScope.Title="Autentikasi Diperlukan"
143
 Auth.InvalidScope.Text="Persyaratan otentikasi untuk %1 telah berubah. Beberapa fitur mungkin tidak tersedia."
144
 Auth.LoadingChannel.Title="Memuat informasi saluran..."
145
-Auth.LoadingChannel.Text="Memuat informasi saluran untuk %1, tunggu sebentar..."
146
+Auth.LoadingChannel.Text="Memuat informasi saluran untuk %1, silahkan tunggu..."
147
 Auth.ChannelFailure.Title="Gagal memuat saluran"
148
 Auth.ChannelFailure.Text="Gagal memuat informasi saluran untuk %1\n\n%2: %3"
149
-Auth.Chat="Chat"
150
+Auth.Chat="Obrolan"
151
 Auth.StreamInfo="Informasi Streaming"
152
-TwitchAuth.Stats="Status Twitch"
153
+TwitchAuth.Stats="Statistik Twitch"
154
 TwitchAuth.Feed="Umpan Aktivitas Twitch"
155
-TwitchAuth.TwoFactorFail.Title="Tidak bisa meminta kunci streaming"
156
-TwitchAuth.TwoFactorFail.Text="OBS tidak dapat terhubung ke akun Twitch Anda. Harap pastikan otentikasi dua faktor diatur di <a href='https://www.twitch.tv/settings/security'>pengaturan keamanan Twitch</a> Anda karena ini diperlukan untuk streaming."
157
+TwitchAuth.TwoFactorFail.Title="Tidak dapat meminta kunci streaming"
158
+TwitchAuth.TwoFactorFail.Text="OBS tidak dapat terhubung ke akun Twitch Anda. Mohon pastikan autentikasi dua faktor diatur di <a href='https://www.twitch.tv/settings/security'>Twitch security settings</a> Anda karena ini diperlukan untuk streaming."
159
 RestreamAuth.Channels="Streaming Ulang Saluran"
160
 
161
 Copy.Filters="Salin Filter"
162
 Paste.Filters="Tempel Filter"
163
 
164
-BrowserPanelInit.Title="Inisialisasi Browser..."
165
-BrowserPanelInit.Text="Inisialisasi browser, tunggu sebentar..."
166
+BrowserPanelInit.Title="Menginisialisasi Browser..."
167
+BrowserPanelInit.Text="Menginisialisasi browser, silahkan tunggu..."
168
 
169
 BandwidthTest.Region="Wilayah"
170
 BandwidthTest.Region.US="Amerika Serikat"
171
@@ -138,7 +139,7 @@
172
 BandwidthTest.Region.Asia="Asia"
173
 BandwidthTest.Region.Other="Lainnya"
174
 
175
-Basic.AutoConfig="Layanan Konfigurasi Otomatis"
176
+Basic.AutoConfig="Wisaya Konfigurasi Otomatis"
177
 Basic.AutoConfig.ApplySettings="Terapkan Pengaturan"
178
 Basic.AutoConfig.StartPage="Informasi Penggunaan"
179
 Basic.AutoConfig.StartPage.SubTitle="Tentukan untuk apa Anda ingin menggunakan program ini"
180
@@ -148,18 +149,19 @@
181
 Basic.AutoConfig.VideoPage="Pengaturan Video"
182
 Basic.AutoConfig.VideoPage.SubTitle="Tentukan pengaturan video yang ingin Anda gunakan"
183
 Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Gunakan Saat Ini (%1x%2)"
184
-Basic.AutoConfig.VideoPage.BaseResolution.Display="Tampilan %1 (%2x%3)"
185
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Layar %1 (%2x%3)"
186
 Basic.AutoConfig.VideoPage.FPS.UseCurrent="Gunakan Saat Ini (%1)"
187
 Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="Antara 60 atau 30, tetapi lebih memilih 60 jika memungkinkan"
188
 Basic.AutoConfig.VideoPage.FPS.PreferHighRes="Antara 60 atau 30, tetapi lebih memilih beresolusi tinggi"
189
-Basic.AutoConfig.VideoPage.CanvasExplanation="Catatan: Resolusi kanvas (dasar) tidak harus sama dengan resolusi yang akan Anda siarkan atau rekam. Resolusi streaming/rekaman Anda yang sebenarnya dapat diturunkan dari resolusi kanvas untuk mengurangi penggunaan sumber daya atau bitrate yang diperlukan."
190
+Basic.AutoConfig.VideoPage.CanvasExplanation="Catatan: Resolusi kanvas (dasar) tidak harus sama dengan resolusi yang akan Anda siarkan atau rekam. Resolusi streaming/rekaman Anda yang sebenarnya mungkin dapat diturunkan dari resolusi kanvas untuk mengurangi penggunaan sumber daya atau bitrate yang diperlukan."
191
 Basic.AutoConfig.StreamPage="Informasi Streaming"
192
 Basic.AutoConfig.StreamPage.SubTitle="Silahkan masukkan informasi streaming Anda"
193
 Basic.AutoConfig.StreamPage.ConnectAccount="Hubungkan Akun (disarankan)"
194
-Basic.AutoConfig.StreamPage.DisconnectAccount="Putuskan Sambungan Akun"
195
-Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Putuskan Sambungan Akun?"
196
+Basic.AutoConfig.StreamPage.DisconnectAccount="Putuskan Akun"
197
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Putuskan Akun?"
198
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Perubahan ini akan diterapkan segera. Apakah Anda yakin ingin memutuskan koneksi akun Anda?"
199
 Basic.AutoConfig.StreamPage.GetStreamKey="Dapatkan Stream Key"
200
+Basic.AutoConfig.StreamPage.MoreInfo="Info lebih lanjut"
201
 Basic.AutoConfig.StreamPage.UseStreamKey="Gunakan Stream Key"
202
 Basic.AutoConfig.StreamPage.Service="Layanan"
203
 Basic.AutoConfig.StreamPage.Service.ShowAll="Tampilkan Semua..."
204
@@ -168,8 +170,8 @@
205
 Basic.AutoConfig.StreamPage.StreamKey="Stream Key"
206
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Tautan)"
207
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Perkirakan bitrate dengan uji bandwidth (mungkin perlu beberapa menit)"
208
-Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Lebih memilih pengkodean hardware"
209
-Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Pengkodean Hardware mengurangi sebagian besar pemakaian CPU, tetapi mungkin memerlukan bitrate lebih banyak untuk mendapatkan kualitas yang sama."
210
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Lebih memilih enkoding perangkat keras"
211
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Enkoding Perangkat Keras mengurangi sebagian besar pemakaian CPU, tetapi mungkin memerlukan bitrate lebih besar untuk mendapatkan kualitas yang sama."
212
 Basic.AutoConfig.StreamPage.StreamWarning.Title="Peringatan streaming"
213
 Basic.AutoConfig.StreamPage.StreamWarning.Text="Tes bandwidth akan melakukan streaming data video acak tanpa audio ke saluran Anda. Jika bisa, disarankan untuk menonaktifkan sementara menyimpan video stream dan atur streaming ke pribadi hingga tes selesai. Lanjutkan?"
214
 Basic.AutoConfig.TestPage="Hasil Akhir"
215
@@ -364,8 +366,8 @@
216
 Deinterlacing.TopFieldFirst="Bagian Atas Dahulu"
217
 Deinterlacing.BottomFieldFirst="Bagian Bawah Dahulu"
218
 
219
-VolControl.SliderUnmuted="Penggeser volume untuk '%1': %2"
220
-VolControl.SliderMuted="Penggeser volume untuk '%1': %2 (saat ini dibisukan)"
221
+VolControl.SliderUnmuted="Penggeser volume untuk '%1':"
222
+VolControl.SliderMuted="Penggeser volume untuk '%1': (saat ini dibisukan)"
223
 VolControl.Mute="Bisukan '%1'"
224
 VolControl.Properties="Properti '%1'"
225
 
226
@@ -381,6 +383,7 @@
227
 
228
 AddProfile.Title="Tambah Profil"
229
 AddProfile.Text="Silakan masukkan nama profil"
230
+AddProfile.WizardCheckbox="Tunjukkan Konfigurasi Otomatis"
231
 
232
 RenameProfile.Title="Ubah Nama Profil"
233
 
234
@@ -395,6 +398,11 @@
235
 Basic.SourceSelect.AddExisting="Tambahkan Yang Ada"
236
 Basic.SourceSelect.AddVisible="Buat sumber terlihat"
237
 
238
+Basic.Main.Sources.Visibility="Tampilan"
239
+Basic.Main.Sources.VisibilityDescription="Kontrol tampilan '%1' di kanvas"
240
+Basic.Main.Sources.Lock="Kunci"
241
+Basic.Main.Sources.LockDescription="Kunci posisi dan skala '%1' di kanvas"
242
+
243
 Basic.PropertiesWindow="Properti '%1'"
244
 Basic.PropertiesWindow.AutoSelectFormat="%1 (pilih-otomatis: %2)"
245
 Basic.PropertiesWindow.SelectColor="Pilih warna"
246
@@ -485,7 +493,7 @@
247
 Basic.Main.HideContextBar="Sembunyikan Toolbar Sumber"
248
 Basic.Main.StopVirtualCam="Hentikan Kamera Virtual"
249
 Basic.Main.Group="Kelompok %1"
250
-Basic.Main.GroupItems="Kelompokkan Item Terpilih"
251
+Basic.Main.GroupItems="Kelompokkan Item yang Dipilih"
252
 Basic.Main.Ungroup="Pisahkan Kelompok"
253
 Basic.Main.GridMode="Mode Grid"
254
 Basic.Main.ListMode="Mode Daftar"
255
@@ -582,10 +590,10 @@
256
 Basic.Settings.General.EnableAutoUpdates="Otomatis memeriksa pembaruan saat startup"
257
 Basic.Settings.General.OpenStatsOnStartup="Buka dialog statistik saat startup"
258
 Basic.Settings.General.WarnBeforeStartingStream="Tampilkan dialog konfirmasi saat memulai streaming"
259
-Basic.Settings.General.WarnBeforeStoppingStream="Tampilkan dialog konfirmasi saat menghentikan streaming"
260
-Basic.Settings.General.WarnBeforeStoppingRecord="Tampilkan dialog konfirmasi saat menghentikan rekaman"
261
+Basic.Settings.General.WarnBeforeStoppingStream="Tampilkan dialog konfirmasi saat berhenti streaming"
262
+Basic.Settings.General.WarnBeforeStoppingRecord="Tampilkan dialog konfirmasi saat berhenti merekam"
263
 Basic.Settings.General.Projectors="Proyektor"
264
-Basic.Settings.General.HideProjectorCursor="Sembunyikan cursor di Proyektor"
265
+Basic.Settings.General.HideProjectorCursor="Sembunyikan kursor di Proyektor"
266
 Basic.Settings.General.ProjectorAlwaysOnTop="Jadikan proyektor selalu di atas"
267
 Basic.Settings.General.Snapping="Sentakan Penjajaran Sumber"
268
 Basic.Settings.General.ScreenSnapping="Sentakkan Sumber ke tepi layar"
269
@@ -608,7 +616,7 @@
270
 Basic.Settings.General.AutomaticCollectionSearch="Cari lokasi yang diketahui untuk koleksi adegan saat mengimpor"
271
 Basic.Settings.General.SwitchOnDoubleClick="Transisi ke adegan ketika diklik dua kali"
272
 Basic.Settings.General.StudioPortraitLayout="Aktifkan tata letak potret/vertikal"
273
-Basic.Settings.General.TogglePreviewProgramLabels="Tampilkan label preview/rogram"
274
+Basic.Settings.General.TogglePreviewProgramLabels="Tampilkan label preview/program"
275
 Basic.Settings.General.Multiview="Multiview"
276
 Basic.Settings.General.Multiview.MouseSwitch="Klik untuk beralih antar adegan"
277
 Basic.Settings.General.Multiview.DrawSourceNames="Tampilkan nama adegan"
278
@@ -634,13 +642,19 @@
279
 Basic.Settings.Stream.MissingUrlAndApiKey="URL dan Stream Key tidak ada.\n\nBuka pengaturan untuk memasukkan URL dan Stream Key di tab 'streaming'."
280
 Basic.Settings.Stream.MissingUrl="URL tidak ada.\n\nBuka pengaturan untuk memasukkan URL di tab 'Streaming'."
281
 Basic.Settings.Stream.MissingStreamKey="Stream key tidak ada.\n\nBuka pengaturan untuk memasukkan stream key di tab 'Streaming'."
282
+Basic.Settings.Stream.IgnoreRecommended="Abaikan rekomendasi pengaturan layanan streaming"
283
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Mengganti pengaturan yang direkomendasi"
284
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Peringatan: Mengabaikan batasan layanan dapat menurunkan kualitas streaming atau mencegah Anda melakukan streaming. \n\nLanjutkan?"
285
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Video Bitrate Maksimal: %1 kbps"
286
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Audio Bitrate Maksimal: %1 kbps"
287
+Basic.Settings.Stream.Recommended.MaxResolution="Resolusi Maksimal: %1"
288
+Basic.Settings.Stream.Recommended.MaxFPS="FPS Maksimal: %1"
289
 
290
 Basic.Settings.Output="Output"
291
 Basic.Settings.Output.Format="Format Rekaman"
292
 Basic.Settings.Output.Encoder="Enkoder"
293
 Basic.Settings.Output.SelectDirectory="Pilih Direktori Rekaman"
294
 Basic.Settings.Output.SelectFile="Pilih File Rekaman"
295
-Basic.Settings.Output.EnforceBitrate="Tegakkan batas bitrate layanan streaming"
296
 Basic.Settings.Output.DynamicBitrate="Ubah bitrate secara dinamis untuk mengelola gangguan"
297
 Basic.Settings.Output.DynamicBitrate.Beta="Ubah bitrate secara dinamis untuk mengelola gangguan (Beta)"
298
 Basic.Settings.Output.DynamicBitrate.TT="Alih-alih men-dropkan frame untuk mengurangi gangguan, secara dinamis mengubah bitrate dengan cepat.\n\nPerhatikan bahwa ini dapat meningkatkan waktu delay bagi penoton jika ada gangguan tiba-tiba yang signifikan.\nKetika bitrate turun, diperlukan waktu beberapa menit untuk memulihkannya.\n\nSaat ini hanya didukung untuk RTMP."
299
@@ -659,20 +673,25 @@
300
 Basic.Settings.Output.Simple.RecordingQuality="Kualitas Rekaman"
301
 Basic.Settings.Output.Simple.RecordingQuality.Stream="Sama seperti streaming"
302
 Basic.Settings.Output.Simple.RecordingQuality.Small="Kualitas Tinggi, Ukuran File Sedang"
303
-Basic.Settings.Output.Simple.RecordingQuality.HQ="Kualitas Tidak Bisa Dibedakan, Ukuran File Besar"
304
+Basic.Settings.Output.Simple.RecordingQuality.HQ="Kualitas Tak Dapat Dibedakan, Ukuran File Besar"
305
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Kualitas Lossless, Ukuran File Sangat Besar"
306
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Peringatan: Bitrate video streaming akan diatur ke %1, yang merupakan batas atas untuk layanan streaming saat ini. Jika Anda yakin ingin lebih dari %1, aktifkan opsi enkoder tingkat lanjut dan hapus centang \"Paksa batas bitrate layanan streaming\"."
307
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Peringatan: Bitrate audio streaming akan diatur ke %1, yang merupakan batas atas untuk layanan streaming saat ini. Jika Anda yakin ingin lebih dari %1, aktifkan opsi enkoder tingkat lanjut dan hapus centang \"Tegakkan batas bitrate layanan streaming\"."
308
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Peringatan: Bitrate video streaming akan diatur ke %1, yang merupakan batas atas untuk layanan streaming saat ini."
309
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Peringatan: Bitrate audio streaming akan diatur ke %1, yang merupakan batas atas untuk layanan streaming saat ini."
310
 Basic.Settings.Output.Simple.Warn.CannotPause="Peringatan: Rekaman tidak dapat dijeda jika kualitas rekaman diatur ke \"Sama seperti streaming\"."
311
 Basic.Settings.Output.Simple.Warn.Encoder="Peringatan: Perekaman dengan enkoder software pada kualitas yang berbeda dengan streaming akan membutuhkan pemakaian CPU ekstra jika Anda melakukan streaming dan merekam bersamaan."
312
 Basic.Settings.Output.Simple.Warn.Lossless="Peringatan: Kualitas lossless menghasilkan ukuran file yang sangat besar! Kualitas lossless dapat menggunakan ruang disk hingga 7 gigabyte per menit pada resolusi dan framerate tinggi. Lossless tidak disarankan saat merekam lama kecuali Anda memiliki ruang disk yang sangat besar."
313
 Basic.Settings.Output.Simple.Warn.Lossless.Msg="Apakah Anda yakin ingin menggunakan kualitas lossless?"
314
 Basic.Settings.Output.Simple.Warn.Lossless.Title="Peringatan kualitas lossless!"
315
 Basic.Settings.Output.Simple.Encoder.Software="Software (x264)"
316
-Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Hardware (QSV)"
317
-Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardware (AMD)"
318
-Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardware (NVENC)"
319
+Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Perangkat Keras (QSV)"
320
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Perangkat Keras (AMD)"
321
+Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Perangkat Keras (NVENC)"
322
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Perangkat lunak (x264 preset penggunaan CPU rendah, ukuran file meningkat)"
323
+Basic.Settings.Output.Simple.TwitchVodTrack="Jalur VOD Twitch (Menggunakan Jalur 2)"
324
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Resolusi/Framerate tidak cocok"
325
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Layanan streaming ini tidak mendukung resolusi dan/atau framerate anda saat ini. Ini akan diganti ke nilai cocok paling dekat:\n\n%1\n\nApa anda ingin melanjutkan?"
326
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Resolusi: %1"
327
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS: %1"
328
 Basic.Settings.Output.VideoBitrate="Bitrate Video"
329
 Basic.Settings.Output.AudioBitrate="Bitrate Audio"
330
 Basic.Settings.Output.Reconnect="Hubungkan Kembali Secara Otomatis"
331
@@ -687,21 +706,22 @@
332
 Basic.Settings.Output.Adv.Rescale="Skala Ulang Output"
333
 Basic.Settings.Output.Adv.AudioTrack="Trek Audio"
334
 Basic.Settings.Output.Adv.Streaming="Streaming"
335
-Basic.Settings.Output.Adv.ApplyServiceSettings="Tegakkan pengaturan enkoder layanan streaming"
336
 Basic.Settings.Output.Adv.Audio.Track1="Trek 1"
337
 Basic.Settings.Output.Adv.Audio.Track2="Trek 2"
338
 Basic.Settings.Output.Adv.Audio.Track3="Trek 3"
339
 Basic.Settings.Output.Adv.Audio.Track4="Trek 4"
340
 Basic.Settings.Output.Adv.Audio.Track5="Trek 5"
341
 Basic.Settings.Output.Adv.Audio.Track6="Trek 6"
342
+Basic.Settings.Output.Adv.TwitchVodTrack="Jalur VOD Twitch"
343
 
344
 Basic.Settings.Output.Adv.Recording="Rekaman"
345
+Basic.Settings.Output.Adv.Recording.RecType="Type Rekaman"
346
 Basic.Settings.Output.Adv.Recording.Type="Tipe"
347
 Basic.Settings.Output.Adv.Recording.Type.Standard="Standar"
348
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Output Kustom (FFmpeg)"
349
 Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Gunakan enkoder streaming)"
350
 Basic.Settings.Output.Adv.Recording.Filename="Format Nama File"
351
-Basic.Settings.Output.Adv.Recording.OverwriteIfExists="Timpa jika file sudah ada"
352
+Basic.Settings.Output.Adv.Recording.OverwriteIfExists="Timpa file yang sudah ada"
353
 Basic.Settings.Output.Adv.FFmpeg.Type="Jenis output FFmpeg"
354
 Basic.Settings.Output.Adv.FFmpeg.Type.URL="Output ke URL"
355
 Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile="Output ke File"
356
@@ -725,7 +745,7 @@
357
 Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Tampilkan semua kodek (bahkan jika berpotensi tidak kompatibel)"
358
 
359
 Screenshot="Screenshot Output"
360
-Screenshot.SourceHotkey="Screenshot Sumber Terpilih"
361
+Screenshot.SourceHotkey="Screenshot Sumber yang Dipilih"
362
 Screenshot.StudioProgram="Screenshot (Program)"
363
 Screenshot.Preview="Screenshot (Preview)"
364
 Screenshot.Scene="Screenshot (Adegan)"
365
@@ -752,9 +772,9 @@
366
 Basic.Settings.Video.CurrentlyActive="Output video saat ini sedang aktif. Matikan semua output untuk mengubah pengaturan video."
367
 Basic.Settings.Video.DisableAero="Matikan Aero"
368
 
369
-Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (Tercepat, tapi ngeblur jika scaling)"
370
-Basic.Settings.Video.DownscaleFilter.Bicubic="Bicubic (scaling tajam, 16 sampel)"
371
-Basic.Settings.Video.DownscaleFilter.Lanczos="Lamczos (scaling tajam, 36 sampel)"
372
+Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (Tercepat, tetapi buram jika scaling)"
373
+Basic.Settings.Video.DownscaleFilter.Bicubic="Bikubik (scaling tajam, 16 sampel)"
374
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (scaling tajam, 36 sampel)"
375
 Basic.Settings.Video.DownscaleFilter.Area="Area (Jumlah tertimbang, 4/6/9 sampel)"
376
 
377
 Basic.Settings.Audio="Audio"
378
@@ -823,16 +843,21 @@
379
 Basic.AdvAudio.ActiveOnly="Sumber Aktif Saja"
380
 Basic.AdvAudio.Name="Nama"
381
 Basic.AdvAudio.Volume="Volume"
382
+Basic.AdvAudio.VolumeSource="Volume untuk '%1'"
383
 Basic.AdvAudio.Mono="Mono"
384
+Basic.AdvAudio.MonoSource="Mono Downmix untuk '%1\""
385
 Basic.AdvAudio.Balance="Keseimbangan"
386
-Basic.AdvAudio.SyncOffset="Sinkronkan Offset"
387
+Basic.AdvAudio.BalanceSource="Saldo untuk '%1'"
388
+Basic.AdvAudio.SyncOffset="Offset Sinkronisasi"
389
+Basic.AdvAudio.SyncOffsetSource="Offset Sinkronisasi untuk '%1'"
390
 Basic.AdvAudio.Monitoring="Monitoring Audio"
391
 Basic.AdvAudio.Monitoring.None="Monitor Mati"
392
 Basic.AdvAudio.Monitoring.MonitorOnly="Monitor Saja (bisukan output)"
393
 Basic.AdvAudio.Monitoring.Both="Monitor dan Output"
394
+Basic.AdvAudio.MonitoringSource="Pemantauan Audio untuk '%1'"
395
 Basic.AdvAudio.AudioTracks="Trek"
396
 
397
-Basic.Settings.Hotkeys="Hotkey"
398
+Basic.Settings.Hotkeys="Pintasan"
399
 Basic.Settings.Hotkeys.Pair="Kombinasi tombol yang berbagi dengan '%1' bertindak sebagai pengalih"
400
 Basic.Settings.Hotkeys.Filter="Filter"
401
 
402
@@ -898,12 +923,12 @@
403
 NoSources.Title="Tidak Ada Sumber"
404
 NoSources.Text="Sepertinya Anda belum menambah sumber video apa pun, jadi Anda hanya akan menghasilkan layar kosong. Anda yakin ingin melakukan ini?"
405
 NoSources.Text.AddSource="Anda dapat menambahkan sumber dengan mengklik ikon + di bawah kotak Sumber di jendela utama kapan saja."
406
-NoSources.Label="Anda tidak memiliki sumber apapun.\nKlik tombol + di bawah ini,\natau klik kanan disini untuk menambahkannya."
407
+NoSources.Label="Anda tidak memiliki sumber apapun.\nKlik tombol + di bawah ini,\natau klik kanan disini untuk menambahkan."
408
 
409
 ChangeBG="Atur Warna"
410
 CustomColor="Warna Kustom"
411
 
412
-BrowserSource.EnableHardwareAcceleration="Aktifkan Akselerasi Hardware Sumber Browser"
413
+BrowserSource.EnableHardwareAcceleration="Aktifkan Akselerasi Perangkat Keras Sumber Browser"
414
 
415
 About="Tentang"
416
 About.Info="OBS Studio adalah perangkat lunak perekam video dan live streaming gratis dan open source."
417
@@ -936,7 +961,7 @@
418
 Restart="Mulai Ulang"
419
 NeedsRestart="OBS Studio perlu dimulai ulang. Apakah Anda ingin melakukannya sekarang?"
420
 
421
-ContextBar.NoSelectedSource="Tidak ada sumber terpilih"
422
+ContextBar.NoSelectedSource="Tidak ada sumber yang dipilih"
423
 ContextBar.ResetTransform="Reset Transformasi"
424
 ContextBar.FitToCanvas="Pas dengan Kanvas"
425
 
426
obs-studio-26.0.2.tar.xz/UI/data/locale/ig-NG.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/ig-NG.ini Changed
6
 
1
@@ -109,3 +109,4 @@
2
 
3
 
4
 
5
+
6
obs-studio-26.0.2.tar.xz/UI/data/locale/it-IT.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/it-IT.ini Changed
121
 
1
@@ -161,6 +161,7 @@
2
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Vuoi disconnettere l'account?"
3
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Questa modifica verrà applicata immediatamente. Sei sicuro di voler disconnettere il tuo account?"
4
 Basic.AutoConfig.StreamPage.GetStreamKey="Ottieni Chiave Stream"
5
+Basic.AutoConfig.StreamPage.MoreInfo="Altre Informazioni"
6
 Basic.AutoConfig.StreamPage.UseStreamKey="Utilizza il codice delle dirette"
7
 Basic.AutoConfig.StreamPage.Service="Servizio"
8
 Basic.AutoConfig.StreamPage.Service.ShowAll="Mostra tutti..."
9
@@ -365,8 +366,8 @@
10
 Deinterlacing.TopFieldFirst="Priorità nei livelli superiori"
11
 Deinterlacing.BottomFieldFirst="Priorità nei livelli inferiori"
12
 
13
-VolControl.SliderUnmuted="Barra del volume per «%1»: %2"
14
-VolControl.SliderMuted="Barra del volume per «%1»: %2 (attualmente silenziato)"
15
+VolControl.SliderUnmuted="Barra del volume per «%1»:"
16
+VolControl.SliderMuted="Barra del volume per «%1»: (attualmente silenziato)"
17
 VolControl.Mute="Silenzia «%1'»"
18
 VolControl.Properties="Proprietà di «%1»"
19
 
20
@@ -382,6 +383,7 @@
21
 
22
 AddProfile.Title="Aggiunta di un profilo"
23
 AddProfile.Text="Digita il nome del profilo"
24
+AddProfile.WizardCheckbox="Mostra procedura guidata di configurazione automatica"
25
 
26
 RenameProfile.Title="Rinomina del profilo"
27
 
28
@@ -396,6 +398,11 @@
29
 Basic.SourceSelect.AddExisting="Aggiungine una esistente"
30
 Basic.SourceSelect.AddVisible="Rendi visibile la fonte"
31
 
32
+Basic.Main.Sources.Visibility="Visibilità"
33
+Basic.Main.Sources.VisibilityDescription="Controlla la visibilità di «%1» nella superficie"
34
+Basic.Main.Sources.Lock="Blocca"
35
+Basic.Main.Sources.LockDescription="Blocca la posizione e la scala di «%1» nella superficie"
36
+
37
 Basic.PropertiesWindow="Proprietà di «%1»"
38
 Basic.PropertiesWindow.AutoSelectFormat="%1 (autoseleziona: %2)"
39
 Basic.PropertiesWindow.SelectColor="Seleziona il colore"
40
@@ -635,13 +642,19 @@
41
 Basic.Settings.Stream.MissingUrlAndApiKey="URL e Codice delle dirette sono mancanti.\n\nApri le impostazioni per inserire URL e codice delle dirette nella scheda 'stream'."
42
 Basic.Settings.Stream.MissingUrl="URL dello stream mancante.\n\nApri le impostazione per inserire l'URL nella scheda \"Stream\"."
43
 Basic.Settings.Stream.MissingStreamKey="Chiave stream mancante.\n\nApri le impostazioni per inserire la chiave stream nella scheda \"Stream\"."
44
+Basic.Settings.Stream.IgnoreRecommended="Ignora opzioni raccomandate di streaming"
45
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Ignora le impostazioni raccomandate"
46
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Attenzione: ignorare le limitazioni del servizio può degradare la qualità o impedire completamente lo streaming.\n\nContinuare?"
47
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Bitrate video massimo: %1 kbps"
48
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Bitrate audio massimo: %1 kbps"
49
+Basic.Settings.Stream.Recommended.MaxResolution="Risoluzione massima: %1"
50
+Basic.Settings.Stream.Recommended.MaxFPS="FPS Massimi: %1"
51
 
52
 Basic.Settings.Output="Uscita"
53
 Basic.Settings.Output.Format="Formato di registrazione"
54
 Basic.Settings.Output.Encoder="Codifica"
55
 Basic.Settings.Output.SelectDirectory="Seleziona la cartella di registrazione"
56
 Basic.Settings.Output.SelectFile="Seleziona il file di registrazione"
57
-Basic.Settings.Output.EnforceBitrate="Non superare i limiti di velocità in bit del servizio di dirette"
58
 Basic.Settings.Output.DynamicBitrate="Cambia in modo dinamico il bitrate per gestire la congestione"
59
 Basic.Settings.Output.DynamicBitrate.Beta="Cambia in modo dinamico il bitrate per gestire la congestione (Beta)"
60
 Basic.Settings.Output.DynamicBitrate.TT="Invece di saltare fotogrammi per ridurre la congestione, cambia dinamicamente il bitrate al volo.\n\nNota che questo potrebbe aumentare il ritardo agli spettatori se c'è una significante congestione improvvisa.\nQuando il bitrate diminuisce, potrebbero volerci fino ad alcuni minuti per ripristinarlo.\n\nAttualmente è solo supportato per RTMP."
61
@@ -662,8 +675,8 @@
62
 Basic.Settings.Output.Simple.RecordingQuality.Small="Alta qualità, dimensioni dei file medie"
63
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Qualità indistinguibile, dimensioni dei file elevate"
64
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Senza perdita di qualità (lossless), dimensioni dei file enormi"
65
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Attenzione: la velocità in bit video della diretta verrà impostata a %1, che è il limite più alto per il servizio di dirette attuale. Se sei sicuro di voler superare il valore %1, attiva le impostazioni avanzate della codifica e deseleziona «Non superare i limiti di velocità in bit del servizio di dirette»."
66
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Attenzione: la velocità in bit audio della diretta verrà impostata a %1, che è il limite più alto per il servizio di dirette attuale. Se sei sicuro di voler superare il valore %1, attiva le impostazioni avanzate della codifica e deseleziona «Non superare i limiti di velocità in bit del servizio di dirette»."
67
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Attenzione: il bitrate video in streaming sarà impostato a %1, che è il limite superiore per il servizio di streaming corrente."
68
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Attenzione: il bitrate audio in streaming sarà impostato a %1, che è il limite superiore per il servizio di streaming corrente."
69
 Basic.Settings.Output.Simple.Warn.CannotPause="Attenzione: Le registrazioni non possono essere sospese se la qualità di registrazione è impostata su \"Lo stesso del flusso\"."
70
 Basic.Settings.Output.Simple.Warn.Encoder="Attenzione: registrare con una codifica software a una qualità diversa dalla diretta richiederà un utilizzo aggiuntivo della CPU se esegui dirette e registri allo stesso tempo."
71
 Basic.Settings.Output.Simple.Warn.Lossless="Attenzione: la qualità lossless genera file estremamente grandi! Può occupare fino a 7 gigabyte di spazio al minuto con alte risoluzioni e framerate. Non è consigliata per lunghe registrazioni a meno che tu non abbia molto spazio disponibile sul disco rigido."
72
@@ -674,6 +687,11 @@
73
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardware (AMD)"
74
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardware (NVENC)"
75
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Software (x264, preset con basso utilizzo della CPU, aumenta le dimensioni dei file)"
76
+Basic.Settings.Output.Simple.TwitchVodTrack="Incrocia la traccia VOD (usa traccia 2)"
77
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Risoluzione/framerate incompatibili"
78
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Questo servizio di streaming non supporta la risoluzione e/o il framerate in uscita correnti. Verranno cambiati al valore più vicino compatibile:\n\n%1\n\nContinuare?"
79
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Risoluzione: %1"
80
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS: %1"
81
 Basic.Settings.Output.VideoBitrate="Velocità in bit video"
82
 Basic.Settings.Output.AudioBitrate="Velocità in bit audio"
83
 Basic.Settings.Output.Reconnect="Riconnessione automatica"
84
@@ -688,15 +706,16 @@
85
 Basic.Settings.Output.Adv.Rescale="Riscala l'uscita"
86
 Basic.Settings.Output.Adv.AudioTrack="Traccia audio"
87
 Basic.Settings.Output.Adv.Streaming="Dirette"
88
-Basic.Settings.Output.Adv.ApplyServiceSettings="Imponi le impostazioni di codifica del servizio delle dirette"
89
 Basic.Settings.Output.Adv.Audio.Track1="Traccia 1"
90
 Basic.Settings.Output.Adv.Audio.Track2="Traccia 2"
91
 Basic.Settings.Output.Adv.Audio.Track3="Traccia 3"
92
 Basic.Settings.Output.Adv.Audio.Track4="Traccia 4"
93
 Basic.Settings.Output.Adv.Audio.Track5="Traccia 5"
94
 Basic.Settings.Output.Adv.Audio.Track6="Traccia 6"
95
+Basic.Settings.Output.Adv.TwitchVodTrack="Traccia VOD Twitch"
96
 
97
 Basic.Settings.Output.Adv.Recording="Registrazioni"
98
+Basic.Settings.Output.Adv.Recording.RecType="Tipo di registrazione"
99
 Basic.Settings.Output.Adv.Recording.Type="Tipo"
100
 Basic.Settings.Output.Adv.Recording.Type.Standard="Standard"
101
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Uscita personalizzata (FFmpeg)"
102
@@ -824,13 +843,18 @@
103
 Basic.AdvAudio.ActiveOnly="Solo Fonti Attive"
104
 Basic.AdvAudio.Name="Nome"
105
 Basic.AdvAudio.Volume="Volume"
106
+Basic.AdvAudio.VolumeSource="Volume per «%1»"
107
 Basic.AdvAudio.Mono="Mono"
108
+Basic.AdvAudio.MonoSource="Mix in mono per «%1»"
109
 Basic.AdvAudio.Balance="Bilanciamento"
110
+Basic.AdvAudio.BalanceSource="Bilanciamento per «%1»"
111
 Basic.AdvAudio.SyncOffset="Ritardo per la sincronizzazione"
112
+Basic.AdvAudio.SyncOffsetSource="Scostamento di sincronizzazione per «%1»"
113
 Basic.AdvAudio.Monitoring="Monitoraggio audio"
114
 Basic.AdvAudio.Monitoring.None="Disattivato"
115
 Basic.AdvAudio.Monitoring.MonitorOnly="Solo monitoraggio (uscita audio nel file disattivata)"
116
 Basic.AdvAudio.Monitoring.Both="Monitora l'audio e invia all'uscita"
117
+Basic.AdvAudio.MonitoringSource="Monitoraggio audio per «%1»"
118
 Basic.AdvAudio.AudioTracks="Tracce"
119
 
120
 Basic.Settings.Hotkeys="Scorciatoie"
121
obs-studio-26.0.2.tar.xz/UI/data/locale/ja-JP.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/ja-JP.ini Changed
103
 
1
@@ -161,6 +161,7 @@
2
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="アカウントを切断しますか?"
3
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="この変更はすぐに適用されます。 アカウントを切断してもよろしいですか?"
4
 Basic.AutoConfig.StreamPage.GetStreamKey="ストリームキーを取得"
5
+Basic.AutoConfig.StreamPage.MoreInfo="詳細情報"
6
 Basic.AutoConfig.StreamPage.UseStreamKey="ストリームキーを使用"
7
 Basic.AutoConfig.StreamPage.Service="サービス"
8
 Basic.AutoConfig.StreamPage.Service.ShowAll="すべて表示..."
9
@@ -365,8 +366,6 @@
10
 Deinterlacing.TopFieldFirst="トップフィールドが先"
11
 Deinterlacing.BottomFieldFirst="ボトムフィールドが先"
12
 
13
-VolControl.SliderUnmuted="'%1' の音量スライダー: %2"
14
-VolControl.SliderMuted="'%1' の音量スライダー: %2 (現在ミュート)"
15
 VolControl.Mute="'%1' をミュート"
16
 VolControl.Properties="'%1' のプロパティ"
17
 
18
@@ -382,6 +381,7 @@
19
 
20
 AddProfile.Title="プロファイルを追加"
21
 AddProfile.Text="プロファイルの名前を入力してください"
22
+AddProfile.WizardCheckbox="自動構成ウィザードを表示する"
23
 
24
 RenameProfile.Title="プロファイルの名前を変更"
25
 
26
@@ -396,6 +396,8 @@
27
 Basic.SourceSelect.AddExisting="既存を追加"
28
 Basic.SourceSelect.AddVisible="ソースを表示"
29
 
30
+Basic.Main.Sources.Lock="ロック"
31
+
32
 Basic.PropertiesWindow="'%1' のプロパティ"
33
 Basic.PropertiesWindow.AutoSelectFormat="%1 (自動選択: %2)"
34
 Basic.PropertiesWindow.SelectColor="色を選択"
35
@@ -635,13 +637,19 @@
36
 Basic.Settings.Stream.MissingUrlAndApiKey="配信用URLとストリームキーがありません。\n\n設定の[配信]タブで配信用URLとストリームキーが入力できます。"
37
 Basic.Settings.Stream.MissingUrl="配信用URLがありません。\n\n設定の[配信]タブで配信用URLが入力できます。"
38
 Basic.Settings.Stream.MissingStreamKey="ストリームキーがありません。\n\n設定の[配信]タブでストリームキーが入力できます。"
39
+Basic.Settings.Stream.IgnoreRecommended="配信サービスの推奨事項設定を無視する"
40
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="推奨設定を上書きする"
41
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="警告: 配信サービスの制限を無視すると、配信の品質が低下したり、配信ができなくなったりする可能性があります。\n\n続行しますか?"
42
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="最大映像ビットレート: %1 kbps"
43
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="最大音声ビットレート: %1 kbps"
44
+Basic.Settings.Stream.Recommended.MaxResolution="最大解像度: %1"
45
+Basic.Settings.Stream.Recommended.MaxFPS="最大FPS: %1"
46
 
47
 Basic.Settings.Output="出力"
48
 Basic.Settings.Output.Format="録画フォーマット"
49
 Basic.Settings.Output.Encoder="エンコーダ"
50
 Basic.Settings.Output.SelectDirectory="録画ディレクトリを選択"
51
 Basic.Settings.Output.SelectFile="録画ファイルを選択"
52
-Basic.Settings.Output.EnforceBitrate="配信サービスのビットレートを制限する"
53
 Basic.Settings.Output.DynamicBitrate="輻輳を管理するためにビットレートを動的に変更する"
54
 Basic.Settings.Output.DynamicBitrate.Beta="輻輳を管理するためにビットレートを動的に変更する (ベータ版)"
55
 Basic.Settings.Output.DynamicBitrate.TT="フレームをドロップして輻輳を減らす代わりに、ビットレートを動的に変更します。\n\n突然の大幅な輻輳が発生した場合には視聴者の遅延が増大する可能性があることに注意してください。\nビットレートが低下すると、復元に数分かかることがあります。\n\n現時点ではRTMPでのみサポートされています。"
56
@@ -662,8 +670,8 @@
57
 Basic.Settings.Output.Simple.RecordingQuality.Small="高品質、ファイルサイズ中"
58
 Basic.Settings.Output.Simple.RecordingQuality.HQ="超高品質、ファイルサイズ大"
59
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="無損失品質、ファイルサイズ特大"
60
-Basic.Settings.Output.Simple.Warn.VideoBitrate="警告: 配信の映像ビットレートは %1 に設定され、これは現在の配信サービスの上限です。 %1 より大きい値に設定する場合、高度なエンコーダオプションを有効にして「配信サービスのビットレートを制限する」のチェックをオフにしてください。"
61
-Basic.Settings.Output.Simple.Warn.AudioBitrate="警告: 配信の音声ビットレートは %1 に設定され、これは現在の配信サービスの上限です。 %1 より大きい値に設定する場合、高度なエンコーダオプションを有効にして「配信サービスのビットレートを制限する」のチェックをオフにしてください。"
62
+Basic.Settings.Output.Simple.Warn.VideoBitrate="警告: 配信の映像のビットレートは、現行の配信サービスの上限である%1に設定されます。"
63
+Basic.Settings.Output.Simple.Warn.AudioBitrate="警告: 配信の音声のビットレートは、現行の配信サービスの上限である%1に設定されます。"
64
 Basic.Settings.Output.Simple.Warn.CannotPause="警告:録画品質が「配信と同品質」に設定されている場合は録画を一時停止することはできません。"
65
 Basic.Settings.Output.Simple.Warn.Encoder="警告: 配信と録画を同時に行う場合に配信と異なる品質でソフトウェアエンコーダで録画する場合にはさらなるCPU 使用率が必要になります。"
66
 Basic.Settings.Output.Simple.Warn.Lossless="警告: 無損失品質は途方もなく大きなファイルサイズになります!無損失品質は高解像度と高フレーム レートで 1 分あたり7 ギガバイト以上のディスク容量を使用します。 非常に大量のディスクの空き容量がない場合の長時間録画には無損失設定の使用はお勧めしません。"
67
@@ -674,6 +682,11 @@
68
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="ハードウェア (AMD)"
69
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="ハードウェア (NVENC)"
70
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="ソフトウェア (x264 CPU使用率の低いプリセット、ファイルサイズ増加)"
71
+Basic.Settings.Output.Simple.TwitchVodTrack="Twitch VODトラック (トラック 2を使用)"
72
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="互換性のない解像度/フレームレート"
73
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="この配信サービスは現在の出力解像度やフレームレートをサポートしていません。それらは最も近い互換性のある値に変更されます:\n\n%1\n\n続行しますか?"
74
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="解像度: %1"
75
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS: %1"
76
 Basic.Settings.Output.VideoBitrate="映像ビットレート"
77
 Basic.Settings.Output.AudioBitrate="音声ビットレート"
78
 Basic.Settings.Output.Reconnect="自動的に再接続"
79
@@ -688,13 +701,13 @@
80
 Basic.Settings.Output.Adv.Rescale="出力をリスケールする"
81
 Basic.Settings.Output.Adv.AudioTrack="音声トラック"
82
 Basic.Settings.Output.Adv.Streaming="配信"
83
-Basic.Settings.Output.Adv.ApplyServiceSettings="配信サービスのエンコーダ設定を適用する"
84
 Basic.Settings.Output.Adv.Audio.Track1="トラック 1"
85
 Basic.Settings.Output.Adv.Audio.Track2="トラック 2"
86
 Basic.Settings.Output.Adv.Audio.Track3="トラック 3"
87
 Basic.Settings.Output.Adv.Audio.Track4="トラック 4"
88
 Basic.Settings.Output.Adv.Audio.Track5="トラック 5"
89
 Basic.Settings.Output.Adv.Audio.Track6="トラック 6"
90
+Basic.Settings.Output.Adv.TwitchVodTrack="Twitch VODトラック"
91
 
92
 Basic.Settings.Output.Adv.Recording="録画"
93
 Basic.Settings.Output.Adv.Recording.Type="種別"
94
@@ -931,7 +944,7 @@
95
 Importer.Path="コレクションのパス"
96
 Importer.Program="検出されたアプリケーション"
97
 Importer.AutomaticCollectionPrompt="シーンコレクションの自動検索"
98
-Importer.AutomaticCollectionText="対応するサードパーティプログラムからインポート可能なシーンコレクションを自動的に見つけることができます。 シーンコレクションを自動検索しますか?\n\nこれは後で設定 > 一般 > インポーターで変更できます。"
99
+Importer.AutomaticCollectionText="OBSは対応するサードパーティプログラムからインポート可能なシーンコレクションを自動的に見つけることができます。 OBSでシーンコレクションを自動検索しますか?\n\nこれは後で設定 > 一般 > インポーターで変更できます。"
100
 
101
 
102
 Restart="再起動"
103
obs-studio-26.0.2.tar.xz/UI/data/locale/ka-GE.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/ka-GE.ini Changed
142
 
1
@@ -93,6 +93,7 @@
2
 LogViewer="აღრიცხვის მნახველი"
3
 ShowOnStartup="ჩვენება გაშვებისას"
4
 OpenFile="ფაილის გახსნა"
5
+AddValue="დაემატოს %1"
6
 
7
 AlreadyRunning.Title="OBS უკვე გაშვებულია"
8
 AlreadyRunning.Text="OBS უკვე გაშვებულია! გთხოვთ, ჯერ დახუროთ OBS-ის ყველა გაშვებული პროცესი, სანამ ახლის გაშვებას შეეცდებით. თუ მითითებული გაქვთ, რომ დახურვის ნაცვლად, OBS სისტემურ არეში უნდა ჩაიკეცოს, გთხოვთ მანდაც გადაამოწმოთ, დარჩენილი ხომ არაა."
9
@@ -160,6 +161,7 @@
10
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="გსურთ ანგარიშიდან გამოერთება?"
11
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="ცვლილება დაუყოვნებლივ აისახება. ნამდვილად გსურთ, ანგარიშიდან გამოერთება?"
12
 Basic.AutoConfig.StreamPage.GetStreamKey="ნაკადის გასაღების მიღება"
13
+Basic.AutoConfig.StreamPage.MoreInfo="ვრცლად"
14
 Basic.AutoConfig.StreamPage.UseStreamKey="ნაკადის გასაღების გამოყენება"
15
 Basic.AutoConfig.StreamPage.Service="მომსახურება"
16
 Basic.AutoConfig.StreamPage.Service.ShowAll="ყველას ჩვენება..."
17
@@ -364,8 +366,8 @@
18
 Deinterlacing.TopFieldFirst="ზედა ველიდან"
19
 Deinterlacing.BottomFieldFirst="ქვედა ველიდან"
20
 
21
-VolControl.SliderUnmuted="ხმის სამართავი „%1“: %2"
22
-VolControl.SliderMuted="ხმის სამართავი „%1“: %2 (ამჟამად დადუმებული)"
23
+VolControl.SliderUnmuted="ხმის სამართავი „%1“:"
24
+VolControl.SliderMuted="ხმის სამართავი „%1“: (ამჟამად დადუმებული)"
25
 VolControl.Mute="'%1' დადუმება"
26
 VolControl.Properties="„%1“ – პარამეტრები"
27
 
28
@@ -381,6 +383,7 @@
29
 
30
 AddProfile.Title="პროფილის დამატება"
31
 AddProfile.Text="გთხოვთ, მიუთითოთ პროფილის დასახელება"
32
+AddProfile.WizardCheckbox="თვითგამართვის მეგზურის ჩვენება"
33
 
34
 RenameProfile.Title="პროფილის გადარქმევა"
35
 
36
@@ -395,6 +398,11 @@
37
 Basic.SourceSelect.AddExisting="არსებულის დამატება"
38
 Basic.SourceSelect.AddVisible="წყაროს გამოჩენა"
39
 
40
+Basic.Main.Sources.Visibility="ხილვადობა"
41
+Basic.Main.Sources.VisibilityDescription="განსაზღვრავს, ხილული იქნება თუ არა „%1“ საერთო ფონზე"
42
+Basic.Main.Sources.Lock="ჩაკეტვა"
43
+Basic.Main.Sources.LockDescription="„%1“ არ შეიცვლის ზომასა და მდებარეობას საერთო ფონზე"
44
+
45
 Basic.PropertiesWindow="„%1“ – პარამეტრები"
46
 Basic.PropertiesWindow.AutoSelectFormat="%1 (თვითშერჩევა: %2)"
47
 Basic.PropertiesWindow.SelectColor="ფერის შერჩევა"
48
@@ -634,13 +642,19 @@
49
 Basic.Settings.Stream.MissingUrlAndApiKey="URL და ნაკადის გასაღები, ვერ მოიძებნა.\n\nგახსენით პარამეტრები და მიუთითეთ URL შესაბამისი გასაღებით „ნაკადის“ განყოფილებაში."
50
 Basic.Settings.Stream.MissingUrl="ნაკადის URL ვერ მოიძებნა.\n\nგახსენით პარამეტრები და მიუთითეთ URL „ნაკადის“ განყოფილებაში."
51
 Basic.Settings.Stream.MissingStreamKey="ნაკადის გასაღები ვერ მოიძებნა.\n\nგახსენით პარამეტრები და მიუთითეთ გასაღები „ნაკადის“ განყოფილებაში."
52
+Basic.Settings.Stream.IgnoreRecommended="ნაკადის მომსახურების შემოთავაზებული პარამეტრების უგულებელყოფა"
53
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="შემოთავაზებული პარამეტრების ჩანაცვლება"
54
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="გაფრთხილება: მომსახურების ზღვრების უგულებელყოფამ, შესაძლოა გააფუჭოს ნაკადის ხარისხი ან არ მოგცეთ ეთერში გაშვების საშუალება.\n\nგანაგრძობთ?"
55
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="ვიდეოს უმაღლესი ბიტური სიხშირე: %1 კბწმ"
56
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="ხმის უმაღლესი ბიტური სიხშირე: %1 კბწმ"
57
+Basic.Settings.Stream.Recommended.MaxResolution="დასაშვები გაფართოება: %1"
58
+Basic.Settings.Stream.Recommended.MaxFPS="დასაშვები FPS: %1"
59
 
60
 Basic.Settings.Output="გამოტანა"
61
 Basic.Settings.Output.Format="ჩაწერის ფორმატი"
62
 Basic.Settings.Output.Encoder="დამშიფრავი"
63
 Basic.Settings.Output.SelectDirectory="საქაღალდის არჩევა ჩანაწერისთვის"
64
 Basic.Settings.Output.SelectFile="ფაილის არჩევა ჩანაწერისთვის"
65
-Basic.Settings.Output.EnforceBitrate="ნაკადის გამშვები მომსახურების ბიტური სიხშირის ზღვრების დადგენა"
66
 Basic.Settings.Output.DynamicBitrate="ბიტური სიხშირის ცვალებადობა, ქსელის გადატვირთულობის ასარიდებლად"
67
 Basic.Settings.Output.DynamicBitrate.Beta="ბიტური სიხშირის ცვალებადობა, ქსელის გადატვირთულობის ასარიდებლად (საცდელი)"
68
 Basic.Settings.Output.DynamicBitrate.TT="ქსელის გადატვირთულობის შესამცირებლად კადრების გამოტოვების ნაცვლად, მიმდინარე ბიტური სიხშირის ცვალებადობა.\n\nგაითვალისწინეთ, რომ შედეგად შესაძლოა გაიზარდოს დაყოვნება მაყურებლებისთვის, დატვირთვის უეცარი მატებისას.\nბიტური სიხშირის ვარდნის შემდეგ, აღდგენა რამდენიმე წუთს გასტანს.\n\nამჟამად მხარდაჭერილია მხოლოდ RTMP."
69
@@ -661,8 +675,8 @@
70
 Basic.Settings.Output.Simple.RecordingQuality.Small="მაღალი ხარისხი, საშუალო ზომის ფაილი"
71
 Basic.Settings.Output.Simple.RecordingQuality.HQ="განუსაზღვრელი ხარისხი, დიდი ზომის ფაილი"
72
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="უდანაკარგო ხარისხი, მეტისმეტად დიდი ზომის ფაილი"
73
-Basic.Settings.Output.Simple.Warn.VideoBitrate="გაფრთხილება: ვიდეონაკადის ბიტურ სიხშირედ მიეთითება %1, რაც წარმოადგენს უმაღლეს დაშვებულ ზღვარს, ნაკადის გამშვები მომსახურებისთვის. თუ ნამდვილად გსურთ %1 ბიტურ სიხშირეზე მეტის მიღება, ჩართეთ დაშიფვრის გაფართოებული პარამეტრები და მოხსენით მონიშვნა „ნაკადის გამშვები მომსახურების ბიტური სიხშირის ზღვრების დადგენას“."
74
-Basic.Settings.Output.Simple.Warn.AudioBitrate="გაფრთხილება: ხმოვანი ნაკადის ბიტურ სიხშირედ მიეთითება %1, რაც წარმოადგენს უმაღლეს დაშვებულ ზღვარს, ნაკადის გაშვების მომსახურებისთვის. თუ ნამდვილად გსურთ %1 ბიტურ სიხშირეზე მეტის მიღება, ჩართეთ დაშიფვრის გაფართოებული პარამეტრები და მოხსენით მონიშვნა „ნაკადის გამშვები მომსახურების ბიტური სიხშირის ზღვრების დადგენას“."
75
+Basic.Settings.Output.Simple.Warn.VideoBitrate="გაფრთხილება: ნაკადის ვიდეოს სიხშირედ მიეთითება %1, რომელიც მოცემული მომსახურების უმაღლესი ზღვრული მნიშვნელობაა."
76
+Basic.Settings.Output.Simple.Warn.AudioBitrate="გაფრთხილება: ნაკადის ხმის სიხშირედ მიეთითება %1, რომელიც მოცემული მომსახურების უმაღლესი ზღვრული მნიშვნელობაა."
77
 Basic.Settings.Output.Simple.Warn.CannotPause="შენიშვნა: ჩაწერის შეჩერება შეუძლებელია, თუ ჩაწერის ხარისხად მითითებულია „გაშვებული ნაკადის შესაბამისი“."
78
 Basic.Settings.Output.Simple.Warn.Encoder="გაფრთხილება: გაშვებული ნაკადისგან განსხვავებულ ხარისხში ჩანაწერის დაშიფვრა, ზრდის პროცესორის დატვირთვას, როცა ნაკადის გაშვება და ჩაწერა, ერთდროულად მიმდინარეობს."
79
 Basic.Settings.Output.Simple.Warn.Lossless="გაფრთხილება: უდანაკარგო ხარისხის მითითების შემთხვევაში, შეიქმნება მეტისმეტად დიდი ზომის ფაილები! უდანაკარგო ხარისხის ვიდეოს თითოეული წუთის მოცულობამ დისკზე, შესაძლოა 7 გიგაბაიტს გადააჭარბოს, მაღალი გარჩევადობისა და კადრის სიხშირის პირობებში. ხანგრძლივი ჩანაწერებისთვის, უდანაკარგოს არჩევა არაა მიზანშეწონილი, თუ არ გაქვთ საკმარისად დიდი მოცულობის თავისუფალი ადგილი დისკზე."
80
@@ -673,6 +687,11 @@
81
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="აპარატურული (AMD)"
82
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="აპარატურული (NVENC)"
83
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="პროგრამული (x264 პროცესორის დაბალი მოხმარების მზა პარამეტრები, ზრდის ფაილის ზომას)"
84
+Basic.Settings.Output.Simple.TwitchVodTrack="Twitch-VOD-ჩანაწერი (გამოიყენება ბილიკი 2)"
85
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="არათავსებადი გაფართოება/კადრის სიხშირე"
86
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="ნაკადის გაშვების ამ მომსახურებაზე, მითითებული გამოტანის გაფართოება და/ან კადრის სიხშირე არაა მხარდაჭერილი. შეცვლიან უახლოესი თავსებადი მნიშვნელობით:\n\n%1\n\nგსურთ, განაგრძოთ?"
87
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="გაფართოება: %1"
88
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS (კადრი/წმ): %1"
89
 Basic.Settings.Output.VideoBitrate="ვიდეოს ბიტური სიხშირე"
90
 Basic.Settings.Output.AudioBitrate="ხმის ბიტური სიხშირე"
91
 Basic.Settings.Output.Reconnect="ხელახლა დაკავშირება ავტომატურად"
92
@@ -687,15 +706,16 @@
93
 Basic.Settings.Output.Adv.Rescale="გამოტანის ზომების შეცვლა"
94
 Basic.Settings.Output.Adv.AudioTrack="ხმოვანი ბილიკი"
95
 Basic.Settings.Output.Adv.Streaming="ნაკადი"
96
-Basic.Settings.Output.Adv.ApplyServiceSettings="ნაკადის გამშვები მომსახურების პარამეტრებით სარგებლობა"
97
 Basic.Settings.Output.Adv.Audio.Track1="ბილიკი 1"
98
 Basic.Settings.Output.Adv.Audio.Track2="ბილიკი 2"
99
 Basic.Settings.Output.Adv.Audio.Track3="ბილიკი 3"
100
 Basic.Settings.Output.Adv.Audio.Track4="ბილიკი 4"
101
 Basic.Settings.Output.Adv.Audio.Track5="ბილიკი 5"
102
 Basic.Settings.Output.Adv.Audio.Track6="ბილიკი 6"
103
+Basic.Settings.Output.Adv.TwitchVodTrack="Twitch-VOD-ჩანაწერი"
104
 
105
 Basic.Settings.Output.Adv.Recording="ჩაწერა"
106
+Basic.Settings.Output.Adv.Recording.RecType="ჩანაწერის სახეობა"
107
 Basic.Settings.Output.Adv.Recording.Type="სახეობა"
108
 Basic.Settings.Output.Adv.Recording.Type.Standard="ჩვეულებრივი"
109
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="მითითებული გამოტანა (FFmpeg)"
110
@@ -753,9 +773,9 @@
111
 Basic.Settings.Video.DisableAero="Aero გაფორმების გათიშვა"
112
 
113
 Basic.Settings.Video.DownscaleFilter.Bilinear="ორხაზოვანი (უსწრაფესი, მაგრამ ბუნდოვანი მასშტაბირება)"
114
-Basic.Settings.Video.DownscaleFilter.Bicubic="ბიკუბური (მკვეთრი მასშტაბირება, 16 შერჩევა)"
115
-Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (მკვეთრი მასშტაბირება, 36 შერჩევა)"
116
-Basic.Settings.Video.DownscaleFilter.Area="სივრცე (შეწონილი ჯამი, 4/6/9 შერჩევა)"
117
+Basic.Settings.Video.DownscaleFilter.Bicubic="ბიკუბური (მკვეთრი მასშტაბირება, 16 დაყოფა)"
118
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (მკვეთრი მასშტაბირება, 36 დაყოფა)"
119
+Basic.Settings.Video.DownscaleFilter.Area="სივრცე (შეწონილი ჯამი, 4/6/9 დაყოფა)"
120
 
121
 Basic.Settings.Audio="ხმა"
122
 Basic.Settings.Audio.SampleRate="სიხშირე"
123
@@ -823,13 +843,18 @@
124
 Basic.AdvAudio.ActiveOnly="მხოლოდ მოქმედი წყაროები"
125
 Basic.AdvAudio.Name="სახელი"
126
 Basic.AdvAudio.Volume="ხმის დონე"
127
+Basic.AdvAudio.VolumeSource="ხმოვანება „%1“"
128
 Basic.AdvAudio.Mono="მონო"
129
+Basic.AdvAudio.MonoSource="ხმის დაყვანა მონოზე „%1“"
130
 Basic.AdvAudio.Balance="წონასწორობა"
131
+Basic.AdvAudio.BalanceSource="წონასწორობა „%1“"
132
 Basic.AdvAudio.SyncOffset="სინქრონიზაციის გასწორება"
133
+Basic.AdvAudio.SyncOffsetSource="სინქრონიზაციის გასწორება „%1“"
134
 Basic.AdvAudio.Monitoring="ხმის მოსმენა"
135
 Basic.AdvAudio.Monitoring.None="მოსმენის გარეშე"
136
 Basic.AdvAudio.Monitoring.MonitorOnly="მხოლოდ მოსმენა (უხმო გამოტანა)"
137
 Basic.AdvAudio.Monitoring.Both="მოსმენა და გამოტანა"
138
+Basic.AdvAudio.MonitoringSource="ხმის მოსასმენი „%1“"
139
 Basic.AdvAudio.AudioTracks="ბილიკები"
140
 
141
 Basic.Settings.Hotkeys="ღილაკები"
142
obs-studio-26.1.0.tar.xz/UI/data/locale/kab-KAB.ini Added
806
 
1
@@ -0,0 +1,804 @@
2
+
3
+Language="Taglizit"
4
+
5
+OK="Ih"
6
+Apply="Snes"
7
+Cancel="Sefsex"
8
+Close="Mdel"
9
+Save="Sekles"
10
+Discard="Sefsex"
11
+Disable="Sens"
12
+Yes="Ih"
13
+No="Ala"
14
+Add="Rnu"
15
+Remove="Kkes"
16
+Rename="Snifel isem"
17
+Interact="Tamyigawt"
18
+Filters="Imzizdigen"
19
+Properties="Iraten"
20
+MoveUp="Smutti d asawen"
21
+MoveDown="Smutti d akessar"
22
+Settings="Iɣewwaren"
23
+Display="Beqqeḍ"
24
+Name="Isem"
25
+Exit="Ffeɣ"
26
+Mixer="Asexlaḍ n umeslaw"
27
+Browse="Snirem"
28
+Stereo="Stiryu"
29
+StudioProgramProjector="Amagar s ugdil aččuran (ahil)"
30
+PreviewProjector="Amagar s ugdil aččuran (tadlayt)"
31
+SceneProjector="Amagar s ugdil aččuran (asayes)"
32
+SourceProjector="Amagar s ugdil aččuran (aɣbalu)"
33
+StudioProgramWindow="Amagar s usfaylu (ahil)"
34
+PreviewWindow="Amagar s usfaylu (tadlayt)"
35
+SceneWindow="Amagar s usfaylu (aɣbalu)"
36
+SourceWindow="Amagar s usfaylu (aɣbalu)"
37
+MultiviewProjector="Aṭas n tmuɣliwin (agdil aččuran)"
38
+MultiviewWindowed="Aṭas n tmuɣliwin (s usfaylu)"
39
+ResizeProjectorWindowToContent="Sezg asfaylu ɣer ugbur"
40
+Clear="Sfeḍ"
41
+Revert="Err-d"
42
+Show="Sken"
43
+Hide="Ffer"
44
+UnhideAll="Sban-d kulec"
45
+Untitled="War azwel"
46
+New="Amaynut"
47
+Duplicate="Sisleg"
48
+Enable="Sermed"
49
+DisableOSXVSync="Sens macOS V-Sync"
50
+ResetOSXVSyncOnExit="Ales awennez n macOS V-Sync mi ara teffeɣeḍ"
51
+Transition="Asaka"
52
+QuickTransitions="Isuka iruraden"
53
+FadeToBlack="Tifsit ɣer uberkan"
54
+Left="Azelmaḍ"
55
+Right="Ayfus"
56
+Top="Ukessawen"
57
+Bottom="Uksar"
58
+Reset="Ales awennez"
59
+Hours="Isragen"
60
+Minutes="Tisdatin"
61
+Seconds="Tasinin"
62
+Deprecated="D aqbur"
63
+ReplayBuffer="Tallunt n weḥraz n tulsa n tɣuri"
64
+Import="Kter"
65
+Export="Sifeḍ"
66
+Copy="Nɣel"
67
+Paste="Senṭeḍ"
68
+PasteReference="Senṭeḍ (tamselɣut)"
69
+PasteDuplicate="Senṭeḍ (Sisleg)"
70
+RemuxRecordings="Selket ikalasen"
71
+Next="Win ɣers"
72
+Back="Tuɣalin"
73
+Defaults="Amezwar"
74
+HideMixer="Ffer deg usexlaḍ"
75
+TransitionOverride="Ḥettem asaka"
76
+None="Ulac"
77
+StudioMode.Preview="Tadlayt"
78
+StudioMode.Program="Ahil"
79
+ShowInMultiview="Beqqeḍ di tmuɣli tusgitt"
80
+VerticalLayout="Taneɣruft tubdidt"
81
+Group="Agraw"
82
+DoNotShowAgain="Ur d-sskan ara tikelt-nniḍen"
83
+Default="(Amezwar)"
84
+Calculating="Asiḍen..."
85
+Fullscreen="Agdil aččuran"
86
+Windowed="S usfaylu"
87
+Percent="Afmiḍi"
88
+RefreshBrowser="Sismeḍ"
89
+AspectRatio="Assaɣ n tmeẓri <b>%1:%2</b>"
90
+LockVolume="Sekkeṛ ableɣ"
91
+LogViewer="Wali aɣmmis"
92
+ShowOnStartup="Sken di tnekra"
93
+OpenFile="Ldi afaylu"
94
+AddValue="Rnu %1"
95
+
96
+AlreadyRunning.Title="OBS itteddu yakan"
97
+AlreadyRunning.Text="OBS itteddu yakan! Ma yella ur teɛmideḍ ara i waya, ttxil-k msens kra n tummanin n OBS send ad tɛerḍeḍ ad tsekkereḍ tummant tamaynutt. Ma tesɛiḍ OBS yettusɣewren ɣer talɣa taddayt di teɣzut n telɣa, ttxil-k m selken ma yella itteddu dina."
98
+AlreadyRunning.LaunchAnyway="Sekker akken yebɣu yili"
99
+
100
+ChromeOS.Title="Tiɣerɣert ur nettwadhel ara"
101
+ChromeOS.Text="OBS yettban-d am wakken itteddu deg unagbar n ChromeOS. Tiɣerɣert-agi ur tettwadhel ara"
102
+
103
+
104
+
105
+Auth.Authing.Title="Asesteb..."
106
+Auth.Authing.Text="Asesteb s %1, ma ulac uɣilif arǧu..."
107
+Auth.AuthFailure.Title="Tuccḍa n usesteb"
108
+Auth.AuthFailure.Text="Asesteb s %1:\n\n%2: %3 ur yeddi ara"
109
+Auth.InvalidScope.Title="Yettwasra usesteb"
110
+Auth.InvalidScope.Text="Israyen n wesesteb i %1 beddelen. Kra n twuriwin izmer ur wjident ara."
111
+Auth.LoadingChannel.Title="Asader n telɣut n ubadu..."
112
+Auth.LoadingChannel.Text="Asader n telɣut n ubadu i %1, ma ulac uɣilif arǧu..."
113
+Auth.ChannelFailure.Title="Asali n ubadu ur yeddi ara"
114
+Auth.ChannelFailure.Text="Asali n telɣut n ubadu i %1\n\n%2: %3 ur yeddi ara"
115
+Auth.Chat="Ameslay"
116
+Auth.StreamInfo="Talɣut n usuddem"
117
+TwitchAuth.Stats="Tiddadanin n Twitch"
118
+TwitchAuth.Feed="Asuddem n wermud Twitch"
119
+TwitchAuth.TwoFactorFail.Title="Ulamek asuter n tsarut n usuddem"
120
+TwitchAuth.TwoFactorFail.Text="OBS igguma ad iqqen ɣer umiḍan-inek n Twitch. Ma ulac uɣilif, tḥeqqeq belli asesteb s snat n tarrayin yettusbadu deg <a href='https://www.twitch.tv/settings/security'>yiɣewwaren n tɣellist n Twitch</a>acku ayagi ilaq i usekker n usuddem."
121
+RestreamAuth.Channels="Ibuda n Restream"
122
+
123
+Copy.Filters="Nɣel imzizdgen"
124
+Paste.Filters="Senṭeḍ imzizdgen"
125
+
126
+BrowserPanelInit.Title="Tulsa n uwennez n yiminig..."
127
+BrowserPanelInit.Text="Tulsa n uwennez n yiminig, ma ulac uɣilif arǧu..."
128
+
129
+BandwidthTest.Region="Tamnaḍt"
130
+BandwidthTest.Region.US="Iwanaken yeddukklen"
131
+BandwidthTest.Region.EU="Turuft"
132
+BandwidthTest.Region.Asia="Asya"
133
+BandwidthTest.Region.Other="Wayeḍ"
134
+
135
+Basic.AutoConfig="Amallal n uswel awurman"
136
+Basic.AutoConfig.ApplySettings="Snes iɣewwaren"
137
+Basic.AutoConfig.StartPage="Talɣut n useqdec"
138
+Basic.AutoConfig.StartPage.SubTitle="Ini-d acu iwumi ara tesqedceḍ ahil"
139
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Sekk i usuddem, asekles d asnaw"
140
+Basic.AutoConfig.StartPage.PrioritizeRecording="Sekk kan i usekles, ulac asuddem"
141
+Basic.AutoConfig.StartPage.PrioritizeVirtualCam="Ad sqedceɣ kan takamiṛat tuhlist"
142
+Basic.AutoConfig.VideoPage="Iɣewwaren n uvidyu"
143
+Basic.AutoConfig.VideoPage.SubTitle="Fk-d iɣewwaren n uvidyu i tebɣiḍ ad tesqedceḍ"
144
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Seqdec (%1x%2) amiran"
145
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Abeqqeḍ %1 (%2x%3)"
146
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Seqdec (%1) amiran"
147
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="Ama 60 ama 30, maca smenyif 60 ma yella wamek"
148
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="Ama 60 ama 30, maca smenyif tabadut tafellayt"
149
+Basic.AutoConfig.StreamPage="Talɣut n usuddem"
150
+Basic.AutoConfig.StreamPage.SubTitle="Ma ulac uɣilif, sekcem talɣut n usuddem-inek m"
151
+Basic.AutoConfig.StreamPage.ConnectAccount="Qqen amiḍan (yettwasemter)"
152
+Basic.AutoConfig.StreamPage.DisconnectAccount="Senser amiḍan"
153
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Senser amiḍan?"
154
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Abeddel-agi ad ittusnes tura kan. D tidet tebɣiḍ ad tsensreḍ amiḍan-inek m?"
155
+Basic.AutoConfig.StreamPage.GetStreamKey="Awi-d tasarut n usuddem"
156
+Basic.AutoConfig.StreamPage.MoreInfo="Ugar n telɣut"
157
+Basic.AutoConfig.StreamPage.UseStreamKey="Seqdec tasarut n usuddem"
158
+Basic.AutoConfig.StreamPage.Service="Ameẓlu"
159
+Basic.AutoConfig.StreamPage.Service.ShowAll="Sken akk..."
160
+Basic.AutoConfig.StreamPage.Service.Custom="Yugen..."
161
+Basic.AutoConfig.StreamPage.Server="Aqeddac"
162
+Basic.AutoConfig.StreamPage.StreamKey="Tasarut n usuddem"
163
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Aseɣwen)"
164
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Smenyif asettengel n warrum"
165
+Basic.AutoConfig.StreamPage.StreamWarning.Title="Alɣu n usuddem"
166
+Basic.AutoConfig.TestPage="Igmaḍ n taggara"
167
+Basic.AutoConfig.TestPage.SubTitle.Complete="Akayad yemmed"
168
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Ala yetteqqen ɣer: %1..."
169
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Igguma ad iqqen ɣer uqeddac, ma ulac uɣilif selken tuqqna-inek m ɣer internet sakin eɛreḍ tikkelt-nniḍen."
170
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Asekyed n tehri n tesfift i: %1"
171
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Asekyed n usettengal n usuddem, ayagi yezmer ad yeṭṭef tasdidt..."
172
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Asekyed n usettengal n usekles, ayagi yezmer ad yeṭṭef tasdidt..."
173
+Basic.AutoConfig.TestPage.TestingRes="Asekyed n tbdadutin, ayagi yezmer ad yeṭṭef kra n tesdidin..."
174
+Basic.AutoConfig.TestPage.TestingRes.Fail="Asekker n usettengal ur yeddi ara"
175
+Basic.AutoConfig.TestPage.TestingRes.Resolution="Asekyed n %1x%2 %3 FPS..."
176
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Asettengal n usuddem"
177
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Asettengal n usekles"
178
+Basic.AutoConfig.RunAnytime="Ayagi yezmer ad yettwaselekm melmi tebɣiḍ ma teddiḍ ɣer wumuɣ Ifecka."
179
+
180
+Basic.Stats="Tiddadanin"
181
+Basic.Stats.CPUUsage="Aseqdec n CPU"
182
+Basic.Stats.HDDSpaceAvailable="Tallunt n uḍebsi iwejden"
183
+Basic.Stats.MemoryUsage="Aseqdec n tkatut"
184
+Basic.Stats.Output.Stream="Asuddem"
185
+Basic.Stats.Output.Recording="Asekles"
186
+Basic.Stats.Status="Addad"
187
+Basic.Stats.Status.Recording="Asekles"
188
+Basic.Stats.Status.Live="Srid"
189
+Basic.Stats.Status.Reconnecting="Tulsa n tuqqna"
190
+Basic.Stats.Status.Inactive="Yensa"
191
+Basic.Stats.Status.Active="Yermed"
192
+Basic.Stats.DroppedFrames="Ikataren iṛuḥen (azeḍḍa)"
193
+Basic.Stats.MegabytesSent="Aɣrud n yisefka n tuffɣa"
194
+Basic.Stats.Bitrate="Aktum"
195
+Basic.Stats.DiskFullIn="Aḍebsi ad yaččar di (tasmekta n)"
196
+Basic.Stats.ResetStats="Ales awennez n tddadanin"
197
+
198
+ResetUIWarning.Title="D tidet tebɣiḍ ad talseḍ awennez n ugrudem n useqdac?"
199
+
200
+Updater.Title="Yewjed lqem amaynut"
201
+Updater.Text="Yella lqem amaynut iwejden:"
202
+Updater.UpdateNow="Leqqem Tura"
203
+Updater.RemindMeLater="Smekti-yi-d areḍqal"
204
+Updater.Skip="Ttu lqem"
205
+Updater.Running.Title="Ahil itteddu akka tura"
206
+Updater.Running.Text="Llant tuffɣiwin turmidin akka tura, ma ulac uɣilif sens kra tuffɣiwin turmidin send ad tɛerḍeḍ ad tleqqemeḍ"
207
+Updater.NoUpdatesAvailable.Title="Ulac ileqman iwejden"
208
+Updater.NoUpdatesAvailable.Text="Ulac ileqman iwejden akka tura"
209
+Updater.FailedToLaunch="Ulamek asekker n uleqqem"
210
+Updater.GameCaptureActive.Title="Tuṭṭfa n wurar termed"
211
+Updater.GameCaptureActive.Text="Tamkarḍit n tuṭṭfa n wuraren « hook » tettwaseqdac akka tura. Ma ulac uɣilif sens kra n wuraren/wahilen i yettwaṭṭafen akka tura (neɣ ales asekker n Windows) sakin eɛreḍ tikkelt-nniḍen."
212
+
213
+QuickTransitions.DuplicateScene="Sisleg asayes"
214
+QuickTransitions.EditProperties="Sisleg iɣbula"
215
+QuickTransitions.HotkeyName="Asaka arurad: %1"
216
+
217
+Basic.TransitionProperties="Iraten n usaka"
218
+Basic.SceneTransitions="Asaka n yisuyas"
219
+Basic.TransitionDuration="Tanzagt"
220
+Basic.TogglePreviewProgramMode="Askar n ustudyu"
221
+
222
+TransitionNameDlg.Text="Ma ulac uɣilif sekcem isem i usayes"
223
+TransitionNameDlg.Title="Isem n usaka"
224
+
225
+TitleBar.Profile="Amaɣnu"
226
+TitleBar.Scenes="Isuyas"
227
+
228
+NameExists.Title="Isem-agi yella yakan"
229
+NameExists.Text="Isem-agi yettwaseqdec yakan."
230
+
231
+NoNameEntered.Title="Ma ulac uɣilif, sekcem isem ameɣtu"
232
+NoNameEntered.Text="Ur tezmireḍ ara ad tesqedceḍ ismawen ilmawen."
233
+
234
+ConfirmStart.Title="Ad tebduḍ asuddem?"
235
+ConfirmStart.Text="D tidet tebɣiḍ ad tebduḍ asuddem?"
236
+
237
+ConfirmStop.Title="Ad tḥebseḍ asuddem?"
238
+ConfirmStop.Text="D tidet tebɣiḍ ad tḥebseḍ asuddem?"
239
+
240
+ConfirmStopRecord.Title="Ad tḥebseḍ asekles?"
241
+ConfirmStopRecord.Text="D tidet tebɣiḍ ad tḥebseḍ asekles?"
242
+
243
+ConfirmBWTest.Title="Sekker akayad n tehri n tesfift?"
244
+
245
+ConfirmExit.Title="Ad teffɣeḍ si OBS?"
246
+ConfirmExit.Text="OBS itteddu akka tura. Akk isuddman/ikalasen ad xsin. D tidet tebɣiḍ ad teffɣeḍ?"
247
+
248
+ConfirmRemove.Title="Sentem tukksa"
249
+ConfirmRemove.Text="D tidet tebɣiḍ ad tekkseḍ '$1'?"
250
+ConfirmRemove.TextMultiple="D tidet tebɣiḍ ad tekkseḍ %1 n yiferdisen?"
251
+
252
+Output.StartStreamFailed="D awezɣi asekker n usuddem"
253
+Output.StartRecordingFailed="D awezɣi asekker n usekles"
254
+Output.StartReplayFailed="Ulamek asekker n tallunt nweḥraz n tulsa n tɣuri"
255
+
256
+
257
+Output.ConnectFail.Title="Ulamek tuqqna"
258
+Output.ConnectFail.BadPath="Abrid neɣ URL n tuqqna d armeɣtu. Ma ulac uɣilif selken iɣewwaren-inek m akken ad tsentmeḍ belli d imeɣta."
259
+Output.ConnectFail.ConnectFailed="D awezɣi tuqqna s aqedac"
260
+Output.ConnectFail.InvalidStream="D awezɣi adduf ɣer ubadu neɣ ɣer tsarut n usuddem, ma ulac uɣilif selken tasarut n usuddem-inek m. Ma d tameɣtut, yezmer ad yili wugur di tuqqna s aqeddac."
261
+Output.ConnectFail.Error="Teḍra-d tuccḍa ur netturaǧu ara mi neɛreḍ ad nqqen s aqeddac. Ugar n telɣut deg ufaylu n uɣmis."
262
+Output.ConnectFail.Disconnected="Yenser seg uqeddac."
263
+
264
+Output.StreamEncodeError.Title="Tuccḍa n usettengel"
265
+Output.StreamEncodeError.Msg="Asettengal yemlal-d tuccḍa deg usuddem."
266
+
267
+Output.RecordFail.Title="D awezɣi asekker n usekles"
268
+Output.RecordFail.Unsupported="Amasal n tuffɣa ur yettwadhel ara neɣ ur yedhil ara ugar n yiwet n tezribt tameslawt. Ma ulac uɣilif selken iɣewwaren-ik m sakin eɛreḍ tikkelt-nniḍen."
269
+Output.RecordNoSpace.Title="Ulac ddeqs n tallunt n uḍebsi"
270
+Output.RecordNoSpace.Msg="Ulac ddeqs n tallunt n uḍebsi akken ad ikemmel usekles."
271
+Output.RecordError.Title="Tuccḍa n usekles"
272
+Output.RecordError.Msg="Teḍra-d tucḍa deg usekles."
273
+Output.RecordError.EncodeErrorMsg="Asettengal yemlal-d tuccḍa deg usekles."
274
+
275
+Output.BadPath.Title="Yir abrid n ufaylu"
276
+Output.BadPath.Text="Abrid ittusɣewren i ufaylu n tuffɣa d armeɣtu. Ma ulac uɣilif selken iɣewwaren-inek m akken ad tsentmeḍ belli yettuseɣwer ubrd n ufaylu ameɣtu."
277
+
278
+LogReturnDialog="Asili n uɣmis yedda akken iwata"
279
+LogReturnDialog.Description="Afaylu n uɣmis yuli. Tura tzemreḍ ad tebḍuḍ tansa URL i weseɣti neɣ i tedhelt."
280
+LogReturnDialog.Description.Crash="Aneqqis n uɣelluy yuli. Tura tzemreḍ ad tebḍuḍ tansa URL i weseɣti neɣ i tedhelt."
281
+LogReturnDialog.CopyURL="Nɣel URL"
282
+LogReturnDialog.AnalyzeURL="Sleḍ"
283
+LogReturnDialog.ErrorUploadingLog="Tuccḍa deg usali n ufaylu n uɣmis"
284
+
285
+Remux.SourceFile="Asekles n OBS"
286
+Remux.TargetFile="Afaylu anican"
287
+Remux.Remux="Selket"
288
+Remux.Stop="Ḥebes aselket"
289
+Remux.ClearFinished="Sfeḍ iferdisen ifukken"
290
+Remux.ClearAll="Sfeḍ akk iferdisen"
291
+Remux.OBSRecording="Asekles n OBS"
292
+Remux.SelectRecording="Fren asekles n OBS..."
293
+Remux.SelectTarget="Fren afaylu anican..."
294
+Remux.FileExistsTitle="Afaylu anican yella"
295
+Remux.FileExists="Ifuyla-agi inicanen llan yakan. Tebɣiḍ ad ten-tsemselsiḍ?"
296
+Remux.HelpText="Sers ifuyla deg usfaylu-agi akken ad ten-tselkteḍ, neɣ fren tabniqt \"Asekles OBS\" akken ad tnadiḍ afaylu."
297
+
298
+UpdateAvailable="Yewjed lqem amaynut"
299
+UpdateAvailable.Text="Lqem %1.%2.%3 yewjed tura. <a href='%4'>Ssit dagi akken ad t-tsidreḍ</a>"
300
+
301
+Basic.DesktopDevice1="Ameslaw n tnarit"
302
+Basic.DesktopDevice2="Ameslaw n tnarit 2"
303
+
304
+Basic.Scene="Asayes"
305
+Basic.DisplayCapture="Tuṭṭfa n ubeqqeḍ"
306
+
307
+Basic.Main.PreviewConextMenu.Enable="Sermed tadlayt"
308
+
309
+Basic.Main.Preview.Disable="Sens tadlayt"
310
+
311
+ScaleFiltering.Point="Tanqiḍt"
312
+ScaleFiltering.Area="Taɣzut"
313
+
314
+Deinterlacing.Linear="Imzireg"
315
+Deinterlacing.Linear2x="Imzireg 2x"
316
+Deinterlacing.Yadif="Yadif"
317
+Deinterlacing.Yadif2x="Yadif 2x"
318
+Deinterlacing.TopFieldFirst="Urti n ufella d amezwaru"
319
+
320
+VolControl.SliderUnmuted="Taḥnaccaḍt n ubleɣ i '%1':"
321
+VolControl.SliderMuted="Taḥnaccaḍt n ubleɣ i '%1': (akka tura yessusem)"
322
+VolControl.Mute="'%1' d asusam"
323
+VolControl.Properties="Iraten i '%1'"
324
+
325
+Basic.Main.AddSceneDlg.Title="Rnu asayes"
326
+Basic.Main.AddSceneDlg.Text="Sekcem isem n usayes"
327
+
328
+Basic.Main.DefaultSceneName.Text="Asayes %1"
329
+
330
+Basic.Main.AddSceneCollection.Title="Rnu talkensit n yisuyas"
331
+Basic.Main.AddSceneCollection.Text="Ma ulac uɣilif sekcem isem i telkensit n yisuyas"
332
+
333
+Basic.Main.RenameSceneCollection.Title="Snifel isem n telkensit n yisuyas"
334
+
335
+AddProfile.Title="Rnu amaɣnu"
336
+AddProfile.Text="Ma ulac uɣilif sekcem isem i umaɣnu"
337
+AddProfile.WizardCheckbox="Sken amallal n uswel awurman"
338
+
339
+RenameProfile.Title="Snifel isem n umaɣnu"
340
+
341
+Basic.Main.MixerRename.Title="Snifel isem n uɣbalu ameslaw"
342
+Basic.Main.MixerRename.Text="Ma ulac uɣilif sekcem isem i uɣbalu ameslaw"
343
+
344
+
345
+Basic.Main.PreviewDisabled="Tadlayt tensa akka tura"
346
+
347
+Basic.SourceSelect="Snulfu-d/fren aɣbalu"
348
+Basic.SourceSelect.CreateNew="Snulfu-d amaynut"
349
+Basic.SourceSelect.AddExisting="Rnu aɣbalu yellan"
350
+Basic.SourceSelect.AddVisible="Err aɣbalu ad yettban"
351
+
352
+Basic.Main.Sources.Visibility="Tawalit"
353
+Basic.Main.Sources.VisibilityDescription="Ad isenqed tawalit n '%1' di teɣzut n usuneɣ"
354
+Basic.Main.Sources.Lock="Sekkeṛ"
355
+
356
+Basic.PropertiesWindow="Iraten i '%1'"
357
+Basic.PropertiesWindow.AutoSelectFormat="%1 (tafrayt tawurmant: %2)"
358
+Basic.PropertiesWindow.SelectColor="Fren ini"
359
+Basic.PropertiesWindow.SelectFont="Fren tasefsit"
360
+Basic.PropertiesWindow.ConfirmTitle="Iɣewwaren ttwabeddelen"
361
+Basic.PropertiesWindow.Confirm="Llan yibeddilen ur yettwaskelsen ara. Tebɣiḍ ad ten-teskelseḍ?"
362
+Basic.PropertiesWindow.NoProperties="Ulac iraten iwejden"
363
+Basic.PropertiesWindow.AddFiles="Rnu ifuyla"
364
+Basic.PropertiesWindow.AddDir="Rnu akaram"
365
+Basic.PropertiesWindow.AddURL="Rnu abrid/URL"
366
+Basic.PropertiesWindow.AddEditableListDir="Rnu akaram ɣer '%1'"
367
+Basic.PropertiesWindow.AddEditableListFiles="Rnu ifuyla ɣer '%1'"
368
+Basic.PropertiesWindow.AddEditableListEntry="Rnu anekcum ɣer '%1'"
369
+Basic.PropertiesWindow.EditEditableListEntry="Ẓreg anekcum si %1"
370
+
371
+Basic.PropertiesView.FPS.Simple="Azalen n FPS iḥerfiyen"
372
+Basic.PropertiesView.FPS.ValidFPSRanges="Tigrummiwin FPS timeɣta:"
373
+
374
+Basic.InteractionWindow="Myeg akked '%1'"
375
+
376
+Basic.StatusBar.Reconnecting="Tegzem tuqqna, tulsa n tuqqna di %2 n tasinit (tasinin) (aneɛruḍ%1)"
377
+Basic.StatusBar.AttemptingReconnect="Aneɛruḍ n tulsa n tuqqna...(aneɛruḍ %1)"
378
+Basic.StatusBar.ReconnectSuccessful="Tulsa n tuqqna tedda akken iwata"
379
+Basic.StatusBar.Delay="Asemmezger (%1 tasint)"
380
+Basic.StatusBar.DelayStartingIn="Asemmezger (beddu di %1 tasint)"
381
+Basic.StatusBar.DelayStoppingIn="Asemmezger (aḥbas di %1 tasint)"
382
+Basic.StatusBar.DelayStartingStoppingIn="Asemmezger (aḥbas di %1 tasint, beddu di %2 tasint)"
383
+
384
+Basic.Filters="Imzizdigen"
385
+Basic.Filters.AsyncFilters="Imzizedgen ameslaw/avidyu"
386
+Basic.Filters.AudioFilters="Imzizedgen n umeslaw"
387
+Basic.Filters.EffectFilters="Imzizedgen n usemdu"
388
+Basic.Filters.Title="Imzizedgen i '%1'"
389
+Basic.Filters.AddFilter.Title="Isem n umzizdeg"
390
+Basic.Filters.AddFilter.Text="Ma ulac uɣilif sekcem isem i umzizdeg"
391
+
392
+Basic.TransformWindow="Abeddel n uferdis n usayes"
393
+Basic.TransformWindow.Position="Ideg"
394
+Basic.TransformWindow.Rotation="Tuzzya"
395
+Basic.TransformWindow.Size="Tiddi"
396
+Basic.TransformWindow.Crop="Ɣeẓ"
397
+
398
+Basic.TransformWindow.Alignment.TopLeft="Ukessawen s azelmaḍ"
399
+Basic.TransformWindow.Alignment.TopCenter="Ukessawen di tlemmast"
400
+Basic.TransformWindow.Alignment.TopRight="Uksawen s ayfus"
401
+Basic.TransformWindow.Alignment.CenterLeft="Di tlemmast s azelmaḍ"
402
+Basic.TransformWindow.Alignment.Center="Alemmas"
403
+Basic.TransformWindow.Alignment.CenterRight="Di tlemmast s ayfus"
404
+Basic.TransformWindow.Alignment.BottomLeft="Ukessar s azelmaḍ"
405
+Basic.TransformWindow.Alignment.BottomCenter="Ukessar di tlemmast"
406
+Basic.TransformWindow.Alignment.BottomRight="Ukessar s ayfus"
407
+
408
+Basic.TransformWindow.BoundsType.None="War azizdew"
409
+Basic.TransformWindow.BoundsType.MaxOnly="Tiddi tafellayt kan"
410
+Basic.TransformWindow.BoundsType.Stretch="Snejbad ɣer yiran"
411
+
412
+Basic.Main.AddSourceHelp.Title="Ulamek timerna n usayes"
413
+Basic.Main.AddSourceHelp.Text="Isefk ad tesɛuḍ ma drus 1 n usayes akken ad ternuḍ aɣbalu."
414
+
415
+Basic.Main.Scenes="Isuyas"
416
+Basic.Main.Sources="Iɣbula"
417
+Basic.Main.Controls="Isenqaden"
418
+Basic.Main.Connecting="Ala yetteqqen..."
419
+Basic.Main.StartRecording="Bdu asekles"
420
+Basic.Main.StartReplayBuffer="Sekker taɣuri n tallunt n weḥraz"
421
+Basic.Main.SaveReplay="Sekles tulsa n tɣuri"
422
+Basic.Main.StartStreaming="Bdu asuddem"
423
+Basic.Main.StartVirtualCam="Sekker takamiṛat tuhlist"
424
+Basic.Main.StopRecording="Ḥbes asekles"
425
+Basic.Main.PauseRecording="Sbedd asekles"
426
+Basic.Main.UnpauseRecording="Kemmel asekles"
427
+Basic.Main.StoppingRecording="Aseḥbes n usekles..."
428
+Basic.Main.StopReplayBuffer="Seḥbes taɣuri n tallunt n weḥraz"
429
+Basic.Main.StoppingReplayBuffer="Aseḥbes taɣuri n tallunt n weḥraz..."
430
+Basic.Main.StopStreaming="Ḥbes asuddem"
431
+Basic.Main.StoppingStreaming="Aḥbas n usuddem..."
432
+Basic.Main.ForceStopStreaming="Seḥbes asuddem (sefsex asemmezger)"
433
+Basic.Main.ShowContextBar="Beqqeḍ afeggag n yifecka Iɣbula"
434
+Basic.Main.HideContextBar="Ffer afeggag n yifecka Iɣbula"
435
+Basic.Main.StopVirtualCam="Ḥbes takamirat tuhlist"
436
+Basic.Main.Group="Agraw %1"
437
+Basic.Main.GroupItems="Segrew iferdisen yettwafernen"
438
+Basic.Main.Ungroup="Freq"
439
+Basic.Main.GridMode="Askar n uferrug"
440
+Basic.Main.ListMode="Askar n tebdart"
441
+
442
+Basic.MainMenu.File="Afaylu"
443
+Basic.MainMenu.File.Export="Sifeḍ"
444
+Basic.MainMenu.File.Import="Kter"
445
+Basic.MainMenu.File.ShowRecordings="Beqqeḍ ikalasen"
446
+Basic.MainMenu.File.Settings="Iɣewwaren"
447
+Basic.MainMenu.File.ShowSettingsFolder="Beqqeḍ akaram n yiɣewwaren"
448
+Basic.MainMenu.File.ShowProfileFolder="Beqqeḍ akaram n umaɣnu"
449
+Basic.MainMenu.AlwaysOnTop="Yalas nnig"
450
+Basic.MainMenu.File.Exit="Ffeɣ"
451
+
452
+Basic.MainMenu.Edit="Ẓreg"
453
+Basic.MainMenu.Edit.Undo="Sefsex"
454
+Basic.MainMenu.Edit.Redo="Err-d"
455
+Basic.MainMenu.Edit.UndoAction="Sefsex $1"
456
+Basic.MainMenu.Edit.RedoAction="Err-d $1"
457
+Basic.MainMenu.Edit.LockPreview="Sekkeṛ tadlayt"
458
+Basic.MainMenu.Edit.Scale.Window="Sezg ɣer usfaylu"
459
+Basic.MainMenu.Edit.Scale.Canvas="Taɣzut n usuneɣ (%1x%2)"
460
+Basic.MainMenu.Edit.Scale.Output="Tuffɣa (%1x%2)"
461
+Basic.MainMenu.Edit.Transform="Selket"
462
+Basic.MainMenu.Edit.Transform.EditTransform="Ẓreg aselket..."
463
+Basic.MainMenu.Edit.Transform.CopyTransform="Nɣel aselket"
464
+Basic.MainMenu.Edit.Transform.PasteTransform="Senṭeḍ aselket"
465
+Basic.MainMenu.Edit.Transform.ResetTransform="Ales awennez n uselket"
466
+Basic.MainMenu.Edit.Transform.Rotate90CW="Zzi s 90 n tfesniwin di tnila n temrilt"
467
+Basic.MainMenu.Edit.Transform.Rotate90CCW="Zzi s 90 n tfesniwin mgal tamrilt"
468
+Basic.MainMenu.Edit.Transform.Rotate180="Zzi s 180 n tfesniwin"
469
+Basic.MainMenu.Edit.Transform.FlipHorizontal="Tuttya taglawant"
470
+Basic.MainMenu.Edit.Transform.FlipVertical="Tuttya tubdidt"
471
+Basic.MainMenu.Edit.Transform.FitToScreen="Sezg ɣer ugdil"
472
+Basic.MainMenu.Edit.Transform.StretchToScreen="Snejbad ɣer ugdil"
473
+Basic.MainMenu.Edit.Transform.CenterToScreen="Di tlemmast n wegdil"
474
+Basic.MainMenu.Edit.Transform.VerticalCenter="Di tlemmast s ibeddi"
475
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Di tlemmast s uglawi"
476
+Basic.MainMenu.Edit.Order="Amizzwer"
477
+Basic.MainMenu.Edit.Order.MoveUp="Smutti d asawen"
478
+Basic.MainMenu.Edit.Order.MoveDown="Smutti d akessar"
479
+Basic.MainMenu.Edit.Order.MoveToTop="Smutti d asawen maḍi"
480
+Basic.MainMenu.Edit.Order.MoveToBottom="Smutti d akessar"
481
+Basic.MainMenu.Edit.AdvAudio="Iraten inaẓiyen n uvidyu"
482
+
483
+Basic.MainMenu.View="Tamuɣli"
484
+Basic.MainMenu.View.Toolbars="Afeggag n yifecka"
485
+Basic.MainMenu.View.Docks.ResetUI="Ales awennez n ugrudem n useqdac"
486
+Basic.MainMenu.View.Docks.LockUI="Sekkeṛ agrudem n useqdac"
487
+Basic.MainMenu.View.ListboxToolbars="Tiqeffalin n tebdart Asayes/Aɣbalu"
488
+Basic.MainMenu.View.ContextBar="Afeggag n yifecka Iɣbula"
489
+Basic.MainMenu.View.SceneTransitions="Asaka n yisuyas"
490
+Basic.MainMenu.View.SourceIcons="Tignitin n uɣbalu"
491
+Basic.MainMenu.View.StatusBar="Afeggag n waddad"
492
+Basic.MainMenu.View.Fullscreen.Interface="Agrudem n ugdil aččuran"
493
+
494
+Basic.MainMenu.SceneCollection="Talkensit n yisuyas"
495
+Basic.MainMenu.Profile="Amaɣnu"
496
+Basic.MainMenu.Profile.Import="Kter amaɣnu"
497
+Basic.MainMenu.Profile.Export="Sifeḍ amaɣnu"
498
+Basic.MainMenu.SceneCollection.Import="Kter talkensit n yisuyas"
499
+Basic.MainMenu.SceneCollection.Export="Sifeḍ talkensit n yisuyas"
500
+Basic.MainMenu.Profile.Exists="Amaɣnu yella yakan"
501
+Basic.MainMenu.SceneCollection.Exists="Talkensit n yisuyas tella yakan"
502
+
503
+Basic.MainMenu.Tools="Ifecka"
504
+
505
+Basic.MainMenu.Help="Tallelt"
506
+Basic.MainMenu.Help.HelpPortal="Tawwurt n tallelt"
507
+Basic.MainMenu.Help.Website="Rzu ar usmel web"
508
+Basic.MainMenu.Help.Discord="Rnu ɣer uqeddac Discord"
509
+Basic.MainMenu.Help.Logs="Ifuyla n uɣmis"
510
+Basic.MainMenu.Help.Logs.ShowLogs="Beqqeḍ ifuyla n uɣmis"
511
+Basic.MainMenu.Help.Logs.UploadCurrentLog="Sili afaylu n uɣmis amiran"
512
+Basic.MainMenu.Help.Logs.UploadLastLog="Sili afaylu n uɣmis aneggaru"
513
+Basic.MainMenu.Help.Logs.ViewCurrentLog="Beqqeḍ aɣmis amiran"
514
+Basic.MainMenu.Help.CheckForUpdates="Nadi ileqman"
515
+Basic.MainMenu.Help.CrashLogs="Ineqqisen n uɣelluy"
516
+Basic.MainMenu.Help.CrashLogs.ShowLogs="Beqqeḍ ineqqisen n uɣelluy"
517
+Basic.MainMenu.Help.CrashLogs.UploadLastLog="Sili aneqqis n uɣelluy aneggaru"
518
+Basic.MainMenu.Help.About="Ɣef"
519
+
520
+Basic.Settings.ProgramRestart="Ahil isefk ad yales tanekkra akken ad ddun yiɣewwaren-agi."
521
+Basic.Settings.ConfirmTitle="Sentem ibeddilen"
522
+Basic.Settings.Confirm="Tesɛiḍ ibeddilen ur nettwasekles ara. Ad teskelseḍ ibeddilen?"
523
+
524
+Basic.Settings.General="Amatu"
525
+Basic.Settings.General.Theme="Asentel"
526
+Basic.Settings.General.Language="Tutlayt"
527
+Basic.Settings.General.EnableAutoUpdates="Nadi ileqman s wudem awurman di tnekra"
528
+Basic.Settings.General.OpenStatsOnStartup="Ldi adiwenni n tddadanin deg usekker"
529
+Basic.Settings.General.WarnBeforeStartingStream="Beqqeḍ adiwenni n usentem mi ara yekker usuddem"
530
+Basic.Settings.General.WarnBeforeStoppingStream="Beqqeḍ adiwenni n usentem mi ara yeḥbes usuddem"
531
+Basic.Settings.General.WarnBeforeStoppingRecord="Beqqeḍ adiwenni n usentem mi ara yeḥbes usekles"
532
+Basic.Settings.General.Projectors="Imagaren"
533
+Basic.Settings.General.HideProjectorCursor="Ffer taḥnaccaḍt ɣef yimagaren"
534
+Basic.Settings.General.ProjectorAlwaysOnTop="Yals ttarra imagaren nnig"
535
+Basic.Settings.General.RecordWhenStreaming="Sekles s wudem awurman mi ara yetteddu usuddem"
536
+Basic.Settings.General.KeepRecordingWhenStreamStops="Kemmel asekles mi ara yeḥbes usuddem"
537
+Basic.Settings.General.ReplayBufferWhileStreaming="Sekker s wudem awurman tallunt n weḥraz n tulsa n tɣuri mi ara yetteddu usuddem"
538
+Basic.Settings.General.KeepReplayBufferStreamStops="Eǧǧ tallunt n wephraz n tulsa n tɣuri termed mi ara yeḥbes usuddem"
539
+Basic.Settings.General.SysTray="Taɣzut n telɣa"
540
+Basic.Settings.General.SysTrayWhenStarted="Simẓi ɣer teɣzut n telɣa di tnekra"
541
+Basic.Settings.General.SystemTrayHideMinimize="Yalas ssimẓi ɣer teɣzut n telɣa deg umɣiq n ufeggag n tmahilin"
542
+Basic.Settings.General.SaveProjectors="Sekles imagaren mi ara teffɣeḍ"
543
+Basic.Settings.General.Preview="Tadlayt"
544
+Basic.Settings.General.OverflowHidden="Ffer tafuli"
545
+Basic.Settings.General.OverflowAlwaysVisible="Taful tettban yalas"
546
+Basic.Settings.General.OverflowSelectionHidden="Sken tafuli ɣas ma aɣbalu ur yettban ara"
547
+Basic.Settings.General.Importers="Imaktaren"
548
+Basic.Settings.General.AutomaticCollectionSearch="Nadi imeḍqan yettwassnen n telkensi n isuyas di tektert"
549
+Basic.Settings.General.SwitchOnDoubleClick="Eg asaka ɣer usayes ma yella ussiti uslig"
550
+Basic.Settings.General.StudioPortraitLayout="Sermed taneɣruft s tehri/s ibeddi"
551
+Basic.Settings.General.TogglePreviewProgramLabels="Beqqeḍ tibzimin tamuɣli/ahil"
552
+Basic.Settings.General.Multiview="Aṭas n tmuɣliwin"
553
+Basic.Settings.General.Multiview.MouseSwitch="Ssit akken ad tbedeleḍ gar yisuyas"
554
+Basic.Settings.General.Multiview.DrawSourceNames="Beqqeḍ ismawen n yisuyas"
555
+Basic.Settings.General.Multiview.DrawSafeAreas="Suneɣ tiɣezza iḍemnen (EBU R 95)"
556
+Basic.Settings.General.MultiviewLayout="Taneɣruft n waṭas n tmuɣliwin"
557
+Basic.Settings.General.MultiviewLayout.Horizontal.Top="Aglawan, Afella (8 n yisuyas)"
558
+Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Aglawan, Adda (8 n yisuyas)"
559
+Basic.Settings.General.MultiviewLayout.Vertical.Left="Ubdid, Azelmaḍ (8 n yisuyas)"
560
+Basic.Settings.General.MultiviewLayout.Vertical.Right="Ubdid, Ayfus (8 n yisuyas)"
561
+Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Aglawan, Afella (24 n yisuyas)"
562
+
563
+Basic.Settings.Stream="Asuddem"
564
+Basic.Settings.Stream.StreamType="Anaw n usuddem"
565
+Basic.Settings.Stream.Custom.UseAuthentication="Seqdec asesteb"
566
+Basic.Settings.Stream.Custom.Username="Isem n useqdac"
567
+Basic.Settings.Stream.Custom.Password="Awal uffir"
568
+Basic.Settings.Stream.BandwidthTestMode="Sermed askar n usekyed n tehri n tesfift"
569
+Basic.Settings.Stream.TTVAddon.None="Ulac"
570
+Basic.Settings.Stream.TTVAddon.Both="BetterTTV akked FrankerFaceZ"
571
+Basic.Settings.Stream.MissingSettingAlert="Txuṣ twila n usuddem"
572
+Basic.Settings.Stream.StreamSettingsWarning="Ldi iɣewwaren"
573
+Basic.Settings.Stream.MissingUrl="URL n usuddem ixuṣ.\n\nLdi iɣewwaren akken ad tsekcmeḍ URL deg yiccer 'Asuddem'."
574
+Basic.Settings.Stream.MissingStreamKey="Tasarut n usuddem txuṣ.\n\nLdi iɣewwaren akken ad tsekcmeḍ tasarut deg yiccer 'Asuddem'."
575
+Basic.Settings.Stream.IgnoreRecommended="Ttu isemtar n umeẓlu n usuddem"
576
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Semselsi iɣewwaren yettwasmetren"
577
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Aktum afellay n uvidyu: %1 kbps"
578
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Aktum afellay n umeslaw: %1 kbps"
579
+Basic.Settings.Stream.Recommended.MaxResolution="Tabadut tafellayt: %1"
580
+Basic.Settings.Stream.Recommended.MaxFPS="FPS (ikataren i tasint) afellay: %1"
581
+
582
+Basic.Settings.Output="Tuffɣa"
583
+Basic.Settings.Output.Format="Amasal n usekles"
584
+Basic.Settings.Output.Encoder="Asettengal"
585
+Basic.Settings.Output.SelectDirectory="Fren akaram n usekles"
586
+Basic.Settings.Output.SelectFile="Fren afaylu n usekles"
587
+Basic.Settings.Output.Mode="Askar n tuffɣa"
588
+Basic.Settings.Output.Mode.Simple="Aḥerfi"
589
+Basic.Settings.Output.Mode.Adv="Anaẓi"
590
+Basic.Settings.Output.Mode.FFmpeg="Tuffɣa n FFmpeg"
591
+Basic.Settings.Output.UseReplayBuffer="Sermed tallunt n weḥraz n tulsa n tɣuri"
592
+Basic.Settings.Output.ReplayBuffer.SecondsMax="Tanzagt tafellayt n tulsa n tɣuri"
593
+Basic.Settings.Output.ReplayBuffer.MegabytesMax="Takatut tefellayt (MAṬ)"
594
+Basic.Settings.Output.Simple.SavePath="Abrid n usekles"
595
+Basic.Settings.Output.Simple.RecordingQuality="Taɣara n usekles"
596
+Basic.Settings.Output.Simple.RecordingQuality.Stream="Kifkif akked usuddem"
597
+Basic.Settings.Output.Simple.RecordingQuality.Small="Taɣara tafellayt, tiddi n ukaram talemmast"
598
+Basic.Settings.Output.Simple.Warn.Lossless.Msg="D tidet tebɣiḍ ad tesqedceḍ taɣara war asṛuḥu?"
599
+Basic.Settings.Output.Simple.Warn.Lossless.Title="Alɣu ɣef tɣara war asṛuḥu!"
600
+Basic.Settings.Output.Simple.Encoder.Software="Aseɣẓan (x264)"
601
+Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Arrum (QSV)"
602
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Arrum (AMD)"
603
+Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Arrum (NVENC)"
604
+Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Aseɣẓan (x264 azwirɣewwar n useqdec amecṭuḥ n CPU, ad isimɣur tiddi n ufaylu)"
605
+Basic.Settings.Output.Simple.TwitchVodTrack="Tazribt n Twitch VOD (Isseqdac tazribt 2)"
606
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Tabadut/Framerate ur nemṣada ara"
607
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Tabadut: %1"
608
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS: %1"
609
+Basic.Settings.Output.VideoBitrate="Aktum n uvidyu"
610
+Basic.Settings.Output.AudioBitrate="Aktum n umeslaw"
611
+Basic.Settings.Output.Reconnect="Tulsa n tuqqna s wudem awurman"
612
+Basic.Settings.Output.RetryDelay="Amenḍar send aneɛruḍ amaynut"
613
+Basic.Settings.Output.MaxRetries="Amḍan afellay n yineɛruḍen"
614
+Basic.Settings.Output.Advanced="Sermed iɣewwaren inaẓiyen n usettengal"
615
+Basic.Settings.Output.EncoderPreset="Azwirɣewwar n usettengel"
616
+Basic.Settings.Output.CustomEncoderSettings="Iɣewwaren yugnen n usettengal"
617
+Basic.Settings.Output.NoSpaceFileName="Sirew isem n ufaylu war tallunt"
618
+
619
+Basic.Settings.Output.Adv.AudioTrack="Tazribt n umeslaw"
620
+Basic.Settings.Output.Adv.Streaming="Asuddem"
621
+Basic.Settings.Output.Adv.Audio.Track1="Tazribt 1"
622
+Basic.Settings.Output.Adv.Audio.Track2="Tazribt 2"
623
+Basic.Settings.Output.Adv.Audio.Track3="Tazribt 3"
624
+Basic.Settings.Output.Adv.Audio.Track4="Tazribt 4"
625
+Basic.Settings.Output.Adv.Audio.Track5="Tazribt 5"
626
+Basic.Settings.Output.Adv.Audio.Track6="Tazribt 6"
627
+
628
+Basic.Settings.Output.Adv.Recording="Asekles"
629
+Basic.Settings.Output.Adv.Recording.RecType="Anaw n usekles"
630
+Basic.Settings.Output.Adv.Recording.Type="Anaw"
631
+Basic.Settings.Output.Adv.Recording.Type.Standard="Aslugan"
632
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Tuffɣa yugnen (FFmpeg)"
633
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Seqdec asettengal n usuddem)"
634
+Basic.Settings.Output.Adv.Recording.Filename="Amasal n yisem n ufaylu"
635
+Basic.Settings.Output.Adv.Recording.OverwriteIfExists="Sefsex afaylu yellan"
636
+Basic.Settings.Output.Adv.FFmpeg.Type="Anaw n tuffɣa n FFmpeg"
637
+Basic.Settings.Output.Adv.FFmpeg.Type.URL="Tuffɣa ɣer URL"
638
+Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile="Tuffɣa ɣer Ufaylu"
639
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Akk ifuyla"
640
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Abrid n ufaylu neɣ URL"
641
+Basic.Settings.Output.Adv.FFmpeg.Format="Amasal n unagbar"
642
+Basic.Settings.Output.Adv.FFmpeg.FormatAudio="Ameslaw"
643
+Basic.Settings.Output.Adv.FFmpeg.FormatVideo="Avidyu"
644
+Basic.Settings.Output.Adv.FFmpeg.FormatDefault="Amsal n lexṣas"
645
+Basic.Settings.Output.Adv.FFmpeg.FormatDesc="Aglam n umasal n lexṣas"
646
+Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="Akudak Ameslaw/avidyu yettwaf-d seg ubrid neɣ URL n ufaylu"
647
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDefault="Asettengal n lexṣas"
648
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDisable="Sens asettengal"
649
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Asettengal n uvidyu"
650
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Iɣewwaren n usettengal n uvidyu (ma yella)"
651
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Asettengal n umeslaw"
652
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Iɣewwaren n usettengal n umeslaw(ma yella)"
653
+Basic.Settings.Output.Adv.FFmpeg.GOPSize="Azilal n yikataren yufraren (ikataren)"
654
+Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Beqqeḍ akk ikudaken (ɣas ma zemren ad ilin ur mṣadan ara)"
655
+
656
+Screenshot="Tuṭṭfa n ugdil n tuffɣa"
657
+Screenshot.SourceHotkey="Tuṭṭfa n ugdil n uɣbalu yettwafernen"
658
+Screenshot.StudioProgram="Tuṭṭfa n ugdil (ahil)"
659
+Screenshot.Preview="Tuṭṭfa n ugdil (tadlayt)"
660
+Screenshot.Scene="Tuṭṭfa n ugdil (asayes)"
661
+Screenshot.Source="Tuṭṭfa n ugdil (aɣbalu)"
662
+
663
+
664
+
665
+Basic.Settings.Video="Avidyu"
666
+Basic.Settings.Video.BaseResolution="Tabadut tanaddayt (taɣzut n usuneɣ)"
667
+Basic.Settings.Video.DisableAeroWindows="Sens Aero (Windows kan)"
668
+Basic.Settings.Video.FPS="FPS"
669
+Basic.Settings.Video.InvalidResolution="Azal n tbadut d armeɣtu. Isefk ad yili [width]x[height] (i.e. 1920x1080)"
670
+Basic.Settings.Video.CurrentlyActive="Tuffɣa n uvidyu termed akka tura. Ma ulac uɣilif sens kra n tuffɣiwin akken ad tbeddeleḍ iɣewwaren n uvidyu."
671
+Basic.Settings.Video.DisableAero="Sens Aero"
672
+
673
+
674
+Basic.Settings.Audio="Ameslaw"
675
+Basic.Settings.Audio.SampleRate="Atug n ulemmec"
676
+Basic.Settings.Audio.Channels="Ibuda"
677
+Basic.Settings.Audio.MeterDecayRate.Fast="Arurad"
678
+Basic.Settings.Audio.MeterDecayRate.Medium="Alemmas (Anaw I PPM)"
679
+Basic.Settings.Audio.MeterDecayRate.Slow="Ẓẓay (Anaw II PPM)"
680
+Basic.Settings.Audio.Devices="Ibenkan n umeslaw ijemmalen"
681
+Basic.Settings.Audio.DesktopDevice="Ameslaw n tnarit"
682
+Basic.Settings.Audio.DesktopDevice2="Ameslaw n tnarit 2"
683
+Basic.Settings.Audio.UnknownAudioDevice="[Ibenk ur yeqqin ara neɣ ur yewjid ara]"
684
+Basic.Settings.Audio.Disabled="Yensa"
685
+
686
+Basic.Settings.Advanced="Anaẓi"
687
+Basic.Settings.Advanced.General.ProcessPriority.High="Afellay"
688
+Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="Nnig n umagnu"
689
+Basic.Settings.Advanced.General.ProcessPriority.Normal="Amagnu"
690
+Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Ddaw n umagnu"
691
+Basic.Settings.Advanced.Video.ColorFormat="Amasal n yini"
692
+Basic.Settings.Advanced.Video.ColorSpace="Tallunt n yini"
693
+Basic.Settings.Advanced.Video.ColorRange="Tagrumma n yini"
694
+Basic.Settings.Advanced.Video.ColorRange.Partial="Abruyan"
695
+Basic.Settings.Advanced.Video.ColorRange.Full="Ummid"
696
+Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Amezwar"
697
+Basic.Settings.Advanced.StreamDelay="Asemmezger n usuddem"
698
+Basic.Settings.Advanced.StreamDelay.Duration="Tanzagt"
699
+Basic.Settings.Advanced.Network="Azeḍḍa"
700
+Basic.Settings.Advanced.Network.BindToIP="Qqen ɣer IP"
701
+Basic.Settings.Advanced.Hotkeys.NeverDisableHotkeys="Werǧin ad tsenseḍ inegzumen n unasiw"
702
+Basic.Settings.Advanced.Hotkeys.DisableHotkeysInFocus="Sens inegzumen n unasiw ticki yella usaḍes ɣef usfaylu agejdan"
703
+Basic.Settings.Advanced.Hotkeys.DisableHotkeysOutOfFocus="Sens inegzumen n unasiw ticki ulac asaḍes ɣef usfaylu agejdan"
704
+
705
+Basic.AdvAudio="Iraten inaẓiyen n uvidyu"
706
+Basic.AdvAudio.ActiveOnly="Iɣbula urmiden kan"
707
+Basic.AdvAudio.Name="Isem"
708
+Basic.AdvAudio.Volume="Ableɣ"
709
+Basic.AdvAudio.VolumeSource="Ableɣ i '%1'"
710
+Basic.AdvAudio.Balance="Awliwal"
711
+Basic.AdvAudio.BalanceSource="Awliwal i '%1'"
712
+Basic.AdvAudio.SyncOffset="Asekḥer n umtawi"
713
+Basic.AdvAudio.SyncOffsetSource="Asekḥer n umtawi i '%1'"
714
+Basic.AdvAudio.AudioTracks="Tizribin"
715
+
716
+Basic.Settings.Hotkeys="Inegzumen n unasiw"
717
+Basic.Settings.Hotkeys.Filter="Imzizdeg"
718
+
719
+Basic.Hotkeys.SelectScene="Ɛeddi ɣer usayes"
720
+
721
+Basic.SystemTray.Show="Sken"
722
+Basic.SystemTray.Hide="Ffer"
723
+
724
+Basic.SystemTray.Message.Reconnecting="Yenser. Ala yettales tuqqna..."
725
+
726
+Hotkeys.Insert="Ger"
727
+Hotkeys.Delete="Kkes"
728
+Hotkeys.End="Taggara"
729
+Hotkeys.PageUp="Asebter d asawen"
730
+Hotkeys.PageDown="Asebter d akessar"
731
+Hotkeys.ScrollLock="Sekkeṛ adrurem"
732
+Hotkeys.Print="Siggez"
733
+Hotkeys.Pause="Bedd"
734
+Hotkeys.Left="Azelmaḍ"
735
+Hotkeys.Right="Ayfus"
736
+Hotkeys.Up="Asawen"
737
+Hotkeys.Down="Akessar"
738
+Hotkeys.Windows="Asfaylu"
739
+Hotkeys.Menu="Umuɣ"
740
+Hotkeys.Space="Tallunt"
741
+Hotkeys.MouseButton="Amumed %1"
742
+
743
+Mute="Sens imesli"
744
+Unmute="Sermed imesli"
745
+
746
+SceneItemShow="Beqqeḍ '%1'"
747
+SceneItemHide="Ffer '%1'"
748
+
749
+OutputWarnings.NoTracksSelected="Isefk ad tferneḍ ma drus yiwet n tezribt"
750
+
751
+FinalScene.Title="Kkes asayes"
752
+FinalScene.Text="Isefk ad yili ma drus yiwen n usayes."
753
+
754
+NoSources.Title="Ulac iɣbula"
755
+NoSources.Text="Yettban-d am wakken ur terniḍ ara yakan kra n yiɣbula n uvidyu, ihi d agdil aberkan ara tsuffɣeḍ. D tidet tebɣiḍ ad tgeḍ ayagi?"
756
+NoSources.Text.AddSource="Tzemreḍ ad ternuḍ iɣbula s usiti ɣef tignit + ddaw n tenkult n yiɣbula deg usfaylu agejdan di yal taswiɛt."
757
+NoSources.Label="Ur tesɛiḍ ara yakan iɣbula.\nSsit ɣef tqeffalt + ukessar-agi,\nneɣ ssit s tqeffalt tayfust dagi akken ad ternuḍ yiwen."
758
+
759
+ChangeBG="Sbadu ini"
760
+CustomColor="Ini yugnen"
761
+
762
+
763
+About="Ɣef"
764
+About.Info="OBS Studio d aseɣẓan ilelli n uɣbalu yeldin (open source) i wesekles n uvidyu akked usuddem s wakud ilaw."
765
+About.Donate="Ɛiwen asenfaṛ"
766
+About.GetInvolved="Ttekki"
767
+About.Authors="Imeskaren"
768
+About.License="Turagt"
769
+About.Contribute="Dhel asenfar n OBS"
770
+
771
+AddUrl.Title="Rnu aɣbali si URL"
772
+AddUrl.Text="Tzuɣreḍ URL ɣer OBS. Ayagi ad yernu s wudem awurman aseɣwen am uɣbalu. Ad tkemmeleḍ?"
773
+AddUrl.Text.Url="URL: %1"
774
+
775
+ResizeOutputSizeOfSource="Beddel tiddi n tuffɣa (tiddi n uɣbalu)"
776
+ResizeOutputSizeOfSource.Continue="Tebɣiḍ ad tkemmeleḍ?"
777
+
778
+PreviewTransition="Wali asaka"
779
+
780
+Importer="Amektar n telkensiyin n yisuyas"
781
+Importer.SelectCollection="Fren talkensit n yisuyas"
782
+Importer.Collection="Talkensit n yisuyas"
783
+Importer.HelpText="Rnu ifuyla ɣer usfaylu-agi akken ad tketreḍ tilkensitin si OBS neɣ ihalen-nniḍen yettwadehlen."
784
+Importer.Path="Abrid n telkensit"
785
+Importer.Program="Yettwaf usnas"
786
+Importer.AutomaticCollectionPrompt="Nadi s wudem awurman ɣef telkensiyin n yisuyas"
787
+Importer.AutomaticCollectionText="OBS yezmer ad inadi s wudem awurman ɣef telkensiyin n yisuyas deg yihalen n wis kraḍ yettwadehlen. Tebɣiḍ OBS ad inadi s wudem awurman?\n\nTzemreḍ ad tbeddeleḍ areḍqal ayagi di Iɣewwaren >Amatu Imaktaren."
788
+
789
+
790
+Restart="Ales asekker"
791
+NeedsRestart="OBS Studio yesra ad yales tanekra. Tebɣiḍ ad talseḍ asekker tura?"
792
+
793
+ContextBar.NoSelectedSource="Ulac aɣbalu yettwafernen"
794
+ContextBar.ResetTransform="Ales awennez n uselket"
795
+ContextBar.FitToCanvas="Sezg ɣer teɣzut n usuneɣ"
796
+
797
+ContextBar.MediaControls.PlayMedia="Ɣer amidya"
798
+ContextBar.MediaControls.PauseMedia="Ḥbes amidya"
799
+ContextBar.MediaControls.StopMedia="Seḥbes amidya"
800
+ContextBar.MediaControls.RestartMedia="Ales asekker n umidya"
801
+ContextBar.MediaControls.PlaylistNext="Uḍfir di tebdart n tɣuri"
802
+ContextBar.MediaControls.PlaylistPrevious="D uzwir di tebdart n tɣuri"
803
+ContextBar.MediaControls.MediaProperties="Iraten n umidya"
804
+ContextBar.MediaControls.BlindSeek="Awiǧit n tunigin deg umidya"
805
+
806
obs-studio-26.0.2.tar.xz/UI/data/locale/ko-KR.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/ko-KR.ini Changed
182
 
1
@@ -93,7 +93,7 @@
2
 LogViewer="로그 보기"
3
 ShowOnStartup="시작 시 보여주기"
4
 OpenFile="파일 열기"
5
-AddValue="추가 %1"
6
+AddValue="%1 추가"
7
 
8
 AlreadyRunning.Title="OBS가 이미 실행 중입니다"
9
 AlreadyRunning.Text="OBS가 이미 실행 중입니다! 의도한 것이 아니라면 새로운 OBS를 실행하기 전에 이미 동작 중인 프로그램을 종료하십시오. OBS가 시스템 트레이에 최소화되어 있는지도 확인하십시오."
10
@@ -161,6 +161,7 @@
11
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="해당 계정과 연결을 끊겠습니까?"
12
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="이 변경 사항은 즉시 적용됩니다. 정말로 계정과 연결을 중단하겠습니까?"
13
 Basic.AutoConfig.StreamPage.GetStreamKey="스트림 키 받기"
14
+Basic.AutoConfig.StreamPage.MoreInfo="자세한 정보"
15
 Basic.AutoConfig.StreamPage.UseStreamKey="스트림 키 사용"
16
 Basic.AutoConfig.StreamPage.Service="서비스"
17
 Basic.AutoConfig.StreamPage.Service.ShowAll="모두 보기..."
18
@@ -216,16 +217,16 @@
19
 ResetUIWarning.Title="정말로 모든 UI를 초기화하겠습니까?"
20
 ResetUIWarning.Text="UI를 초기화하면 추가한 독이 안보일 것입니다. '보기' 메뉴에서 다시 나타나게 설정할 수 있습니다.\n\nUI를 초기화하겠습니까?"
21
 
22
-Updater.Title="사용가능한 판올림이 있습니다"
23
-Updater.Text="새 판올림이 준비되었습니다:"
24
-Updater.UpdateNow="지금 판올림하기"
25
+Updater.Title="새로운 업데이트를 사용할 수 있습니다"
26
+Updater.Text="새 업데이트가 준비되었습니다:"
27
+Updater.UpdateNow="지금 업데이트"
28
 Updater.RemindMeLater="나중에 다시 알림"
29
-Updater.Skip="이번 판올림 건너뛰기"
30
+Updater.Skip="업데이트 건너뛰기"
31
 Updater.Running.Title="현재 활성화된 프로그램"
32
-Updater.Running.Text="판올림 전에 활성화되어 있는 출력을 먼저 꺼주세요"
33
-Updater.NoUpdatesAvailable.Title="가능한 판올림이 없습니다"
34
-Updater.NoUpdatesAvailable.Text="현재 사용가능한 판올림이 없습니다"
35
-Updater.FailedToLaunch="판올림 도우미를 실행할 수 없습니다"
36
+Updater.Running.Text="업데이트 전에 활성화 되어있는 출력을 먼저 꺼주세요"
37
+Updater.NoUpdatesAvailable.Title="사용 가능한 업데이트가 없습니다"
38
+Updater.NoUpdatesAvailable.Text="현재 사용가능한 업데이트가 없습니다"
39
+Updater.FailedToLaunch="업데이트 관리자를 실행할 수 없습니다"
40
 Updater.GameCaptureActive.Title="게임 캡쳐 기능이 활성화 중"
41
 Updater.GameCaptureActive.Text="게임 캡쳐 라이브러리가 현재 사용 중입니다. 캡쳐 중인 게임/프로그램 혹은 윈도우를 종료 후 다시 시작하세요."
42
 
43
@@ -329,7 +330,7 @@
44
 Remux.ExitUnfinished="재다중화 작업이 끝나지 않았습니다. 지금 멈추면 대상 파일은 사용할 수 없는 상태가 됩니다.\n정말로 작업을 중단하겠습니까?"
45
 Remux.HelpText="재다중화 작업을 하려면 파일을 이 창에 드롭하거나 비어있는 \"OBS 녹화\" 셀을 눌러 대상을 지정하세요."
46
 
47
-UpdateAvailable="새 판올림 사용 가능"
48
+UpdateAvailable="새 업데이트 사용 가능"
49
 UpdateAvailable.Text="버전 %1.%2.%3이 나왔습니다. <a href='%4'>다운로드</a>"
50
 
51
 Basic.DesktopDevice1="데스크탑 오디오"
52
@@ -365,8 +366,8 @@
53
 Deinterlacing.TopFieldFirst="상위 필드 우선"
54
 Deinterlacing.BottomFieldFirst="하단 필드 우선"
55
 
56
-VolControl.SliderUnmuted="'%1'의 음량 조절: %2"
57
-VolControl.SliderMuted="'%1'의 음량 조절: %2 (현재 음소거)"
58
+VolControl.SliderUnmuted="'%1'의 음량 조절:"
59
+VolControl.SliderMuted="'%1'의 음량 조절: (현재 음소거)"
60
 VolControl.Mute="음소거 '%1'"
61
 VolControl.Properties="'%1' 속성"
62
 
63
@@ -382,6 +383,7 @@
64
 
65
 AddProfile.Title="프로파일 추가"
66
 AddProfile.Text="프로파일 이름을 입력하세요"
67
+AddProfile.WizardCheckbox="자동 설정 마법사 보이기"
68
 
69
 RenameProfile.Title="프로파일 이름 바꾸기"
70
 
71
@@ -396,6 +398,11 @@
72
 Basic.SourceSelect.AddExisting="기존 추가"
73
 Basic.SourceSelect.AddVisible="소스를 표시"
74
 
75
+Basic.Main.Sources.Visibility="투명도"
76
+Basic.Main.Sources.VisibilityDescription="캔버스 안 '%1'의 투명도를 조절합니다"
77
+Basic.Main.Sources.Lock="잠금"
78
+Basic.Main.Sources.LockDescription="캔버스 안의 '%1'의 위치와 비율을 고정합니다"
79
+
80
 Basic.PropertiesWindow="'%1' 속성"
81
 Basic.PropertiesWindow.AutoSelectFormat="%1 (자동선택: %2)"
82
 Basic.PropertiesWindow.SelectColor="색상 지정"
83
@@ -567,7 +574,7 @@
84
 Basic.MainMenu.Help.Logs.UploadCurrentLog="현재 기록 파일 올리기(&C)"
85
 Basic.MainMenu.Help.Logs.UploadLastLog="마지막 기록 파일 올리기(&L)"
86
 Basic.MainMenu.Help.Logs.ViewCurrentLog="현재 기록 보기(&V)"
87
-Basic.MainMenu.Help.CheckForUpdates="판올림 확인"
88
+Basic.MainMenu.Help.CheckForUpdates="업데이트 확인"
89
 Basic.MainMenu.Help.CrashLogs="오류 보고(&R)"
90
 Basic.MainMenu.Help.CrashLogs.ShowLogs="오류 보고서 보기(&S)"
91
 Basic.MainMenu.Help.CrashLogs.UploadLastLog="마지막 오류 보고서 전송하기(&L)"
92
@@ -580,7 +587,7 @@
93
 Basic.Settings.General="일반"
94
 Basic.Settings.General.Theme="테마"
95
 Basic.Settings.General.Language="언어"
96
-Basic.Settings.General.EnableAutoUpdates="프로그램을 시작할 때 자동으로 판올림이 있나 확인"
97
+Basic.Settings.General.EnableAutoUpdates="프로그램을 시작할 때 자동으로 업데이트가 있나 확인하기"
98
 Basic.Settings.General.OpenStatsOnStartup="시작 시 통계 창을 열기"
99
 Basic.Settings.General.WarnBeforeStartingStream="방송을 시작할 때 확인 대화 상자 표시"
100
 Basic.Settings.General.WarnBeforeStoppingStream="방송을 중단할 때 확인 대화 상자 표시"
101
@@ -635,13 +642,19 @@
102
 Basic.Settings.Stream.MissingUrlAndApiKey="URL 과 스트림 키가 없습니다.\n\n설정에 들어가 '방송'란에서 URL과 스트림 키를 입력하세요."
103
 Basic.Settings.Stream.MissingUrl="방송 URL이 없습니다.\n\n설정에 들어가 '방송'란에서 URL을 입력하세요."
104
 Basic.Settings.Stream.MissingStreamKey="스트림 키가 없습니다.\n\n설정에 들어가 '방송'란에서 스트림 키를 입력하세요."
105
+Basic.Settings.Stream.IgnoreRecommended="권장 스트리밍 서비스 설정 무시"
106
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="권장 설정 덮어쓰기"
107
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="경고: 서비스 제한을 넘는 경우 방송의 품질이 저하되거나 막힐 수 있습니다.\n\n계속하시겠습니까?"
108
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="최대 영상 비트레이트: %1 kbps"
109
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="최대 오디오 비트레이트: %1 kbps"
110
+Basic.Settings.Stream.Recommended.MaxResolution="최대 해상도: %1"
111
+Basic.Settings.Stream.Recommended.MaxFPS="최대 FPS: %1"
112
 
113
 Basic.Settings.Output="출력"
114
 Basic.Settings.Output.Format="녹화 형식"
115
 Basic.Settings.Output.Encoder="인코더"
116
 Basic.Settings.Output.SelectDirectory="녹화 경로 선택"
117
 Basic.Settings.Output.SelectFile="녹화 파일 선택"
118
-Basic.Settings.Output.EnforceBitrate="방송 서비스의 비트레이트 제한 적용"
119
 Basic.Settings.Output.DynamicBitrate="네트워크 혼잡 상태를 관리하기 위해서 비트레이트를 유동적으로 변경합니다"
120
 Basic.Settings.Output.DynamicBitrate.Beta="네트워크 혼잡 상태를 관리하기 위해서 비트레이트를 유동적으로 변경합니다 (베타)"
121
 Basic.Settings.Output.DynamicBitrate.TT="혼잡을 줄이기 위해 프레임을 떨어뜨리는 대신 적용 중인 비트레이트를 유동적으로 조절합니다.\n\n중대한 혼잡 상태가 급작스럽게 발생할 때 시청자들이 접하는 화면이 어느정도 지체될 수 있습니다.\n비트레이트가 감소하면 복구하는데 수 분이 걸릴 수 있습니다.\n\n이 기능은 현재 RTMP에서만 지원합니다."
122
@@ -662,8 +675,8 @@
123
 Basic.Settings.Output.Simple.RecordingQuality.Small="높은 품질, 중간 파일 크기"
124
 Basic.Settings.Output.Simple.RecordingQuality.HQ="무손실 상태와 비교하여 거의 차이가 없는 품질, 큰 파일 크기"
125
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="무손실 품질, 아주 큰 파일 크기"
126
-Basic.Settings.Output.Simple.Warn.VideoBitrate="경고: 비디오 비트레이트가 선택한 스트리밍 서비스의 상한선인 %1으로 적용됩니다. %1이상으로 설정하려면 인코더 설정을 고급으로 전환한 다음 \"방송 서비스의 비트레이트 제한 적용\" 설정을 끄십시오."
127
-Basic.Settings.Output.Simple.Warn.AudioBitrate="경고: 오디오 비트레이트가 선택한 스트리밍 서비스의 상한선인 %1으로 적용됩니다. %1이상으로 설정하려면 인코더 설정을 고급으로 전환한 다음 \"방송 서비스의 비트레이트 제한 적용\" 설정을 끄십시오."
128
+Basic.Settings.Output.Simple.Warn.VideoBitrate="경고: 송출 영상의 비트레이트가 현재 스트리밍 서비스의 최대값을 넘는 %1 으로 설정됩니다."
129
+Basic.Settings.Output.Simple.Warn.AudioBitrate="경고: 송출 오디오의 비트레이트가 현재 스트리밍 서비스의 최대값을 넘는 %1 으로 설정됩니다."
130
 Basic.Settings.Output.Simple.Warn.CannotPause="경고: 녹화 품질이 \"방송과 동일\"로 설정되어 있으면 녹화를 일시정지할 수 없습니다."
131
 Basic.Settings.Output.Simple.Warn.Encoder="경고: 방송과 녹화를 동시에 진행할 때 다음을 주의하십시오. 소프트웨어 인코더로 방송과 다른 품질로 녹화하면 더 많은 CPU 부담이 발생합니다."
132
 Basic.Settings.Output.Simple.Warn.Lossless="경고: 무손실 품질로 녹화하면 파일 크기가 엄청나게 커집니다! 해당 설정은 높은 해상도 및 프레임에서 분당 7기가바이트 이상 필요합니다. 따라서 디스크에 아주 큰 공간을 확보하지 않는 이상 장시간 녹화에는 추천하지 않습니다."
133
@@ -674,6 +687,11 @@
134
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="하드웨어 (AMD)"
135
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="하드웨어 (NVENC)"
136
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="소프트웨어 (x264 CPU 부담이 적지만 파일 크기가 증가)"
137
+Basic.Settings.Output.Simple.TwitchVodTrack="트위치 다시보기 트랙 (2번 트랙 사용)"
138
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="호환되지 않는 해상도/프레임률"
139
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="이 스트리밍 서비스는 현재 출력 해상도 및/또는 프레임률을 지원하지 않습니다. 호환 가능한 가장 가까운 값으로 변경할 것입니다.:\n\n%1\n\n계속하시겠습니까?"
140
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="해상도: %1"
141
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS: %1"
142
 Basic.Settings.Output.VideoBitrate="비디오 비트레이트"
143
 Basic.Settings.Output.AudioBitrate="오디오 비트레이트"
144
 Basic.Settings.Output.Reconnect="자동으로 다시 연결"
145
@@ -688,15 +706,16 @@
146
 Basic.Settings.Output.Adv.Rescale="출력 배율 재조정"
147
 Basic.Settings.Output.Adv.AudioTrack="오디오 트랙"
148
 Basic.Settings.Output.Adv.Streaming="방송"
149
-Basic.Settings.Output.Adv.ApplyServiceSettings="방송 서비스 인코더 설정 강제 적용"
150
 Basic.Settings.Output.Adv.Audio.Track1="트랙 1"
151
 Basic.Settings.Output.Adv.Audio.Track2="트랙 2"
152
 Basic.Settings.Output.Adv.Audio.Track3="트랙 3"
153
 Basic.Settings.Output.Adv.Audio.Track4="트랙 4"
154
 Basic.Settings.Output.Adv.Audio.Track5="트랙 5"
155
 Basic.Settings.Output.Adv.Audio.Track6="트랙 6"
156
+Basic.Settings.Output.Adv.TwitchVodTrack="Twitch VOD 트랙"
157
 
158
 Basic.Settings.Output.Adv.Recording="녹화"
159
+Basic.Settings.Output.Adv.Recording.RecType="녹화 형식"
160
 Basic.Settings.Output.Adv.Recording.Type="형식"
161
 Basic.Settings.Output.Adv.Recording.Type.Standard="표준"
162
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="임의 출력 (FFmpeg)"
163
@@ -824,13 +843,18 @@
164
 Basic.AdvAudio.ActiveOnly="활성화된 소스만"
165
 Basic.AdvAudio.Name="이름"
166
 Basic.AdvAudio.Volume="음량"
167
+Basic.AdvAudio.VolumeSource="'%1' 소리 크기"
168
 Basic.AdvAudio.Mono="모노"
169
+Basic.AdvAudio.MonoSource="'%1' 모노 다운믹싱"
170
 Basic.AdvAudio.Balance="균형"
171
+Basic.AdvAudio.BalanceSource="'%1' 밸런싱"
172
 Basic.AdvAudio.SyncOffset="싱크 오프셋"
173
+Basic.AdvAudio.SyncOffsetSource="'%1' 싱크 조절"
174
 Basic.AdvAudio.Monitoring="오디오 모니터링"
175
 Basic.AdvAudio.Monitoring.None="모니터링 끔"
176
 Basic.AdvAudio.Monitoring.MonitorOnly="모니터링만 (출력은 제거)"
177
 Basic.AdvAudio.Monitoring.Both="모니터링과 출력"
178
+Basic.AdvAudio.MonitoringSource="'%1' 오디오 모니터링"
179
 Basic.AdvAudio.AudioTracks="트랙"
180
 
181
 Basic.Settings.Hotkeys="단축키"
182
obs-studio-26.0.2.tar.xz/UI/data/locale/ku-TR.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/ku-TR.ini Changed
9
 
1
@@ -130,6 +130,7 @@
2
 
3
 
4
 
5
+
6
 Basic.TransformWindow.Position="شوێن"
7
 Basic.TransformWindow.Rotation="سوڕانهوه"
8
 Basic.TransformWindow.Size="قەبارە"
9
obs-studio-26.0.2.tar.xz/UI/data/locale/lt-LT.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/lt-LT.ini Changed
100
 
1
@@ -35,6 +35,9 @@
2
 PreviewWindow="Ne pilno ekrano projekcija (Peržiūra)"
3
 SceneWindow="Ne pilno ekrano projekcija (Scena)"
4
 SourceWindow="Ne pilno ekrano projekcija (Šaltinis)"
5
+MultiviewProjector="Daugialypė peržiūra (Per visą ekraną)"
6
+MultiviewWindowed="Daugialypė peržiūra (Per dalį ekrano)"
7
+ResizeProjectorWindowToContent="Pritaikyti langą prie turinio"
8
 Clear="Išvalyti"
9
 Revert="Atstatyti"
10
 Show="Parodyti"
11
@@ -49,6 +52,7 @@
12
 HighResourceUsage="Kodavimas perkrautas! Mažinkite vaizdo parametrus arba naudokite greitesnę kodavimo parengtį."
13
 Transition="Perėjimas"
14
 QuickTransitions="Greitieji perėjimai"
15
+FadeToBlack="Pereiti į juodą"
16
 Left="Iš kairės"
17
 Right="Iš dešinės"
18
 Top="Iš viršaus"
19
@@ -57,24 +61,41 @@
20
 Hours="Valandos"
21
 Minutes="Minutės"
22
 Seconds="Sekundės"
23
+Deprecated="Nebenaudojamas"
24
+ReplayBuffer="Pakartojimo ribotuvas"
25
 Import="Importuoti"
26
 Export="Eksportuoti"
27
 Copy="Kopijuoti"
28
 Paste="Įklijuoti"
29
+PasteReference="Įklijuoti (Nuoroda)"
30
+PasteDuplicate="Įklijuoti (Duplikatas)"
31
 Next="Kitas"
32
 Back="Atgal"
33
 Defaults="Numatytieji"
34
+HideMixer="Paslėpti maišyklėje"
35
 None="Nieko"
36
 StudioMode.Preview="Peržiūra"
37
 StudioMode.Program="Programa"
38
+ShowInMultiview="Rodyti daugialypėje peržiūroje"
39
 Group="Grupė"
40
+DoNotShowAgain="Daugiau nerodyti"
41
 Default="(Numatytas)"
42
+Calculating="Skaičiuojama..."
43
 Fullscreen="Visas ekranas"
44
 Percent="Procentai"
45
+AspectRatio="Kraštinių santykis <b>%1:%2</b>"
46
+LockVolume="Užrakinti garsą"
47
+LogViewer="Peržiūrėti žurnalą"
48
+ShowOnStartup="Rodyti paleidžiant"
49
+OpenFile="Atidaryti failą"
50
+AddValue="Pridėti %1"
51
 
52
 AlreadyRunning.Title="OBS jau yra ijungtas"
53
+AlreadyRunning.Text="OBS jau paleistas! Nebent jūs norėjote taip padaryti, prašome išjungti esančius OBS procesus prieš paleidžiant naują. Jeigu turite nusistatę OBS susimažinti į paslėptas piktogramas, prašome pažiūrėti ar programa vis dar veikia ten."
54
 AlreadyRunning.LaunchAnyway="Vistiek paleisti"
55
 
56
+ChromeOS.Title="Nepalaikoma platforma"
57
+ChromeOS.Text="OBS panašu, kad veikia ChromeOS sistemoje. Ši platforma yra nepalaikoma"
58
 
59
 
60
 
61
@@ -83,6 +104,8 @@
62
 Auth.InvalidScope.Title="Reikalingas autentifikavimas"
63
 Auth.Chat="chat'as"
64
 Auth.StreamInfo="Transliacijos informacija"
65
+TwitchAuth.Stats="Twitch statistika"
66
+TwitchAuth.Feed="Twitch aktyvumo sąrašas"
67
 
68
 Copy.Filters="Kopijuoti filtrus"
69
 
70
@@ -95,11 +118,21 @@
71
 
72
 Basic.AutoConfig.ApplySettings="Taikyti nustatymus"
73
 Basic.AutoConfig.StartPage="Naudojimo informacija"
74
+Basic.AutoConfig.StartPage.PrioritizeRecording="Optimizuoti tik įrašymui, aš netransliuosiu"
75
 Basic.AutoConfig.VideoPage="Video nustatymai"
76
 Basic.AutoConfig.StreamPage="Transliacijos informacija"
77
+Basic.AutoConfig.StreamPage.ConnectAccount="Prijungti paskyrą (rekomenduojama)"
78
+Basic.AutoConfig.StreamPage.DisconnectAccount="Atjungti paskyrą"
79
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Atjungti paskyrą?"
80
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Šis pakeitimas įsigalios iš karto. Ar esate įsitikinę, kad norite atjungti paskyrą?"
81
+Basic.AutoConfig.StreamPage.GetStreamKey="Gauti transliacijos raktą"
82
+Basic.AutoConfig.StreamPage.MoreInfo="Daugiau informacijos"
83
 Basic.AutoConfig.StreamPage.UseStreamKey="Naudoti transliacijos raktą"
84
 Basic.AutoConfig.StreamPage.Service="Platforma"
85
+Basic.AutoConfig.StreamPage.Service.ShowAll="Rodyti visus..."
86
+Basic.AutoConfig.StreamPage.Service.Custom="Pasirinktinis..."
87
 Basic.AutoConfig.StreamPage.Server="Serveris"
88
+Basic.AutoConfig.StreamPage.StreamKey="Transliacijos raktas"
89
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Nuoroda)"
90
 
91
 Basic.Stats.Output.Stream="Transliacija"
92
@@ -246,6 +279,7 @@
93
 Basic.SourceSelect.AddExisting="Pridėti esamą"
94
 Basic.SourceSelect.AddVisible="Padaryti šaltinį matomu"
95
 
96
+
97
 Basic.PropertiesWindow="'%1' savybės"
98
 Basic.PropertiesWindow.AutoSelectFormat="%1 (automatinis pasirinkimas: %2)"
99
 Basic.PropertiesWindow.SelectColor="Pasirinkti spalvą"
100
obs-studio-26.0.2.tar.xz/UI/data/locale/mn-MN.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/mn-MN.ini Changed
25
 
1
@@ -123,6 +123,7 @@
2
 Basic.AutoConfig.StreamPage.DisconnectAccount="Хэрэглэгчийг салгах"
3
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Хэрэглэгчийг салгах уу?"
4
 Basic.AutoConfig.StreamPage.GetStreamKey="Цацалтын түлхүүр үгс авах"
5
+Basic.AutoConfig.StreamPage.MoreInfo="Илүү мэдээлэл"
6
 Basic.AutoConfig.StreamPage.UseStreamKey="Цацалтын түлхүүр үгс хэрэглэх"
7
 Basic.AutoConfig.StreamPage.Service="Үйлчилгээ"
8
 Basic.AutoConfig.StreamPage.Service.ShowAll="Бүгдийг харуул..."
9
@@ -232,6 +233,7 @@
10
 
11
 
12
 
13
+
14
 Basic.PropertiesWindow.SelectColor="Өнгө сонгох"
15
 Basic.PropertiesWindow.SelectFont="Фонт сонгох"
16
 
17
@@ -324,7 +326,6 @@
18
 Basic.Settings.Output.Encoder="Кодлогч"
19
 Basic.Settings.Output.SelectDirectory="Бичлэгийн Лавлахыг Сонгох"
20
 Basic.Settings.Output.SelectFile="Бичлэгийн Файлыг Сонго"
21
-Basic.Settings.Output.EnforceBitrate="Шууд цацалтын сервcийy хурдыг хязгаарлах"
22
 Basic.Settings.Output.Mode="Гаралтын Горим"
23
 Basic.Settings.Output.Mode.Simple="Энгийн"
24
 Basic.Settings.Output.Mode.Adv="Дэвшилттэй"
25
obs-studio-26.0.2.tar.xz/UI/data/locale/ms-MY.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/ms-MY.ini Changed
17
 
1
@@ -221,6 +221,7 @@
2
 Basic.SourceSelect.AddExisting="Tambah Sedia Ada"
3
 Basic.SourceSelect.AddVisible="Jadikan Sumber Kelihatan"
4
 
5
+
6
 Basic.PropertiesWindow="Sifat-sifat untuk '%1'"
7
 Basic.PropertiesWindow.AutoSelectFormat="%1 (auto-pilih: %2)"
8
 Basic.PropertiesWindow.SelectColor="Pilih warna"
9
@@ -354,7 +355,6 @@
10
 Basic.Settings.Output="Hasil"
11
 Basic.Settings.Output.Format="Format Rakaman"
12
 Basic.Settings.Output.SelectFile="Pilih Fail Rakaman"
13
-Basic.Settings.Output.EnforceBitrate="Kuatkuasakan had nilai bit perkhidmatan 'streaming'"
14
 Basic.Settings.Output.Mode.Simple="Mudah"
15
 Basic.Settings.Output.Mode.Adv="Lanjutan"
16
 Basic.Settings.Output.Simple.RecordingQuality="Kualiti Rakaman"
17
obs-studio-26.0.2.tar.xz/UI/data/locale/nb-NO.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/nb-NO.ini Changed
175
 
1
@@ -37,6 +37,7 @@
2
 SourceWindow="Projektor i vindu (kilde)"
3
 MultiviewProjector="Flervisning (Fullskjerm)"
4
 MultiviewWindowed="Flervisning (Vindu)"
5
+ResizeProjectorWindowToContent="Tilpass vindu til innhold"
6
 Clear="Tøm"
7
 Revert="Tilbakestill"
8
 Show="Vis"
9
@@ -86,13 +87,19 @@
10
 Fullscreen="Fullskjerm"
11
 Windowed="Vindusbasert"
12
 Percent="Prosent"
13
+RefreshBrowser="Oppdater"
14
 AspectRatio="Størrelsesforhold <b>%1:%2</b>"
15
 LockVolume="Lås volum"
16
+LogViewer="Logg leser"
17
+ShowOnStartup="Vis ved oppstart"
18
+OpenFile="Åpne fil"
19
 
20
 AlreadyRunning.Title="OBS kjører allerede"
21
 AlreadyRunning.Text="OBS kjører allerede! Med mindre du ikke mente dette, vennligst lukk alle eksisterende kjørende tilfeller av OBS før du kjører noen nye. Hvis du har satt OBS til å minimere til systemkurven, vennligst sjekk om den fortsatt kjører der."
22
 AlreadyRunning.LaunchAnyway="Start uansett"
23
 
24
+ChromeOS.Title="Usupportert platform"
25
+ChromeOS.Text="OBS ser ut til å kjøre i en ChromeOS kontainer. Denne platformen er ikke supportert"
26
 
27
 DockCloseWarning.Title="Lukker festbart vindu"
28
 DockCloseWarning.Text="Du stengte nettopp et festbart vindu. Hvis du vil vise det igjen, kan du gå til Vis → Festede elementer i menylinjen."
29
@@ -137,7 +144,9 @@
30
 Basic.AutoConfig.StartPage.SubTitle="Angi hva du vil bruke programmet til"
31
 Basic.AutoConfig.StartPage.PrioritizeStreaming="Optimaliser for strømming, innspilling kommer i andre rekke"
32
 Basic.AutoConfig.StartPage.PrioritizeRecording="Optimaliser for innspilling, jeg skal ikke streame"
33
+Basic.AutoConfig.StartPage.PrioritizeVirtualCam="Jeg har kun behov for det virtuelle kamera"
34
 Basic.AutoConfig.VideoPage="Videoinnstillinger"
35
+Basic.AutoConfig.VideoPage.SubTitle="Velg video innstillingene du ønsker å bruke"
36
 Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Bruk Gjeldende (%1x%2)"
37
 Basic.AutoConfig.VideoPage.BaseResolution.Display="Skjerm %1 (%2x%3)"
38
 Basic.AutoConfig.VideoPage.FPS.UseCurrent="Bruk Gjeldende (%1)"
39
@@ -179,6 +188,8 @@
40
 Basic.AutoConfig.TestPage.Result.RecordingEncoder="Opptakskoder"
41
 Basic.AutoConfig.TestPage.Result.Header="Programmet har estimert at disse innstillingene er den mest ideelle for deg:"
42
 Basic.AutoConfig.TestPage.Result.Footer="For å bruke disse innstillingene, klikker du Bruk innstillinger. Å konfigurere veiviseren og prøv på nytt, klikker du tilbake. For å konfigurer innstillinger manuelt selv, klikk Avbryt og åpne innstillinger."
43
+Basic.AutoConfig.Info="Veiviseren for automatisk konfigurasjon finner de beste innstillingene basert på din datamaskins spesifikasjon og internetthastighet."
44
+Basic.AutoConfig.RunAnytime="Denne kan kjøre når som helst ved å gå til verktøy menyen."
45
 
46
 Basic.Stats="Statistikk"
47
 Basic.Stats.CPUUsage="CPU-bruk"
48
@@ -293,7 +304,10 @@
49
 Output.BadPath.Text="Den oppgitte fillagringsbanen er ugyldig. Vennligst sjekk innstillingene dine og bekreft at filbanen er gyldig."
50
 
51
 LogReturnDialog="Vellykket Loggopplasting"
52
+LogReturnDialog.Description="Loggfilen din har blitt lastet opp. Du kan nå dele linken for feilsøking eller til støtteformål."
53
+LogReturnDialog.Description.Crash="Kræsjrapporten har blit lastet opp. Du kan nå dele linken for feilsøkingsformål."
54
 LogReturnDialog.CopyURL="Kopiér URL"
55
+LogReturnDialog.AnalyzeURL="Analyser"
56
 LogReturnDialog.ErrorUploadingLog="Feil ved opplasting av loggfil."
57
 
58
 Remux.SourceFile="OBS-opptak"
59
@@ -350,8 +364,6 @@
60
 Deinterlacing.TopFieldFirst="Øverste felt først"
61
 Deinterlacing.BottomFieldFirst="Nederste felt først"
62
 
63
-VolControl.SliderUnmuted="Volumskyveknappen for '%1': %2"
64
-VolControl.SliderMuted="Volumskyveknappen for '%1': %2 (dempet)"
65
 VolControl.Mute="Demp '%1'"
66
 VolControl.Properties="Egenskaper for '%1'"
67
 
68
@@ -381,6 +393,7 @@
69
 Basic.SourceSelect.AddExisting="Legg til eksisterende"
70
 Basic.SourceSelect.AddVisible="Gjør kilden synlig"
71
 
72
+
73
 Basic.PropertiesWindow="Egenskaper for '%1'"
74
 Basic.PropertiesWindow.AutoSelectFormat="%1 (selvvalg: %2)"
75
 Basic.PropertiesWindow.SelectColor="Velg farge"
76
@@ -457,6 +470,7 @@
77
 Basic.Main.StartReplayBuffer="Start omspillingsbuffer"
78
 Basic.Main.SaveReplay="Lagre reprise"
79
 Basic.Main.StartStreaming="Start Strømming"
80
+Basic.Main.StartVirtualCam="Start virtuelt kamera"
81
 Basic.Main.StopRecording="Stopp Opptak"
82
 Basic.Main.PauseRecording="Sett opptaket på pause"
83
 Basic.Main.UnpauseRecording="Fortsett opptaket"
84
@@ -466,6 +480,9 @@
85
 Basic.Main.StopStreaming="Stopp Strømming"
86
 Basic.Main.StoppingStreaming="Avslutter sendingen …"
87
 Basic.Main.ForceStopStreaming="Avslutt sendingen (forkast forsinkelse)"
88
+Basic.Main.ShowContextBar="Vis verktøylinje for kilde"
89
+Basic.Main.HideContextBar="Skjul verktøylinje for kilde"
90
+Basic.Main.StopVirtualCam="Stopp virtuelt kamera"
91
 Basic.Main.Group="Gruppe %1"
92
 Basic.Main.GroupItems="Gruppér merkede gjenstander"
93
 Basic.Main.Ungroup="Adskill"
94
@@ -521,6 +538,8 @@
95
 Basic.MainMenu.View.Docks.ResetUI="Omstart grensesnittet"
96
 Basic.MainMenu.View.Docks.LockUI="Lås grensesnittet"
97
 Basic.MainMenu.View.Docks.CustomBrowserDocks="Tilpassede nettleseroppgavelinjer..."
98
+Basic.MainMenu.View.ListboxToolbars="Knapper for Scene/Kilder"
99
+Basic.MainMenu.View.ContextBar="Verktøylinje for kilde"
100
 Basic.MainMenu.View.SceneTransitions="S&ceneoverganger"
101
 Basic.MainMenu.View.SourceIcons="Kilde &ikoner"
102
 Basic.MainMenu.View.StatusBar="&Statuslinje"
103
@@ -620,7 +639,6 @@
104
 Basic.Settings.Output.Encoder="Koder"
105
 Basic.Settings.Output.SelectDirectory="Velg opptaksmappe"
106
 Basic.Settings.Output.SelectFile="Velg opptaksfil"
107
-Basic.Settings.Output.EnforceBitrate="Håndhev strømmetjenestens bitfrekvensgrense"
108
 Basic.Settings.Output.DynamicBitrate="Endre bitrate dynamisk for å håndtere overbelastning"
109
 Basic.Settings.Output.DynamicBitrate.Beta="Endre bitrate dynamisk for å håndtere overbelastning (Beta)"
110
 Basic.Settings.Output.DynamicBitrate.TT="I stedet for å droppe bilderuter for å redusere overbelastning, endres bitrate dynamisk underveis.\n\nMerk at dette kan øke forsinkelsen for seerne hvis det plutselig er en betydelig overbelastning.\nNår bitraten synker, kan gjenopprettingen ta opp mot noen minutter.\n\nFor øyeblikket støttes bare RTMP."
111
@@ -641,8 +659,6 @@
112
 Basic.Settings.Output.Simple.RecordingQuality.Small="Høy kvalitet, middels filstørrelse"
113
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Veldig høy kvalitet, stor filstørrelse"
114
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Tapsfri kvalitet, veldig stor filstørrelse"
115
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Advarsel: Strømmens bitfrekvens vil bli satt til %1, som er den øvre grensen for den gjeldende strømmetjenesten. Om du ønsker å gå over %1, må du aktivere avanserte koderinnstillinger og sørge for at valget for håndheving av strømmetjenestens grense ikke er huket av."
116
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Advarsel: Strømmens lydbitfrekvens vil bli satt til %1, som er den øvre grensen for den gjeldende strømmetjenesten. Om du ønsker å gå over %1, må du aktivere avanserte koderinnstillinger og sørge for at valget for håndheving av strømmetjenestens grense ikke er huket av."
117
 Basic.Settings.Output.Simple.Warn.CannotPause="Advarsel: Innspillinger kan ikke pauses hvis opptakskvaliteten er satt til \"Samme som strøm\"."
118
 Basic.Settings.Output.Simple.Warn.Encoder="Advarsel: Opptak med programvarekoder i en annen kvalitetsinnstilling enn strømmingen vil kreve ekstra prosessorressurser om du strømmer og tar opp på samme tid."
119
 Basic.Settings.Output.Simple.Warn.Lossless="Advarsel: Tapsfri kvalitet resulterer i enormt store filstørrelser! Denne innstillingen kan bruke oppimot 7 GB diskplass per minutt ved opptak med høy oppløsning og bildefrekvens. Tapsfri kvalitet anbefales ikke for lange opptak med mindre du har store mengder diskplass tilgjengelig."
120
@@ -667,7 +683,6 @@
121
 Basic.Settings.Output.Adv.Rescale="Reskaler utgang"
122
 Basic.Settings.Output.Adv.AudioTrack="Lydspor"
123
 Basic.Settings.Output.Adv.Streaming="Strømming"
124
-Basic.Settings.Output.Adv.ApplyServiceSettings="Fremtving strømmetjenestens koderinnstillinger"
125
 Basic.Settings.Output.Adv.Audio.Track1="Spor 1"
126
 Basic.Settings.Output.Adv.Audio.Track2="Spor 2"
127
 Basic.Settings.Output.Adv.Audio.Track3="Spor 3"
128
@@ -704,6 +719,12 @@
129
 Basic.Settings.Output.Adv.FFmpeg.GOPSize="Nøkkelbildeintervall (bilder)"
130
 Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Vis alle kodeker (selv om potensielt ikke-kompatibel)"
131
 
132
+Screenshot="Skjermbilde av forhåndsvisning"
133
+Screenshot.SourceHotkey="Skjermbilde av valgt kilde"
134
+Screenshot.StudioProgram="Skjermbilde (program)"
135
+Screenshot.Preview="Skjermbilde (forhåndsvisning)"
136
+Screenshot.Scene="Skjermbilde (Scene)"
137
+Screenshot.Source="Skjermbilde (Kilde)"
138
 
139
 
140
 
141
@@ -727,6 +748,7 @@
142
 Basic.Settings.Video.DownscaleFilter.Bilinear="Bilineær (raskest, men uskarp ved skalering)"
143
 Basic.Settings.Video.DownscaleFilter.Bicubic="Bikubisk (skjerpet skalering, 16 prøver)"
144
 Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (skjerpet skalering, 36 prøver)"
145
+Basic.Settings.Video.DownscaleFilter.Area="Område (Vektet sum, 4/6/9 målinger)"
146
 
147
 Basic.Settings.Audio="Lyd"
148
 Basic.Settings.Audio.SampleRate="Samplingsfrekvens"
149
@@ -742,6 +764,7 @@
150
 Basic.Settings.Audio.MultiChannelWarning.Enabled="Advarsel: Surroundlyd er aktivert."
151
 Basic.Settings.Audio.MultichannelWarning.Title="Vil du aktivere surround-lyd?"
152
 Basic.Settings.Audio.MultichannelWarning.Confirm="Er du sikker på at du vil aktivere surround-lyd?"
153
+Basic.Settings.Audio.Devices="Globale lyd enheter"
154
 Basic.Settings.Audio.DesktopDevice="Skrivebordslyd"
155
 Basic.Settings.Audio.DesktopDevice2="Skrivebordslyd 2"
156
 Basic.Settings.Audio.AuxDevice="Mikrofon/Aux"
157
@@ -905,5 +928,16 @@
158
 Restart="Omstart"
159
 NeedsRestart="OBS Studio må startes på nytt. Vil du starte på nytt nå?"
160
 
161
-
162
+ContextBar.NoSelectedSource="Ingen kilde er valgt"
163
+ContextBar.ResetTransform="Tilbakestill transformering"
164
+ContextBar.FitToCanvas="Tilpass til lerret"
165
+
166
+ContextBar.MediaControls.PlayMedia="Spill av media"
167
+ContextBar.MediaControls.PauseMedia="Pause media"
168
+ContextBar.MediaControls.StopMedia="Stop media"
169
+ContextBar.MediaControls.RestartMedia="Start media på nytt"
170
+ContextBar.MediaControls.PlaylistNext="Neste i Spilleliste"
171
+ContextBar.MediaControls.PlaylistPrevious="Forrige i spilleliste"
172
+ContextBar.MediaControls.MediaProperties="Media egenskaper"
173
+ContextBar.MediaControls.BlindSeek="Widget for media søker"
174
 
175
obs-studio-26.0.2.tar.xz/UI/data/locale/nl-NL.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/nl-NL.ini Changed
842
 
1
@@ -6,7 +6,7 @@
2
 Cancel="Annuleren"
3
 Close="Sluiten"
4
 Save="Opslaan"
5
-Discard="Annuleren"
6
+Discard="Negeren"
7
 Disable="Uitschakelen"
8
 Yes="Ja"
9
 No="Nee"
10
@@ -22,7 +22,7 @@
11
 Display="Beeldscherm"
12
 Name="Naam"
13
 Exit="Afsluiten"
14
-Mixer="Audio Mixer"
15
+Mixer="Audiomixer"
16
 Browse="Bladeren"
17
 Mono="Mono"
18
 Stereo="Stereo"
19
@@ -37,7 +37,7 @@
20
 SourceWindow="Projectorvenster (Bron)"
21
 MultiviewProjector="Multiview (Fullscreen)"
22
 MultiviewWindowed="Multiview (Venster)"
23
-ResizeProjectorWindowToContent="Venster aanpassen naar inhoud"
24
+ResizeProjectorWindowToContent="Venster aanpassen aan de inhoud"
25
 Clear="Wissen"
26
 Revert="Herstellen"
27
 Show="Weergeven"
28
@@ -66,7 +66,7 @@
29
 Import="Importeer"
30
 Export="Exporteer"
31
 Copy="Kopiëren"
32
-Paste="plakken"
33
+Paste="Plakken"
34
 PasteReference="Plakken (referentie)"
35
 PasteDuplicate="Plakken (dupliceren)"
36
 RemuxRecordings="Remux opnames"
37
@@ -76,18 +76,18 @@
38
 HideMixer="Verbergen in mixer"
39
 TransitionOverride="Overgang overschrijven"
40
 None="Geen"
41
-StudioMode.Preview="Voorbeeld"
42
+StudioMode.Preview="Voorvertoning"
43
 StudioMode.Program="Programma"
44
 ShowInMultiview="Weergeven in Multiview"
45
-VerticalLayout="Verticale Lay-out"
46
+VerticalLayout="Verticale layout"
47
 Group="Groep"
48
 DoNotShowAgain="Niet opnieuw tonen"
49
 Default="(Standaard)"
50
 Calculating="Berekenen..."
51
 Fullscreen="Volledig scherm"
52
-Windowed="Venster"
53
+Windowed="In een venster"
54
 Percent="Procent"
55
-RefreshBrowser="Herlaad"
56
+RefreshBrowser="Opnieuw laden"
57
 AspectRatio="Beeldverhouding <b>%1:%2</b>"
58
 LockVolume="Volume vergrendelen"
59
 LogViewer="Log Bekijker"
60
@@ -97,23 +97,23 @@
61
 
62
 AlreadyRunning.Title="OBS is al actief"
63
 AlreadyRunning.Text="OBS is al actief! Tenzij je dit wilde doen, sluit a.u.b. alle reeds draaiende instanties van OBS voor je een nieuwe instantie opstart. Als je OBS hebt ingesteld om naar het systeemvak te minimaliseren, controleer dan of hij daar nog uitgevoerd wordt."
64
-AlreadyRunning.LaunchAnyway="Toch Starten"
65
+AlreadyRunning.LaunchAnyway="Toch starten"
66
 
67
 ChromeOS.Title="Niet-ondersteund platform"
68
-ChromeOS.Text="OBS lijkt te worden uitgevoerd in een ChromeOS container. Dit platform wordt niet ondersteund"
69
+ChromeOS.Text="OBS lijkt te worden uitgevoerd in een ChromeOS-container; dit platform wordt niet ondersteund"
70
 
71
-DockCloseWarning.Title="Dokbaar Venster Sluiten"
72
-DockCloseWarning.Text="Je hebt net een dokbaar venster gesloten. Als je het opnieuw wilt zien, gebruik dan het menu Beeld → Docks in de menubalk."
73
+DockCloseWarning.Title="Dockbaar venster sluiten"
74
+DockCloseWarning.Text="Je hebt net een dockbaar venster gesloten; als je het opnieuw wilt tonen, gebruik dan het menu Beeld → Docks in de menubalk."
75
 
76
-ExtraBrowsers="Aangepaste Browser Docks"
77
+ExtraBrowsers="Aangepaste browser-docks"
78
 ExtraBrowsers.Info="Voeg docks toe door ze een naam en URL te geven, klik vervolgens op Toepassen of Sluiten om de docks te openen. U kunt op elk moment docks toevoegen of verwijderen."
79
-ExtraBrowsers.DockName="Dock Naam"
80
+ExtraBrowsers.DockName="Dock-naam"
81
 
82
 Auth.Authing.Title="Authenticeren..."
83
-Auth.Authing.Text="Authenticeren met %1, even geduld a.u.b..."
84
+Auth.Authing.Text="Authenticeren bij %1, even geduld..."
85
 Auth.AuthFailure.Title="Authenticatie fout"
86
 Auth.AuthFailure.Text="Authenticeren met %1 is mislukt:\n\n%2: %3"
87
-Auth.InvalidScope.Title="Verificatie vereist"
88
+Auth.InvalidScope.Title="Authenticatie vereist"
89
 Auth.InvalidScope.Text="De authenticatie vereisten voor %1 zijn gewijzigd. Sommige functies zijn mogelijk niet beschikbaar."
90
 Auth.LoadingChannel.Title="Kanaalinformatie laden..."
91
 Auth.LoadingChannel.Text="Kanaalinformatie voor %1 laden, even geduld a.u.b..."
92
@@ -121,17 +121,17 @@
93
 Auth.ChannelFailure.Text="Fout bij het laden van kanaal informatie voor %1\n\n%2: %3"
94
 Auth.Chat="Chat"
95
 Auth.StreamInfo="Stream-informatie"
96
-TwitchAuth.Stats="Twitch statistieken"
97
-TwitchAuth.Feed="Twitch activiteitenfeed"
98
-TwitchAuth.TwoFactorFail.Title="Kon stream key niet opvragen"
99
-TwitchAuth.TwoFactorFail.Text="OBS kon geen verbinding maken met uw Twitch account. Zorg ervoor dat er twee-factor authenticatie is ingesteld in uw <a href='https://www.twitch.tv/settings/security'>Twitch beveiligingsinstellingen</a>, omdat dit nodig is om te streamen."
100
-RestreamAuth.Channels="Restream Kanalen"
101
+TwitchAuth.Stats="Twitch-statistieken"
102
+TwitchAuth.Feed="Twitch-activiteitenfeed"
103
+TwitchAuth.TwoFactorFail.Title="Stream-key opvragen niet mogelijk"
104
+TwitchAuth.TwoFactorFail.Text="OBS kon geen verbinding maken met het Twitch-account; zorg ervoor dat er tweestappen-authenticatie ingesteld is in de <a href='https://www.twitch.tv/settings/security'>Twitch-beveiligingsinstellingen</a>, omdat dit vereist is om te kunnen streamen."
105
+RestreamAuth.Channels="Kanalen opnieuw streamen"
106
 
107
 Copy.Filters="Kopieer Filters"
108
 Paste.Filters="Plak filters"
109
 
110
-BrowserPanelInit.Title="Browser Opstarten..."
111
-BrowserPanelInit.Text="Browser opstarten, even geduld a.u.b..."
112
+BrowserPanelInit.Title="De browser wordt gestart..."
113
+BrowserPanelInit.Text="De browser wordt gestart, even geduld..."
114
 
115
 BandwidthTest.Region="Regio"
116
 BandwidthTest.Region.US="Verenigde Staten"
117
@@ -139,15 +139,15 @@
118
 BandwidthTest.Region.Asia="Azië"
119
 BandwidthTest.Region.Other="Overig"
120
 
121
-Basic.AutoConfig="Automatische configuratieassistent"
122
+Basic.AutoConfig="Automatische configuratie-wizard"
123
 Basic.AutoConfig.ApplySettings="Instellingen toepassen"
124
 Basic.AutoConfig.StartPage="Gebruiksinformatie"
125
-Basic.AutoConfig.StartPage.SubTitle="Waar wil je het programma voor gebruiken?"
126
-Basic.AutoConfig.StartPage.PrioritizeStreaming="Optimaliseren voor streamen, lokaal opnemen is minder belangrijk"
127
-Basic.AutoConfig.StartPage.PrioritizeRecording="Optimaliseren voor lokaal opnemen, ik ga niet streamen"
128
-Basic.AutoConfig.StartPage.PrioritizeVirtualCam="Ik ga alleen de virtuele camera gebruiken"
129
+Basic.AutoConfig.StartPage.SubTitle="Geef aan waarvoor je het programma wilt gebruiken"
130
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Optimaliseren voor streamen, opnemen is minder belangrijk"
131
+Basic.AutoConfig.StartPage.PrioritizeRecording="Optimaliseren voor opnemen, ik ga niet streamen"
132
+Basic.AutoConfig.StartPage.PrioritizeVirtualCam="Ik zal alleen de virtuele camera gebruiken"
133
 Basic.AutoConfig.VideoPage="Video-instellingen"
134
-Basic.AutoConfig.VideoPage.SubTitle="Specifieer welke videoinstellingen u wenst te gebruiken"
135
+Basic.AutoConfig.VideoPage.SubTitle="Specifieer welke video-instellingen je wilt gebruiken"
136
 Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Gebruik huidige (%1x%2)"
137
 Basic.AutoConfig.VideoPage.BaseResolution.Display="Beeldscherm %1 (%2x%3)"
138
 Basic.AutoConfig.VideoPage.FPS.UseCurrent="Gebruik huidige (%1)"
139
@@ -156,11 +156,12 @@
140
 Basic.AutoConfig.VideoPage.CanvasExplanation="Let op: de basisresolutie (canvas) hoeft niet gelijk te zijn als de resolutie waarmee je streamt of opneemt. Je stream/opnameresolutie kan omlaag bijgeschaald worden vanaf de basisresolutie om de belasting op de computer of de benodigde bitrate te verlagen."
141
 Basic.AutoConfig.StreamPage="Stream-informatie"
142
 Basic.AutoConfig.StreamPage.SubTitle="Voer alstublieft uw stream-informatie in"
143
-Basic.AutoConfig.StreamPage.ConnectAccount="Verbind Account (aanbevolen)"
144
+Basic.AutoConfig.StreamPage.ConnectAccount="Maak verbinding met het account (aanbevolen)"
145
 Basic.AutoConfig.StreamPage.DisconnectAccount="Account loskoppelen"
146
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Account loskoppelen?"
147
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Deze wijziging zal onmiddellijk van toepassing zijn. Weet u zeker dat u uw account wilt loskoppelen?"
148
-Basic.AutoConfig.StreamPage.GetStreamKey="Haal streamsleutel op"
149
+Basic.AutoConfig.StreamPage.GetStreamKey="Haal een streamsleutel op"
150
+Basic.AutoConfig.StreamPage.MoreInfo="Meer informatie"
151
 Basic.AutoConfig.StreamPage.UseStreamKey="Gebruik Stream Key"
152
 Basic.AutoConfig.StreamPage.Service="Dienst"
153
 Basic.AutoConfig.StreamPage.Service.ShowAll="Toon alles..."
154
@@ -189,8 +190,8 @@
155
 Basic.AutoConfig.TestPage.Result.RecordingEncoder="Opname-encoder"
156
 Basic.AutoConfig.TestPage.Result.Header="Het programma heeft vastgesteld dat deze geschatte instellingen het meest ideaal zijn voor jou:"
157
 Basic.AutoConfig.TestPage.Result.Footer="Om deze instellingen te gebruiken, klik op Instellingen Toepassen. Om de configuratieassistent aan te passen, klik op Terug. Om de instellingen handmatig te bepalen, klik op Annuleren en open de instellingen."
158
-Basic.AutoConfig.Info="De automatische configuratiewizard bepaalt de beste instellingen op basis van uw computerspecificaties en de snelheid van de internetverbinding."
159
-Basic.AutoConfig.RunAnytime="Dit kan op elk moment worden uitgevoerd door naar het Tools menu te gaan."
160
+Basic.AutoConfig.Info="De automatische configuratiewizard bepaalt de beste instellingen op basis van de computerspecificaties en de snelheid van de internetverbinding."
161
+Basic.AutoConfig.RunAnytime="Dit kan op elk moment uitgevoerd worden door naar het Tools-menu te gaan."
162
 
163
 Basic.Stats="Statistieken"
164
 Basic.Stats.CPUUsage="Processorgebruik"
165
@@ -221,54 +222,54 @@
166
 Updater.UpdateNow="Nu updaten"
167
 Updater.RemindMeLater="Herinner mij later"
168
 Updater.Skip="Sla deze versie over"
169
-Updater.Running.Title="Programma actief"
170
-Updater.Running.Text="Er is momenteel een uitvoer actief, stop alle actieve uitvoer voor je probeert te updaten"
171
+Updater.Running.Title="Programma op dit moment actief"
172
+Updater.Running.Text="Er is momenteel uitvoer actief; stop alle actieve uitvoer voordat je probeert te updaten"
173
 Updater.NoUpdatesAvailable.Title="Geen updates beschikbaar"
174
 Updater.NoUpdatesAvailable.Text="Er zijn momenteel geen updates beschikbaar"
175
 Updater.FailedToLaunch="Starten van updater is mislukt"
176
-Updater.GameCaptureActive.Title="Game capture actief"
177
-Updater.GameCaptureActive.Text="Er is momenteel een game capture hook in gebruik. Sluit alle games/programma's af die opgenomen worden (of herstart Windows) en probeer het opnieuw."
178
+Updater.GameCaptureActive.Title="Game-capture actief"
179
+Updater.GameCaptureActive.Text="De game-capture-hook-bibliotheek in momenteel in gebruik; sluit alle games/programma's af die opgenomen worden (of herstart Windows) en probeer het nog eens."
180
 
181
-QuickTransitions.SwapScenes="Preview-/uitvoerscenes verwisselen na overgang"
182
-QuickTransitions.SwapScenesTT="Verwisselt de preview- en uitvoercenes na een overgang (als de originele uitvoerscène nog bestaat.)\nDit zal geen veranderingen ongedaan maken die mogelijk zijn gemaakt aan de originele uitvoerscène."
183
-QuickTransitions.DuplicateScene="Scène Dupliceren"
184
+QuickTransitions.SwapScenes="Voorvertonings-/uitvoerscènes verwisselen na overgang"
185
+QuickTransitions.SwapScenesTT="Verwisselt de voorvertonings- en uitvoercènes na een overgang (als de originele uitvoerscène nog bestaat.)\nDit zal veranderingen niet ongedaan maken die misschien zijn gemaakt aan de originele uitvoerscène."
186
+QuickTransitions.DuplicateScene="Scène dupliceren"
187
 QuickTransitions.DuplicateSceneTT="Wanneer je dezelfde scene bewerkt, staat dit toe om de transformatie/zichtbaarheid van de bronnen aan te passen zonder de uitvoerscène aan te passen.\nOm eigenschappen van bronnen aan te passen zonder de uitvoerscène aan te passen, schakel 'Bronnen Dupliceren' in.\nHet veranderen van deze waarde zal de huidige uitvoerscène resetten (als deze nog bestaat)."
188
-QuickTransitions.EditProperties="Bronnen Dupliceren"
189
+QuickTransitions.EditProperties="Bronnen dupliceren"
190
 QuickTransitions.EditPropertiesTT="Wanneer je dezelfde scène bewerkt, staat dit het bewerken van eigenschappen van bronnen toe zonder de uitvoerscène aan te passen.\nDit kan alleen worden gebruikt als 'Scène Dupliceren' is ingeschakeld.\nSommige bronnen (zoals opname- of mediabronnen) ondersteunen dit niet en kunnen niet onafhankelijk worden bewerkt.\nHet veranderen van deze waarden zal de huidige scène resetten (als deze nog bestaat).\n\nWaarschuwing: Omdat bronnen zullen worden gedupliceerd kan dit extra systeem of video rekenkracht verbruiken."
191
 QuickTransitions.HotkeyName="Snelle overgang: %1"
192
 
193
 Basic.AddTransition="Instelbare overgang toevoegen"
194
 Basic.RemoveTransition="Instelbare overgang verwijderen"
195
-Basic.TransitionProperties="Overgang-eigenschappen"
196
+Basic.TransitionProperties="Overgangseigenschappen"
197
 Basic.SceneTransitions="Scène-overgangen"
198
 Basic.TransitionDuration="Duur"
199
 Basic.TogglePreviewProgramMode="Studiomodus"
200
 
201
-TransitionNameDlg.Text="Voer a.u.b. de naam van de transitie in"
202
+TransitionNameDlg.Text="Voer de naam van de transitie in"
203
 TransitionNameDlg.Title="Naam van de overgang"
204
 
205
 TitleBar.Profile="Profiel"
206
 TitleBar.Scenes="Scènes"
207
 
208
-NameExists.Title="Naam bestaat al"
209
+NameExists.Title="De naam bestaat al"
210
 NameExists.Text="De naam is al in gebruik."
211
 
212
-NoNameEntered.Title="Voer a.u.b. een geldige naam in"
213
+NoNameEntered.Title="Voer een geldige naam in"
214
 NoNameEntered.Text="Je kunt geen lege namen gebruiken."
215
 
216
-ConfirmStart.Title="Start de Stream?"
217
-ConfirmStart.Text="Weet je zeker dat je de stream wil starten?"
218
+ConfirmStart.Title="De stream starten?"
219
+ConfirmStart.Text="Weet je zeker dat je de stream wilt starten?"
220
 
221
-ConfirmStop.Title="Stop de Stream?"
222
-ConfirmStop.Text="Weet je zeker dat je de stream wil stoppen?"
223
+ConfirmStop.Title="De stream stoppen?"
224
+ConfirmStop.Text="Weet je zeker dat je de stream wilt stoppen?"
225
 
226
-ConfirmStopRecord.Title="Opname Stoppen?"
227
-ConfirmStopRecord.Text="Bent u zeker dat u de opname wilt stoppen?"
228
+ConfirmStopRecord.Title="Opnemen stoppen?"
229
+ConfirmStopRecord.Text="Weet je zeker dat je het opnemen wilt stoppen?"
230
 
231
-ConfirmBWTest.Title="Bandbreedte test starten?"
232
+ConfirmBWTest.Title="Bandbreedte-test starten?"
233
 ConfirmBWTest.Text="U heeft OBS geconfigureerd in bandbreedte test modus. Deze modus maakt het mogelijk om netwerk te testen zonder live te gaan. Zodra u klaar bent met testen, moet u deze uitschakelen om de kijkers in staat te stellen uw stream te zien.\n\nWilt u doorgaan?"
234
 
235
-ConfirmExit.Title="OBS Afsluiten?"
236
+ConfirmExit.Title="OBS afsluiten?"
237
 ConfirmExit.Text="OBS is momenteel actief. Alle streams/opnames zullen worden afgebroken. Weet je zeker dat je wil afsluiten?"
238
 
239
 ConfirmRemove.Title="Bevestig het verwijderen"
240
@@ -281,7 +282,7 @@
241
 Output.StartFailedGeneric="Het starten van de uitvoer is mislukt. Controleer de logbestanden voor meer informatie.\n\nLet op: Als je gebruik maakt van de NVENC of AMD encoders, controleer of de drivers up to date zijn."
242
 
243
 Output.ReplayBuffer.PauseWarning.Title="Herhalingen kunnen niet worden opgeslagen tijdens het pauzeren"
244
-Output.ReplayBuffer.PauseWarning.Text="Waarschuwing: Herhalingen kunnen niet worden opgeslagen tijdens het pauzeren van de opname."
245
+Output.ReplayBuffer.PauseWarning.Text="Waarschuwing: herhalingen kunnen niet worden opgeslagen als opnemen gepauzeerd is."
246
 
247
 Output.ConnectFail.Title="Kan geen verbinding maken"
248
 Output.ConnectFail.BadPath="Ongeldig pad of verbindings-url. Controleer a.u.b. of je instellingen geldig zijn."
249
@@ -296,44 +297,44 @@
250
 Output.RecordFail.Title="Kon de opname niet starten"
251
 Output.RecordFail.Unsupported="Het outputformaat wordt niet ondersteund, of ondersteunt niet meer dan een audiotrack. Controleer je instellingen en probeer het opnieuw."
252
 Output.RecordNoSpace.Title="Onvoldoende schijfruimte"
253
-Output.RecordNoSpace.Msg="Er is niet voldoende schijfruimte om door te gaan met opnemen."
254
+Output.RecordNoSpace.Msg="Er is onvoldoende schijfruimte om door te gaan met opnemen."
255
 Output.RecordError.Title="Opnamefout"
256
 Output.RecordError.Msg="Er is een onbekende fout opgetreden tijdens het opnemen."
257
 Output.RecordError.EncodeErrorMsg="Er is een coderingsfout opgetreden tijdens het opnemen."
258
 
259
-Output.BadPath.Title="Ongeldig Bestandspad"
260
-Output.BadPath.Text="Het geconfigureerde bestandsuitvoerpad is ongeldig. Controleer a.u.b. je instellingen om te bevestigen dat er een geldig bestandspad is ingesteld."
261
+Output.BadPath.Title="Ongeldig bestandspad"
262
+Output.BadPath.Text="Het geconfigureerde bestandsuitvoerpad is ongeldig; controleer de instellingen om er zeker van te zijn dat er een geldig bestandspad ingesteld is."
263
 
264
-LogReturnDialog="Log succesvol geüpload"
265
-LogReturnDialog.Description="Uw logbestand is geüpload. U kunt nu de URL delen voor debugging of ondersteuningsdoeleinden."
266
-LogReturnDialog.Description.Crash="Uw crashrapport is geüpload. U kunt nu de URL delen voor debugging doeleinden."
267
-LogReturnDialog.CopyURL="URL kopiëren"
268
+LogReturnDialog="Log-upload gelukt"
269
+LogReturnDialog.Description="Het logbestand is geüpload; je kunt nu de URL delen voor foutopsporings- of supportdoeleinden."
270
+LogReturnDialog.Description.Crash="Het crashrapport is geüpload; je kunt nu de URL delen voor foutopsporingsdoeleinden."
271
+LogReturnDialog.CopyURL="Kopieer de URL"
272
 LogReturnDialog.AnalyzeURL="Analyseren"
273
 LogReturnDialog.ErrorUploadingLog="Fout bij het uploaden van het logbestand"
274
 
275
 Remux.SourceFile="OBS Opname"
276
 Remux.TargetFile="Doelbestand"
277
 Remux.Remux="Remuxen"
278
-Remux.Stop="Stop remuxen"
279
+Remux.Stop="Stop met remuxen"
280
 Remux.ClearFinished="Verwijder voltooide items"
281
-Remux.ClearAll="Alle items wissen"
282
-Remux.OBSRecording="OBS Opname"
283
+Remux.ClearAll="Verwijder alle items"
284
+Remux.OBSRecording="OBS-opnemen"
285
 Remux.FinishedTitle="Remuxen voltooid"
286
 Remux.Finished="Opname geremuxt"
287
 Remux.FinishedError="Opname geremuxt, maar het bestand zou incompleet kunnen zijn"
288
-Remux.SelectRecording="Kies OBS Opname..."
289
-Remux.SelectTarget="Selecteer doelbestand..."
290
+Remux.SelectRecording="Selecteer OBS-opnemen..."
291
+Remux.SelectTarget="Selecteer het doelbestand..."
292
 Remux.FileExistsTitle="Doelbestanden bestaan al"
293
-Remux.FileExists="Het volgende doelbestanden bestaan al. Wil je deze vervangen?"
294
+Remux.FileExists="De volgende doelbestanden bestaan al; wil je ze vervangen?"
295
 Remux.ExitUnfinishedTitle="Remuxen is bezig"
296
-Remux.ExitUnfinished="Het remuxen is nog niet compleet, als je nu stopt kan het doelbestand onbruikbaar worden.\nWeet je zeker dat je wil stoppen met remuxen?"
297
-Remux.HelpText="Drop bestanden in dit scherm om te remuxen, of selecteer een leeg \"OBS Opname\" cell om te zoeken voor een bestand."
298
+Remux.ExitUnfinished="Het remuxen is nog niet afgerond; als je nu stopt kan het doelbestand onbruikbaar worden.\nWeet je zeker dat je wil stoppen met remuxen?"
299
+Remux.HelpText="Laat bestanden in dit scherm vallen om ze te remuxen, of selecteer een lege 'OBS-opname'-cel om te zoeken naar een bestand."
300
 
301
-UpdateAvailable="Nieuwe Update Beschikbaar"
302
-UpdateAvailable.Text="Versie %1.%2.%3 is nu beschikbaar. <a href='%4'>Klik hier om te downloaden</a>"
303
+UpdateAvailable="Nieuwe update beschikbaar"
304
+UpdateAvailable.Text="Versie %1.%2.%3 is nu beschikbaar; <a href='%4'>klik hier om hem te downloaden</a>"
305
 
306
-Basic.DesktopDevice1="Desktop Audio"
307
-Basic.DesktopDevice2="Desktop Audio 2"
308
+Basic.DesktopDevice1="Desktop-audio"
309
+Basic.DesktopDevice2="Desktop-audio 2"
310
 Basic.AuxDevice1="Mic/Aux"
311
 Basic.AuxDevice2="Mic/Aux 2"
312
 Basic.AuxDevice3="Mic/Aux 3"
313
@@ -353,35 +354,36 @@
314
 ScaleFiltering.Lanczos="Lanczos"
315
 ScaleFiltering.Area="Gebied"
316
 
317
-Deinterlacing="Deinterlacing"
318
-Deinterlacing.Discard="Verwerpen"
319
+Deinterlacing="Deïnterlacen"
320
+Deinterlacing.Discard="Negeren"
321
 Deinterlacing.Retro="Retro"
322
-Deinterlacing.Blend="Blend"
323
-Deinterlacing.Blend2x="Blend 2x"
324
-Deinterlacing.Linear="Linear"
325
-Deinterlacing.Linear2x="Linear 2x"
326
+Deinterlacing.Blend="Mengen"
327
+Deinterlacing.Blend2x="Mengen 2x"
328
+Deinterlacing.Linear="Lineair"
329
+Deinterlacing.Linear2x="Lineair 2x"
330
 Deinterlacing.Yadif="Yadif"
331
 Deinterlacing.Yadif2x="Yadif 2x"
332
-Deinterlacing.TopFieldFirst="Bovenste Veld Eerst"
333
-Deinterlacing.BottomFieldFirst="Onderste Veld Eerst"
334
+Deinterlacing.TopFieldFirst="Bovenste veld eerst"
335
+Deinterlacing.BottomFieldFirst="Onderste veld eerst"
336
 
337
-VolControl.SliderUnmuted="Volumeregelaar voor '%1': %2"
338
-VolControl.SliderMuted="Volumeregelaar voor '%1': %2 (momenteel gemute)"
339
-VolControl.Mute="Mute '%1'"
340
+VolControl.SliderUnmuted="Volumeregelaar voor '%1':"
341
+VolControl.SliderMuted="Volumeregelaar voor '%1': (momenteel gedempt)"
342
+VolControl.Mute="'%1' dempen"
343
 VolControl.Properties="Eigenschappen van '%1'"
344
 
345
-Basic.Main.AddSceneDlg.Title="Scène Toevoegen"
346
-Basic.Main.AddSceneDlg.Text="Voer a.u.b. de naam van de scène in"
347
+Basic.Main.AddSceneDlg.Title="Voeg scène toe"
348
+Basic.Main.AddSceneDlg.Text="Voer de naam van de scène in"
349
 
350
 Basic.Main.DefaultSceneName.Text="Scène %1"
351
 
352
 Basic.Main.AddSceneCollection.Title="Scèneverzameling toevoegen"
353
 Basic.Main.AddSceneCollection.Text="Voer de naam van de scèneverzameling in"
354
 
355
-Basic.Main.RenameSceneCollection.Title="Scèneverzameling Hernoemen"
356
+Basic.Main.RenameSceneCollection.Title="Hernoem de scèneverzameling"
357
 
358
-AddProfile.Title="Profiel Toevoegen"
359
+AddProfile.Title="Voeg profiel toe"
360
 AddProfile.Text="Voer de naam van het profiel in"
361
+AddProfile.WizardCheckbox="Toon automatische configuratie-wizard"
362
 
363
 RenameProfile.Title="Profiel hernoemen"
364
 
365
@@ -396,29 +398,34 @@
366
 Basic.SourceSelect.AddExisting="Bestaande toevoegen"
367
 Basic.SourceSelect.AddVisible="Maak bron zichtbaar"
368
 
369
+Basic.Main.Sources.Visibility="Zichtbaarheid"
370
+Basic.Main.Sources.VisibilityDescription="Bepaalt de zichtbaarheid van '%1' op het canvas"
371
+Basic.Main.Sources.Lock="Vergrendel"
372
+Basic.Main.Sources.LockDescription="Vergrendelt de positie en schaal van '%1' op het canvas"
373
+
374
 Basic.PropertiesWindow="Eigenschappen van '%1'"
375
 Basic.PropertiesWindow.AutoSelectFormat="%1 (automatisch geselecteerd: %2)"
376
 Basic.PropertiesWindow.SelectColor="Selecteer kleur"
377
-Basic.PropertiesWindow.SelectFont="Selecteer lettertype"
378
+Basic.PropertiesWindow.SelectFont="Selecteer een lettertype"
379
 Basic.PropertiesWindow.ConfirmTitle="Instellingen Aangepast"
380
 Basic.PropertiesWindow.Confirm="Er zijn onopgeslagen aanpassingen. Wil je deze bewaren?"
381
 Basic.PropertiesWindow.NoProperties="Geen eigenschappen beschikbaar"
382
-Basic.PropertiesWindow.AddFiles="Bestanden Toevoegen"
383
-Basic.PropertiesWindow.AddDir="Map Toevoegen"
384
-Basic.PropertiesWindow.AddURL="Pad/URL Toevoegen"
385
-Basic.PropertiesWindow.AddEditableListDir="Voeg map toe aan '%1'"
386
+Basic.PropertiesWindow.AddFiles="Voeg bestanden toe"
387
+Basic.PropertiesWindow.AddDir="Voeg de directory toe"
388
+Basic.PropertiesWindow.AddURL="Voeg pad/URL toe"
389
+Basic.PropertiesWindow.AddEditableListDir="Voeg een directory toe aan '%1'"
390
 Basic.PropertiesWindow.AddEditableListFiles="Voeg bestanden toe aan '%1'"
391
-Basic.PropertiesWindow.AddEditableListEntry="Voeg toe aan '%1'"
392
-Basic.PropertiesWindow.EditEditableListEntry="Verwijder van '%1'"
393
+Basic.PropertiesWindow.AddEditableListEntry="Voeg invoer toe aan '%1'"
394
+Basic.PropertiesWindow.EditEditableListEntry="Bewerk de invoer van '%1'"
395
 
396
 Basic.PropertiesView.FPS.Simple="Simpele FPS Waarden"
397
-Basic.PropertiesView.FPS.Rational="Rationele FPS Waarden"
398
+Basic.PropertiesView.FPS.Rational="Rationale FPS-waarden"
399
 Basic.PropertiesView.FPS.ValidFPSRanges="Geldige FPS-bereiken:"
400
 
401
 Basic.InteractionWindow="Interactie met '%1'"
402
 
403
 Basic.StatusBar.Reconnecting="Verbinding verbroken, opnieuw verbinden over %2 second(en) (poging %1)"
404
-Basic.StatusBar.AttemptingReconnect="Opnieuw verbinden... (poging %1)"
405
+Basic.StatusBar.AttemptingReconnect="Poging opnieuw te verbinden... (poging %1)"
406
 Basic.StatusBar.ReconnectSuccessful="Opnieuw verbinden gelukt"
407
 Basic.StatusBar.Delay="Vertraging (%1 sec)"
408
 Basic.StatusBar.DelayStartingIn="Vertraging (start over %1 sec)"
409
@@ -426,9 +433,9 @@
410
 Basic.StatusBar.DelayStartingStoppingIn="Vertraging (stopt over %1 sec, start over %2 sec)"
411
 
412
 Basic.Filters="Filters"
413
-Basic.Filters.AsyncFilters="Audio/Video Filters"
414
-Basic.Filters.AudioFilters="Audio Filters"
415
-Basic.Filters.EffectFilters="Effect Filters"
416
+Basic.Filters.AsyncFilters="Audio-/video-filters"
417
+Basic.Filters.AudioFilters="Audio-filters"
418
+Basic.Filters.EffectFilters="Effect-filters"
419
 Basic.Filters.Title="Filters voor '%1'"
420
 Basic.Filters.AddFilter.Title="Filternaam"
421
 Basic.Filters.AddFilter.Text="Geef een naam voor de filter"
422
@@ -448,104 +455,104 @@
423
 Basic.TransformWindow.Alignment.TopRight="Rechtsboven"
424
 Basic.TransformWindow.Alignment.CenterLeft="Links"
425
 Basic.TransformWindow.Alignment.Center="Midden"
426
-Basic.TransformWindow.Alignment.CenterRight="Rechts"
427
+Basic.TransformWindow.Alignment.CenterRight="Midden-rechts"
428
 Basic.TransformWindow.Alignment.BottomLeft="Linksonder"
429
-Basic.TransformWindow.Alignment.BottomCenter="Onder"
430
+Basic.TransformWindow.Alignment.BottomCenter="Middenonder"
431
 Basic.TransformWindow.Alignment.BottomRight="Rechtsonder"
432
 
433
 Basic.TransformWindow.BoundsType.None="Geen grenzen"
434
-Basic.TransformWindow.BoundsType.MaxOnly="Alleen maximale grootte"
435
+Basic.TransformWindow.BoundsType.MaxOnly="Alleen maximumgrootte"
436
 Basic.TransformWindow.BoundsType.ScaleInner="Schaal naar binnenste grenzen"
437
 Basic.TransformWindow.BoundsType.ScaleOuter="Schaal naar buitenste grenzen"
438
-Basic.TransformWindow.BoundsType.ScaleToWidth="Schaal naar breedte van grenzen"
439
-Basic.TransformWindow.BoundsType.ScaleToHeight="Schaal naar hoogte van grenzen"
440
-Basic.TransformWindow.BoundsType.Stretch="Uitrekken naar grenzen"
441
+Basic.TransformWindow.BoundsType.ScaleToWidth="Schaal naar de breedte van de grenzen"
442
+Basic.TransformWindow.BoundsType.ScaleToHeight="Schaal naar de hoogte van de grenzen"
443
+Basic.TransformWindow.BoundsType.Stretch="Uitrekken naar de grenzen"
444
 
445
-Basic.Main.AddSourceHelp.Title="Kan bron niet toevoegen"
446
-Basic.Main.AddSourceHelp.Text="Je moet ten minste 1 scène hebben om een bron toe te voegen."
447
+Basic.Main.AddSourceHelp.Title="Bron kan niet toegevoegd worden"
448
+Basic.Main.AddSourceHelp.Text="Je moet ten minste één scène hebben om een bron toe te kunnen voegen."
449
 
450
 Basic.Main.Scenes="Scènes"
451
 Basic.Main.Sources="Bronnen"
452
-Basic.Main.Controls="Controls"
453
+Basic.Main.Controls="Bedieningselementen"
454
 Basic.Main.Connecting="Verbinden..."
455
-Basic.Main.StartRecording="Opname Starten"
456
-Basic.Main.StartReplayBuffer="Start Replay Buffer"
457
-Basic.Main.SaveReplay="Replay Opslaan"
458
-Basic.Main.StartStreaming="Stream Starten"
459
-Basic.Main.StartVirtualCam="Virtuele camera starten"
460
-Basic.Main.StopRecording="Opname Stoppen"
461
-Basic.Main.PauseRecording="Opname pauzeren"
462
-Basic.Main.UnpauseRecording="Opname vervolgen"
463
-Basic.Main.StoppingRecording="Opname Stoppen..."
464
-Basic.Main.StopReplayBuffer="Stop Replay Buffer"
465
-Basic.Main.StoppingReplayBuffer="Replay Buffer aan het stoppen..."
466
-Basic.Main.StopStreaming="Stream Stoppen"
467
-Basic.Main.StoppingStreaming="Stream Stoppen..."
468
-Basic.Main.ForceStopStreaming="Stop Stream (vertraging negeren)"
469
-Basic.Main.ShowContextBar="Toon bronwerkbalk"
470
-Basic.Main.HideContextBar="Verberg bronwerkbalk"
471
-Basic.Main.StopVirtualCam="Virtuele camera stoppen"
472
+Basic.Main.StartRecording="Start het opnemen"
473
+Basic.Main.StartReplayBuffer="Start de replaybuffer"
474
+Basic.Main.SaveReplay="Replay opslaan"
475
+Basic.Main.StartStreaming="Streamen starten"
476
+Basic.Main.StartVirtualCam="Start de virtuele camera"
477
+Basic.Main.StopRecording="Stop met opnemen"
478
+Basic.Main.PauseRecording="Pauzeer de opname"
479
+Basic.Main.UnpauseRecording="Vervolg de opname"
480
+Basic.Main.StoppingRecording="De opname stoppen..."
481
+Basic.Main.StopReplayBuffer="De replaybuffer stoppen"
482
+Basic.Main.StoppingReplayBuffer="De replaybuffer aan het stoppen..."
483
+Basic.Main.StopStreaming="Streamen stoppen"
484
+Basic.Main.StoppingStreaming="De stream stoppen..."
485
+Basic.Main.ForceStopStreaming="Stop het streamen (vertraging negeren)"
486
+Basic.Main.ShowContextBar="Toon de bron-taakbalk"
487
+Basic.Main.HideContextBar="Verberg de brontaakbalk"
488
+Basic.Main.StopVirtualCam="Stop de virtuele camera"
489
 Basic.Main.Group="Groep %1"
490
-Basic.Main.GroupItems="Groepeer geselecteerde items"
491
+Basic.Main.GroupItems="Groepeer de geselecteerde items"
492
 Basic.Main.Ungroup="Degroeperen"
493
-Basic.Main.GridMode="Rasterweergave"
494
-Basic.Main.ListMode="Lijstweergave"
495
+Basic.Main.GridMode="Rastermodus"
496
+Basic.Main.ListMode="Lijstmodus"
497
 
498
-Basic.MainMenu.File="Bestand (&F)"
499
+Basic.MainMenu.File="&Bestand"
500
 Basic.MainMenu.File.Export="&Exporteren"
501
 Basic.MainMenu.File.Import="&Importeren"
502
-Basic.MainMenu.File.ShowRecordings="Opnames Weergeven (&R)"
503
-Basic.MainMenu.File.Remux="Re&mux Opnames"
504
+Basic.MainMenu.File.ShowRecordings="Toon de &opnames"
505
+Basic.MainMenu.File.Remux="Re&mux de opnames"
506
 Basic.MainMenu.File.Settings="In&stellingen"
507
-Basic.MainMenu.File.ShowSettingsFolder="Instellingenmap Openen"
508
-Basic.MainMenu.File.ShowProfileFolder="Profielmap Openen"
509
-Basic.MainMenu.AlwaysOnTop="&Altijd op voorgrond"
510
-Basic.MainMenu.File.Exit="Afsluiten (&X)"
511
-
512
-Basic.MainMenu.Edit="B&ewerken"
513
-Basic.MainMenu.Edit.Undo="Ongedaan maken (&U)"
514
-Basic.MainMenu.Edit.Redo="Opnieuw (&R)"
515
-Basic.MainMenu.Edit.UndoAction="$1 ongedaan maken (&U)"
516
-Basic.MainMenu.Edit.RedoAction="$1 opnieuw toepassen (&R)"
517
-Basic.MainMenu.Edit.LockPreview="Preview vergrende&len"
518
-Basic.MainMenu.Edit.Scale="Preview &schalen"
519
-Basic.MainMenu.Edit.Scale.Window="Schaal naar venster"
520
+Basic.MainMenu.File.ShowSettingsFolder="Toon de instellingenmap"
521
+Basic.MainMenu.File.ShowProfileFolder="Toon de profielmap"
522
+Basic.MainMenu.AlwaysOnTop="&Altijd op de voorgrond"
523
+Basic.MainMenu.File.Exit="&Afsluiten"
524
+
525
+Basic.MainMenu.Edit="&Bewerken"
526
+Basic.MainMenu.Edit.Undo="&Ongedaan maken"
527
+Basic.MainMenu.Edit.Redo="&Opnieuw"
528
+Basic.MainMenu.Edit.UndoAction="$1 ongedaan &maken"
529
+Basic.MainMenu.Edit.RedoAction="$1 opnieuw &toepassen"
530
+Basic.MainMenu.Edit.LockPreview="Voorvertoning vergrende&len"
531
+Basic.MainMenu.Edit.Scale="Voorvertoning &schalen"
532
+Basic.MainMenu.Edit.Scale.Window="Schaal naar het venster"
533
 Basic.MainMenu.Edit.Scale.Canvas="Canvas (%1x%2)"
534
 Basic.MainMenu.Edit.Scale.Output="Uitvoer (%1x%2)"
535
 Basic.MainMenu.Edit.Transform="&Transformeren"
536
-Basic.MainMenu.Edit.Transform.EditTransform="Transformatie bewerken... (&E)"
537
-Basic.MainMenu.Edit.Transform.CopyTransform="Kopieer transformatie"
538
-Basic.MainMenu.Edit.Transform.PasteTransform="Plak transformatie"
539
-Basic.MainMenu.Edit.Transform.ResetTransform="Transformatie herstellen (&R)"
540
-Basic.MainMenu.Edit.Transform.Rotate90CW="Rechtsom kantelen"
541
-Basic.MainMenu.Edit.Transform.Rotate90CCW="Linksom kantelen"
542
-Basic.MainMenu.Edit.Transform.Rotate180="180 graden draaien"
543
-Basic.MainMenu.Edit.Transform.FlipHorizontal="&Horizontaal Spiegelen"
544
-Basic.MainMenu.Edit.Transform.FlipVertical="&Verticaal Spiegelen"
545
-Basic.MainMenu.Edit.Transform.FitToScreen="In scherm passen (&F)"
546
-Basic.MainMenu.Edit.Transform.StretchToScreen="Uitrekken naar scherm (&S)"
547
-Basic.MainMenu.Edit.Transform.CenterToScreen="Centeren op scherm (&C)"
548
+Basic.MainMenu.Edit.Transform.EditTransform="Transformatie &bewerken..."
549
+Basic.MainMenu.Edit.Transform.CopyTransform="Kopieer de transformatie"
550
+Basic.MainMenu.Edit.Transform.PasteTransform="Plak de transformatie"
551
+Basic.MainMenu.Edit.Transform.ResetTransform="&Reset de transformatie"
552
+Basic.MainMenu.Edit.Transform.Rotate90CW="Draai 90º rechtsom"
553
+Basic.MainMenu.Edit.Transform.Rotate90CCW="Draai 90º linksom"
554
+Basic.MainMenu.Edit.Transform.Rotate180="Draai 180º"
555
+Basic.MainMenu.Edit.Transform.FlipHorizontal="&Horizontaal spiegelen"
556
+Basic.MainMenu.Edit.Transform.FlipVertical="&Verticaal spiegelen"
557
+Basic.MainMenu.Edit.Transform.FitToScreen="Aan het &scherm aanpassen"
558
+Basic.MainMenu.Edit.Transform.StretchToScreen="Uitrekken naar het &scherm"
559
+Basic.MainMenu.Edit.Transform.CenterToScreen="&Centeren op het scherm"
560
 Basic.MainMenu.Edit.Transform.VerticalCenter="Verticaal centreren"
561
 Basic.MainMenu.Edit.Transform.HorizontalCenter="Horizontaal centreren"
562
 Basic.MainMenu.Edit.Order="V&olgorde"
563
-Basic.MainMenu.Edit.Order.MoveUp="Omhoog Schuiven (&U)"
564
-Basic.MainMenu.Edit.Order.MoveDown="Omlaag Schuiven (&D)"
565
-Basic.MainMenu.Edit.Order.MoveToTop="Naar Boven Schuiven (&T)"
566
-Basic.MainMenu.Edit.Order.MoveToBottom="Naar Onderen Schuiven (&B)"
567
-Basic.MainMenu.Edit.AdvAudio="Geavanceerde &Audioinstellingen"
568
-
569
-Basic.MainMenu.View="Beeld (&V)"
570
-Basic.MainMenu.View.Toolbars="Werkbalken (&T)"
571
+Basic.MainMenu.Edit.Order.MoveUp="Omhoog &verplaatsen"
572
+Basic.MainMenu.Edit.Order.MoveDown="Omlaag ver&plaatsen"
573
+Basic.MainMenu.Edit.Order.MoveToTop="Naar boven verplaa&tsen"
574
+Basic.MainMenu.Edit.Order.MoveToBottom="Naar de onderkant &verplaatsen"
575
+Basic.MainMenu.Edit.AdvAudio="Geavanceerde &audio-eigenschappen"
576
+
577
+Basic.MainMenu.View="Beel&d"
578
+Basic.MainMenu.View.Toolbars="&Taakbalken"
579
 Basic.MainMenu.View.Docks="Docks"
580
-Basic.MainMenu.View.Docks.ResetUI="Herstel UI"
581
-Basic.MainMenu.View.Docks.LockUI="Zet UI Vast"
582
-Basic.MainMenu.View.Docks.CustomBrowserDocks="Aangepaste Browser Docks..."
583
-Basic.MainMenu.View.ListboxToolbars="Scène/Bronlijst knoppen"
584
-Basic.MainMenu.View.ContextBar="Bron werkbalk"
585
+Basic.MainMenu.View.Docks.ResetUI="Reset de UI"
586
+Basic.MainMenu.View.Docks.LockUI="Vergrendel de UI"
587
+Basic.MainMenu.View.Docks.CustomBrowserDocks="Aangepaste browser-docks..."
588
+Basic.MainMenu.View.ListboxToolbars="Scène-/bronlijst-knoppen"
589
+Basic.MainMenu.View.ContextBar="Bron-taakbalk"
590
 Basic.MainMenu.View.SceneTransitions="S&cène-overgangen"
591
-Basic.MainMenu.View.SourceIcons="Bron &iconen"
592
+Basic.MainMenu.View.SourceIcons="Bron-&iconen"
593
 Basic.MainMenu.View.StatusBar="&Statusbalk"
594
-Basic.MainMenu.View.Fullscreen.Interface="Volledig scherm"
595
+Basic.MainMenu.View.Fullscreen.Interface="Volledig scherminterface"
596
 
597
 Basic.MainMenu.SceneCollection="&Scèneverzameling"
598
 Basic.MainMenu.Profile="&Profiel"
599
@@ -558,54 +565,54 @@
600
 
601
 Basic.MainMenu.Tools="&Tools"
602
 
603
-Basic.MainMenu.Help="&Help"
604
+Basic.MainMenu.Help="&Hulp"
605
 Basic.MainMenu.Help.HelpPortal="Help-&portal"
606
-Basic.MainMenu.Help.Website="&Website Bezoeken"
607
+Basic.MainMenu.Help.Website="Ga naar de &website"
608
 Basic.MainMenu.Help.Discord="Word lid van onze &Discord-server"
609
 Basic.MainMenu.Help.Logs="&Logbestanden"
610
-Basic.MainMenu.Help.Logs.ShowLogs="Logbe&standen Weergeven"
611
-Basic.MainMenu.Help.Logs.UploadCurrentLog="Upload Huidige Logbestand (&C)"
612
-Basic.MainMenu.Help.Logs.UploadLastLog="Upload &Laatste Logbestand"
613
-Basic.MainMenu.Help.Logs.ViewCurrentLog="Toon Huidige Logbestand (&V)"
614
-Basic.MainMenu.Help.CheckForUpdates="Controleer Op Updates"
615
-Basic.MainMenu.Help.CrashLogs="Fouten&rapport"
616
-Basic.MainMenu.Help.CrashLogs.ShowLogs="Toon crashrapporten (&S)"
617
-Basic.MainMenu.Help.CrashLogs.UploadLastLog="Upload &laatste crash rapport"
618
-Basic.MainMenu.Help.About="Over (&A)"
619
-
620
-Basic.Settings.ProgramRestart="Het programma moet opnieuw worden opgestart om deze instellingen te activeren."
621
-Basic.Settings.ConfirmTitle="Wijzigingen Bevestigen"
622
-Basic.Settings.Confirm="Je hebt onopgeslagen wijzigingen. Wijzigingen opslaan?"
623
+Basic.MainMenu.Help.Logs.ShowLogs="Toon logbe&standen"
624
+Basic.MainMenu.Help.Logs.UploadCurrentLog="Upload het &huidige logbestand"
625
+Basic.MainMenu.Help.Logs.UploadLastLog="Upload het &laatste logbestand"
626
+Basic.MainMenu.Help.Logs.ViewCurrentLog="&Bekijk het huidige logbestand"
627
+Basic.MainMenu.Help.CheckForUpdates="Controleer op updates"
628
+Basic.MainMenu.Help.CrashLogs="Crash-&rapporten"
629
+Basic.MainMenu.Help.CrashLogs.ShowLogs="Toon cra&shrapporten"
630
+Basic.MainMenu.Help.CrashLogs.UploadLastLog="Upload het &laatste crashrapport"
631
+Basic.MainMenu.Help.About="&Over"
632
+
633
+Basic.Settings.ProgramRestart="Het programma moet opnieuw worden opgestart om deze instellingen effectief te maken."
634
+Basic.Settings.ConfirmTitle="Bevestig de wijzigingen"
635
+Basic.Settings.Confirm="Er zijn niet-opgeslagen wijzigingen; wijzigingen opslaan?"
636
 
637
 Basic.Settings.General="Algemeen"
638
 Basic.Settings.General.Theme="Thema"
639
 Basic.Settings.General.Language="Taal"
640
-Basic.Settings.General.EnableAutoUpdates="Automatisch controleren op updates tijdens het opstarten"
641
-Basic.Settings.General.OpenStatsOnStartup="Open statistieken bij het opstarten"
642
-Basic.Settings.General.WarnBeforeStartingStream="Laat bevestigingsvenster zien bij het starten van streams"
643
-Basic.Settings.General.WarnBeforeStoppingStream="Laat bevestiginsvenster zien bij het stoppen van streams"
644
-Basic.Settings.General.WarnBeforeStoppingRecord="Laat bevestigingsvenster zien bij het stoppen van opnames"
645
-Basic.Settings.General.Projectors="Projectoren"
646
+Basic.Settings.General.EnableAutoUpdates="Automatisch op updates controleren tijdens het opstarten"
647
+Basic.Settings.General.OpenStatsOnStartup="Open het statistiekenvenster tijdens het opstarten"
648
+Basic.Settings.General.WarnBeforeStartingStream="Toon het bevestigingsvenster bij het starten van streams"
649
+Basic.Settings.General.WarnBeforeStoppingStream="Toon het bevestigingsvenster bij het stoppen van streams"
650
+Basic.Settings.General.WarnBeforeStoppingRecord="Toon het bevestigingsvenster bij het stoppen van de opname"
651
+Basic.Settings.General.Projectors="Projectors"
652
 Basic.Settings.General.HideProjectorCursor="Verberg cursor boven projectors"
653
-Basic.Settings.General.ProjectorAlwaysOnTop="Houd projectoren altijd bovenaan"
654
-Basic.Settings.General.Snapping="Bronuitlijning"
655
-Basic.Settings.General.ScreenSnapping="Bronnen uitlijnen op de rand van het scherm"
656
-Basic.Settings.General.CenterSnapping="Bronnen uitlijnen op het horizontale en verticale midden"
657
-Basic.Settings.General.SourceSnapping="Bronnen uitlijnen op andere bronnen"
658
-Basic.Settings.General.SnapDistance="Gevoeligheid"
659
-Basic.Settings.General.RecordWhenStreaming="Stream automatisch opnemen"
660
-Basic.Settings.General.KeepRecordingWhenStreamStops="Opname voortzetten als de stream stopt"
661
-Basic.Settings.General.ReplayBufferWhileStreaming="Replay buffer tegelijk starten met stream"
662
-Basic.Settings.General.KeepReplayBufferStreamStops="Replay buffer actief houden als stream stopt"
663
+Basic.Settings.General.ProjectorAlwaysOnTop="Houd projectors altijd op de voorgrond"
664
+Basic.Settings.General.Snapping="Bronuitlijning vastklikken"
665
+Basic.Settings.General.ScreenSnapping="Klik bronnen vast aan de rand van het scherm"
666
+Basic.Settings.General.CenterSnapping="Klik bronnen vast aan het horizontale en verticale midden"
667
+Basic.Settings.General.SourceSnapping="Klik bronnen vast aan andere bronnen"
668
+Basic.Settings.General.SnapDistance="Vastklik-gevoeligheid"
669
+Basic.Settings.General.RecordWhenStreaming="Automatisch opnemen tijdens het streamen"
670
+Basic.Settings.General.KeepRecordingWhenStreamStops="Blijf opnemen als de stream stopt"
671
+Basic.Settings.General.ReplayBufferWhileStreaming="Start de replaybuffer automatisch tijdens het streamen"
672
+Basic.Settings.General.KeepReplayBufferStreamStops="Houd de replaybuffer actief als de stream stopt"
673
 Basic.Settings.General.SysTray="Systeemvak"
674
 Basic.Settings.General.SysTrayWhenStarted="Naar systeemvak minimaliseren bij opstarten"
675
-Basic.Settings.General.SystemTrayHideMinimize="Altijd minimaliseren naar het systeemvak in plaats van de taakbalk"
676
+Basic.Settings.General.SystemTrayHideMinimize="Altijd minimaliseren naar het systeemvak in plaats van naar de taakbalk"
677
 Basic.Settings.General.SaveProjectors="Projectors opslaan bij afsluiten"
678
-Basic.Settings.General.Preview="Preview"
679
+Basic.Settings.General.Preview="Voorvertoning"
680
 Basic.Settings.General.OverflowHidden="Overloop verbergen"
681
 Basic.Settings.General.OverflowAlwaysVisible="Overloop altijd zichtbaar"
682
-Basic.Settings.General.OverflowSelectionHidden="Overloop weergeven, zelfs wanneer bron onzichtbaar is"
683
-Basic.Settings.General.Importers="Importeurs"
684
+Basic.Settings.General.OverflowSelectionHidden="Overloop weergeven, zelfs als de bron onzichtbaar is"
685
+Basic.Settings.General.Importers="Importeerders"
686
 Basic.Settings.General.AutomaticCollectionSearch="Zoek bekende locaties voor scèneverzamelingen bij het importeren"
687
 Basic.Settings.General.SwitchOnDoubleClick="Ga over naar scène bij dubbelklik"
688
 Basic.Settings.General.StudioPortraitLayout="Portret/verticale layout inschakelen"
689
@@ -622,7 +629,7 @@
690
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Horizontaal, boven (24 scènes)"
691
 
692
 Basic.Settings.Stream="Stream"
693
-Basic.Settings.Stream.StreamType="Stream Type"
694
+Basic.Settings.Stream.StreamType="Stream-type"
695
 Basic.Settings.Stream.Custom.UseAuthentication="Gebruik authenticatie"
696
 Basic.Settings.Stream.Custom.Username="Gebruikersnaam"
697
 Basic.Settings.Stream.Custom.Password="Wachtwoord"
698
@@ -630,18 +637,24 @@
699
 Basic.Settings.Stream.TTVAddon="Twitch Chat toevoegingen"
700
 Basic.Settings.Stream.TTVAddon.None="Geen"
701
 Basic.Settings.Stream.TTVAddon.Both="BeterTTV en FrankerFaceZ"
702
-Basic.Settings.Stream.MissingSettingAlert="Ontbrekende Stream Installatie"
703
+Basic.Settings.Stream.MissingSettingAlert="Ontbrekende stream-configuratie"
704
 Basic.Settings.Stream.StreamSettingsWarning="Instellingen openen"
705
-Basic.Settings.Stream.MissingUrlAndApiKey="URL en streamsleutel ontbreken.\n\nOpen instellingen om de URL en streamsleutel in het 'stream' tabblad in te voeren."
706
-Basic.Settings.Stream.MissingUrl="Stream URL ontbreekt.\n\nOpen instellingen om de URL in te voeren in het 'Stream' tabblad."
707
-Basic.Settings.Stream.MissingStreamKey="Stream-sleutel ontbreekt.\n\nOpen instellingen om de stream-sleutel in te voeren in het 'Stream' tabblad."
708
+Basic.Settings.Stream.MissingUrlAndApiKey="URL en streamsleutel ontbreken.\n\nOpen de instellingen om de URL en streamsleutel in het tabblad 'Stream' in te voeren."
709
+Basic.Settings.Stream.MissingUrl="De stream-URL ontbreekt.\n\nOpen de instellingen om de URL in te voeren in het tabblad 'Stream'."
710
+Basic.Settings.Stream.MissingStreamKey="Stream-sleutel ontbreekt.\n\nOpen instellingen om de stream-sleutel in te voeren in het tabblad 'Stream'."
711
+Basic.Settings.Stream.IgnoreRecommended="Negeer de instellingsaanbevelingen van de streamingservice"
712
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Overschrijf aanbevolen instellingen"
713
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Waarschuwing: het negeren van de beperkingen van de service kan leiden tot verminderde kwaliteit van de stream of kan voorkomen dat je kunt streamen.\n\nDoorgaan?"
714
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Maximale Video Bitrate: %1 kbps"
715
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Maximale Audio Bitrate: %1 kbps"
716
+Basic.Settings.Stream.Recommended.MaxResolution="Maximale Resolutie: %1"
717
+Basic.Settings.Stream.Recommended.MaxFPS="Maximale FPS: %1"
718
 
719
 Basic.Settings.Output="Uitvoer"
720
 Basic.Settings.Output.Format="Opnameformaat"
721
 Basic.Settings.Output.Encoder="Encoder"
722
 Basic.Settings.Output.SelectDirectory="Selecteer Opnamemap"
723
 Basic.Settings.Output.SelectFile="Selecteer Opnamebestand"
724
-Basic.Settings.Output.EnforceBitrate="Forceer bandbreedtelimieten van streaming dienst"
725
 Basic.Settings.Output.DynamicBitrate="Dynamisch wijzigen van de bitrate om congestie te beheren"
726
 Basic.Settings.Output.DynamicBitrate.Beta="Dynamisch wijzigen van de bitrate om congestie te beheren (Beta)"
727
 Basic.Settings.Output.DynamicBitrate.TT="In plaats van frames te laten vallen om congestie te verminderen, verandert de bitrate dynamisch à la minute.\n\nMerk op dat dit de vertraging voor kijkers kan verhogen als er significante plotselinge congestie optreedt.\nAls de bitrate daalt, kan het tot een paar minuten duren om het te herstellen.\n\nMomenteel wordt het alleen ondersteund voor RTMP."
728
@@ -662,10 +675,10 @@
729
 Basic.Settings.Output.Simple.RecordingQuality.Small="Hoge Kwaliteit, Gemiddelde Bestandsgrootte"
730
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Ononderscheidbare Kwaliteit, Grote Bestandsgrootte"
731
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Lossless Kwaliteit, Enorm Grote Bestandsgrootte"
732
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Waaschuwing: De video bitrate zal worden ingesteld op %1, dit is de bovengrens van de huidige streaming dienst. Als je zeker weet dat je hoger wil gaan dan %1, schakel dan de geavanceerde encoder-opties in en vink de optie \"Forceer bandbreedtelimieten van streaming dienst\" uit."
733
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Waaschuwing: De audio bitrate zal worden ingesteld op %1, dit is de bovengrens van de huidige streaming dienst. Als je zeker weet dat je hoger wil gaan dan %1, schakel dan de geavanceerde encoder-opties in en vink de optie \"Forceer bandbreedtelimieten van streaming dienst\" uit."
734
-Basic.Settings.Output.Simple.Warn.CannotPause="Waarschuwing: Opnames kunnen niet worden onderbroken als de opnamekwaliteit is ingesteld op \"Hetzelfde als stream\"."
735
-Basic.Settings.Output.Simple.Warn.Encoder="Waarschuwing: Opname met een software-encoder op een andere kwaliteit dan de stream vergt extra cpu-gebruik als je zowel aan het streamen en aan het opnemen bent."
736
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Waarschuwing: de video-bitrate van de stream zal worden ingesteld op %1, wat de bovengrens is van de huidige streamingservice."
737
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Waarschuwing: De audio-bitrate van de stream zal worden ingesteld op %1, wat de bovengrens is van de huidige streamingservice."
738
+Basic.Settings.Output.Simple.Warn.CannotPause="Waarschuwing: opnames kunnen niet worden onderbroken als de opnamekwaliteit is ingesteld op 'Hetzelfde als de stream'."
739
+Basic.Settings.Output.Simple.Warn.Encoder="Waarschuwing: het opnemen met een software-encoder op een andere kwaliteit dan de stream zal extra CPU-gebruik vergen als je zowel streamt als opneemt."
740
 Basic.Settings.Output.Simple.Warn.Lossless="Waarschuwing: Lossless kwaliteit genereert erg grote bestanden! Lossless kwaliteit kan tot wel 7 GB aan schijfruimte per minuut gebruiken bij hoge resoluties en framerates. Lossless kwaliteit is niet aanbevolen voor lange opnames tenzij er een grote hoeveelheid schijfruimte beschikbaar is."
741
 Basic.Settings.Output.Simple.Warn.Lossless.Msg="Weet je zeker dat je lossless kwaliteit wilt gebruiken?"
742
 Basic.Settings.Output.Simple.Warn.Lossless.Title="Lossless kwaliteit waarschuwing!"
743
@@ -674,6 +687,11 @@
744
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardware (AMD)"
745
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardware (NVENC)"
746
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Software (x264 laag cpu gebruik, verhoogt bestandsgrootte)"
747
+Basic.Settings.Output.Simple.TwitchVodTrack="Twitch VOD Track (Gebruikt Track 2)"
748
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Incompatibele Resolutie/Framerate"
749
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Deze streamingservice ondersteunt de huidige uitvoerresolutie en/of beeldsnelheid niet; ze zullen worden gewijzigd in de dichtstbijzijnde compatibele waarde:\n\n%1\n\nWil je doorgaan?"
750
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Resolutie: %1"
751
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS: %1"
752
 Basic.Settings.Output.VideoBitrate="Video Bitrate"
753
 Basic.Settings.Output.AudioBitrate="Audio Bitrate"
754
 Basic.Settings.Output.Reconnect="Automatisch Opnieuw Verbinden"
755
@@ -682,25 +700,26 @@
756
 Basic.Settings.Output.Advanced="Geavanceerde Encoderinstellingen Inschakelen"
757
 Basic.Settings.Output.EncoderPreset="Encoder Preset"
758
 Basic.Settings.Output.CustomEncoderSettings="Aangepaste encoderinstellingen"
759
-Basic.Settings.Output.CustomMuxerSettings="Aangepaste Muxer-instellingen"
760
+Basic.Settings.Output.CustomMuxerSettings="Aangepaste muxer-instellingen"
761
 Basic.Settings.Output.NoSpaceFileName="Bestandsnaam zonder spatie genereren"
762
 
763
 Basic.Settings.Output.Adv.Rescale="Uitvoer Schalen"
764
 Basic.Settings.Output.Adv.AudioTrack="Geluidsspoor"
765
 Basic.Settings.Output.Adv.Streaming="Streamen"
766
-Basic.Settings.Output.Adv.ApplyServiceSettings="Forceer encoderinstellingen van de streaming dienst"
767
 Basic.Settings.Output.Adv.Audio.Track1="Spoor 1"
768
 Basic.Settings.Output.Adv.Audio.Track2="Spoor 2"
769
 Basic.Settings.Output.Adv.Audio.Track3="Spoor 3"
770
 Basic.Settings.Output.Adv.Audio.Track4="Spoor 4"
771
 Basic.Settings.Output.Adv.Audio.Track5="Spoor 5"
772
 Basic.Settings.Output.Adv.Audio.Track6="Spoor 6"
773
+Basic.Settings.Output.Adv.TwitchVodTrack="Twitch VOD Spoor"
774
 
775
 Basic.Settings.Output.Adv.Recording="Opnemen"
776
+Basic.Settings.Output.Adv.Recording.RecType="Opnametype"
777
 Basic.Settings.Output.Adv.Recording.Type="Type"
778
 Basic.Settings.Output.Adv.Recording.Type.Standard="Standaard"
779
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Aangepaste Uitvoer (FFmpeg)"
780
-Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Gebruik stream encoder)"
781
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Gebruik stream-encoder)"
782
 Basic.Settings.Output.Adv.Recording.Filename="Bestandsnaamformaat"
783
 Basic.Settings.Output.Adv.Recording.OverwriteIfExists="Overschrijven als bestand bestaat"
784
 Basic.Settings.Output.Adv.FFmpeg.Type="FFmpeg Uitvoertype"
785
@@ -770,7 +789,7 @@
786
 Basic.Settings.Audio.PeakMeterType.SamplePeak="Sample piek"
787
 Basic.Settings.Audio.PeakMeterType.TruePeak="True piek (hogere CPU-gebruik)"
788
 Basic.Settings.Audio.MultiChannelWarning.Enabled="Waarschuwing: Surround sound audio is ingeschakeld."
789
-Basic.Settings.Audio.MultichannelWarning="Als je streamt, controleer dan of je streaming service zowel surround sound ingest als surround sound afspelen ondersteunt. Facebook 360 Live is een voorbeeld waar surround sound volledig ondersteund is. Alhoewel Facebook Live en Youtube Live beide surround ingest ondersteunen, downmixt Facebook Live het naar stereo, terwijl Youtube Live slechts twee kanalen afspeelt.\n\nOBS audio filters kunnen overweg met surround sound, maar ondersteuning bij VST plugins is niet gegarandeerd."
790
+Basic.Settings.Audio.MultichannelWarning="Als je streamt, controleer dan of de streamingservice zowel surroundsound-ingest als surroundsound afspelen ondersteunt. Facebook 360 Live is een voorbeeld waar surroundsound volledig ondersteund wordt. Alhoewel Facebook Live en Youtube Live beide surround-ingest ondersteunen, downmixt Facebook Live het naar stereo, terwijl Youtube Live slechts twee kanalen afspeelt.\n\nOBS-audiofilters kunnen overweg met surroundsound, hoewel VST-plugin-support niet gegarandeerd wordt."
791
 Basic.Settings.Audio.MultichannelWarning.Title="Surround sound audio inschakelen?"
792
 Basic.Settings.Audio.MultichannelWarning.Confirm="Weet je zeker dat je surround sound audio wil inschakelen?"
793
 Basic.Settings.Audio.Devices="Globale Audio-apparaten"
794
@@ -794,7 +813,7 @@
795
 Basic.Settings.Advanced.General.ProcessPriority.Normal="Normaal"
796
 Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Onder Normaal"
797
 Basic.Settings.Advanced.General.ProcessPriority.Idle="Laagst"
798
-Basic.Settings.Advanced.FormatWarning="Waarschuwing: Andere kleurformaten dan NV12 zijn hoofdzakelijk bedoeld voor opnemen en worden niet aanbevolen om mee te streamen. Streamen kan verhoogd CPU-gebruik opleveren vanwege kleurformaatconversie."
799
+Basic.Settings.Advanced.FormatWarning="Waarschuwing: andere kleurformaten dan NV12 zijn hoofdzakelijk bedoeld voor opnemen en worden niet aanbevolen bij streamen. Streamen kan verhoogd CPU-gebruik veroorzaken als gevolg van kleurformaat-conversie."
800
 Basic.Settings.Advanced.Audio.BufferingTime="Audio Buffertijd"
801
 Basic.Settings.Advanced.Video.ColorFormat="Kleurindeling"
802
 Basic.Settings.Advanced.Video.ColorSpace="Kleurruimte"
803
@@ -824,13 +843,18 @@
804
 Basic.AdvAudio.ActiveOnly="Alleen actieve bronnen"
805
 Basic.AdvAudio.Name="Naam"
806
 Basic.AdvAudio.Volume="Volume"
807
+Basic.AdvAudio.VolumeSource="Volume voor '%1'"
808
 Basic.AdvAudio.Mono="Mono"
809
+Basic.AdvAudio.MonoSource="Mono Downmix voor '%1'"
810
 Basic.AdvAudio.Balance="Balans"
811
+Basic.AdvAudio.BalanceSource="Balans voor '%1'"
812
 Basic.AdvAudio.SyncOffset="Sync Offset"
813
+Basic.AdvAudio.SyncOffsetSource="Sync Offset voor '%1'"
814
 Basic.AdvAudio.Monitoring="Audio monitoring"
815
 Basic.AdvAudio.Monitoring.None="Niet monitoren"
816
 Basic.AdvAudio.Monitoring.MonitorOnly="Alleen monitoren (uitvoer gedempt)"
817
 Basic.AdvAudio.Monitoring.Both="Monitoren en uitvoeren"
818
+Basic.AdvAudio.MonitoringSource="Audio monitoring voor '%1'"
819
 Basic.AdvAudio.AudioTracks="Sporen"
820
 
821
 Basic.Settings.Hotkeys="Sneltoetsen"
822
@@ -890,8 +914,8 @@
823
 SceneItemHide="Verberg '%1'"
824
 
825
 OutputWarnings.NoTracksSelected="Selecteer a.u.b. ten minste een track"
826
-OutputWarnings.MP4Recording="Waarschuwing: Opnames opgeslagen als MP4/MOV zijn niet te herstellen als de opname niet correct afgerond kan worden (bijvoorbeeld door BSOD's, stroomuitval). Als je wil opnemen met meerdere audiotracks gebruik dan bij voorkeur MKV en remux de opname naar MP4/MOV (Bestand → Remux opnames)"
827
-OutputWarnings.CannotPause="Waarschuwing: Opnames kunnen niet worden gepauzeerd als de opname encoder is ingesteld op \"(Gebruik stream encoder)\""
828
+OutputWarnings.MP4Recording="Waarschuwing: opnames opgeslagen als MP4/MOV zijn onherstelbaar als het bestand niet correct afgesloten kan worden (bijvoorbeeld door BSOD's, stroomuitval enz.). Als je meersporen-audiotracks wilt opnemen, overweeg dan het gebruik van MKV en remux de opname naar MP4/MOV nadat hij afgerond is (Bestand → Remux opnames)"
829
+OutputWarnings.CannotPause="Waarschuwing: opnames kunnen niet worden gepauzeerd als de opname-encoder is ingesteld op '(Gebruik de stream-encoder)'"
830
 
831
 FinalScene.Title="Verwijder scène"
832
 FinalScene.Text="Er moet tenminste één scène zijn."
833
@@ -907,7 +931,7 @@
834
 BrowserSource.EnableHardwareAcceleration="Browser bron hardwareversnelling inschakelen"
835
 
836
 About="Over"
837
-About.Info="OBS Studio is een gratis en open source video recording en live streaming software."
838
+About.Info="OBS-studio is gratis en opensource video-opname- en livestreamsoftware."
839
 About.Donate="Maak een bijdrage"
840
 About.GetInvolved="Raak betrokken"
841
 About.Authors="Auteurs"
842
obs-studio-26.0.2.tar.xz/UI/data/locale/nn-NO.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/nn-NO.ini Changed
9
 
1
@@ -167,6 +167,7 @@
2
 
3
 
4
 
5
+
6
 Basic.Main.Scenes="Scener"
7
 Basic.Main.Sources="Kjelder"
8
 Basic.Main.Controls="Kontrollere"
9
obs-studio-26.0.2.tar.xz/UI/data/locale/pa-IN.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/pa-IN.ini Changed
6
 
1
@@ -203,3 +203,4 @@
2
 
3
 
4
 
5
+
6
obs-studio-26.0.2.tar.xz/UI/data/locale/pl-PL.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/pl-PL.ini Changed
130
 
1
@@ -161,6 +161,7 @@
2
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Odłączyć konto?"
3
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Ta zmiana zostanie zastosowana natychmiast. Czy na pewno chcesz odłączyć konto?"
4
 Basic.AutoConfig.StreamPage.GetStreamKey="Pobierz klucz"
5
+Basic.AutoConfig.StreamPage.MoreInfo="Więcej informacji"
6
 Basic.AutoConfig.StreamPage.UseStreamKey="Użyj klucza strumienia"
7
 Basic.AutoConfig.StreamPage.Service="Serwis"
8
 Basic.AutoConfig.StreamPage.Service.ShowAll="Pokaż wszystkie..."
9
@@ -365,8 +366,8 @@
10
 Deinterlacing.TopFieldFirst="Najpierw pole górne"
11
 Deinterlacing.BottomFieldFirst="Najpierw pole dolne"
12
 
13
-VolControl.SliderUnmuted="Suwak głośności dla '%1': %2"
14
-VolControl.SliderMuted="Suwak głośności dla '%1': %2 (obecnie wyciszony)"
15
+VolControl.SliderUnmuted="Suwak głośności dla '%1':"
16
+VolControl.SliderMuted="Suwak głośności dla '%1': (obecnie wyciszony)"
17
 VolControl.Mute="Wycisz '%1'"
18
 VolControl.Properties="Właściwości dla '%1'"
19
 
20
@@ -382,6 +383,7 @@
21
 
22
 AddProfile.Title="Dodaj profil"
23
 AddProfile.Text="Podaj nazwę profilu"
24
+AddProfile.WizardCheckbox="Pokaż kreatora automatycznej konfiguracji"
25
 
26
 RenameProfile.Title="Zmień nazwę profilu"
27
 
28
@@ -396,6 +398,11 @@
29
 Basic.SourceSelect.AddExisting="Dodaj istniejącą"
30
 Basic.SourceSelect.AddVisible="Źródło widoczne"
31
 
32
+Basic.Main.Sources.Visibility="Widoczność"
33
+Basic.Main.Sources.VisibilityDescription="Określa widoczność '%1' na wynikowym ekranie"
34
+Basic.Main.Sources.Lock="Blokada"
35
+Basic.Main.Sources.LockDescription="Blokuje pozycję i wielkość '%1' na wynikowym ekranie"
36
+
37
 Basic.PropertiesWindow="Właściwości dla '%1'"
38
 Basic.PropertiesWindow.AutoSelectFormat="%1 (wybór automatyczny: %2)"
39
 Basic.PropertiesWindow.SelectColor="Wybierz kolor"
40
@@ -472,7 +479,7 @@
41
 Basic.Main.StartReplayBuffer="Rozpocznij nagrywanie powtórek"
42
 Basic.Main.SaveReplay="Zapisz powtórkę"
43
 Basic.Main.StartStreaming="Rozpocznij stream"
44
-Basic.Main.StartVirtualCam="Rozpocznij Kamerę Wirtualną"
45
+Basic.Main.StartVirtualCam="Uruchom Kamerę Wirtualną"
46
 Basic.Main.StopRecording="Zatrzymaj nagrywanie"
47
 Basic.Main.PauseRecording="Pauzuj nagrywanie"
48
 Basic.Main.UnpauseRecording="Wznów nagrywanie"
49
@@ -635,13 +642,19 @@
50
 Basic.Settings.Stream.MissingUrlAndApiKey="Brakuje adresu URL i klucza strumienia.\n\nOtwórz ustawienia, aby w zakładce 'Stream' wprowadzić adres URL i klucz strumienia."
51
 Basic.Settings.Stream.MissingUrl="Brakuje adresu URL.\n\nOtwórz ustawienia, aby w zakładce 'Stream' wprowadzić adres URL."
52
 Basic.Settings.Stream.MissingStreamKey="Brakuje klucza strumienia.\n\nOtwórz ustawienia, aby w zakładce 'Stream' wprowadzić klucz strumienia."
53
+Basic.Settings.Stream.IgnoreRecommended="Ignoruj zalecenia dotyczące ustawień usługi strumieniowej"
54
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Nadpisz rekomendowane ustawienia"
55
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Ostrzeżenie: Ignorowanie ograniczeń usługi może spowodować pogorszenie jakości strumieniowania lub uniemożliwić przesyłanie strumieniowe.\n\nKontynuować?"
56
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Maksymalny bitrate: %1 kbps"
57
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Minimalny bitrate: %1 kbps"
58
+Basic.Settings.Stream.Recommended.MaxResolution="Maksymalna rozdzielczość: %1"
59
+Basic.Settings.Stream.Recommended.MaxFPS="Maksymalna liczba FPS: %1"
60
 
61
 Basic.Settings.Output="Wyjście"
62
 Basic.Settings.Output.Format="Format nagrywania"
63
 Basic.Settings.Output.Encoder="Enkoder"
64
 Basic.Settings.Output.SelectDirectory="Wybierz katalog nagrywania"
65
 Basic.Settings.Output.SelectFile="Wybierz plik nagrania"
66
-Basic.Settings.Output.EnforceBitrate="Wymuś limity przepływności wybranego serwisu"
67
 Basic.Settings.Output.DynamicBitrate="Dynamicznie zmień bitrate by zapobiec zapychaniu łącza"
68
 Basic.Settings.Output.DynamicBitrate.Beta="Dynamicznie zmień bitrate by zapobiec zapychaniu łącza (beta)"
69
 Basic.Settings.Output.DynamicBitrate.TT="Zamiast odrzucać klatki przy zapchanym łączu dynamicznie zmienia bitrate enkodowania.\n\nW przypadku dużego i nagłego przytkania łącza zwiększa to opóźnienie streamu dla oglądających.\nPo zmniejszeniu bitrate, jego powrót do normalnych wartości może potrwać kilka minut.\n\nMechanizm obsługiwany jest obecnie jedynie przy protokole RTMP."
70
@@ -662,8 +675,8 @@
71
 Basic.Settings.Output.Simple.RecordingQuality.Small="Wysoka jakość, średni rozmiar pliku"
72
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Jakość nie do odróżnienia, duża wielkość pliku"
73
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Jakość bezstratna, ogromna wielkość pliku"
74
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Ostrzeżenie: Przepływność (bitrate) obrazu ustawiona jest na wartość %1. Jest to górna granica wartości dozwolonych dla wybranej usługi streamingowej. Aby ustawić wartość przepływności większą niż %1 przejdź do zaawansowanych ustawień dekoder i odznacz opcję \"Wymuś limity przepływności wybranego serwisu\"."
75
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Ostrzeżenie: Przepływność (bitrate) dźwięku ustawiona jest na wartość %1. Jest to górna granica wartości dozwolonych dla wybranej usługi streamingowej. Aby ustawić wartość przepływności większą niż %1, przejdź do zaawansowanych ustawień dekoder i odznacz opcję \"Wymuś limity przepływności wybranego serwisu\"."
76
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Ostrzeżenie: Bitrate obrazu zostanie ustawiony na %1, co jest górnym limitem dla bieżącej usługi strumieniowej."
77
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Ostrzeżenie: Bitrate dźwięku zostanie ustawiony na %1, co jest górnym limitem dla bieżącej usługi strumieniowej."
78
 Basic.Settings.Output.Simple.Warn.CannotPause="Ostrzeżenie: Nagrywanie nie może być spauzowane, gdy jakość nagrywania ustawiona jest na \"Taka sama jak stream\"."
79
 Basic.Settings.Output.Simple.Warn.Encoder="Ostrzeżenie: Nagrywanie przy użyciu enkodera programowego z jakością inną niż stream wymagać będzie dodatkowej mocy procesora w przypadku jednoczesnego streamowania i nagrywania."
80
 Basic.Settings.Output.Simple.Warn.Lossless="Ostrzeżenie: Jakość bezstratna generuje bardzo duże pliki! Przy dużych rozdzielczościach i szybkości klatek rozmiar pliku może sięgać 7GB na minutę nagrania. Jakość ta nie jest zalecana w przypadku długich nagrań, chyba że masz bardzo dużo wolnego miejsca na dysku."
81
@@ -674,6 +687,11 @@
82
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Sprzętowy (AMD)"
83
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Sprzętowy (NVENC)"
84
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Programowy (x264 ustawienia małego zużycia procesora, zwiększa wielkość pliku)"
85
+Basic.Settings.Output.Simple.TwitchVodTrack="Ścieżka VOD Twitch (korzysta ze ścieżki 2)"
86
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Niekompatybilna rozdzielczość/liczba FPS"
87
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Ta usługa strumieniowania nie obsługuje Twojej aktualnej rozdzielczości wyjściowej i/lub liczby FPS. Zostaną one zmienione na najbliższą kompatybilną wartość:\n\n%1\n\nCzy chcesz kontynuować?"
88
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Rozdzielczość: %1"
89
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS: %1"
90
 Basic.Settings.Output.VideoBitrate="Bitrate obrazu"
91
 Basic.Settings.Output.AudioBitrate="Bitrate dźwięku"
92
 Basic.Settings.Output.Reconnect="Ponowne łączenie"
93
@@ -688,15 +706,16 @@
94
 Basic.Settings.Output.Adv.Rescale="Przeskaluj wyjściowy obraz"
95
 Basic.Settings.Output.Adv.AudioTrack="Ścieżki dźwiękowe"
96
 Basic.Settings.Output.Adv.Streaming="Streaming"
97
-Basic.Settings.Output.Adv.ApplyServiceSettings="Wymuś ustawienia enkodera dla danego serwisu"
98
 Basic.Settings.Output.Adv.Audio.Track1="Ścieżka 1"
99
 Basic.Settings.Output.Adv.Audio.Track2="Ścieżka 2"
100
 Basic.Settings.Output.Adv.Audio.Track3="Ścieżka 3"
101
 Basic.Settings.Output.Adv.Audio.Track4="Ścieżka 4"
102
 Basic.Settings.Output.Adv.Audio.Track5="Ścieżka 5"
103
 Basic.Settings.Output.Adv.Audio.Track6="Ścieżka 6"
104
+Basic.Settings.Output.Adv.TwitchVodTrack="Ścieżka Twitch VOD"
105
 
106
 Basic.Settings.Output.Adv.Recording="Nagrywanie"
107
+Basic.Settings.Output.Adv.Recording.RecType="Typ nagrania"
108
 Basic.Settings.Output.Adv.Recording.Type="Typ"
109
 Basic.Settings.Output.Adv.Recording.Type.Standard="Standardowe"
110
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Niestandardowe ustawienia (FFmpeg)"
111
@@ -824,13 +843,18 @@
112
 Basic.AdvAudio.ActiveOnly="Tylko aktywne źródła"
113
 Basic.AdvAudio.Name="Nazwa"
114
 Basic.AdvAudio.Volume="Głośność"
115
+Basic.AdvAudio.VolumeSource="Głośność dla '%1'"
116
 Basic.AdvAudio.Mono="Mono"
117
+Basic.AdvAudio.MonoSource="Miks do mono dla '%1'"
118
 Basic.AdvAudio.Balance="Balans"
119
+Basic.AdvAudio.BalanceSource="Balans dla '%1'"
120
 Basic.AdvAudio.SyncOffset="Przesunięcie dźwięku"
121
+Basic.AdvAudio.SyncOffsetSource="Przesunięcie synchronizacji dla '%1'"
122
 Basic.AdvAudio.Monitoring="Monitorowanie urządzenia audio"
123
 Basic.AdvAudio.Monitoring.None="Wyłączone"
124
 Basic.AdvAudio.Monitoring.MonitorOnly="Tylko monitorowanie (wyjście wyłączone)"
125
 Basic.AdvAudio.Monitoring.Both="Monitorowanie i przekazywanie na wyjście"
126
+Basic.AdvAudio.MonitoringSource="Monitorowanie dźwięku dla '%1'"
127
 Basic.AdvAudio.AudioTracks="Ścieżki"
128
 
129
 Basic.Settings.Hotkeys="Skróty klawiszowe"
130
obs-studio-26.0.2.tar.xz/UI/data/locale/pt-BR.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/pt-BR.ini Changed
1138
 
1
@@ -1,7 +1,7 @@
2
 
3
-Language="Português"
4
+Language="Português brasileiro"
5
 
6
-OK="Ok"
7
+OK="OK"
8
 Apply="Aplicar"
9
 Cancel="Cancelar"
10
 Close="Fechar"
11
@@ -21,48 +21,48 @@
12
 Settings="Configurações"
13
 Display="Monitor"
14
 Name="Nome"
15
-Exit="Sair"
16
-Mixer="Mixer de Áudio"
17
-Browse="Localizar"
18
+Exit="Encerrar OBS"
19
+Mixer="Mixer de áudio"
20
+Browse="Explorar"
21
 Mono="Mono"
22
 Stereo="Estéreo"
23
 DroppedFrames="Quadros perdidos %1 (%2%)"
24
-StudioProgramProjector="Projetor em tela inteira (programa)"
25
-PreviewProjector="Projetor em tela inteira (pré-visualização)"
26
-SceneProjector="Projetor em tela inteira (cena)"
27
-SourceProjector="Projetor em tela inteira (fonte)"
28
+StudioProgramProjector="Projetor em tela cheia (programa)"
29
+PreviewProjector="Projetor em tela cheia (prévia)"
30
+SceneProjector="Projetor em tela cheia (cena)"
31
+SourceProjector="Projetor em tela cheia (fonte)"
32
 StudioProgramWindow="Projetor em janela (programa)"
33
-PreviewWindow="Projetor em janela (pré-visualização)"
34
+PreviewWindow="Projetor em janela (prévia)"
35
 SceneWindow="Projetor em janela (cena)"
36
-SourceWindow="Projetor em janela (Fonte)"
37
-MultiviewProjector="Visualização múltipla (tela inteira)"
38
+SourceWindow="Projetor em janela (fonte)"
39
+MultiviewProjector="Visualização múltipla (tela cheia)"
40
 MultiviewWindowed="Visualização múltipla (janela)"
41
 ResizeProjectorWindowToContent="Ajustar janela ao conteúdo"
42
 Clear="Limpar"
43
 Revert="Desfazer"
44
-Show="Exibir"
45
+Show="Mostrar"
46
 Hide="Ocultar"
47
 UnhideAll="Mostrar tudo"
48
 Untitled="Sem nome"
49
 New="Novo"
50
 Duplicate="Duplicar"
51
 Enable="Habilitar"
52
-DisableOSXVSync="Desabilitar V-Sync em macOS"
53
-ResetOSXVSyncOnExit="Redefinir V-Sync em macOS na saída"
54
-HighResourceUsage="Codificação sobrecarregada! Considere abaixar as configurações de vídeo ou usar um padrão de codificação mais rápido."
55
+DisableOSXVSync="Desativar sincronização vertical do macOS"
56
+ResetOSXVSyncOnExit="Redefinir sincronização vertical do macOS ao encerrar o OBS"
57
+HighResourceUsage="Codificação sobrecarregada! Considere reduzir as configurações de vídeo ou usar um padrão de codificação mais rápido."
58
 Transition="Transição"
59
 QuickTransitions="Transições rápidas"
60
-FadeToBlack="Desvanecer para Preto"
61
+FadeToBlack="Desvanecer para preto"
62
 Left="Esquerda"
63
 Right="Direita"
64
-Top="Topo"
65
+Top="Cima"
66
 Bottom="Baixo"
67
 Reset="Redefinir"
68
 Hours="Horas"
69
 Minutes="Minutos"
70
 Seconds="Segundos"
71
 Deprecated="Obsoleto"
72
-ReplayBuffer="Buffer de Repetição"
73
+ReplayBuffer="Buffer de repetição"
74
 Import="Importar"
75
 Export="Exportar"
76
 Copy="Copiar"
77
@@ -72,9 +72,9 @@
78
 RemuxRecordings="Converter gravações"
79
 Next="Avançar"
80
 Back="Voltar"
81
-Defaults="Padrões"
82
-HideMixer="Esconder no Mixer"
83
-TransitionOverride="Substituição de Transição"
84
+Defaults="Redefinir"
85
+HideMixer="Esconder no mixer"
86
+TransitionOverride="Sobrepor transição"
87
 None="Nenhuma"
88
 StudioMode.Preview="Prévia"
89
 StudioMode.Program="Programa"
90
@@ -84,14 +84,14 @@
91
 DoNotShowAgain="Não mostrar novamente"
92
 Default="(Padrão)"
93
 Calculating="Calculando..."
94
-Fullscreen="Tela Cheia"
95
-Windowed="Em janela"
96
-Percent="Por cento"
97
+Fullscreen="Tela cheia"
98
+Windowed="Janela"
99
+Percent="por cento"
100
 RefreshBrowser="Atualizar"
101
 AspectRatio="Proporção da tela <b>%1:%2</b>"
102
-LockVolume="Travar Volume"
103
-LogViewer="Visualizador de registro"
104
-ShowOnStartup="Exibir ao iniciar"
105
+LockVolume="Travar volume"
106
+LogViewer="Registros"
107
+ShowOnStartup="Mostrar na inicialização"
108
 OpenFile="Abrir arquivo"
109
 AddValue="Adicionar %1"
110
 
111
@@ -99,159 +99,160 @@
112
 AlreadyRunning.Text="OBS já está em execução! A menos que você tenha a intenção de fazer isso, por favor, feche todas as instâncias existentes do OBS antes de tentar executar uma nova. Se você tiver definido para minimizar o OBS na bandeja do sistema, verifique se ainda está lá em execução."
113
 AlreadyRunning.LaunchAnyway="Executar mesmo assim"
114
 
115
-ChromeOS.Title="Plataforma Não Suportada"
116
-ChromeOS.Text="O OBS parece estar sendo executado dentro de um contêiner ChromeOS. Esta plataforma não é suportada"
117
+ChromeOS.Title="Plataforma não suportada"
118
+ChromeOS.Text="Aparentemente, o OBS está sendo executado em um ChromeOS. Esta plataforma não é suportada"
119
 
120
-DockCloseWarning.Title="Fechar janela ancorável"
121
-DockCloseWarning.Text="Você acabou de fechar uma janela ancorável. Se você gostaria de abri-la novamente, use o menu Mostrar → Docas."
122
+DockCloseWarning.Title="Fechar janela de aba personalizada"
123
+DockCloseWarning.Text="Você acabou de fechar a janela de uma aba personalizada. Se você gostaria de abri-la novamente, use o menu Visualizar → Abas."
124
 
125
-ExtraBrowsers="Docas para Navegador Personalizado"
126
-ExtraBrowsers.Info="Adicione docas dando-lhes um nome e URL, então clique em Aplicar ou Fechar para abrir as docas. Você pode adicionar ou remover as docas a qualquer momento."
127
-ExtraBrowsers.DockName="Nome da Doca"
128
+ExtraBrowsers="Abas personalizáveis com URL"
129
+ExtraBrowsers.Info="Adicione abas fornecendo um nome e URL, então clique em Aplicar ou Fechar para abrir as abas. Você pode adicionar ou remover as abas a qualquer momento."
130
+ExtraBrowsers.DockName="Nome da aba"
131
 
132
 Auth.Authing.Title="Autenticando..."
133
-Auth.Authing.Text="Autenticando com a(o) %1, aguarde..."
134
-Auth.AuthFailure.Title="Falha na Autenticação"
135
-Auth.AuthFailure.Text="Falha na Autenticação com a(o)%1:\n\n%2: %3"
136
-Auth.InvalidScope.Title="Autenticação Necessária"
137
-Auth.InvalidScope.Text="Os requisitos de autenticação para %1 foram alterados. Alguns recursos podem não estar disponíveis."
138
+Auth.Authing.Text="Autenticando com %1, aguarde..."
139
+Auth.AuthFailure.Title="Falha na autenticação"
140
+Auth.AuthFailure.Text="Falha ao autenticar com %1:\n\n%2: %3"
141
+Auth.InvalidScope.Title="Autenticação necessária"
142
+Auth.InvalidScope.Text="Os requisitos de autenticação do(a) %1 foram alterados. Alguns recursos podem não estar disponíveis."
143
 Auth.LoadingChannel.Title="Carregando informações do canal..."
144
-Auth.LoadingChannel.Text="Carregando informações do canal para %1. Por favor, aguarde..."
145
-Auth.ChannelFailure.Title="Erro ao carregar canal"
146
-Auth.ChannelFailure.Text="Erro ao carregar informaões do canal da(o) %1\n\n%2: %3"
147
+Auth.LoadingChannel.Text="Carregando informações do canal do(a) %1, aguarde..."
148
+Auth.ChannelFailure.Title="Não foi possível carregar o canal"
149
+Auth.ChannelFailure.Text="Não foi possível carregar informações do canal do(a) %1\n\n%2: %3"
150
 Auth.Chat="Chat"
151
-Auth.StreamInfo="Informação da transmissão"
152
+Auth.StreamInfo="Informações da transmissão"
153
 TwitchAuth.Stats="Estatísticas da Twitch"
154
-TwitchAuth.Feed="Feed de Atividade do Twitch"
155
+TwitchAuth.Feed="Feed de atividade da Twitch"
156
 TwitchAuth.TwoFactorFail.Title="Não foi possível consultar a chave de transmissão"
157
-TwitchAuth.TwoFactorFail.Text="O OBS não foi capaz de se conectar à sua conta do Twitch. Por favor, certifique-se de que a autenticação de dois fatores está configurada em suas <a href='https://www.twitch.tv/settings/security'>Configurações de segurança do Twitch</a> pois isso é necessário para transmitir."
158
+TwitchAuth.TwoFactorFail.Text="Não foi possível conectar à sua conta do Twitch. Por favor, certifique-se de que a autenticação de dois fatores está configurada em suas <a href='https://www.twitch.tv/settings/security'>Configurações de segurança da Twitch</a> pois isso é necessário para transmitir."
159
 RestreamAuth.Channels="Canais do Restream"
160
 
161
-Copy.Filters="Copiar Filtros"
162
-Paste.Filters="Colar Filtros"
163
+Copy.Filters="Copiar filtros"
164
+Paste.Filters="Colar filtros"
165
 
166
-BrowserPanelInit.Title="Inicializando o Navegador..."
167
+BrowserPanelInit.Title="Inicializando o navegador..."
168
 BrowserPanelInit.Text="Inicializando o navegador, aguarde..."
169
 
170
 BandwidthTest.Region="Região"
171
 BandwidthTest.Region.US="Estados Unidos"
172
 BandwidthTest.Region.EU="Europa"
173
 BandwidthTest.Region.Asia="Ásia"
174
-BandwidthTest.Region.Other="Outro"
175
+BandwidthTest.Region.Other="Outra"
176
 
177
 Basic.AutoConfig="Assistente de configuração"
178
-Basic.AutoConfig.ApplySettings="Aplicar Configurações"
179
-Basic.AutoConfig.StartPage="Informações de Uso"
180
+Basic.AutoConfig.ApplySettings="Aplicar configurações"
181
+Basic.AutoConfig.StartPage="Informações de uso"
182
 Basic.AutoConfig.StartPage.SubTitle="Marque para que você deseja usar o programa"
183
 Basic.AutoConfig.StartPage.PrioritizeStreaming="Otimizar para transmissão, gravação é opcional"
184
 Basic.AutoConfig.StartPage.PrioritizeRecording="Otimizar somente para gravação, eu não farei transmissão"
185
-Basic.AutoConfig.StartPage.PrioritizeVirtualCam="Apenas usarei a câmera virtual"
186
-Basic.AutoConfig.VideoPage="Configurações de Vídeo"
187
-Basic.AutoConfig.VideoPage.SubTitle="Especifique as configurações do vídeo que você gostaria de usar"
188
-Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Usar Atual (%1x%2)"
189
+Basic.AutoConfig.StartPage.PrioritizeVirtualCam="Usarei apenas a câmera virtual"
190
+Basic.AutoConfig.VideoPage="Configurações de vídeo"
191
+Basic.AutoConfig.VideoPage.SubTitle="Especifique as configurações de vídeo que você gostaria de usar"
192
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Usar atual (%1x%2)"
193
 Basic.AutoConfig.VideoPage.BaseResolution.Display="Monitor %1 (%2x%3)"
194
-Basic.AutoConfig.VideoPage.FPS.UseCurrent="Usar Atual (%1)"
195
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Usar atual (%1)"
196
 Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 ou 30, mas prefiro 60 quando possível"
197
 Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 ou 30, mas prefiro alta resolução"
198
-Basic.AutoConfig.VideoPage.CanvasExplanation="Nota: A resolução da tela (base) não é necessariamente a mesma resolução que você transmitirá ou gravará. Sua resolução final da transmissão/gravação pode ser redimencionada da resolução da tela para reduzir o uso de recursos ou bitrate necessário."
199
+Basic.AutoConfig.VideoPage.CanvasExplanation="Nota: A resolução da tela (base) não é necessariamente a mesma resolução que você transmitirá ou gravará. Sua resolução final da transmissão/gravação pode ser redimensionada da resolução da tela para reduzir o uso de recursos ou taxa de bits necessários."
200
 Basic.AutoConfig.StreamPage="Informações da transmissão"
201
-Basic.AutoConfig.StreamPage.SubTitle="Por favor, digite suas informações para a transmissão"
202
-Basic.AutoConfig.StreamPage.ConnectAccount="Conectar Conta (recomendado)"
203
-Basic.AutoConfig.StreamPage.DisconnectAccount="Desconectar Conta"
204
+Basic.AutoConfig.StreamPage.SubTitle="Por favor, digite suas informações de transmissão"
205
+Basic.AutoConfig.StreamPage.ConnectAccount="Conectar conta (recomendado)"
206
+Basic.AutoConfig.StreamPage.DisconnectAccount="Desconectar conta"
207
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Desconectar conta?"
208
-Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Esta mudança será aplicada imediatamente. Tem certeza de que deseja desconectar sua conta?"
209
-Basic.AutoConfig.StreamPage.GetStreamKey="Obter chave da transmissão"
210
-Basic.AutoConfig.StreamPage.UseStreamKey="Usar chave da transmissão"
211
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Esta mudança será aplicada imediatamente. Deseja mesmo desconectar sua conta?"
212
+Basic.AutoConfig.StreamPage.GetStreamKey="Obter chave de transmissão"
213
+Basic.AutoConfig.StreamPage.MoreInfo="Mais informações"
214
+Basic.AutoConfig.StreamPage.UseStreamKey="Usar chave de transmissão"
215
 Basic.AutoConfig.StreamPage.Service="Serviço"
216
 Basic.AutoConfig.StreamPage.Service.ShowAll="Mostrar todos..."
217
 Basic.AutoConfig.StreamPage.Service.Custom="Personalizado..."
218
 Basic.AutoConfig.StreamPage.Server="Servidor"
219
-Basic.AutoConfig.StreamPage.StreamKey="Chave da transmissão"
220
+Basic.AutoConfig.StreamPage.StreamKey="Chave de transmissão"
221
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Link)"
222
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Estimar taxa de bits com teste de largura de banda (pode levar uns minutos)"
223
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Preferir codificação por hardware"
224
-Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Codificação por Hardware elimina a maioria do uso de CPU, mas pode exigir uma taxa de bits maior para obter o mesmo nível de qualidade."
225
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Codificação por hardware elimina boa parte do uso de CPU, mas pode exigir uma taxa de bits maior para obter o mesmo nível de qualidade."
226
 Basic.AutoConfig.StreamPage.StreamWarning.Title="Aviso de transmissão"
227
 Basic.AutoConfig.StreamPage.StreamWarning.Text="O teste de largura de banda está prestes a transmitir imagens aleatórias e sem áudio para o seu canal. Se for possível, é recomendável desativar temporariamente a gravação da transmissão e definir a transmissão como privada até que o teste seja concluído. Continuar?"
228
-Basic.AutoConfig.TestPage="Resultados Finais"
229
+Basic.AutoConfig.TestPage="Resultados finais"
230
 Basic.AutoConfig.TestPage.SubTitle.Testing="O programa está executando um conjunto de testes para estimar as configurações ideais"
231
 Basic.AutoConfig.TestPage.SubTitle.Complete="Teste completo"
232
-Basic.AutoConfig.TestPage.TestingBandwidth="Executando teste de largura de banda, isso pode levar alguns minutos..."
233
+Basic.AutoConfig.TestPage.TestingBandwidth="Executando teste de largura de banda, isto pode levar alguns minutos..."
234
 Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Conectando a: %1..."
235
-Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Falha ao se conectar a qualquer servidor, verifique sua conexão com a Internet e tente novamente."
236
-Basic.AutoConfig.TestPage.TestingBandwidth.Server="Teste de largura de banda para: %1"
237
-Basic.AutoConfig.TestPage.TestingStreamEncoder="Testando codificador de transmissão, isto pode demorar um minuto..."
238
-Basic.AutoConfig.TestPage.TestingRecordingEncoder="Testando codificador de gravação, isto pode demorar um minuto..."
239
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Não foi possível conectar nenhum servidor, verifique sua conexão com a internet e tente novamente."
240
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Testando largura de banda para: %1"
241
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Testando codificador de transmissão, isto pode levar um minuto..."
242
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Testando codificador de gravação, isto pode levar um minuto..."
243
 Basic.AutoConfig.TestPage.TestingRes="Testando resoluções, isto pode levar alguns minutos..."
244
 Basic.AutoConfig.TestPage.TestingRes.Fail="Falha ao iniciar o codificador"
245
-Basic.AutoConfig.TestPage.TestingRes.Resolution="Testando %1x%2 %3 QPS..."
246
+Basic.AutoConfig.TestPage.TestingRes.Resolution="Testando %1x%2 a %3 quadros por segundo..."
247
 Basic.AutoConfig.TestPage.Result.StreamingEncoder="Codificador da transmissão"
248
-Basic.AutoConfig.TestPage.Result.RecordingEncoder="Codificador da Gravação"
249
-Basic.AutoConfig.TestPage.Result.Header="O programa determinou que estas configurações estimadas são as mais ideais para você:"
250
-Basic.AutoConfig.TestPage.Result.Footer="Para usar essas configurações, clique em \"Aplicar Configurações\". Para reconfigurar o assistente e tentar novamente, clique em \"Voltar\". Para definir manualmente, clique em \"Cancelar\" e abra as \"Configurações\"."
251
-Basic.AutoConfig.Info="O assistente de configuração automática irá determinar as melhores configurações baseadas nas especificações do seu computador e na velocidade da internet."
252
-Basic.AutoConfig.RunAnytime="Isto pode ser executado a qualquer momento indo para o menu Ferramentas."
253
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Codificador da gravação"
254
+Basic.AutoConfig.TestPage.Result.Header="O programa recomenda as seguintes configurações pra você:"
255
+Basic.AutoConfig.TestPage.Result.Footer="Para usar essas configurações, clique em Aplicar configurações. Para reconfigurar o assistente e tentar novamente, clique em Voltar. Para definir manualmente, clique em Cancelar e abra as Configurações."
256
+Basic.AutoConfig.Info="O assistente de configuração irá determinar as melhores configurações baseadas nas especificações do seu computador e na velocidade da internet."
257
+Basic.AutoConfig.RunAnytime="Isto pode ser executado a qualquer momento no menu Ferramentas."
258
 
259
 Basic.Stats="Estatísticas"
260
 Basic.Stats.CPUUsage="Uso de CPU"
261
 Basic.Stats.HDDSpaceAvailable="Espaço em disco disponível"
262
-Basic.Stats.MemoryUsage="Uso de Memória"
263
-Basic.Stats.AverageTimeToRender="Tempo médio para renderizar quadro"
264
-Basic.Stats.SkippedFrames="Quadros ignorados devido a demora na codificação"
265
-Basic.Stats.MissedFrames="Quadros perdidos devido a demora na renderização"
266
+Basic.Stats.MemoryUsage="Uso de memória"
267
+Basic.Stats.AverageTimeToRender="Tempo médio para renderizar um quadro"
268
+Basic.Stats.SkippedFrames="Quadros ignorados devido à demora na codificação"
269
+Basic.Stats.MissedFrames="Quadros perdidos devido à demora na renderização"
270
 Basic.Stats.Output.Stream="Transmissão"
271
 Basic.Stats.Output.Recording="Gravação"
272
 Basic.Stats.Status="Status"
273
 Basic.Stats.Status.Recording="Gravando"
274
-Basic.Stats.Status.Live="AO VIVO"
275
+Basic.Stats.Status.Live="NO AR"
276
 Basic.Stats.Status.Reconnecting="Reconectando"
277
 Basic.Stats.Status.Inactive="Inativa"
278
-Basic.Stats.Status.Active="Ativar"
279
-Basic.Stats.DroppedFrames="Quadros Perdidos (Rede)"
280
-Basic.Stats.MegabytesSent="Saída Total de Dados"
281
+Basic.Stats.Status.Active="Ativa"
282
+Basic.Stats.DroppedFrames="Quadros perdidos (rede)"
283
+Basic.Stats.MegabytesSent="Saída total de dados"
284
 Basic.Stats.Bitrate="Taxa de bits"
285
-Basic.Stats.DiskFullIn="Disco completo em (aprox.)"
286
-Basic.Stats.ResetStats="Redefinir Status"
287
+Basic.Stats.DiskFullIn="Disco cheio em (aprox.)"
288
+Basic.Stats.ResetStats="Redefinir status"
289
 
290
-ResetUIWarning.Title="Tem certeza de que deseja redefinir a interface do usuário?"
291
-ResetUIWarning.Text="Redefinir a interface irá ocultar as docas adicionais. Você precisará mostra-las indo no menu de visualização se quiser que elas se tornem visíveis novamente.\n\nTem certeza de que deseja redefinir a interface do usuário?"
292
+ResetUIWarning.Title="Deseja mesmo redefinir a interface?"
293
+ResetUIWarning.Text="Redefinir a interface irá ocultar as abas extras. Você precisará ir no menu Visualizar se quiser que elas se tornem visíveis novamente.\n\Deseja mesmo redefinir a interface?"
294
 
295
 Updater.Title="Nova atualização disponível"
296
 Updater.Text="Há uma nova atualização disponível:"
297
 Updater.UpdateNow="Atualizar agora"
298
 Updater.RemindMeLater="Lembre-me depois"
299
-Updater.Skip="Pular Versão"
300
-Updater.Running.Title="Programa atualmente em execução"
301
+Updater.Skip="Ignorar"
302
+Updater.Running.Title="Programa em execução"
303
 Updater.Running.Text="Saídas estão atualmente ativas, por favor desligue quaisquer saídas ativas antes de tentar atualizar"
304
 Updater.NoUpdatesAvailable.Title="Nenhuma atualização disponível"
305
-Updater.NoUpdatesAvailable.Text="Não há atualizações disponíveis"
306
+Updater.NoUpdatesAvailable.Text="Nenhuma atualização disponível no momento"
307
 Updater.FailedToLaunch="Falha ao iniciar o atualizador"
308
 Updater.GameCaptureActive.Title="Captura de jogo ativa"
309
 Updater.GameCaptureActive.Text="A biblioteca de captura do jogo está em uso no momento. Por favor feche qualquer jogo/programa que esteja sendo capturado (ou reinicie o Windows) e tente novamente."
310
 
311
-QuickTransitions.SwapScenes="Trocar Cenas de Prévia/Saída após a Transição"
312
+QuickTransitions.SwapScenes="Alternar entre cenas de prévia e saída após a transição"
313
 QuickTransitions.SwapScenesTT="Troca a prévia e a saída após transicionar (se a a cena original de saída ainda exisitr).\nIsto não irá desfazer nenhuma mudança que foi feita na cena original da saída."
314
-QuickTransitions.DuplicateScene="Duplicar Cena"
315
-QuickTransitions.DuplicateSceneTT="Quando estiver editando a mesma cena, permite editar a visibilidade/transformação de fontes sem modificar a saída.\nPara editar as propriedades das fontes sem modificar a saída, habilite 'Fontes Duplicadas'.\nMudar este valor irá resetar a cena atual de saída (se ainda existir)."
316
-QuickTransitions.EditProperties="Duplicar Fontes"
317
-QuickTransitions.EditPropertiesTT="Quanto estiver editando a mesma cena, permite a edição das propriedades de fontes sem modificar o resultado.\nIsso só pode ser usado se 'Duplicar Cena' estiver ativada.\nCertas fontes (como captura ou fontes de mídia) não suportam isso e não podem ser editadas separadamente.\nMudar esse valor irá resetar a cena resultado atual (se ainda existir uma)\n\nAviso: Devido as fontes sendo duplicadas, é possível que seja preciso um sistema extra ou recursos de vídeo."
318
-QuickTransitions.HotkeyName="Transição Rápida: %1"
319
-
320
-Basic.AddTransition="Adicionar Transição Configurável"
321
-Basic.RemoveTransition="Remover Transição Configurável"
322
-Basic.TransitionProperties="Propriedades da Transição"
323
-Basic.SceneTransitions="Transições de Cena"
324
+QuickTransitions.DuplicateScene="Duplicar cena"
325
+QuickTransitions.DuplicateSceneTT="Quando estiver editando a mesma cena, permite editar a visibilidade/transformação de fontes sem modificar a saída.\nPara editar as propriedades das fontes sem modificar a saída, habilite \"Duplicar fontes\".\nMudar este valor irá redefinir a cena atual de saída (se ainda existir)."
326
+QuickTransitions.EditProperties="Duplicar fontes"
327
+QuickTransitions.EditPropertiesTT="Quanto estiver editando a mesma cena, permite editar as propriedades de fontes sem modificar o resultado.\nIsso só pode ser usado se 'Duplicar cena' estiver ativado.\nCertas fontes (como captura ou fontes de mídia) não suportam isso e não podem ser editadas separadamente.\nMudar esse valor irá resetar a cena atual (se ainda existir uma)\n\nAviso: Devido às fontes serem duplicadas, é possível que seja preciso um sistema extra ou recursos de vídeo."
328
+QuickTransitions.HotkeyName="Transição rápida: %1"
329
+
330
+Basic.AddTransition="Adicionar transição configurável"
331
+Basic.RemoveTransition="Remover transição configurável"
332
+Basic.TransitionProperties="Propriedades da transição"
333
+Basic.SceneTransitions="Transições de cena"
334
 Basic.TransitionDuration="Duração"
335
-Basic.TogglePreviewProgramMode="Modo Estúdio"
336
+Basic.TogglePreviewProgramMode="Modo estúdio"
337
 
338
 TransitionNameDlg.Text="Por favor, insira o nome da transição"
339
-TransitionNameDlg.Title="Nome da Transição"
340
+TransitionNameDlg.Title="Nome da transição"
341
 
342
 TitleBar.Profile="Perfil"
343
 TitleBar.Scenes="Cenas"
344
 
345
-NameExists.Title="Nome Existente"
346
-NameExists.Text="O Nome já está em uso."
347
+NameExists.Title="Nome existente"
348
+NameExists.Text="Esse nome já está em uso."
349
 
350
 NoNameEntered.Title="Por favor, insira um nome válido"
351
 NoNameEntered.Text="Você não pode usar nomes vazios."
352
@@ -262,33 +263,33 @@
353
 ConfirmStop.Title="Interromper transmissão?"
354
 ConfirmStop.Text="Deseja mesmo interromper a transmissão?"
355
 
356
-ConfirmStopRecord.Title="Parar Gravação?"
357
-ConfirmStopRecord.Text="Tem certeza que deseja parar a gravação?"
358
+ConfirmStopRecord.Title="Interromper gravação?"
359
+ConfirmStopRecord.Text="Deseja mesmo interromper a gravação?"
360
 
361
 ConfirmBWTest.Title="Iniciar teste de largura de banda?"
362
-ConfirmBWTest.Text="Você com o OBS configurado no modo de teste de largura de banda. Este modo permite o teste de rede sem que o seu canal entre em funcionamento. Uma vez terminado o teste, você precisará desativá-lo para que os espectadores possam ver sua transmissão.\n\nVocê quer continuar?"
363
+ConfirmBWTest.Text="Você está com o OBS configurado no modo de teste de largura de banda. Este modo permite o teste de rede sem que o seu canal entre em funcionamento. Uma vez terminado o teste, você precisará desativá-lo para que os espectadores possam ver sua transmissão.\n\nVocê quer continuar?"
364
 
365
-ConfirmExit.Title="Sair do OBS?"
366
-ConfirmExit.Text="OBS está ativo no momento. Todos as streams/gravações serão encerradas. Tem certeza que deseja sair?"
367
+ConfirmExit.Title="Encerrar OBS?"
368
+ConfirmExit.Text="OBS está ativo no momento. Todas as transmissões e/ou gravações serão interrompidas. Deseja mesmo encerrar o programa?"
369
 
370
-ConfirmRemove.Title="Confirmar a Remoção"
371
-ConfirmRemove.Text="Tem certeza que deseja remover '$1'?"
372
-ConfirmRemove.TextMultiple="Você tem certeza que quer remover esses %1 itens?"
373
+ConfirmRemove.Title="Confirmar a remoção"
374
+ConfirmRemove.Text="Deseja mesmo remover '$1'?"
375
+ConfirmRemove.TextMultiple="Deseja mesmo remover %1 itens?"
376
 
377
 Output.StartStreamFailed="Falha ao iniciar a transmissão"
378
 Output.StartRecordingFailed="Falha ao iniciar a gravação"
379
 Output.StartReplayFailed="Falha ao iniciar o buffer de repetição"
380
-Output.StartFailedGeneric="Impossível criar o arquivo de saída. Verifique o registro para mais detalhes do erro.\n\nAviso: se estiver utilizando os codificadores NVENC ou AMD, certifique-se de que os seus drivers estão atualizados."
381
+Output.StartFailedGeneric="Não foi possível criar o arquivo de saída. Verifique o registro para mais detalhes do erro.\n\nAviso: se estiver utilizando os codificadores NVENC ou AMD, certifique-se de que os seus drivers estão atualizados."
382
 
383
 Output.ReplayBuffer.PauseWarning.Title="Não é possível salvar replays enquanto pausado"
384
-Output.ReplayBuffer.PauseWarning.Text="Aviso: Replays não podem ser salvos enquanto a gravação estiver pausada."
385
+Output.ReplayBuffer.PauseWarning.Text="Aviso: replays não podem ser salvos enquanto a gravação estiver pausada."
386
 
387
 Output.ConnectFail.Title="Falha ao conectar"
388
 Output.ConnectFail.BadPath="Caminho ou URL inválida. Por favor, verifique suas configurações para confirmar que estão válidas."
389
-Output.ConnectFail.ConnectFailed="Falha ao conectar com o Servidor"
390
+Output.ConnectFail.ConnectFailed="Não foi possível conectar ao servidor"
391
 Output.ConnectFail.InvalidStream="Não foi possível acessar o canal especificado ou a chave de transmissão, verifique a sua chave de transmissão. Se estiver correta, pode haver um problema de conexão com o servidor."
392
 Output.ConnectFail.Error="Ocorreu um erro inesperado ao tentar conectar-se ao servidor. Verifique o arquivo de registro para mais informações."
393
-Output.ConnectFail.Disconnected="Desconectado do Servidor."
394
+Output.ConnectFail.Disconnected="Desconectado do servidor."
395
 
396
 Output.StreamEncodeError.Title="Erro de codificação"
397
 Output.StreamEncodeError.Msg="Ocorreu um erro de codificação durante a transmissão."
398
@@ -301,12 +302,12 @@
399
 Output.RecordError.Msg="Ocorreu um erro não especificado durante a gravação."
400
 Output.RecordError.EncodeErrorMsg="Ocorreu um erro de codificação durante a gravação."
401
 
402
-Output.BadPath.Title="Caminho de Arquivo Inválido"
403
-Output.BadPath.Text="O caminho do arquivo de saída é inválido. Por Favor, certifique-se de que um caminho válido foi informado."
404
+Output.BadPath.Title="Caminho de arquivo inválido"
405
+Output.BadPath.Text="O caminho do arquivo de saída é inválido. Por favor, certifique-se de informar um caminho válido."
406
 
407
 LogReturnDialog="Carregamento do arquivo de registro efetuado com êxito"
408
-LogReturnDialog.Description="Seu arquivo de log foi enviado. Agora você pode compartilhar a URL para fins de depuração ou suporte."
409
-LogReturnDialog.Description.Crash="Seu relatório de falha foi enviado. Agora você pode compartilhar o URL para fins de depuração."
410
+LogReturnDialog.Description="Seu arquivo de registro foi enviado. Agora você pode compartilhar a URL para fins de depuração ou suporte."
411
+LogReturnDialog.Description.Crash="Seu relatório de falha foi enviado. Agora você pode compartilhar a URL para fins de depuração."
412
 LogReturnDialog.CopyURL="Copiar URL"
413
 LogReturnDialog.AnalyzeURL="Analisar"
414
 LogReturnDialog.ErrorUploadingLog="Erro no carregamento do arquivo de registro"
415
@@ -325,15 +326,15 @@
416
 Remux.SelectTarget="Selecione o arquivo de destino..."
417
 Remux.FileExistsTitle="O arquivo de destino já existe"
418
 Remux.FileExists="Os seguintes arquivos já existem. Você deseja substituí-los?"
419
-Remux.ExitUnfinishedTitle="Conversão em curso"
420
+Remux.ExitUnfinishedTitle="Conversão em andamento"
421
 Remux.ExitUnfinished="Conversão não concluída, parar agora pode tornar o arquivo de destino inutilizável.\nTem certeza que deseja parar a conversão?"
422
-Remux.HelpText="Solte arquivos nesta janela para converter ou selecione uma célula \"Gravação do OBS\" para buscar um arquivo."
423
+Remux.HelpText="Arraste arquivos para esta janela para converter ou clique em \"Gravação do OBS\" para localizar um arquivo."
424
 
425
-UpdateAvailable="Nova Atualização Disponível"
426
-UpdateAvailable.Text="Versão %1.%2.%3 está agora disponível. <a href='%4'>clique aqui para baixar</a>"
427
+UpdateAvailable="Nova atualização disponível"
428
+UpdateAvailable.Text="A versão %1.%2.%3 já está disponível. <a href='%4'>Clique aqui para fazer download</a>"
429
 
430
-Basic.DesktopDevice1="Desktop Áudio"
431
-Basic.DesktopDevice2="Desktop Áudio 2"
432
+Basic.DesktopDevice1="Áudio do desktop"
433
+Basic.DesktopDevice2="Áudio do desktop 2"
434
 Basic.AuxDevice1="Mic/Aux"
435
 Basic.AuxDevice2="Mic/Aux 2"
436
 Basic.AuxDevice3="Mic/Aux 3"
437
@@ -342,9 +343,9 @@
438
 Basic.Scene="Cena"
439
 Basic.DisplayCapture="Captura de tela"
440
 
441
-Basic.Main.PreviewConextMenu.Enable="Ativar pré-visualização"
442
+Basic.Main.PreviewConextMenu.Enable="Ativar prévia"
443
 
444
-Basic.Main.Preview.Disable="Desativar pré-visualização"
445
+Basic.Main.Preview.Disable="Desativar prévia"
446
 
447
 ScaleFiltering="Filtragem de escala"
448
 ScaleFiltering.Point="Ponto"
449
@@ -355,57 +356,63 @@
450
 
451
 Deinterlacing="Desentrelaçamento"
452
 Deinterlacing.Discard="Descartar"
453
-Deinterlacing.Retro="Retro"
454
-Deinterlacing.Blend="Misturar"
455
-Deinterlacing.Blend2x="Misturar 2x"
456
+Deinterlacing.Retro="Retrô"
457
+Deinterlacing.Blend="Mistura"
458
+Deinterlacing.Blend2x="Mistura 2x"
459
 Deinterlacing.Linear="Linear"
460
 Deinterlacing.Linear2x="Linear 2x"
461
 Deinterlacing.Yadif="Yadif"
462
 Deinterlacing.Yadif2x="Yadif 2x"
463
-Deinterlacing.TopFieldFirst="Campo Superior Primeiro"
464
-Deinterlacing.BottomFieldFirst="Campo Inferior Primeiro"
465
+Deinterlacing.TopFieldFirst="Campo superior primeiro"
466
+Deinterlacing.BottomFieldFirst="Campo inferior primeiro"
467
 
468
-VolControl.SliderUnmuted="Barra de volume para '%1': %2"
469
-VolControl.SliderMuted="Barra de volume para '%1': %2 (atualmente silenciado)"
470
+VolControl.SliderUnmuted="Barra de volume para '%1':"
471
+VolControl.SliderMuted="Barra de volume para '%1': (atualmente silenciado)"
472
 VolControl.Mute="Silenciar '%1'"
473
 VolControl.Properties="Propriedades de '%1'"
474
 
475
-Basic.Main.AddSceneDlg.Title="Adicionar Cena"
476
+Basic.Main.AddSceneDlg.Title="Adicionar cena"
477
 Basic.Main.AddSceneDlg.Text="Por favor, digite o nome da cena"
478
 
479
 Basic.Main.DefaultSceneName.Text="Cena %1"
480
 
481
-Basic.Main.AddSceneCollection.Title="Adicionar Coleção de Cenas"
482
-Basic.Main.AddSceneCollection.Text="Por favor, insira o nome da coleção de cena"
483
+Basic.Main.AddSceneCollection.Title="Adicionar coleção de cenas"
484
+Basic.Main.AddSceneCollection.Text="Por favor, insira o nome da coleção de cenas"
485
 
486
-Basic.Main.RenameSceneCollection.Title="Renomear Coleção de Cenas"
487
+Basic.Main.RenameSceneCollection.Title="Renomear coleção de cenas"
488
 
489
 AddProfile.Title="Adicionar perfil"
490
 AddProfile.Text="Por favor, insira o nome do perfil"
491
+AddProfile.WizardCheckbox="Mostrar assistente de configuração"
492
 
493
 RenameProfile.Title="Renomear perfil"
494
 
495
-Basic.Main.MixerRename.Title="Renomear Fonte de Áudio"
496
+Basic.Main.MixerRename.Title="Renomear fonte de áudio"
497
 Basic.Main.MixerRename.Text="Por favor, digite o nome da fonte de áudio"
498
 
499
 
500
 Basic.Main.PreviewDisabled="A prévia está desativada"
501
 
502
-Basic.SourceSelect="Criar/Selecionar Fonte"
503
-Basic.SourceSelect.CreateNew="Criar Nova"
504
-Basic.SourceSelect.AddExisting="Adicionar Existente"
505
-Basic.SourceSelect.AddVisible="Tornar a Fonte visível"
506
+Basic.SourceSelect="Criar ou reutilizar fonte"
507
+Basic.SourceSelect.CreateNew="Criar nova"
508
+Basic.SourceSelect.AddExisting="Reutilizar existente"
509
+Basic.SourceSelect.AddVisible="Tornar a fonte visível"
510
 
511
-Basic.PropertiesWindow="Propriedades para '%1'"
512
+Basic.Main.Sources.Visibility="Visibilidade"
513
+Basic.Main.Sources.VisibilityDescription="Controla a visibilidade de '%1' na tela"
514
+Basic.Main.Sources.Lock="Bloquear"
515
+Basic.Main.Sources.LockDescription="Bloqueia a posição e a escala de '%1' na tela"
516
+
517
+Basic.PropertiesWindow="Propriedades de '%1'"
518
 Basic.PropertiesWindow.AutoSelectFormat="%1 (seleção automática: %2)"
519
-Basic.PropertiesWindow.SelectColor="Selecione uma cor"
520
-Basic.PropertiesWindow.SelectFont="Selecionar Fonte"
521
+Basic.PropertiesWindow.SelectColor="Escolher cor"
522
+Basic.PropertiesWindow.SelectFont="Escolher fonte"
523
 Basic.PropertiesWindow.ConfirmTitle="Configurações alteradas"
524
 Basic.PropertiesWindow.Confirm="Há alterações não salvas. Deseja salvar agora?"
525
 Basic.PropertiesWindow.NoProperties="Sem propriedades disponíveis"
526
 Basic.PropertiesWindow.AddFiles="Adicionar arquivos"
527
 Basic.PropertiesWindow.AddDir="Adicionar pasta"
528
-Basic.PropertiesWindow.AddURL="Adicionar caminho/URL"
529
+Basic.PropertiesWindow.AddURL="Adicionar caminho ou URL"
530
 Basic.PropertiesWindow.AddEditableListDir="Adicionar pasta para '%1'"
531
 Basic.PropertiesWindow.AddEditableListFiles="Adicionar arquivos para '%1'"
532
 Basic.PropertiesWindow.AddEditableListEntry="Adicionar entrada a '%1'"
533
@@ -418,7 +425,7 @@
534
 Basic.InteractionWindow="Interagindo com '%1'"
535
 
536
 Basic.StatusBar.Reconnecting="Desconectado, reconectando-se em %2 segundo(s) (tentativa %1)"
537
-Basic.StatusBar.AttemptingReconnect="Tentando se reconectar... (tentativa %1)"
538
+Basic.StatusBar.AttemptingReconnect="Tentando reconectar... (tentativa %1)"
539
 Basic.StatusBar.ReconnectSuccessful="Reconexão bem-sucedida"
540
 Basic.StatusBar.Delay="Atraso (%1 seg)"
541
 Basic.StatusBar.DelayStartingIn="Atraso (começando em %1 seg)"
542
@@ -429,7 +436,7 @@
543
 Basic.Filters.AsyncFilters="Filtros de áudio/vídeo"
544
 Basic.Filters.AudioFilters="Filtros de áudio"
545
 Basic.Filters.EffectFilters="Filtros de efeito"
546
-Basic.Filters.Title="Filtros para '%1'"
547
+Basic.Filters.Title="Filtros de '%1'"
548
 Basic.Filters.AddFilter.Title="Nome do filtro"
549
 Basic.Filters.AddFilter.Text="Por favor, especifique o nome do filtro"
550
 
551
@@ -437,131 +444,131 @@
552
 Basic.TransformWindow.Position="Posição"
553
 Basic.TransformWindow.Rotation="Rotação"
554
 Basic.TransformWindow.Size="Tamanho"
555
-Basic.TransformWindow.Alignment="Alinhamento da Posição"
556
+Basic.TransformWindow.Alignment="Alinhamento"
557
 Basic.TransformWindow.BoundsType="Tipo da caixa delimitadora"
558
 Basic.TransformWindow.BoundsAlignment="Alinhamento na caixa delimitadora"
559
-Basic.TransformWindow.Bounds="Tamanho da Caixa Delimitadora"
560
+Basic.TransformWindow.Bounds="Tamanho da caixa delimitadora"
561
 Basic.TransformWindow.Crop="Cortar"
562
 
563
 Basic.TransformWindow.Alignment.TopLeft="Superior esquerdo"
564
-Basic.TransformWindow.Alignment.TopCenter="Superior Central"
565
-Basic.TransformWindow.Alignment.TopRight="Superior Direito"
566
-Basic.TransformWindow.Alignment.CenterLeft="Centro Esquerda"
567
-Basic.TransformWindow.Alignment.Center="Centralizar"
568
-Basic.TransformWindow.Alignment.CenterRight="Centro Direito"
569
-Basic.TransformWindow.Alignment.BottomLeft="Inferior Esquerdo"
570
-Basic.TransformWindow.Alignment.BottomCenter="Inferior Centro"
571
-Basic.TransformWindow.Alignment.BottomRight="Inferior Direito"
572
-
573
-Basic.TransformWindow.BoundsType.None="Sem Bordas"
574
-Basic.TransformWindow.BoundsType.MaxOnly="Apenas Tamanho Máximo"
575
-Basic.TransformWindow.BoundsType.ScaleInner="Escalar até às bordas internas"
576
-Basic.TransformWindow.BoundsType.ScaleOuter="Escalar até às bordas externas"
577
-Basic.TransformWindow.BoundsType.ScaleToWidth="Escalar até à largura das bordas"
578
-Basic.TransformWindow.BoundsType.ScaleToHeight="Escalar até à altura das bordas"
579
-Basic.TransformWindow.BoundsType.Stretch="Esticar até às bordas"
580
-
581
-Basic.Main.AddSourceHelp.Title="Não é Possível Adicionar Fonte"
582
-Basic.Main.AddSourceHelp.Text="Precisa de pelo menos uma cena para adicionar uma fonte."
583
+Basic.TransformWindow.Alignment.TopCenter="Superior ao centro"
584
+Basic.TransformWindow.Alignment.TopRight="Superior direito"
585
+Basic.TransformWindow.Alignment.CenterLeft="Centro à esquerda"
586
+Basic.TransformWindow.Alignment.Center="Centro"
587
+Basic.TransformWindow.Alignment.CenterRight="Centro à direita"
588
+Basic.TransformWindow.Alignment.BottomLeft="Inferior esquerdo"
589
+Basic.TransformWindow.Alignment.BottomCenter="Inferior ao centro"
590
+Basic.TransformWindow.Alignment.BottomRight="Inferior direito"
591
+
592
+Basic.TransformWindow.BoundsType.None="Sem bordas"
593
+Basic.TransformWindow.BoundsType.MaxOnly="Apenas tamanho máximo"
594
+Basic.TransformWindow.BoundsType.ScaleInner="Redimensionar até as bordas internas"
595
+Basic.TransformWindow.BoundsType.ScaleOuter="Redimensionar até as bordas externas"
596
+Basic.TransformWindow.BoundsType.ScaleToWidth="Redimensionar até a largura das bordas"
597
+Basic.TransformWindow.BoundsType.ScaleToHeight="Redimensionar até a altura das bordas"
598
+Basic.TransformWindow.BoundsType.Stretch="Esticar até as bordas"
599
+
600
+Basic.Main.AddSourceHelp.Title="Não foi possível adicionar a fonte"
601
+Basic.Main.AddSourceHelp.Text="É necessário pelo menos uma cena para adicionar uma fonte."
602
 
603
 Basic.Main.Scenes="Cenas"
604
 Basic.Main.Sources="Fontes"
605
 Basic.Main.Controls="Controles"
606
 Basic.Main.Connecting="Conectando..."
607
 Basic.Main.StartRecording="Iniciar gravação"
608
-Basic.Main.StartReplayBuffer="Iniciar Buffer do Replay"
609
-Basic.Main.SaveReplay="Salvar Replay"
610
+Basic.Main.StartReplayBuffer="Iniciar buffer de repetição"
611
+Basic.Main.SaveReplay="Salvar replay"
612
 Basic.Main.StartStreaming="Iniciar transmissão"
613
-Basic.Main.StartVirtualCam="Iniciar Câmera Virtual"
614
-Basic.Main.StopRecording="Parar Gravação"
615
-Basic.Main.PauseRecording="Pausar Gravação"
616
-Basic.Main.UnpauseRecording="Continuar Gravação"
617
-Basic.Main.StoppingRecording="Parando de Gravar..."
618
-Basic.Main.StopReplayBuffer="Parar Buffer do Replay"
619
-Basic.Main.StoppingReplayBuffer="Parando Buffer do Replay..."
620
+Basic.Main.StartVirtualCam="Iniciar câmera virtual"
621
+Basic.Main.StopRecording="Interromper gravação"
622
+Basic.Main.PauseRecording="Pausar gravação"
623
+Basic.Main.UnpauseRecording="Continuar gravação"
624
+Basic.Main.StoppingRecording="Interrompendo gravação..."
625
+Basic.Main.StopReplayBuffer="Interromper buffer de repetição"
626
+Basic.Main.StoppingReplayBuffer="Interrompendo buffer de repetição..."
627
 Basic.Main.StopStreaming="Interromper transmissão"
628
 Basic.Main.StoppingStreaming="Interrompendo a transmissão..."
629
-Basic.Main.ForceStopStreaming="Pare de transmitir (descartar atraso)"
630
+Basic.Main.ForceStopStreaming="Interromper transmissão (ignorar atraso)"
631
 Basic.Main.ShowContextBar="Mostrar barra de ferramentas da fonte"
632
 Basic.Main.HideContextBar="Ocultar barra de ferramentas da fonte"
633
-Basic.Main.StopVirtualCam="Parar Câmera Virtual"
634
+Basic.Main.StopVirtualCam="Interromper câmera virtual"
635
 Basic.Main.Group="Grupo %1"
636
-Basic.Main.GroupItems="Agrupar Itens Selecionados"
637
+Basic.Main.GroupItems="Agrupar itens selecionados"
638
 Basic.Main.Ungroup="Desagrupar"
639
-Basic.Main.GridMode="Modo Grade"
640
-Basic.Main.ListMode="Modo Lista"
641
+Basic.Main.GridMode="Modo grade"
642
+Basic.Main.ListMode="Modo lista"
643
 
644
 Basic.MainMenu.File="Arquivo (&F)"
645
 Basic.MainMenu.File.Export="&Exportar"
646
 Basic.MainMenu.File.Import="&Importar"
647
-Basic.MainMenu.File.ShowRecordings="Most&rar Gravações"
648
+Basic.MainMenu.File.ShowRecordings="Mostrar g&ravações"
649
 Basic.MainMenu.File.Remux="Converter gravações (&M)"
650
 Basic.MainMenu.File.Settings="Configuraçõe&s"
651
 Basic.MainMenu.File.ShowSettingsFolder="Mostrar pasta de configurações"
652
-Basic.MainMenu.File.ShowProfileFolder="Mostrar pasta de perfil"
653
-Basic.MainMenu.AlwaysOnTop="Sempre no Topo (&A)"
654
-Basic.MainMenu.File.Exit="Sair (&X)"
655
+Basic.MainMenu.File.ShowProfileFolder="Mostrar pasta de perfis"
656
+Basic.MainMenu.AlwaysOnTop="Sempre no topo (&A)"
657
+Basic.MainMenu.File.Exit="Encerrar OBS (&X)"
658
 
659
 Basic.MainMenu.Edit="&Editar"
660
 Basic.MainMenu.Edit.Undo="Desfazer (&U)"
661
 Basic.MainMenu.Edit.Redo="&Refazer"
662
 Basic.MainMenu.Edit.UndoAction="Desfazer $1 (&U)"
663
 Basic.MainMenu.Edit.RedoAction="&Refazer $1"
664
-Basic.MainMenu.Edit.LockPreview="B&loquear Prévia"
665
-Basic.MainMenu.Edit.Scale="Vi&sualização e dimensionamento"
666
-Basic.MainMenu.Edit.Scale.Window="Escala para janela"
667
-Basic.MainMenu.Edit.Scale.Canvas="Lona (%1x%2)"
668
+Basic.MainMenu.Edit.LockPreview="B&loquear prévia"
669
+Basic.MainMenu.Edit.Scale="Tamanho da prévia (&S)"
670
+Basic.MainMenu.Edit.Scale.Window="Dimensionar à janela"
671
+Basic.MainMenu.Edit.Scale.Canvas="Tela (%1x%2)"
672
 Basic.MainMenu.Edit.Scale.Output="Saída (%1x%2)"
673
 Basic.MainMenu.Edit.Transform="&Transformar"
674
-Basic.MainMenu.Edit.Transform.EditTransform="&Editar Transformação..."
675
-Basic.MainMenu.Edit.Transform.CopyTransform="Copiar Transformação"
676
-Basic.MainMenu.Edit.Transform.PasteTransform="Colar e transformar"
677
-Basic.MainMenu.Edit.Transform.ResetTransform="Limpa&r Transformação"
678
-Basic.MainMenu.Edit.Transform.Rotate90CW="Girar 90º sentido Horário"
679
-Basic.MainMenu.Edit.Transform.Rotate90CCW="Girar 90º sentido Anti-Horário"
680
+Basic.MainMenu.Edit.Transform.EditTransform="&Editar transformação..."
681
+Basic.MainMenu.Edit.Transform.CopyTransform="Copiar transformação"
682
+Basic.MainMenu.Edit.Transform.PasteTransform="Colar transformação"
683
+Basic.MainMenu.Edit.Transform.ResetTransform="Limpa&r transformação"
684
+Basic.MainMenu.Edit.Transform.Rotate90CW="Girar 90º sentido horário"
685
+Basic.MainMenu.Edit.Transform.Rotate90CCW="Girar 90º sentido anti-horário"
686
 Basic.MainMenu.Edit.Transform.Rotate180="Girar 180º"
687
-Basic.MainMenu.Edit.Transform.FlipHorizontal="Inverter &Horizontalmente"
688
-Basic.MainMenu.Edit.Transform.FlipVertical="Inverter &Verticalmente"
689
-Basic.MainMenu.Edit.Transform.FitToScreen="Ajustar à Tela (&F)"
690
-Basic.MainMenu.Edit.Transform.StretchToScreen="E&stender à Tela"
691
-Basic.MainMenu.Edit.Transform.CenterToScreen="&Centralizar à Tela"
692
-Basic.MainMenu.Edit.Transform.VerticalCenter="Centralizar Verticalmente"
693
-Basic.MainMenu.Edit.Transform.HorizontalCenter="Centralizar Horizontalmente"
694
+Basic.MainMenu.Edit.Transform.FlipHorizontal="Inverter na &horizontal"
695
+Basic.MainMenu.Edit.Transform.FlipVertical="Inverter na &vertical"
696
+Basic.MainMenu.Edit.Transform.FitToScreen="Ajustar à tela (&F)"
697
+Basic.MainMenu.Edit.Transform.StretchToScreen="E&stender à tela"
698
+Basic.MainMenu.Edit.Transform.CenterToScreen="&Centralizar à tela"
699
+Basic.MainMenu.Edit.Transform.VerticalCenter="Centralizar na vertical"
700
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Centralizar na horizontal"
701
 Basic.MainMenu.Edit.Order="&Ordem"
702
-Basic.MainMenu.Edit.Order.MoveUp="Mover para Cima (&U)"
703
-Basic.MainMenu.Edit.Order.MoveDown="Mover para Baixo (&D)"
704
-Basic.MainMenu.Edit.Order.MoveToTop="Mover para o &Topo"
705
-Basic.MainMenu.Edit.Order.MoveToBottom="Mover para a &Base"
706
-Basic.MainMenu.Edit.AdvAudio="Propried&ades de áudio avançadas"
707
-
708
-Basic.MainMenu.View="Mostrar (&V)"
709
-Basic.MainMenu.View.Toolbars="Barras de Ferramen&tas"
710
-Basic.MainMenu.View.Docks="Docas"
711
-Basic.MainMenu.View.Docks.ResetUI="Redefinir IU"
712
-Basic.MainMenu.View.Docks.LockUI="Travar IU"
713
-Basic.MainMenu.View.Docks.CustomBrowserDocks="Docas para Navegador Personalizado..."
714
-Basic.MainMenu.View.ListboxToolbars="Botões da Lista de Cena/Origem"
715
-Basic.MainMenu.View.ContextBar="Barra de ferramenta das fontes"
716
-Basic.MainMenu.View.SceneTransitions="Transições de &Cena"
717
-Basic.MainMenu.View.SourceIcons="Ícones em Fontes (&I)"
718
-Basic.MainMenu.View.StatusBar="Barra de &Status"
719
-Basic.MainMenu.View.Fullscreen.Interface="Interface em Tela Cheia"
720
-
721
-Basic.MainMenu.SceneCollection="Coleção de Cena&s"
722
+Basic.MainMenu.Edit.Order.MoveUp="Mover para cima (&U)"
723
+Basic.MainMenu.Edit.Order.MoveDown="Mover para baixo (&D)"
724
+Basic.MainMenu.Edit.Order.MoveToTop="Mover para o &topo"
725
+Basic.MainMenu.Edit.Order.MoveToBottom="Mover para o fundo (&B)"
726
+Basic.MainMenu.Edit.AdvAudio="Propriedades de áudio &avançadas"
727
+
728
+Basic.MainMenu.View="&Visualizar"
729
+Basic.MainMenu.View.Toolbars="Barras de ferramen&tas"
730
+Basic.MainMenu.View.Docks="Abas"
731
+Basic.MainMenu.View.Docks.ResetUI="Redefinir interface"
732
+Basic.MainMenu.View.Docks.LockUI="Travar interface"
733
+Basic.MainMenu.View.Docks.CustomBrowserDocks="Abas personalizáveis com URL..."
734
+Basic.MainMenu.View.ListboxToolbars="Botões da lista de cena/origem"
735
+Basic.MainMenu.View.ContextBar="Barra de ferramentas da fonte"
736
+Basic.MainMenu.View.SceneTransitions="Transições de &cena"
737
+Basic.MainMenu.View.SourceIcons="Ícones em fontes (&I)"
738
+Basic.MainMenu.View.StatusBar="Barra de &status"
739
+Basic.MainMenu.View.Fullscreen.Interface="Interface em tela cheia"
740
+
741
+Basic.MainMenu.SceneCollection="Coleção de cena&s"
742
 Basic.MainMenu.Profile="&Perfil"
743
-Basic.MainMenu.Profile.Import="Importar Perfil"
744
-Basic.MainMenu.Profile.Export="Exportar Perfil"
745
-Basic.MainMenu.SceneCollection.Import="Importar Coleção de Cenas"
746
-Basic.MainMenu.SceneCollection.Export="Exportar Coleção de Cenas"
747
-Basic.MainMenu.Profile.Exists="Perfil já existe"
748
-Basic.MainMenu.SceneCollection.Exists="A coleção de cenas já existe"
749
+Basic.MainMenu.Profile.Import="Importar perfil"
750
+Basic.MainMenu.Profile.Export="Exportar perfil"
751
+Basic.MainMenu.SceneCollection.Import="Importar coleção de cenas"
752
+Basic.MainMenu.SceneCollection.Export="Exportar coleção de cenas"
753
+Basic.MainMenu.Profile.Exists="Esse perfil já existe"
754
+Basic.MainMenu.SceneCollection.Exists="Essa coleção de cenas já existe"
755
 
756
 Basic.MainMenu.Tools="Ferramentas (&T)"
757
 
758
 Basic.MainMenu.Help="Ajuda (&H)"
759
-Basic.MainMenu.Help.HelpPortal="&Portal de Ajuda"
760
+Basic.MainMenu.Help.HelpPortal="&Portal de ajuda"
761
 Basic.MainMenu.Help.Website="Visitar &website"
762
-Basic.MainMenu.Help.Discord="Juntar-se ao Servidor do &Discord"
763
+Basic.MainMenu.Help.Discord="Entrar no servidor do &Discord"
764
 Basic.MainMenu.Help.Logs="Arquivos de registro (&L)"
765
 Basic.MainMenu.Help.Logs.ShowLogs="Mo&strar arquivos de registro"
766
 Basic.MainMenu.Help.Logs.UploadCurrentLog="&Carregar arquivo de registro atual"
767
@@ -573,41 +580,41 @@
768
 Basic.MainMenu.Help.CrashLogs.UploadLastLog="Carregar ú&ltimo relatório de erros"
769
 Basic.MainMenu.Help.About="Sobre (&A)"
770
 
771
-Basic.Settings.ProgramRestart="O Programa precisar ser reiniciado para que estas configurações surtam efeito."
772
-Basic.Settings.ConfirmTitle="Confirmar Alterações"
773
-Basic.Settings.Confirm="Você tem alterações não salvas. Salvar as alterações?"
774
+Basic.Settings.ProgramRestart="Reinicie o programa para aplicar as configurações."
775
+Basic.Settings.ConfirmTitle="Confirmar alterações"
776
+Basic.Settings.Confirm="Há alterações não salvas. Deseja salvar agora?"
777
 
778
 Basic.Settings.General="Geral"
779
 Basic.Settings.General.Theme="Tema"
780
 Basic.Settings.General.Language="Idioma"
781
-Basic.Settings.General.EnableAutoUpdates="Buscar novas atualizações ao iniciar o programa"
782
-Basic.Settings.General.OpenStatsOnStartup="Abrir janela de estatísticas na inicialização"
783
-Basic.Settings.General.WarnBeforeStartingStream="Mostrar diálogo de confirmação quando iniciar transmissões"
784
-Basic.Settings.General.WarnBeforeStoppingStream="Mostrar diálogo de confirmação quando terminar transmissões"
785
-Basic.Settings.General.WarnBeforeStoppingRecord="Mostrar diálogo de confirmação ao parar a gravação"
786
+Basic.Settings.General.EnableAutoUpdates="Buscar novas atualizações ao inicializar"
787
+Basic.Settings.General.OpenStatsOnStartup="Abrir janela de estatísticas ao inicializar"
788
+Basic.Settings.General.WarnBeforeStartingStream="Perguntar antes de iniciar transmissões"
789
+Basic.Settings.General.WarnBeforeStoppingStream="Perguntar antes de interromper transmissões"
790
+Basic.Settings.General.WarnBeforeStoppingRecord="Perguntar antes de interromper gravações"
791
 Basic.Settings.General.Projectors="Projetores"
792
 Basic.Settings.General.HideProjectorCursor="Ocultar o cursor sobre projetores"
793
 Basic.Settings.General.ProjectorAlwaysOnTop="Colocar projetores sempre no topo"
794
-Basic.Settings.General.Snapping="Alinhamentos com encaixe na Cena"
795
-Basic.Settings.General.ScreenSnapping="Encaixar Fontes ás bordas da tela"
796
-Basic.Settings.General.CenterSnapping="Encaixar Fontes aos centros vertical e horizontal"
797
+Basic.Settings.General.Snapping="Encaixe das fontes na tela"
798
+Basic.Settings.General.ScreenSnapping="Encaixar fontes nas bordas da tela"
799
+Basic.Settings.General.CenterSnapping="Encaixar fontes no centro horizontal e vertical"
800
 Basic.Settings.General.SourceSnapping="Encaixar fontes com outras fontes"
801
-Basic.Settings.General.SnapDistance="Sensibilidade de Encaixamento"
802
+Basic.Settings.General.SnapDistance="Sensibilidade do encaixe"
803
 Basic.Settings.General.RecordWhenStreaming="Gravar automaticamente quando estiver transmitindo"
804
 Basic.Settings.General.KeepRecordingWhenStreamStops="Continuar gravando quando a transmissão parar"
805
 Basic.Settings.General.ReplayBufferWhileStreaming="Iniciar automaticamente o buffer de repetição durante a transmissão"
806
 Basic.Settings.General.KeepReplayBufferStreamStops="Manter o buffer de repetição ativo quando a transmissão parar"
807
-Basic.Settings.General.SysTray="Bandeja do sistema"
808
-Basic.Settings.General.SysTrayWhenStarted="Minimizar para a bandeja do sistema quando iniciar"
809
+Basic.Settings.General.SysTray="Barra do sistema"
810
+Basic.Settings.General.SysTrayWhenStarted="Minimizar para a barra do sistema quando começar"
811
 Basic.Settings.General.SystemTrayHideMinimize="Sempre minimizar para a bandeja (ignorar barra de tarefas)"
812
-Basic.Settings.General.SaveProjectors="Salvar projetores ao sair"
813
+Basic.Settings.General.SaveProjectors="Salvar projetores ao encerrar"
814
 Basic.Settings.General.Preview="Prévia"
815
 Basic.Settings.General.OverflowHidden="Esconder excesso"
816
 Basic.Settings.General.OverflowAlwaysVisible="Excesso sempre visível"
817
 Basic.Settings.General.OverflowSelectionHidden="Mostrar excesso mesmo quando a fonte estiver escondida"
818
 Basic.Settings.General.Importers="Importadores"
819
 Basic.Settings.General.AutomaticCollectionSearch="Procurar em locais conhecidos por coleções de cena ao importar"
820
-Basic.Settings.General.SwitchOnDoubleClick="Mudar para a cena quando clicar duas vezes"
821
+Basic.Settings.General.SwitchOnDoubleClick="Usar transição para a cena quando clicar duas vezes"
822
 Basic.Settings.General.StudioPortraitLayout="Ativar a disposição horizontal/vertical"
823
 Basic.Settings.General.TogglePreviewProgramLabels="Mostrar rótulos de prévia/programa"
824
 Basic.Settings.General.Multiview="Visualização múltipla"
825
@@ -627,85 +634,97 @@
826
 Basic.Settings.Stream.Custom.Username="Nome de usuário"
827
 Basic.Settings.Stream.Custom.Password="Senha"
828
 Basic.Settings.Stream.BandwidthTestMode="Ativar modo de teste de largura de banda"
829
-Basic.Settings.Stream.TTVAddon="Complementos de bate-papo do Twitch"
830
+Basic.Settings.Stream.TTVAddon="Complementos do chat da Twitch"
831
 Basic.Settings.Stream.TTVAddon.None="Nenhum"
832
 Basic.Settings.Stream.TTVAddon.Both="BetterTTV e FrankerFaceZ"
833
-Basic.Settings.Stream.MissingSettingAlert="Configuração do Stream Incompleta"
834
-Basic.Settings.Stream.StreamSettingsWarning="Abrir Configurações"
835
-Basic.Settings.Stream.MissingUrlAndApiKey="O URL e a Chave de Transmissão estão em branco.\n\nAbra as configurações e insira a chave de transmissão e a URL na aba 'Transmissão'."
836
-Basic.Settings.Stream.MissingUrl="URL da transmissão está em branco.\n\nAbra as configurações para inserir a URL na aba 'Transmissão'."
837
-Basic.Settings.Stream.MissingStreamKey="Chave de transmissão está em branco.\n\nAbra as configurações para inserir a Chave de Transmissão na aba 'Transmissão'."
838
+Basic.Settings.Stream.MissingSettingAlert="Configuração incompleta"
839
+Basic.Settings.Stream.StreamSettingsWarning="Abrir configurações"
840
+Basic.Settings.Stream.MissingUrlAndApiKey="A URL e a chave de transmissão estão em branco.\n\nAbra as configurações e insira-os na aba 'Transmissão'."
841
+Basic.Settings.Stream.MissingUrl="A URL da transmissão está em branco.\n\nAbra as configurações e insira a URL na aba 'Transmissão'."
842
+Basic.Settings.Stream.MissingStreamKey="A chave de transmissão está em branco.\n\nAbra as configurações e insira a chave de transmissão na aba 'Transmissão'."
843
+Basic.Settings.Stream.IgnoreRecommended="Ignorar recomendações de configuração do serviço de streaming"
844
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Sobrepor configurações recomendadas"
845
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Aviso: ignorar limitações do serviço pode impedir ou reduzir a qualidade da sua transmissão.\n\nContinuar?"
846
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Taxa de bits máxima de vídeo: %1 kbps"
847
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Taxa de bits máxima de áudio: %1 kbps"
848
+Basic.Settings.Stream.Recommended.MaxResolution="Resolução máxima: %1"
849
+Basic.Settings.Stream.Recommended.MaxFPS="Taxa de quadros máxima: %1"
850
 
851
 Basic.Settings.Output="Saída"
852
 Basic.Settings.Output.Format="Formato de gravação"
853
-Basic.Settings.Output.Encoder="Encoder"
854
-Basic.Settings.Output.SelectDirectory="Selecione o diretório de gravação"
855
+Basic.Settings.Output.Encoder="Codificador"
856
+Basic.Settings.Output.SelectDirectory="Selecione a pasta de gravação"
857
 Basic.Settings.Output.SelectFile="Selecione o arquivo de gravação"
858
-Basic.Settings.Output.EnforceBitrate="Impor limites de bitrate do serviço de transmissão"
859
 Basic.Settings.Output.DynamicBitrate="Alterar taxa de bits dinamicamente para gerenciar o congestionamento"
860
-Basic.Settings.Output.DynamicBitrate.Beta="Alterar taxa de bits dinamicamente para gerenciar o congestionamento (Beta)"
861
-Basic.Settings.Output.DynamicBitrate.TT="Em vez de derrubar os quadros para reduzir o congestionamento, mudanças dinâmicas na taxa de bits durante o processo.\n\nNote que isso pode aumentar o atraso para os espectadores se houver um congestionamento repentino significativo.\nQuando a taxa de bits cair, pode levar até alguns minutos para restaurar.\n\nAtualmente suportado apenas para RTMP."
862
-Basic.Settings.Output.Mode="Modo de Saída"
863
+Basic.Settings.Output.DynamicBitrate.Beta="Alterar taxa de bits dinamicamente para gerenciar o congestionamento (beta)"
864
+Basic.Settings.Output.DynamicBitrate.TT="Altera dinamicamente a taxa de bits em tempo real, em vez de perder frames para reduzir o congestionamento.\n\nNote que isso pode aumentar o atraso para os espectadores se houver um congestionamento repentino significativo.\nQuando a taxa de bits cair, pode levar até alguns minutos para restaurar.\n\nAtualmente suportado apenas para RTMP."
865
+Basic.Settings.Output.Mode="Modo de saída"
866
 Basic.Settings.Output.Mode.Simple="Simples"
867
 Basic.Settings.Output.Mode.Adv="Avançado"
868
 Basic.Settings.Output.Mode.FFmpeg="Saída de FFmpeg"
869
-Basic.Settings.Output.UseReplayBuffer="Habilitar Buffer de Repetição"
870
-Basic.Settings.Output.ReplayBuffer.SecondsMax="Tempo máximo de repetição"
871
-Basic.Settings.Output.ReplayBuffer.MegabytesMax="Memória Máxima (Megabytes)"
872
+Basic.Settings.Output.UseReplayBuffer="Habilitar buffer de repetição"
873
+Basic.Settings.Output.ReplayBuffer.SecondsMax="Tempo máximo do replay"
874
+Basic.Settings.Output.ReplayBuffer.MegabytesMax="Máximo de memória (megabytes)"
875
 Basic.Settings.Output.ReplayBuffer.Estimate="Uso de memória estimado: %1 MB"
876
-Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Impossível estimar o uso de memória. Por favor, defina o limite máximo de memória."
877
-Basic.Settings.Output.ReplayBuffer.Prefix="Prefixo do Buffer de Repetição"
878
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Não foi possível estimar o uso de memória. Por favor, defina o limite máximo de memória."
879
+Basic.Settings.Output.ReplayBuffer.Prefix="Prefixo do buffer de repetição"
880
 Basic.Settings.Output.ReplayBuffer.Suffix="Sufixo"
881
 Basic.Settings.Output.Simple.SavePath="Caminho de gravação"
882
 Basic.Settings.Output.Simple.RecordingQuality="Qualidade da gravação"
883
 Basic.Settings.Output.Simple.RecordingQuality.Stream="A mesma da transmissão"
884
-Basic.Settings.Output.Simple.RecordingQuality.Small="Alta qualidade, tamanho médio"
885
-Basic.Settings.Output.Simple.RecordingQuality.HQ="Qualidade indistinguível, Tamanho grande"
886
-Basic.Settings.Output.Simple.RecordingQuality.Lossless="Qualidade Lossless, tremendamente grande"
887
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Aviso: O bitrate de vídeo da transmissão será definido para %1, que é o limite superior para o serviço de transmissão atual. Se você tem certeza que quer ir acima de %1, habilite opções de codificação avançadas e desmarque \"Impor limites de bitrate do serviço de transmissão\"."
888
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Aviso: O bitrate de áudio da transmissão será definido para %1, que é o limite superior para o serviço de transmissão atual. Se você tem certeza que quer ir acima de %1, habilite opções de codificação avançadas e desmarque \"Impor limites de bitrate do serviço de transmissão\"."
889
-Basic.Settings.Output.Simple.Warn.CannotPause="Aviso: Gravações não podem ser pausadas se a qualidade da gravação estiver definida como \"A mesma da transmissão\"."
890
-Basic.Settings.Output.Simple.Warn.Encoder="Aviso: Gravar com um codificador de software em uma qualidade diferente do que a stream vai exigir mais da CPU se você transmitir e gravar ao mesmo tempo."
891
-Basic.Settings.Output.Simple.Warn.Lossless="Aviso: Qualidade Lossless gera arquivos muito grandes! A qualidade Lossless pode usar mais de 7 gigabytes de espaço em disco por minuto em altas resoluções e framerates. Lossless não é recomendada para gravações longas, a menos que se tenha uma grande quantidade de espaço em disco disponível."
892
-Basic.Settings.Output.Simple.Warn.Lossless.Msg="Tem certeza que deseja usar qualidade lossless?"
893
-Basic.Settings.Output.Simple.Warn.Lossless.Title="Aviso de qualidade lossless!"
894
+Basic.Settings.Output.Simple.RecordingQuality.Small="Qualidade alta, arquivo normal"
895
+Basic.Settings.Output.Simple.RecordingQuality.HQ="Qualidade muito boa, arquivo pesado"
896
+Basic.Settings.Output.Simple.RecordingQuality.Lossless="Sem perda de qualidade, arquivo muito pesado"
897
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Aviso: a taxa de bits do vídeo transmitido será definida como %1, que é o limite máximo para o serviço de transmissão atual."
898
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Aviso: a taxa de bits do áudio transmitido será definida como %1, que é o limite máximo para o serviço de transmissão atual."
899
+Basic.Settings.Output.Simple.Warn.CannotPause="Aviso: gravações não podem ser pausadas se a qualidade da gravação estiver definida como \"A mesma da transmissão\"."
900
+Basic.Settings.Output.Simple.Warn.Encoder="Aviso: gravar com um codificador de software em uma qualidade diferente da transmissão vai exigir mais da CPU se você transmitir e gravar ao mesmo tempo."
901
+Basic.Settings.Output.Simple.Warn.Lossless="Aviso: o modo sem perda de qualidade gera arquivos muito grandes, que podem usar mais de 7 gigabytes de espaço em disco por minuto em altas resoluções e taxas de quadros. Modo sem perdas não é recomendado para gravações longas, a menos que se tenha uma grande quantidade de espaço em disco disponível."
902
+Basic.Settings.Output.Simple.Warn.Lossless.Msg="Deseja mesmo usar a qualidade sem perdas?"
903
+Basic.Settings.Output.Simple.Warn.Lossless.Title="Aviso de qualidade muito alta!"
904
 Basic.Settings.Output.Simple.Encoder.Software="Software (x264)"
905
 Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Hardware (QSV)"
906
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardware (AMD)"
907
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardware (NVENC)"
908
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Software (preset x264 de baixa utilização de CPU, aumenta o tamanho do arquivo)"
909
-Basic.Settings.Output.VideoBitrate="Taxa de Bits do Vídeo"
910
-Basic.Settings.Output.AudioBitrate="Taxa de Bits do Áudio"
911
+Basic.Settings.Output.Simple.TwitchVodTrack="Faixa de VOD da Twitch (Usa faixa 2)"
912
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Resolução ou taxa de quadros incompatíveis"
913
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Este serviço de streaming não suporta sua atual resolução e/ou taxa de quadros de saída. Eles serão alterados para o valor compatível mais próximo:\n\n%1\n\nVocê deseja continuar?"
914
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Resolução: %1"
915
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="Taxa de quadros: %1"
916
+Basic.Settings.Output.VideoBitrate="Taxa de bits do vídeo"
917
+Basic.Settings.Output.AudioBitrate="Taxa de bits do áudio"
918
 Basic.Settings.Output.Reconnect="Reconectar automaticamente"
919
 Basic.Settings.Output.RetryDelay="Atraso de repetição"
920
-Basic.Settings.Output.MaxRetries="Número Máximo de Tentativas"
921
+Basic.Settings.Output.MaxRetries="Número máximo de tentativas"
922
 Basic.Settings.Output.Advanced="Ativar as configurações avançadas do encoder"
923
-Basic.Settings.Output.EncoderPreset="Padrão de Codificação"
924
+Basic.Settings.Output.EncoderPreset="Padrão de codificação"
925
 Basic.Settings.Output.CustomEncoderSettings="Configurações de codificador personalizadas"
926
 Basic.Settings.Output.CustomMuxerSettings="Configurações personalizadas do Muxer"
927
-Basic.Settings.Output.NoSpaceFileName="Gerar Nome de Arquivo sem Espaços"
928
+Basic.Settings.Output.NoSpaceFileName="Gerar nome de arquivo sem espaços"
929
 
930
 Basic.Settings.Output.Adv.Rescale="Redimensionar a saída"
931
 Basic.Settings.Output.Adv.AudioTrack="Faixa de áudio"
932
 Basic.Settings.Output.Adv.Streaming="Transmissão"
933
-Basic.Settings.Output.Adv.ApplyServiceSettings="Impor configurações do serviço de codificador de transmissão"
934
 Basic.Settings.Output.Adv.Audio.Track1="Faixa 1"
935
 Basic.Settings.Output.Adv.Audio.Track2="Faixa 2"
936
 Basic.Settings.Output.Adv.Audio.Track3="Faixa 3"
937
 Basic.Settings.Output.Adv.Audio.Track4="Faixa 4"
938
 Basic.Settings.Output.Adv.Audio.Track5="Faixa 5"
939
 Basic.Settings.Output.Adv.Audio.Track6="Faixa 6"
940
+Basic.Settings.Output.Adv.TwitchVodTrack="Faixa de VOD da Twitch"
941
 
942
 Basic.Settings.Output.Adv.Recording="Gravação"
943
+Basic.Settings.Output.Adv.Recording.RecType="Tipo de gravação"
944
 Basic.Settings.Output.Adv.Recording.Type="Tipo"
945
 Basic.Settings.Output.Adv.Recording.Type.Standard="Padrão"
946
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Saída personalizada (FFmpeg)"
947
-Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Utilizar o codificador da transmissão)"
948
-Basic.Settings.Output.Adv.Recording.Filename="Formatação de Nome de Arquivo"
949
-Basic.Settings.Output.Adv.Recording.OverwriteIfExists="Substituir, se o arquivo existir"
950
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Usar o codificador da transmissão)"
951
+Basic.Settings.Output.Adv.Recording.Filename="Formatação do nome do arquivo"
952
+Basic.Settings.Output.Adv.Recording.OverwriteIfExists="Sobrescrever caso o arquivo exista"
953
 Basic.Settings.Output.Adv.FFmpeg.Type="Tipo de saída FFmpeg"
954
 Basic.Settings.Output.Adv.FFmpeg.Type.URL="Saída para URL"
955
-Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile="Exportar para arquivo"
956
+Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile="Saída para um arquivo"
957
 Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Formatos de gravação comuns"
958
 Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Todos os arquivos"
959
 Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Caminho do arquivo ou URL"
960
@@ -714,54 +733,54 @@
961
 Basic.Settings.Output.Adv.FFmpeg.FormatVideo="Vídeo"
962
 Basic.Settings.Output.Adv.FFmpeg.FormatDefault="Formato padrão"
963
 Basic.Settings.Output.Adv.FFmpeg.FormatDesc="Descrição do formato do contêiner"
964
-Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="Codec de áudio/vídeo supostos do caminho do arquivo ou URL"
965
+Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="O codificador de áudio/vídeo é uma suposição a partir do arquivo ou URL"
966
 Basic.Settings.Output.Adv.FFmpeg.AVEncoderDefault="Codificador padrão"
967
 Basic.Settings.Output.Adv.FFmpeg.AVEncoderDisable="Desativar o codificador"
968
 Basic.Settings.Output.Adv.FFmpeg.VEncoder="Codificador de vídeo"
969
-Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Configurações do codificador de vídeo(se houver)"
970
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Configurações do codificador de vídeo (se houver)"
971
 Basic.Settings.Output.Adv.FFmpeg.AEncoder="Codificador de áudio"
972
-Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Configurações do codificador de áudio(se houver)"
973
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Configurações do codificador de áudio (se houver)"
974
 Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Configurações do Muxer (se houver)"
975
-Basic.Settings.Output.Adv.FFmpeg.GOPSize="Intervalo de Keyframes (frames)"
976
-Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Mostrar todos os codecs (incluir potencialmente incompatíveis)"
977
+Basic.Settings.Output.Adv.FFmpeg.GOPSize="Intervalo de keyframes (quadros)"
978
+Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Mostrar todos os codificadores (incluir potencialmente incompatíveis)"
979
 
980
 Screenshot="Caminho da captura de tela"
981
-Screenshot.SourceHotkey="Capturar tela da fonte selecionada"
982
-Screenshot.StudioProgram="Capturar tela (Programa)"
983
-Screenshot.Preview="Capturar tela (Pré-visualização)"
984
-Screenshot.Scene="Capturar tela (Cena)"
985
-Screenshot.Source="Capturar tela (Fonte)"
986
+Screenshot.SourceHotkey="Capturar fonte selecionada"
987
+Screenshot.StudioProgram="Capturar tela (programa)"
988
+Screenshot.Preview="Capturar tela (prévia)"
989
+Screenshot.Scene="Capturar tela (cena)"
990
+Screenshot.Source="Capturar tela (fonte)"
991
 
992
 FilenameFormatting.completer="%CCYY-%MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %Y-%m-%d %H-%M-%S\n%A %Y-%m-%d %H-%M-%S\n%Y-%b-%d %H-%M-%S\n%Y-%B-%d %H-%M-%S\n%Y-%m-%d %I-%M-%S-%p\n%Y-%m-%d %H-%M-%S-%z\n%Y-%m-%d %H-%M-%S-%Z\n%FPS\n%CRES\n%ORES\n%VF"
993
 
994
-FilenameFormatting.TT="%CCYY       Ano, quatro dígitos\n%YY        Ano, últimos dois dígitos (00-99)\n%MM      Mês como um número decimal (01-12)\n%DD     Dia do mês, começando com 0 (01-31)\n%hh        Hora, em formato de 24h (00-23)\n%mm        Minuto (00-59)\n%ss     Segundo (00-61)\n%%     A % sign\n%a        Dia da Semana abreviado\n%A     Nome da Semana completo\n%b     Nome do Mês abreviado\n%B       Nome do Mês completo\n%d        Dia do Mês, começando com 0 (01-31)\n%H     Hora, no formato de 24h (00-23)\n%I     Hora no formato de 12h (01-12)\n%m      Mês como um número decimal (01-12)\n%M      Minuto (00-59)\n%p      Designação AM ou PM\n%S     Segundo (00-61)\n%y     Ano, últimos dois dígitos (00-99)\n%Y       Ano\n%z     diferença do UTC em fuso horários ISO 8601 \n%Z     Nome do Fuso Horário ou abreviação\n%FPS        Quadros por segundo\n%CRES      Resolução de base (tela)\n%ORES     Resolução de saída (escala)\n%VF        Formato de Vídeo"
995
+FilenameFormatting.TT="%CCYY       Ano, quatro dígitos\n%YY        Ano, últimos dois dígitos (00-99)\n%MM      Mês como um número decimal (01-12)\n%DD     Dia do mês, começando com 0 (01-31)\n%hh        Hora, em formato de 24h (00-23)\n%mm        Minuto (00-59)\n%ss     Segundo (00-61)\n%%     A % sign\n%a        Dia da semana abreviado\n%A     Nome da semana completo\n%b     Nome do mês abreviado\n%B       Nome do Mês completo\n%d        Dia do mês, começando com 0 (01-31)\n%H     Hora, no formato de 24h (00-23)\n%I     Hora no formato de 12h (01-12)\n%m      Mês como um número decimal (01-12)\n%M      Minuto (00-59)\n%p      Designação AM ou PM\n%S     Segundo (00-61)\n%y     Ano, últimos dois dígitos (00-99)\n%Y       Ano\n%z     Diferença do fuso horários no UTC pelo ISO 8601 \n%Z        Nome do fuso horário ou abreviação\n%FPS        Quadros por segundo\n%CRES      Resolução de base (tela)\n%ORES     Resolução de saída (escala)\n%VF        Formato de vídeo"
996
 
997
 Basic.Settings.Video="Vídeo"
998
-Basic.Settings.Video.Adapter="Adaptador de Vídeo"
999
+Basic.Settings.Video.Adapter="Adaptador de vídeo"
1000
 Basic.Settings.Video.BaseResolution="Resolução de base (tela)"
1001
 Basic.Settings.Video.ScaledResolution="Resolução de saída (escala)"
1002
-Basic.Settings.Video.DownscaleFilter="Filtro de Redução"
1003
-Basic.Settings.Video.DisableAeroWindows="Desativar o Aero (somente Windows)"
1004
+Basic.Settings.Video.DownscaleFilter="Filtro de redução"
1005
+Basic.Settings.Video.DisableAeroWindows="Desativar Aero (somente Windows)"
1006
 Basic.Settings.Video.FPS="FPS"
1007
-Basic.Settings.Video.FPSCommon="Valor de FPS Comum"
1008
-Basic.Settings.Video.FPSInteger="Valor de FPS Íntegro"
1009
-Basic.Settings.Video.FPSFraction="Valor de FPS Fracional"
1010
+Basic.Settings.Video.FPSCommon="Valores comuns de FPS"
1011
+Basic.Settings.Video.FPSInteger="Valores inteiros de FPS"
1012
+Basic.Settings.Video.FPSFraction="Valores fracionários de FPS"
1013
 Basic.Settings.Video.Numerator="Numerador"
1014
-Basic.Settings.Video.Denominator="Demoninador"
1015
+Basic.Settings.Video.Denominator="Denominador"
1016
 Basic.Settings.Video.Renderer="Renderizador"
1017
-Basic.Settings.Video.InvalidResolution="Resolução Inválida, Obrigatório ser [largura]x[altura] (ex. 1920x1080)"
1018
+Basic.Settings.Video.InvalidResolution="Resolução inválida. Precisa ser [largura]x[altura] (ex.: 1920x1080)"
1019
 Basic.Settings.Video.CurrentlyActive="A saída de vídeo está atualmente ativa. Por favor, desligue quaisquer saídas para alterar as configurações de vídeo."
1020
 Basic.Settings.Video.DisableAero="Desativar Aero"
1021
 
1022
-Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear(rápido, mas embaçado se redimensionando)"
1023
-Basic.Settings.Video.DownscaleFilter.Bicubic="Bicúbico (escalamento nítido, 16 amostras)"
1024
-Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (escalamento nítido, 36 amostras)"
1025
+Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (mais rápido, porém embaça se redimensionado)"
1026
+Basic.Settings.Video.DownscaleFilter.Bicubic="Bicúbico (redimensionamento nítido, 16 amostras)"
1027
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (redimensionamento nítido, 36 amostras)"
1028
 Basic.Settings.Video.DownscaleFilter.Area="Área (soma ponderada, 4/6/9 amostras)"
1029
 
1030
 Basic.Settings.Audio="Áudio"
1031
-Basic.Settings.Audio.SampleRate="Taxa de Amostragem"
1032
+Basic.Settings.Audio.SampleRate="Taxa de amostragem"
1033
 Basic.Settings.Audio.Channels="Canais"
1034
-Basic.Settings.Audio.Meters="Metros"
1035
+Basic.Settings.Audio.Meters="Métricas"
1036
 Basic.Settings.Audio.MeterDecayRate="Taxa de decaimento"
1037
 Basic.Settings.Audio.MeterDecayRate.Fast="Rápida"
1038
 Basic.Settings.Audio.MeterDecayRate.Medium="Média (PPM Tipo I)"
1039
@@ -769,13 +788,13 @@
1040
 Basic.Settings.Audio.PeakMeterType="Tipo do medidor de pico"
1041
 Basic.Settings.Audio.PeakMeterType.SamplePeak="Exemplo de pico"
1042
 Basic.Settings.Audio.PeakMeterType.TruePeak="True Peak (Uso elevado de CPU)"
1043
-Basic.Settings.Audio.MultiChannelWarning.Enabled="AVISO: Áudio Surround está habilitado."
1044
+Basic.Settings.Audio.MultiChannelWarning.Enabled="AVISO: áudio Surround está ativado."
1045
 Basic.Settings.Audio.MultichannelWarning="Antes de transmitir, verifique se o seu serviço de transmissão suporta tanto receber como reproduzir som surround. Facebook 360 Live é um exemplo onde o som surround é totalmente suportado. Embora o Facebook Live e o YouTube Live ambos aceitem receber som surround, o Facebook Live transformará para estéreo e o YouTube Live reproduz apenas dois canais.\n\nOs filtros de áudio do OBS são compatíveis com o som surround, embora o suporte do plugin VST não seja garantido."
1046
 Basic.Settings.Audio.MultichannelWarning.Title="Ativar o som surround?"
1047
-Basic.Settings.Audio.MultichannelWarning.Confirm="Você tem certeza de que deseja habilitar o som surround?"
1048
-Basic.Settings.Audio.Devices="Dispositivos de Áudio Globais"
1049
-Basic.Settings.Audio.DesktopDevice="Áudio da Área de Trabalho"
1050
-Basic.Settings.Audio.DesktopDevice2="Áudio da Área de Trabalho 2"
1051
+Basic.Settings.Audio.MultichannelWarning.Confirm="Deseja mesmo ativar o som surround?"
1052
+Basic.Settings.Audio.Devices="Dispositivos de áudio globais"
1053
+Basic.Settings.Audio.DesktopDevice="Áudio do desktop"
1054
+Basic.Settings.Audio.DesktopDevice2="Áudio do desktop 2"
1055
 Basic.Settings.Audio.AuxDevice="Dispositivo de Áudio Mic/Auxiliar"
1056
 Basic.Settings.Audio.AuxDevice2="Dispositivo de áudio/microfone auxiliar 2"
1057
 Basic.Settings.Audio.AuxDevice3="Dispositivo de áudio/microfone auxiliar 3"
1058
@@ -821,16 +840,21 @@
1059
 Basic.Settings.Advanced.AutoRemux.MP4="(gravar como mkv)"
1060
 
1061
 Basic.AdvAudio="Propriedades de áudio avançadas"
1062
-Basic.AdvAudio.ActiveOnly="Apenas Fontes Ativas"
1063
+Basic.AdvAudio.ActiveOnly="Apenas fontes ativas"
1064
 Basic.AdvAudio.Name="Nome"
1065
 Basic.AdvAudio.Volume="Volume"
1066
+Basic.AdvAudio.VolumeSource="Volume para '%1'"
1067
 Basic.AdvAudio.Mono="Mono"
1068
+Basic.AdvAudio.MonoSource="Downmix de mono para '%1'"
1069
 Basic.AdvAudio.Balance="Balanço"
1070
-Basic.AdvAudio.SyncOffset="Sincronizar Offset"
1071
+Basic.AdvAudio.BalanceSource="Balanço para '%1'"
1072
+Basic.AdvAudio.SyncOffset="Sincronizar offset"
1073
+Basic.AdvAudio.SyncOffsetSource="Deslocamento de sincronização para '%1'"
1074
 Basic.AdvAudio.Monitoring="Monitoramento de Áudio"
1075
 Basic.AdvAudio.Monitoring.None="Não monitorar"
1076
 Basic.AdvAudio.Monitoring.MonitorOnly="Apenas monitorar (saída muda)"
1077
 Basic.AdvAudio.Monitoring.Both="Monitorar e enviar áudio"
1078
+Basic.AdvAudio.MonitoringSource="Monitoramento de Áudio para '%1'"
1079
 Basic.AdvAudio.AudioTracks="Faixas"
1080
 
1081
 Basic.Settings.Hotkeys="Teclas de atalho"
1082
@@ -891,15 +915,15 @@
1083
 
1084
 OutputWarnings.NoTracksSelected="Você deve selecionar pelo menos uma faixa"
1085
 OutputWarnings.MP4Recording="Atenção: as gravações salvas em MP4/MOV não serão recuperáveis se o arquivo não puder ser concluído (por exemplo, como resultado de um BSOD, perdas de energia, etc.). Se você quiser gravar várias faixas de áudio, aconselhamos utilizar o MKV e, uma vez terminado, converter a gravação para MP4/MOV (Arquivo → Converter gravações)"
1086
-OutputWarnings.CannotPause="Aviso: As gravações não podem ser pausadas se o codificador de gravação estiver definido para \"(Utilizar o codificador da transmissão)\""
1087
+OutputWarnings.CannotPause="Aviso: gravações não podem ser pausadas se o codificador de gravação estiver definido para \"(Usar o codificador da transmissão)\""
1088
 
1089
 FinalScene.Title="Excluir cena"
1090
 FinalScene.Text="É preciso haver pelo menos uma cena."
1091
 
1092
-NoSources.Title="Sem Fontes"
1093
-NoSources.Text="Parece que você ainda não adicionou nenhuma fonte de vídeo, portanto, você só exibirá uma tela em branco. Você tem certeza de que quer fazer isso?"
1094
-NoSources.Text.AddSource="Você pode adicionar fontes clicando no ícone + sob a caixa de Fontes na janela principal, a qualquer momento."
1095
-NoSources.Label="Você não tem nenhuma fonte.\nClique no botão + abaixo,\nou clique direito aqui para adicionar uma."
1096
+NoSources.Title="Sem fontes"
1097
+NoSources.Text="Parece que você ainda não adicionou nenhuma fonte de vídeo, portanto, você só exibirá uma tela em branco. Deseja mesmo fazer isso?"
1098
+NoSources.Text.AddSource="Você pode adicionar fontes clicando no ícone + sob a aba de Fontes na janela principal, a qualquer momento."
1099
+NoSources.Label="Você não tem nenhuma fonte.\nClique no botão + abaixo, ou clique com o botão direito para adicionar uma."
1100
 
1101
 ChangeBG="Definir Cor"
1102
 CustomColor="Cor personalizada"
1103
@@ -914,19 +938,19 @@
1104
 About.License="Licença"
1105
 About.Contribute="Apoie o Projeto OBS"
1106
 
1107
-AddUrl.Title="Adicionar Fonte via URL"
1108
-AddUrl.Text="Você arrastou um URL para o OBS. Isso irá adicionar automaticamente o link como fonte. Deseja continuar?"
1109
+AddUrl.Title="Adicionar fonte via URL"
1110
+AddUrl.Text="Você arrastou uma URL para o OBS. Isso irá adicionar automaticamente o link como fonte. Deseja continuar?"
1111
 AddUrl.Text.Url="URL: %1"
1112
 
1113
 ResizeOutputSizeOfSource="Redimensionar saída (tamanho da fonte)"
1114
 ResizeOutputSizeOfSource.Text="As resoluções base e de saída serão redimensionadas para o tamanho da fonte atual."
1115
 ResizeOutputSizeOfSource.Continue="Você quer continuar?"
1116
 
1117
-PreviewTransition="Prévia da Transição"
1118
+PreviewTransition="Pré-visualizar transição"
1119
 
1120
-Importer="Importador de Coleção de Cenas"
1121
-Importer.SelectCollection="Selecione uma Coleção de Cenas"
1122
-Importer.Collection="Coleção de Cenas"
1123
+Importer="Importador de coleção de cenas"
1124
+Importer.SelectCollection="Selecione uma coleção de cenas"
1125
+Importer.Collection="Coleção de cenas"
1126
 Importer.HelpText="Adicione arquivos a esta janela para importar coleções do OBS ou outros programas suportados."
1127
 Importer.Path="Caminho da Coleção"
1128
 Importer.Program="Aplicação Detectada"
1129
@@ -938,7 +962,7 @@
1130
 NeedsRestart="OBS Studio precisa ser reiniciado. Deseja reiniciá-lo agora?"
1131
 
1132
 ContextBar.NoSelectedSource="Nenhuma fonte selecionada"
1133
-ContextBar.ResetTransform="Redefinir Transformação"
1134
+ContextBar.ResetTransform="Limpar transformação"
1135
 ContextBar.FitToCanvas="Ajustar à tela"
1136
 
1137
 ContextBar.MediaControls.PlayMedia="Reproduzir Mídia"
1138
obs-studio-26.0.2.tar.xz/UI/data/locale/pt-PT.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/pt-PT.ini Changed
183
 
1
@@ -90,8 +90,10 @@
2
 RefreshBrowser="Atualizar"
3
 AspectRatio="Proporção <b>%1:%2</b>"
4
 LockVolume="Bloquear Volume"
5
+LogViewer="Visualizador de Log"
6
 ShowOnStartup="Mostrar no arranque"
7
 OpenFile="Abrir ficheiro"
8
+AddValue="Adicionar %1"
9
 
10
 AlreadyRunning.Title="O OBS já está em execução"
11
 AlreadyRunning.Text="O OBS já está em execução! Tem de desligar a instância existente do OBS antes de iniciar uma nova. Se o OBS estiver definido para correr na bandeja do sistema, por favor verifique se está aberto lá."
12
@@ -159,6 +161,7 @@
13
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Desconectar Conta?"
14
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Esta alteração será aplicada imediatamente. De certeza que queres desconectar a tua conta?"
15
 Basic.AutoConfig.StreamPage.GetStreamKey="Obter chave de stream"
16
+Basic.AutoConfig.StreamPage.MoreInfo="Mais informações"
17
 Basic.AutoConfig.StreamPage.UseStreamKey="Usar Chave de Stream"
18
 Basic.AutoConfig.StreamPage.Service="Serviço"
19
 Basic.AutoConfig.StreamPage.Service.ShowAll="Mostrar Tudo..."
20
@@ -363,8 +366,8 @@
21
 Deinterlacing.TopFieldFirst="Campo Superior Primeiro"
22
 Deinterlacing.BottomFieldFirst="Campo Inferior Primeiro"
23
 
24
-VolControl.SliderUnmuted="Barra de volume para '%1': %2"
25
-VolControl.SliderMuted="Barra de volume para '%1': %2 (atualmente silenciado)"
26
+VolControl.SliderUnmuted="Barra de volume para '%1':"
27
+VolControl.SliderMuted="Barra de volume para '%1': (atualmente silenciado)"
28
 VolControl.Mute="Silêncio '%1'"
29
 VolControl.Properties="Propriedades de '%1'"
30
 
31
@@ -380,6 +383,7 @@
32
 
33
 AddProfile.Title="Adicionar perfil"
34
 AddProfile.Text="Por favor, introduza o nome do perfil"
35
+AddProfile.WizardCheckbox="Mostrar assistente de configuração automática"
36
 
37
 RenameProfile.Title="Renomear perfil"
38
 
39
@@ -394,6 +398,11 @@
40
 Basic.SourceSelect.AddExisting="Adicionar Existente"
41
 Basic.SourceSelect.AddVisible="Tornar a fonte visível"
42
 
43
+Basic.Main.Sources.Visibility="Visibilidade"
44
+Basic.Main.Sources.VisibilityDescription="Controla a visibilidade de '%1' no ecrã"
45
+Basic.Main.Sources.Lock="Bloquear"
46
+Basic.Main.Sources.LockDescription="Bloqueia a posição e a escala de '%1' no ecrã"
47
+
48
 Basic.PropertiesWindow="Propriedades para '%1'"
49
 Basic.PropertiesWindow.AutoSelectFormat="%1 (seleção automática: %2)"
50
 Basic.PropertiesWindow.SelectColor="Selecione a cor"
51
@@ -480,6 +489,7 @@
52
 Basic.Main.StopStreaming="Parar transmissão"
53
 Basic.Main.StoppingStreaming="A parar transmissão..."
54
 Basic.Main.ForceStopStreaming="Parar transmissão (ignorar atraso)"
55
+Basic.Main.ShowContextBar="Mostrar Barra de Ferramentas"
56
 Basic.Main.HideContextBar="Ocultar Barra de Ferramentas"
57
 Basic.Main.StopVirtualCam="Parar Câmara Virtual"
58
 Basic.Main.Group="Grupo %1"
59
@@ -537,7 +547,10 @@
60
 Basic.MainMenu.View.Docks.ResetUI="Reiniciar Interface"
61
 Basic.MainMenu.View.Docks.LockUI="Bloquear Interface"
62
 Basic.MainMenu.View.Docks.CustomBrowserDocks="Docas de Browser Personalizadas..."
63
+Basic.MainMenu.View.ListboxToolbars="Botões da lista de cena/origem"
64
+Basic.MainMenu.View.ContextBar="Barra de ferramenta das fontes"
65
 Basic.MainMenu.View.SceneTransitions="Transições de &cenas"
66
+Basic.MainMenu.View.SourceIcons="Ícones em fontes (&I)"
67
 Basic.MainMenu.View.StatusBar="Barra de e&stado"
68
 Basic.MainMenu.View.Fullscreen.Interface="Interface de ecrã inteiro"
69
 
70
@@ -629,13 +642,19 @@
71
 Basic.Settings.Stream.MissingUrlAndApiKey="O URL e a Chave de Stream estão em falta.\n\nAbra as definições e insira a chave e a URL do Stream no separador 'stream'."
72
 Basic.Settings.Stream.MissingUrl="URL do stream está em falta.\n\nVá às definições para inserir a URL no separador 'Stream'."
73
 Basic.Settings.Stream.MissingStreamKey="A chave do stream está em falta.\n\nVá às definições para inserir a chave no separador 'Stream'."
74
+Basic.Settings.Stream.IgnoreRecommended="Ignorar recomendações de configuração do serviço de streaming"
75
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Substituir Configurações Recomendadas"
76
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Aviso: Ignorar as limitações do serviço pode resultar na redução de qualidade da transmissão ou impedir sua transmissão.\n\nContinuar?"
77
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Bitrate máximo de vídeo: %1 kbps"
78
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Bitrate máximo de áudio: %1 kbps"
79
+Basic.Settings.Stream.Recommended.MaxResolution="Resolução máxima: %1"
80
+Basic.Settings.Stream.Recommended.MaxFPS="Máximo FPS:%1"
81
 
82
 Basic.Settings.Output="Saída"
83
 Basic.Settings.Output.Format="Formato de gravação"
84
 Basic.Settings.Output.Encoder="Codificador"
85
 Basic.Settings.Output.SelectDirectory="Selecione o diretório de gravação"
86
 Basic.Settings.Output.SelectFile="Selecione ficheiro de gravação"
87
-Basic.Settings.Output.EnforceBitrate="Forçar limites de taxa de bits de serviço de transmissão"
88
 Basic.Settings.Output.DynamicBitrate="Alterar dinamicamente a taxa de bits para gerir congestionamento"
89
 Basic.Settings.Output.DynamicBitrate.Beta="Alterar dinamicamente a taxa de bits para gerir congestionamento (beta)"
90
 Basic.Settings.Output.DynamicBitrate.TT="Em vez de perder frames para reduzir o congestionamento, muda dinamicamente a taxa de bits.\n\nNote que isto pode aumentar o atraso para os espectadores, se houver um congestionamento súbito significativo.\nQuando a taxa de bits cai, pode levar alguns minutos a ser restaurar.\n\nAtualmente só é suportado em RTMP."
91
@@ -656,8 +675,8 @@
92
 Basic.Settings.Output.Simple.RecordingQuality.Small="Alta qualidade, Tamanho médio"
93
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Qualidade indistinguível, Tamanho de Arquivo Grande"
94
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Sem perda de qualidade, Tamanho de Arquivo Enorme"
95
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Aviso: O bitrate do vídeo de transmissão será definido para %1, que é o limite superior para o dispositivo atual de transmissão. Se tens a certeza de que queres ir acima de %1, ativa opções de codificação avançadas e desmarca a opçáo \"Impor limites de bitrate do serviço de transmissao\"."
96
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Aviso: O bitrate do áudio de transmissão será definido para %1, que é o limite superior para o dispositivo atual de transmissão. Se tens a certeza de que queres ir acima de %1, ativa opções de codificação avançadas e desmarca a opçáo \"Impor limites de bitrate do serviço de transmissao\"."
97
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Aviso: O bitrate de vídeo da transmissão será definido para %1, que é o limite superior para o serviço de transmissão atual."
98
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Aviso: O bitrate de áudio da transmissão será definido para %1, que é o limite superior para o serviço de transmissão atual."
99
 Basic.Settings.Output.Simple.Warn.CannotPause="Aviso: As gravações não podem ser pausadas se a qualidade de gravação estiver definida como \"Mesmo que o stream\"."
100
 Basic.Settings.Output.Simple.Warn.Encoder="Aviso: Gravar com um codificador de software com uma qualidade diferente da transmissão vai exigir mais da CPU se transmitires e gravares ao mesmo tempo."
101
 Basic.Settings.Output.Simple.Warn.Lossless="Aviso: Qualidade sem perdas cria ficheiros com tamanhos tremendos! A qualidade sem perdas pode usar até 7 gigabytes de espaço no disco por minuto a altas resoluções e framerates. Não é recomendado usar qualidade sem perdas para gravações longas a não ser que tenhas muito espaço disponível no disco."
102
@@ -668,6 +687,11 @@
103
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardware (AMD)"
104
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardware (NVENC)"
105
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Software (x264 baixa utilização da CPU pré-ajustada, aumenta o tamanho do arquivo)"
106
+Basic.Settings.Output.Simple.TwitchVodTrack="Trilho de VOD da Twitch (Faixa de Uso 2)"
107
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Resolução/Framerate Incompatível"
108
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Este serviço de transmissão não suporta a atual resolução de saída e/ou taxa de framerate. Eles serão alterados para o valor compatível mais próximo:\n\n%1\n\n Deseja continuar?"
109
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Resolução: %1"
110
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS: %1"
111
 Basic.Settings.Output.VideoBitrate="Bitrate de Vídeo"
112
 Basic.Settings.Output.AudioBitrate="Bitrate de Áudio"
113
 Basic.Settings.Output.Reconnect="Religar Automaticamente"
114
@@ -682,7 +706,6 @@
115
 Basic.Settings.Output.Adv.Rescale="Redimensionar saída"
116
 Basic.Settings.Output.Adv.AudioTrack="Faixa de áudio"
117
 Basic.Settings.Output.Adv.Streaming="Transmissão"
118
-Basic.Settings.Output.Adv.ApplyServiceSettings="Impor definições de codificação no serviço de transmissão"
119
 Basic.Settings.Output.Adv.Audio.Track1="Faixa 1"
120
 Basic.Settings.Output.Adv.Audio.Track2="Faixa 2"
121
 Basic.Settings.Output.Adv.Audio.Track3="Faixa 3"
122
@@ -691,6 +714,7 @@
123
 Basic.Settings.Output.Adv.Audio.Track6="Faixa 6"
124
 
125
 Basic.Settings.Output.Adv.Recording="Gravação"
126
+Basic.Settings.Output.Adv.Recording.RecType="Tipo de gravação"
127
 Basic.Settings.Output.Adv.Recording.Type="Tipo"
128
 Basic.Settings.Output.Adv.Recording.Type.Standard="Padrão"
129
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Saída personalizada (FFmpeg)"
130
@@ -719,9 +743,16 @@
131
 Basic.Settings.Output.Adv.FFmpeg.GOPSize="Intervalo de Keyframes (frames)"
132
 Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Mostrar todos os codecs (mesmo que potencialmente incompatíveis)"
133
 
134
+Screenshot="Saída da Captura de Tela"
135
+Screenshot.SourceHotkey="Capturar fonte selecionada"
136
+Screenshot.StudioProgram="Capturar tela (programa)"
137
+Screenshot.Preview="Capturar tela (prévia)"
138
+Screenshot.Scene="Capturar tela (cena)"
139
+Screenshot.Source="Capturar tela (fonte)"
140
 
141
 FilenameFormatting.completer="%CCYY-%MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %Y-%m-%d %H-%M-%S\n%A %Y-%m-%d %H-%M-%S\n%Y-%b-%d %H-%M-%S\n%Y-%B-%d %H-%M-%S\n%Y-%m-%d %I-%M-%S-%p\n%Y-%m-%d %H-%M-%S-%z\n%Y-%m-%d %H-%M-%S-%Z\n%FPS\n%CRES\n%ORES\n%VF"
142
 
143
+FilenameFormatting.TT="%CCYY       Ano, quatro dígitos\n%YY        Ano, últimos dois dígitos (00-99)\n%MM      Mês como um número decimal (01-12)\n%DD     Dia do mês, começando com 0 (01-31)\n%hh        Hora, em formato de 24h (00-23)\n%mm        Minuto (00-59)\n%ss     Segundo (00-61)\n%%     A % sign\n%a        Dia da Semana abreviado\n%A     Nome da Semana completo\n%b     Nome do Mês abreviado\n%B       Nome do Mês completo\n%d        Dia do Mês, começando com 0 (01-31)\n%H     Hora, no formato de 24h (00-23)\n%I     Hora no formato de 12h (01-12)\n%m      Mês como um número decimal (01-12)\n%M      Minuto (00-59)\n%p      Designação AM ou PM\n%S     Segundo (00-61)\n%y     Ano, últimos dois dígitos (00-99)\n%Y       Ano\n%z     diferença do UTC em fuso horários ISO 8601 \n%Z     Nome do Fuso Horário ou abreviação\n%FPS        Quadros por segundo\n%CRES      Resolução de base (tela)\n%ORES     Resolução de saída (escala)\n%VF        Formato de Vídeo"
144
 
145
 Basic.Settings.Video="Vídeo"
146
 Basic.Settings.Video.Adapter="Adaptador de Vídeo"
147
@@ -811,13 +842,17 @@
148
 Basic.AdvAudio.ActiveOnly="Apenas Fontes Ativas"
149
 Basic.AdvAudio.Name="Nome"
150
 Basic.AdvAudio.Volume="Volume"
151
+Basic.AdvAudio.VolumeSource="Volume para '%1'"
152
 Basic.AdvAudio.Mono="Mono"
153
 Basic.AdvAudio.Balance="Equilíbrio"
154
+Basic.AdvAudio.BalanceSource="Saldo para '%1'"
155
 Basic.AdvAudio.SyncOffset="Atraso na Sincronização"
156
+Basic.AdvAudio.SyncOffsetSource="Sincronização de deslocamento para '%1'"
157
 Basic.AdvAudio.Monitoring="Monitorização de Áudio"
158
 Basic.AdvAudio.Monitoring.None="Monitor Desligado"
159
 Basic.AdvAudio.Monitoring.MonitorOnly="Único Monitor (saída muda)"
160
 Basic.AdvAudio.Monitoring.Both="Monitor e Saída"
161
+Basic.AdvAudio.MonitoringSource="Monitoramento de Áudio para '%1'"
162
 Basic.AdvAudio.AudioTracks="Faixas"
163
 
164
 Basic.Settings.Hotkeys="Teclas de atalho"
165
@@ -924,5 +959,16 @@
166
 Restart="Reiniciar"
167
 NeedsRestart="OBS Studio precisa ser reiniciado. Deseja reiniciar agora?"
168
 
169
-
170
+ContextBar.NoSelectedSource="Nenhuma fonte selecionada"
171
+ContextBar.ResetTransform="Limpar transformação"
172
+ContextBar.FitToCanvas="Ajustar à tela"
173
+
174
+ContextBar.MediaControls.PlayMedia="Executar mídia"
175
+ContextBar.MediaControls.PauseMedia="Pausar mídia"
176
+ContextBar.MediaControls.StopMedia="Parar Mídia"
177
+ContextBar.MediaControls.RestartMedia="Reiniciar Mídia"
178
+ContextBar.MediaControls.PlaylistNext="Próxima na lista de reprodução"
179
+ContextBar.MediaControls.PlaylistPrevious="Anterior na lista de reprodução"
180
+ContextBar.MediaControls.MediaProperties="Propriedades da Mídia"
181
+ContextBar.MediaControls.BlindSeek="Ferramenta de Procura de Mídia"
182
 
183
obs-studio-26.0.2.tar.xz/UI/data/locale/ro-RO.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/ro-RO.ini Changed
295
 
1
@@ -93,6 +93,7 @@
2
 LogViewer="Vizualizator de jurnale"
3
 ShowOnStartup="Afișează la pornire"
4
 OpenFile="Deschide fișierul"
5
+AddValue="Adaugă %1"
6
 
7
 AlreadyRunning.Title="OBS rulează deja"
8
 AlreadyRunning.Text="OBS rulează deja! Dacă nu intenționezi să faci acest lucru, te rugăm să închizi toate instanțele OBS existente înainte de a încerca să rulezi o nouă instanță. Dacă ai OBS-ul setat să se minimizeze în bara de sistem, te rugam să verifici dacă rulează acolo."
9
@@ -105,8 +106,8 @@
10
 DockCloseWarning.Text="Tocmai ai închis o fereastră andocabilă. Dacă dorești să o afișezi din nou, folosește meniul Vizualizare → Andocări din bara de meniu."
11
 
12
 ExtraBrowsers="Andocări personalizate pentru browser"
13
-ExtraBrowsers.Info="Adaugă andocări dându-le o denumire și un URL, apoi dă clic pe Aplică sau Închide pentru a deschide andocările. Poți adăuga sau elimina andocări oricând."
14
-ExtraBrowsers.DockName="Denumirea andocării"
15
+ExtraBrowsers.Info="Adaugă andocări dându-le un nume și un URL, apoi dă clic pe Aplică sau Închide pentru a deschide andocările. Poți adăuga sau elimina andocări oricând."
16
+ExtraBrowsers.DockName="Numele andocării"
17
 
18
 Auth.Authing.Title="Se autentifică..."
19
 Auth.Authing.Text="Se autentifică cu %1, te rugăm să aștepți..."
20
@@ -121,10 +122,10 @@
21
 Auth.Chat="Chat"
22
 Auth.StreamInfo="Informații privind transmisiunea"
23
 TwitchAuth.Stats="Statistici Twitch"
24
-TwitchAuth.Feed="Fluxul activității Twitch"
25
+TwitchAuth.Feed="Flux de activitate Twitch"
26
 TwitchAuth.TwoFactorFail.Title="Nu se poate interoga cheia de transmisiune"
27
 TwitchAuth.TwoFactorFail.Text="OBS nu a putut să se conecteze la contul tău Twitch. Te rugăm să te asiguri că autentificarea cu doi factori este configurată în <a href='https://www.twitch.tv/settings/security'>setările de securitate din Twitch</a>, deoarece acest lucru este necesar pentru a transmite."
28
-RestreamAuth.Channels="Restream canalele"
29
+RestreamAuth.Channels="Canale Restream"
30
 
31
 Copy.Filters="Copiază filtrele"
32
 Paste.Filters="Lipește filtrele"
33
@@ -152,7 +153,7 @@
34
 Basic.AutoConfig.VideoPage.FPS.UseCurrent="Folosește valoarea actuală (%1)"
35
 Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="Fie 60 sau 30, însă prefer 60 când este posibil"
36
 Basic.AutoConfig.VideoPage.FPS.PreferHighRes="Fie 60 sau 30, însă prefer rezoluție înaltă"
37
-Basic.AutoConfig.VideoPage.CanvasExplanation="Notă: Rezoluția (de bază) a planșei nu este neapărat aceeași cu rezoluția cu care vei transmite sau înregistra. Rezoluția efectivă de transmisiune/înregistrare poate fi subscalată de la rezoluția planșei pentru a reduce utilizarea de resurse sau cerințele privind rata de biți."
38
+Basic.AutoConfig.VideoPage.CanvasExplanation="Notă: Rezoluția (de bază) a planșei nu este neapărat aceeași cu rezoluția cu care vei transmite sau înregistra. Rezoluția efectivă de transmisiune/înregistrare poate fi sub-scalată de la rezoluția planșei pentru a reduce utilizarea de resurse sau cerințele privind rata de biți."
39
 Basic.AutoConfig.StreamPage="Informații privind transmisiunea"
40
 Basic.AutoConfig.StreamPage.SubTitle="Te rugăm să introduci informațiile pentru transmisiune"
41
 Basic.AutoConfig.StreamPage.ConnectAccount="Conectează un cont (recomandat)"
42
@@ -160,6 +161,7 @@
43
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Deconectezi contul?"
44
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Această modificare se va aplica imediat. Ești sigur că vrei să deconectezi contul?"
45
 Basic.AutoConfig.StreamPage.GetStreamKey="Obține cheia de transmisiune"
46
+Basic.AutoConfig.StreamPage.MoreInfo="Mai multe informații"
47
 Basic.AutoConfig.StreamPage.UseStreamKey="Folosește o cheie de transmisiune"
48
 Basic.AutoConfig.StreamPage.Service="Serviciu"
49
 Basic.AutoConfig.StreamPage.Service.ShowAll="Afișează toate..."
50
@@ -204,8 +206,8 @@
51
 Basic.Stats.Status.Recording="Se înregistrează"
52
 Basic.Stats.Status.Live="LIVE"
53
 Basic.Stats.Status.Reconnecting="Se reconectează"
54
-Basic.Stats.Status.Inactive="Inactivă"
55
-Basic.Stats.Status.Active="Activă"
56
+Basic.Stats.Status.Inactive="Inactiv(ă)"
57
+Basic.Stats.Status.Active="Activ(ă)"
58
 Basic.Stats.DroppedFrames="Cadre pierdute (Rețea)"
59
 Basic.Stats.MegabytesSent="Date transmise în total"
60
 Basic.Stats.Bitrate="Rată de biți"
61
@@ -228,12 +230,12 @@
62
 Updater.GameCaptureActive.Title="Captură de joc activă"
63
 Updater.GameCaptureActive.Text="Biblioteca hook de captare a jocului este în prezent folosită. Te rugăm să închizi orice joc/program capturat (sau repornește Windows-ul) și încearcă din nou."
64
 
65
-QuickTransitions.SwapScenes="Comută previzualizarea/scenele de output după tranziție"
66
-QuickTransitions.SwapScenesTT="Schimba previzualizarea si scenele de output dupa tranzitionare (în cazul în care încă există outputul scenei originale). \nAceasta nu va anula nicio modificăre care au fost făcute la outputul scenei originale."
67
+QuickTransitions.SwapScenes="Comută între previzualizare/scene de output după tranziție"
68
+QuickTransitions.SwapScenesTT="Comută între previzualizare și scene de output după tranziție (în cazul în care încă există scena originală a outputului).\nAcest lucru nu va anula nicio modificare care a fost făcută la scena originală a outputului."
69
 QuickTransitions.DuplicateScene="Duplică scena"
70
-QuickTransitions.DuplicateSceneTT="Atunci când editezi aceeași scenă, permite editarea transformării/vizibilității surselor fără modificarea outputului.\nPentru a edita proprietățile surselor fără a modifica outputul, activează 'Duplică scenele'.\nModificarea acestei valori va reseta outputul scenei actuale (în cazul în care încă există)."
71
+QuickTransitions.DuplicateSceneTT="Când editezi aceeași scenă, permite editarea transformării/vizibilității surselor fără modificarea\noutputului. Pentru a edita proprietățile surselor fără a modifica outputul, activează „Duplică scenele”. \nModificarea acestei valori va reseta outputul scenei actuale (în cazul în care încă există)."
72
 QuickTransitions.EditProperties="Duplică scenele"
73
-QuickTransitions.EditPropertiesTT="Atunci când editezi aceeași scenă, permite editarea proprietăților surselor fără modificarea outputului.\nAcest lucru poate fi folosit doar dacă este activată 'Duplică scenele'.\nAnumite surse (cum ar fi sursele de captare sau media) nu suportă acest lucru și nu pot fi editate separat.\nModificarea acestei valori va reseta outputul scenei actuale (în cazul în care încă există).\n\nAvertisment: Deoarece sursele vor fi duplicate, aceasta poate solicita resurse suplimentare de sistem sau video."
74
+QuickTransitions.EditPropertiesTT="Când editezi aceeași scenă, permite editarea proprietăților surselor fără modificarea outputului. Acest lucru\npoate fi folosit numai dacă este activată „Duplică scenele”. Anumite surse (cum ar fi sursele de captură sau\nmedia) nu suportă acest lucru și nu pot fi editate separat. Modificarea acestei valori va reseta scena\nde output actuală (în cazul în care încă există).\n\nAvertisment: Deoarece sursele vor fi duplicate, aceasta poate solicita resurse suplimentare de sistem sau video."
75
 QuickTransitions.HotkeyName="Tranziție rapidă: %1"
76
 
77
 Basic.AddTransition="Adaugă tranziție configurabilă"
78
@@ -286,7 +288,7 @@
79
 Output.ConnectFail.BadPath="URL-ul conexiunii sau calea este nevalidă. Te rugăm să verifici setările pentru a confirma că acestea sunt valide."
80
 Output.ConnectFail.ConnectFailed="Conectarea la server a eșuat"
81
 Output.ConnectFail.InvalidStream="Nu a putut fi accesat canalul sau cheia de transmisiune specificată, te rugăm să verifici cheia de transmisiune. Dacă aceasta este corectă, poate fi o problemă cu conectarea la server."
82
-Output.ConnectFail.Error="Eroare neașteptată la încercarea de a conecta la server. Mai multe informaţii în fişierul jurnal."
83
+Output.ConnectFail.Error="A apărut o eroare neașteptată la încercarea de conectare la server. Mai multe informații în fișierul jurnal."
84
 Output.ConnectFail.Disconnected="Deconectat de la server."
85
 
86
 Output.StreamEncodeError.Title="Eroare privind codificarea"
87
@@ -297,7 +299,7 @@
88
 Output.RecordNoSpace.Title="Spațiu insuficient pe disc"
89
 Output.RecordNoSpace.Msg="Nu există spațiu suficient pe disc pentru a continua înregistrarea."
90
 Output.RecordError.Title="Eroare privind înregistrarea"
91
-Output.RecordError.Msg="S-a produs o eroare nespecificată în timpul înregistrării."
92
+Output.RecordError.Msg="A apărut o eroare nespecificată în timpul înregistrării."
93
 Output.RecordError.EncodeErrorMsg="A apărut o eroare de codificare în timpul înregistrării."
94
 
95
 Output.BadPath.Title="Calea fișierului greșită"
96
@@ -364,12 +366,10 @@
97
 Deinterlacing.TopFieldFirst="Câmpul superior prima oară"
98
 Deinterlacing.BottomFieldFirst="Câmpul inferior prima oară"
99
 
100
-VolControl.SliderUnmuted="Glisor de volum pentru '%1': %2"
101
-VolControl.SliderMuted="Glisor de volum pentru '%1': %2 (în prezent muțit)"
102
 VolControl.Mute="Mut '%1'"
103
 VolControl.Properties="Proprietăți pentru „%1”"
104
 
105
-Basic.Main.AddSceneDlg.Title="Adaugă scenă"
106
+Basic.Main.AddSceneDlg.Title="Adaugă o scenă"
107
 Basic.Main.AddSceneDlg.Text="Te rugăm să introduci numele scenei"
108
 
109
 Basic.Main.DefaultSceneName.Text="Scena %1"
110
@@ -381,6 +381,7 @@
111
 
112
 AddProfile.Title="Adaugă un profil"
113
 AddProfile.Text="Te rugăm să introduci numele profilului"
114
+AddProfile.WizardCheckbox="Afișează asistentul de configurare automată"
115
 
116
 RenameProfile.Title="Redenumește profilul"
117
 
118
@@ -395,6 +396,7 @@
119
 Basic.SourceSelect.AddExisting="Adaugă una existentă"
120
 Basic.SourceSelect.AddVisible="Fă sursa vizibilă"
121
 
122
+
123
 Basic.PropertiesWindow="Proprietăți pentru „%1”"
124
 Basic.PropertiesWindow.AutoSelectFormat="%1 (selectare automată: %2)"
125
 Basic.PropertiesWindow.SelectColor="Selectează culoarea"
126
@@ -406,8 +408,8 @@
127
 Basic.PropertiesWindow.AddDir="Adaugă un director"
128
 Basic.PropertiesWindow.AddURL="Adaugă cale/URL"
129
 Basic.PropertiesWindow.AddEditableListDir="Adaugă directorul în „%1”"
130
-Basic.PropertiesWindow.AddEditableListFiles="Adaugă fișiere la '%1'"
131
-Basic.PropertiesWindow.AddEditableListEntry="Adaugă intrare la '%1'"
132
+Basic.PropertiesWindow.AddEditableListFiles="Adaugă fișiere la „%1”"
133
+Basic.PropertiesWindow.AddEditableListEntry="Adaugă intrare la „%1”"
134
 Basic.PropertiesWindow.EditEditableListEntry="Editează intrarea de la '%1'"
135
 
136
 Basic.PropertiesView.FPS.Simple="Valori FPS simple"
137
@@ -428,7 +430,7 @@
138
 Basic.Filters.AsyncFilters="Filtre audio/video"
139
 Basic.Filters.AudioFilters="Filtre audio"
140
 Basic.Filters.EffectFilters="Filtre de efecte"
141
-Basic.Filters.Title="Filtre pentru '%1'"
142
+Basic.Filters.Title="Filtre pentru „%1”"
143
 Basic.Filters.AddFilter.Title="Numele filtrului"
144
 Basic.Filters.AddFilter.Text="Te rugăm să specifici numele filtrului"
145
 
146
@@ -469,7 +471,7 @@
147
 Basic.Main.Connecting="Se conectează..."
148
 Basic.Main.StartRecording="Pornește înregistrarea"
149
 Basic.Main.StartReplayBuffer="Pornește bufferul de reluări"
150
-Basic.Main.SaveReplay="Salvează rejucare"
151
+Basic.Main.SaveReplay="Salvează reluarea"
152
 Basic.Main.StartStreaming="Pornește transmisiunea"
153
 Basic.Main.StartVirtualCam="Pornește camera virtuală"
154
 Basic.Main.StopRecording="Oprește înregistrarea"
155
@@ -627,32 +629,38 @@
156
 Basic.Settings.Stream.Custom.Password="Parolă"
157
 Basic.Settings.Stream.BandwidthTestMode="Activează modul de testare a lățimii de bandă"
158
 Basic.Settings.Stream.TTVAddon="Suplimente pentru chatul Twitch"
159
-Basic.Settings.Stream.TTVAddon.None="Niciuna"
160
+Basic.Settings.Stream.TTVAddon.None="Niciunul"
161
 Basic.Settings.Stream.TTVAddon.Both="BetterTTV și FrankerFaceZ"
162
 Basic.Settings.Stream.MissingSettingAlert="Lipsește configurarea pentru transmisiune"
163
 Basic.Settings.Stream.StreamSettingsWarning="Deschide Setările"
164
-Basic.Settings.Stream.MissingUrlAndApiKey="Cheia URL și Stream lipsesc.\n\nDeschideți setările pentru a introduce cheia URL și Stream în fila 'stream'."
165
-Basic.Settings.Stream.MissingUrl="URL-ul de stream lipsește.\n\nDeschideți setările pentru a introduce URL-ul în tab-ul 'Stream'."
166
-Basic.Settings.Stream.MissingStreamKey="Cheia de stream lipsește.\n\nDeschideți setările pentru a introduce cheia de transmisiune în fila 'Stream'."
167
+Basic.Settings.Stream.MissingUrlAndApiKey="URL-ul și cheia de transmisiune lipsesc.\n\nDeschide setările pentru a introduce URL-ul și cheia de transmisiune în fila Transmisiune."
168
+Basic.Settings.Stream.MissingUrl="URL-ul de transmisiune lipsește.\n\nDeschide setările pentru a introduce URL-ul în fila Transmisiune."
169
+Basic.Settings.Stream.MissingStreamKey="Cheia de transmisiune lipsește.\n\nDeschide setările pentru a introduce cheia de transmisiune în fila Transmisiune."
170
+Basic.Settings.Stream.IgnoreRecommended="Ignoră recomandările pentru setările serviciilor de transmisiune"
171
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Suprascrie setările recomandate"
172
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Avertisment: Ignorarea limitărilor serviciului poate duce la o calitate degradată a transmisiunii sau te poate împiedica să faci transmisiuni.\n\nContinui?"
173
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Rată de biți video maximă: %1 kbps"
174
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Rată de biți audio maximă: %1 kbps"
175
+Basic.Settings.Stream.Recommended.MaxResolution="Rezoluție maximă: %1"
176
+Basic.Settings.Stream.Recommended.MaxFPS="FPS maxim: %1"
177
 
178
 Basic.Settings.Output="Output"
179
 Basic.Settings.Output.Format="Format de înregistrare"
180
 Basic.Settings.Output.Encoder="Codificator"
181
 Basic.Settings.Output.SelectDirectory="Selectează directorul de înregistrări"
182
 Basic.Settings.Output.SelectFile="Selectează fișierul înregistrării"
183
-Basic.Settings.Output.EnforceBitrate="Impune limitele ratei de biți pentru serviciul de transmisiune"
184
 Basic.Settings.Output.DynamicBitrate="Schimbă dinamic rata de biți pentru a gestiona congestionarea"
185
 Basic.Settings.Output.DynamicBitrate.Beta="Schimbă dinamic rata de biți pentru a gestiona congestionarea (Beta)"
186
-Basic.Settings.Output.DynamicBitrate.TT="În locul pierderii de cadre pentru a reduce congestionarea, schimbă dinamic rata de biți din mers.\n\nReține că acest lucru poate crește întârzierea față de vizualizatori dacă există o congestionare bruscă semnificativă.\nCând rata de biți scade, poate dura până la câteva minute pentru a reveni la normal.\n\nÎn prezent opțiunea este suportată doar pentru RTMP."
187
+Basic.Settings.Output.DynamicBitrate.TT="În locul pierderii de cadre pentru a reduce congestionarea, schimbă dinamic rata de biți din mers.\n\nReține că acest lucru poate crește întârzierea față de vizualizatori dacă există o congestionare bruscă\nsemnificativă. Când rata de biți scade, poate dura până la câteva minute pentru a reveni la normal.\n\nÎn prezent opțiunea este suportată doar pentru RTMP."
188
 Basic.Settings.Output.Mode="Mod de output"
189
 Basic.Settings.Output.Mode.Simple="Simplu"
190
 Basic.Settings.Output.Mode.Adv="Avansat"
191
 Basic.Settings.Output.Mode.FFmpeg="Output FFmpeg"
192
 Basic.Settings.Output.UseReplayBuffer="Activează bufferul de reluări"
193
-Basic.Settings.Output.ReplayBuffer.SecondsMax="Timpul maxim de reluare"
194
+Basic.Settings.Output.ReplayBuffer.SecondsMax="Timp maxim pentru reluare"
195
 Basic.Settings.Output.ReplayBuffer.MegabytesMax="Memorie maximă (megabyți)"
196
 Basic.Settings.Output.ReplayBuffer.Estimate="Utilizare estimată a memoriei: %1 MB"
197
-Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Nu se poate estima utilizarea memoriei. Vă rugăm să setați limita maximă de memorie."
198
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Nu se poate estima utilizarea memoriei. Te rugăm să setezi limita maximă de memorie."
199
 Basic.Settings.Output.ReplayBuffer.Prefix="Prefixul numelor fișierelor pentru bufferul de reluări"
200
 Basic.Settings.Output.ReplayBuffer.Suffix="Sufix"
201
 Basic.Settings.Output.Simple.SavePath="Cale de înregistrare"
202
@@ -661,8 +669,8 @@
203
 Basic.Settings.Output.Simple.RecordingQuality.Small="Calitate înaltă, dimensiune medie pentru fișiere"
204
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Calitate imposibil de distins, dimensiune mare pentru fișiere"
205
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Calitate fără pierderi, dimensiune extrem de mare pentru fișiere"
206
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Avertisment: Rata de biți a transmisiei video va fi setată la %1, care este limita superioară pentru serviciul de transmisiune actual. Dacă ești sigur că vrei să depășești %1, activează opțiunile avansate ale codificatorului și debifează „Impune limitele ratei de biți pentru serviciul de transmisiune”."
207
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Avertisment: Rata de biți a transmisiei audio va fi setată la %1, care este limita superioară pentru serviciul de transmisiune actual. Dacă ești sigur că vrei să depășești %1, activează opțiunile avansate ale codificatorului și debifează „Impune limitele ratei de biți pentru serviciul de transmisiune”."
208
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Avertisment: Rata de biți pentru transmisiunea video va fi setată la %1, care este limita superioară pentru serviciul actual de transmisiune."
209
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Avertisment: Rata de biți pentru transmisiunea audio va fi setată la %1, care este limita superioară pentru serviciul actual de transmisiune."
210
 Basic.Settings.Output.Simple.Warn.CannotPause="Avertisment: Înregistrările nu pot fi puse pe pauză dacă calitatea înregistrării este setată pe „La fel cu cea a transmisiunii”."
211
 Basic.Settings.Output.Simple.Warn.Encoder="Avertisment: Înregistrarea cu un codificator software la o calitate diferită de cea a transmisiunii va necesita o utilizare CPU crescută dacă transmiți şi înregistrezi în același timp."
212
 Basic.Settings.Output.Simple.Warn.Lossless="Avertisment: Calitatea fără pierderi generează dimensiuni extrem de mari de fișiere! Calitatea fără pierderi poate folosi până la 7GB spațiu de disc per minut la frecvențe de cadre și rezoluții ridicate. Această calitate nu este recomandată pentru înregistrări lungi decât dacă ai o cantitate foarte mare de spațiu disponibil pe disc."
213
@@ -673,6 +681,11 @@
214
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardware (AMD)"
215
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardware (NVENC)"
216
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Software (presetare x264 cu utilizare CPU scăzută, crește dimensiunea pentru fișiere)"
217
+Basic.Settings.Output.Simple.TwitchVodTrack="Pistă VOD Twitch (folosește pista 2)"
218
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Rezoluție/Frecvența cadrelor incompatibilă"
219
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Acest serviciu de transmisiune nu suportă rezoluția actuală a outputului și/sau frecvența cadrelor. Acestea vor fi schimbate la cea mai apropiată valoare compatibilă:\n\n%1\n\nVrei să continui?"
220
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Rezoluție: %1"
221
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS: %1"
222
 Basic.Settings.Output.VideoBitrate="Rată de biți video"
223
 Basic.Settings.Output.AudioBitrate="Rată de biți audio"
224
 Basic.Settings.Output.Reconnect="Reconectare automată"
225
@@ -687,13 +700,13 @@
226
 Basic.Settings.Output.Adv.Rescale="Rescalează outputul"
227
 Basic.Settings.Output.Adv.AudioTrack="Pistă audio"
228
 Basic.Settings.Output.Adv.Streaming="Transmisiune"
229
-Basic.Settings.Output.Adv.ApplyServiceSettings="Impune setările codificatorului pentru serviciul de transmisiune"
230
 Basic.Settings.Output.Adv.Audio.Track1="Pistă 1"
231
 Basic.Settings.Output.Adv.Audio.Track2="Pistă 2"
232
 Basic.Settings.Output.Adv.Audio.Track3="Pistă 3"
233
 Basic.Settings.Output.Adv.Audio.Track4="Pistă 4"
234
 Basic.Settings.Output.Adv.Audio.Track5="Pistă 5"
235
 Basic.Settings.Output.Adv.Audio.Track6="Pistă 6"
236
+Basic.Settings.Output.Adv.TwitchVodTrack="Pistă VOD Twitch"
237
 
238
 Basic.Settings.Output.Adv.Recording="Înregistrare"
239
 Basic.Settings.Output.Adv.Recording.Type="Tip"
240
@@ -738,7 +751,7 @@
241
 Basic.Settings.Video.Adapter="Adaptor video"
242
 Basic.Settings.Video.BaseResolution="Rezoluție de bază (a planșei)"
243
 Basic.Settings.Video.ScaledResolution="Rezoluție a outputului (scalată)"
244
-Basic.Settings.Video.DownscaleFilter="Filtru pentru subscalare"
245
+Basic.Settings.Video.DownscaleFilter="Filtru pentru sub-scalare"
246
 Basic.Settings.Video.DisableAeroWindows="Dezactivează Aero (numai Windows)"
247
 Basic.Settings.Video.FPS="FPS"
248
 Basic.Settings.Video.FPSCommon="Valori FPS comune"
249
@@ -768,7 +781,7 @@
250
 Basic.Settings.Audio.PeakMeterType.SamplePeak="Vârf eșantion"
251
 Basic.Settings.Audio.PeakMeterType.TruePeak="Vârf adevărat (Utilizare CPU mai mare)"
252
 Basic.Settings.Audio.MultiChannelWarning.Enabled="AVERTISMENT: Sunetul audio cu sunet surround este activat."
253
-Basic.Settings.Audio.MultichannelWarning="Dacă faceți streaming, verificați dacă serviciul dvs. de streaming suportă redarea de sunet intermitentă cât și redarea de sunet intermitentă. Facebook 360 Live, Mixer RTMP, Smashcast sunt exemple în care sunetul surround este pe deplin suportat. Deşi Facebook Live şi YouTube Live acceptă ambele în surround ingest, Facebook Live downmixes la stereo, iar YouTube Live joacă doar două canale.\n\nFiltrele audio OBS sunt compatibile cu sunetul surround deși suportul pentru plugin-uri VST nu este garantat."
254
+Basic.Settings.Audio.MultichannelWarning="Dacă faci transmisiune, verifică dacă serviciul de transmisiune suportă atât ingestia sunetului surround, cât și redarea sunetului surround. Facebook 360 Live este un exemplu în care sunetul surround este suportat pe deplin. Deși Facebook Live și YouTube Live acceptă ambele ingestia surround, Facebook Live sub-mixează în stereo, iar YouTube Live redă doar două canale.\n\nFiltrele audio OBS sunt compatibile cu sunetul surround, deși suportul pentru pluginurile VST nu este garantat."
255
 Basic.Settings.Audio.MultichannelWarning.Title="Activezi sistemul audio cu sunet surround?"
256
 Basic.Settings.Audio.MultichannelWarning.Confirm="Sigur vrei să activezi sistemul audio cu sunet surround?"
257
 Basic.Settings.Audio.Devices="Dispozitive audio globale"
258
@@ -810,10 +823,10 @@
259
 Basic.Settings.Advanced.Network.BindToIP="Leagă de IP"
260
 Basic.Settings.Advanced.Network.EnableNewSocketLoop="Activează optimizările pentru rețea"
261
 Basic.Settings.Advanced.Network.EnableLowLatencyMode="Activează TCP pacing"
262
-Basic.Settings.Advanced.Network.TCPPacing.Tooltip="Încercările de a face RTMP mai prietenos cu alte aplicații sensibile la latență din rețea, prin reglementarea ratei de transmisie.\nAcest lucru poate crește riscul de cadre abandonate la conexiunile instabile."
263
+Basic.Settings.Advanced.Network.TCPPacing.Tooltip="Încearcă să facă RTMP mai prietenos cu alte aplicații, sensibile la latență, din rețea prin regularea ratei de transmisie.\nEste posibil să crească riscul de cadre pierdute pe conexiunile instabile."
264
 Basic.Settings.Advanced.Hotkeys.HotkeyFocusBehavior="Comportamentul focalizării pentru tastele rapide"
265
 Basic.Settings.Advanced.Hotkeys.NeverDisableHotkeys="Nu dezactiva niciodată tastele rapide"
266
-Basic.Settings.Advanced.Hotkeys.DisableHotkeysInFocus="Dezactivează tastele rapide când fereastra principală este în prim-plan"
267
+Basic.Settings.Advanced.Hotkeys.DisableHotkeysInFocus="Dezactivează tastele rapide când fereastra principală este focalizată"
268
 Basic.Settings.Advanced.Hotkeys.DisableHotkeysOutOfFocus="Dezactivează tastele rapide când fereastra principală nu este focalizată"
269
 Basic.Settings.Advanced.AutoRemux="Remuxează automat în mp4"
270
 Basic.Settings.Advanced.AutoRemux.MP4="(înregistrează ca mkv)"
271
@@ -884,11 +897,11 @@
272
 Push-to-mute="Push-to-mute"
273
 Push-to-talk="Push-to-talk"
274
 
275
-SceneItemShow="Afișează '%1'"
276
-SceneItemHide="Ascunde '%1'"
277
+SceneItemShow="Afișează „%1”"
278
+SceneItemHide="Ascunde „%1”"
279
 
280
 OutputWarnings.NoTracksSelected="Trebuie să selectezi cel puțin o pistă"
281
-OutputWarnings.MP4Recording="Avertisment: Înregistrările salvate în MP4/MOV nu vor putea fi recuperate dacă fişierul nu poate fi finalizat (de ex. ca rezultat al BSOD-urilor, pierderilor de energie etc.). Dacă doriţi să înregistraţi mai multe piese audio, luaţi în considerare utilizarea MKV şi remuxaţi înregistrarea în MP4/MOV după terminarea (Înregistrări File → Remux)"
282
+OutputWarnings.MP4Recording="Avertisment: Înregistrările salvate în MP4/MOV nu vor putea fi recuperate dacă fişierul nu poate fi finalizat (de ex. ca urmare a BSOD-urilor, întreruperilor de alimentare etc.). Dacă vrei să înregistrezi mai multe piste audio, ia în considerare folosirea MKV şi remuxează înregistrarea în MP4/MOV după terminare (Fișier → Remuxează înregistrări)"
283
 OutputWarnings.CannotPause="Avertisment: Înregistrările nu pot fi puse pe pauză dacă codificatorul de înregistrare este setat pe „(Folosește codificatorul de transmisiune)”"
284
 
285
 FinalScene.Title="Șterge scena"
286
@@ -896,7 +909,7 @@
287
 
288
 NoSources.Title="Nicio sursă"
289
 NoSources.Text="Se pare că nu ai adăugat încă nicio sursă video, așa că se va afișa doar un ecran negru. Sigur vrei să faci asta?"
290
-NoSources.Text.AddSource="Puteți adăuga surse făcând clic pe pictograma + din caseta Surse în fereastra principală în orice moment."
291
+NoSources.Text.AddSource="Poți adăuga surse dând clic pe pictograma + din caseta Surse în fereastra principală, în orice moment."
292
 NoSources.Label="Nu ai nicio sursă. Dă clic pe\nbutonul + de mai jos sau\nclic dreapta aici pentru a adăuga una."
293
 
294
 ChangeBG="Setează culoarea"
295
obs-studio-26.0.2.tar.xz/UI/data/locale/ru-RU.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/ru-RU.ini Changed
129
 
1
@@ -93,6 +93,7 @@
2
 LogViewer="Просмотр журнала"
3
 ShowOnStartup="Показывать при запуске"
4
 OpenFile="Открыть файл"
5
+AddValue="Добавить: %1"
6
 
7
 AlreadyRunning.Title="OBS уже запущен"
8
 AlreadyRunning.Text="OBS уже запущен! Пожалуйста, закройте все запущенные экземпляры OBS перед попыткой запустить новые (только если вы не хотели именно этого). Если вы настроили OBS на сворачивание в системный трей, пожалуйста, проверьте, возможно он до сих пор запущен."
9
@@ -160,6 +161,7 @@
10
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Выход из аккаунта"
11
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Это изменение вступит в силу немедленно. Вы уверены, что хотите выйти?"
12
 Basic.AutoConfig.StreamPage.GetStreamKey="Получить ключ потока"
13
+Basic.AutoConfig.StreamPage.MoreInfo="Подробная информация"
14
 Basic.AutoConfig.StreamPage.UseStreamKey="Использовать ключ потока"
15
 Basic.AutoConfig.StreamPage.Service="Сервис"
16
 Basic.AutoConfig.StreamPage.Service.ShowAll="Показать все..."
17
@@ -364,8 +366,8 @@
18
 Deinterlacing.TopFieldFirst="Верхнее поле первое"
19
 Deinterlacing.BottomFieldFirst="Нижнее поле первое"
20
 
21
-VolControl.SliderUnmuted="Регулятор громкости '%1': %2"
22
-VolControl.SliderMuted="Регулятор громкости '%1': %2 (сейчас заглушен)"
23
+VolControl.SliderUnmuted="Регулятор громкости '%1':"
24
+VolControl.SliderMuted="Регулятор громкости '%1': (сейчас заглушен)"
25
 VolControl.Mute="Заглушить '%1'"
26
 VolControl.Properties="Свойства '%1'"
27
 
28
@@ -381,6 +383,7 @@
29
 
30
 AddProfile.Title="Добавить профиль"
31
 AddProfile.Text="Пожалуйста, введите имя профиля"
32
+AddProfile.WizardCheckbox="Показать мастера автонастройки"
33
 
34
 RenameProfile.Title="Переименовать профиль"
35
 
36
@@ -395,6 +398,11 @@
37
 Basic.SourceSelect.AddExisting="Добавить существующий"
38
 Basic.SourceSelect.AddVisible="Сделать источник видимым"
39
 
40
+Basic.Main.Sources.Visibility="Видимость"
41
+Basic.Main.Sources.VisibilityDescription="Управление видимостью '%1' на холсте"
42
+Basic.Main.Sources.Lock="Заблокировать"
43
+Basic.Main.Sources.LockDescription="Блокирует позицию и масштаб '%1' на холсте"
44
+
45
 Basic.PropertiesWindow="Свойства '%1'"
46
 Basic.PropertiesWindow.AutoSelectFormat="%1 (автовыбор: %2)"
47
 Basic.PropertiesWindow.SelectColor="Выбрать цвет"
48
@@ -634,13 +642,19 @@
49
 Basic.Settings.Stream.MissingUrlAndApiKey="URL и ключ потока отсутствуют.\n\nОткройте настройки, чтобы ввести URL-адрес и ключ потока на вкладке «Вещание»."
50
 Basic.Settings.Stream.MissingUrl="Отсутствует URL потока.\n\nОткройте настройки, чтобы ввести URL на вкладке «Вещание»."
51
 Basic.Settings.Stream.MissingStreamKey="Ключ потока отсутствует.\n\nОткройте настройки, чтобы ввести ключ потока на вкладке «Вещание»."
52
+Basic.Settings.Stream.IgnoreRecommended="Игнорировать рекомендации по настройкам потокового сервиса"
53
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Переопределить рекомендуемые настройки"
54
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Предупреждение. Игнорирование ограничений службы может привести к ухудшению качества потока или помешать вам начать потоковую передачу.\n\nПродолжать?"
55
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Максимальный битрейт видео: %1 kbps"
56
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Максимальный битрейт аудио: %1 kbps"
57
+Basic.Settings.Stream.Recommended.MaxResolution="Максимальное разрешение: %1"
58
+Basic.Settings.Stream.Recommended.MaxFPS="Максимальный FPS: %1"
59
 
60
 Basic.Settings.Output="Вывод"
61
 Basic.Settings.Output.Format="Формат записи"
62
 Basic.Settings.Output.Encoder="Кодировщик"
63
 Basic.Settings.Output.SelectDirectory="Выбрать каталог записи"
64
 Basic.Settings.Output.SelectFile="Выбрать файл записи"
65
-Basic.Settings.Output.EnforceBitrate="Следовать ограничениям битрейта сервиса вещания"
66
 Basic.Settings.Output.DynamicBitrate="Динамически изменять битрейт для управления перегрузкой сети"
67
 Basic.Settings.Output.DynamicBitrate.Beta="Динамически изменять битрейт для управления перегрузкой сети (бета)"
68
 Basic.Settings.Output.DynamicBitrate.TT="Вместо пропуска кадров, будет задействовано динамическое изменение битрейта на лету, чтобы уменьшить перегрузку сети.\n\nОбратите внимание, что это может увеличить задержку для зрителей, в случае внезапного забивания канала.\nПосле уменьшения битрейта может потребоваться несколько минут для его восстановления.\n\nВ настоящее время поддерживается только для RTMP."
69
@@ -661,8 +675,8 @@
70
 Basic.Settings.Output.Simple.RecordingQuality.Small="Высокое качество, средний размер файла"
71
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Неотличимое качество, большой размер файла"
72
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Без потери качества, чрезвычайно большой размер файла"
73
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Предупреждение: битрейт видео при вещании будет установлен на %1, что является максимумом для текущей потоковой службы. Если вы уверены, что хотите получить битрейт больше %1, включите дополнительные настройки кодировщика и снимите флажок с \"Принудительно использовать ограничения битрейта потоковой службы\"."
74
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Предупреждение: битрейт аудио при вещании будет установлен на %1, что является максимумом для текущей потоковой службы. Если вы уверены, что хотите получить битрейт больше %1, включите дополнительные настройки кодировщика и снимите флажок с \"Следовать ограничениям битрейта, накладываемые потоковой службой\"."
75
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Предупреждение: битрейт потокового видео будет установлен на %1, что является верхним пределом для текущей потоковой службы."
76
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Предупреждение: битрейт потокового аудио будет установлен на %1, что является верхним пределом для текущей потоковой службы."
77
 Basic.Settings.Output.Simple.Warn.CannotPause="Предупреждение: Записи не могут быть приостановлены, если кодировщик записи установлен на \"(Использовать кодировщик потока)\"."
78
 Basic.Settings.Output.Simple.Warn.Encoder="Предупреждение: Запись с программным кодировщиком в качестве, отличным от качества трансляции, потребует дополнительной нагрузки на ЦП, если записывать и транслировать одновременно."
79
 Basic.Settings.Output.Simple.Warn.Lossless="Предупреждение: Качество без потерь создаёт чрезвычайно большие файлы! Такое качество может использовать свыше 7 гигабайт дискового пространства в минуту при высоком разрешении и частоте кадров. Оно не рекомендуется для долгой записи, если у Вас нет очень много места на диске."
80
@@ -673,6 +687,11 @@
81
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Аппаратный (AМD)"
82
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Аппаратный (NVENC)"
83
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Программный (x264 с низкой нагрузкой на ЦП, увеличивает размер файла)"
84
+Basic.Settings.Output.Simple.TwitchVodTrack="Twitch VOD Трек (использует трек 2)"
85
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Несовместимое Разрешение/Частота кадров"
86
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Эта потоковая служба не поддерживает ваше текущее выходное разрешение и / или частоту кадров. Они будут изменены на наиболее близкое совместимое значение:\n\n%1\n\nВы хотите продолжить?"
87
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Разрешение: %1"
88
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS: %1"
89
 Basic.Settings.Output.VideoBitrate="Битрейт видео"
90
 Basic.Settings.Output.AudioBitrate="Битрейт аудио"
91
 Basic.Settings.Output.Reconnect="Автоматическое переподключение"
92
@@ -687,15 +706,16 @@
93
 Basic.Settings.Output.Adv.Rescale="Перемасштабировать вывод"
94
 Basic.Settings.Output.Adv.AudioTrack="Звуковая дорожка"
95
 Basic.Settings.Output.Adv.Streaming="Потоковое вещание"
96
-Basic.Settings.Output.Adv.ApplyServiceSettings="Принудительно использовать настройки кодировщика потоковой службы"
97
 Basic.Settings.Output.Adv.Audio.Track1="Дорожка 1"
98
 Basic.Settings.Output.Adv.Audio.Track2="Дорожка 2"
99
 Basic.Settings.Output.Adv.Audio.Track3="Дорожка 3"
100
 Basic.Settings.Output.Adv.Audio.Track4="Дорожка 4"
101
 Basic.Settings.Output.Adv.Audio.Track5="Дорожка 5"
102
 Basic.Settings.Output.Adv.Audio.Track6="Дорожка 6"
103
+Basic.Settings.Output.Adv.TwitchVodTrack="Twitch VOD Track"
104
 
105
 Basic.Settings.Output.Adv.Recording="Запись"
106
+Basic.Settings.Output.Adv.Recording.RecType="Тип записи"
107
 Basic.Settings.Output.Adv.Recording.Type="Тип"
108
 Basic.Settings.Output.Adv.Recording.Type.Standard="Обычный"
109
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Пользовательский вывод (FFmpeg)"
110
@@ -823,13 +843,18 @@
111
 Basic.AdvAudio.ActiveOnly="Только активные источники"
112
 Basic.AdvAudio.Name="Название"
113
 Basic.AdvAudio.Volume="Громкость"
114
+Basic.AdvAudio.VolumeSource="Звук для '%1'"
115
 Basic.AdvAudio.Mono="Моно"
116
+Basic.AdvAudio.MonoSource="Моно Downmix для '%1'"
117
 Basic.AdvAudio.Balance="Баланс"
118
+Basic.AdvAudio.BalanceSource="Баланс для '%1'"
119
 Basic.AdvAudio.SyncOffset="Смещение синхронизации"
120
+Basic.AdvAudio.SyncOffsetSource="Синхронизировать смещение для '%1'"
121
 Basic.AdvAudio.Monitoring="Прослушивание аудио"
122
 Basic.AdvAudio.Monitoring.None="Выключить прослушивание"
123
 Basic.AdvAudio.Monitoring.MonitorOnly="Только прослушивание (заглушить вывод)"
124
 Basic.AdvAudio.Monitoring.Both="Прослушивание и вывод"
125
+Basic.AdvAudio.MonitoringSource="Аудиомониторинг для '%1'"
126
 Basic.AdvAudio.AudioTracks="Дорожки"
127
 
128
 Basic.Settings.Hotkeys="Горячие клавиши"
129
obs-studio-26.0.2.tar.xz/UI/data/locale/si-LK.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/si-LK.ini Changed
6
 
1
@@ -118,3 +118,4 @@
2
 
3
 
4
 
5
+
6
obs-studio-26.0.2.tar.xz/UI/data/locale/sk-SK.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/sk-SK.ini Changed
146
 
1
@@ -1,5 +1,5 @@
2
 
3
-Language="Slovenčina"
4
+Language="slovenčina"
5
 
6
 OK="OK"
7
 Apply="Použiť"
8
@@ -161,6 +161,7 @@
9
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Odpojiť účet?"
10
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Táto zmena sa uplatní okamžite. Naozaj chcete odpojiť svoj účet?"
11
 Basic.AutoConfig.StreamPage.GetStreamKey="Dostať Streamovací Kľúč"
12
+Basic.AutoConfig.StreamPage.MoreInfo="Viac informácií"
13
 Basic.AutoConfig.StreamPage.UseStreamKey="Použiť kľúč vysielania"
14
 Basic.AutoConfig.StreamPage.Service="Služba"
15
 Basic.AutoConfig.StreamPage.Service.ShowAll="Zobraziť všetky..."
16
@@ -365,8 +366,8 @@
17
 Deinterlacing.TopFieldFirst="Najprv vrchný riadok"
18
 Deinterlacing.BottomFieldFirst="Najprv spodný riadok"
19
 
20
-VolControl.SliderUnmuted="Posuvník hlasitosti pre '%1': %2"
21
-VolControl.SliderMuted="Ovládanie hlasitosti pre '%1': %2 (momentálne umlčané)"
22
+VolControl.SliderUnmuted="Posuvník hlasitosti pre '%1':"
23
+VolControl.SliderMuted="Ovládanie hlasitosti pre '%1': (momentálne umlčané)"
24
 VolControl.Mute="Umlčať '%1'"
25
 VolControl.Properties="Vlastnosti pre '%1'"
26
 
27
@@ -382,6 +383,7 @@
28
 
29
 AddProfile.Title="Pridanie profilu"
30
 AddProfile.Text="Prosím, zadajte názov profilu"
31
+AddProfile.WizardCheckbox="Ukázať sprievodcu automatickou konfiguráciou"
32
 
33
 RenameProfile.Title="Premenovať profil"
34
 
35
@@ -396,6 +398,11 @@
36
 Basic.SourceSelect.AddExisting="Pridať existujúci"
37
 Basic.SourceSelect.AddVisible="Zviditeľniť zdroj"
38
 
39
+Basic.Main.Sources.Visibility="Viditeľnosť"
40
+Basic.Main.Sources.VisibilityDescription="Ovláda viditeľnosť '%1' na plátne"
41
+Basic.Main.Sources.Lock="Zámok"
42
+Basic.Main.Sources.LockDescription="Uzamkne pozíciu a škálu '%1' na plátne"
43
+
44
 Basic.PropertiesWindow="Vlastnosti pre '%1'"
45
 Basic.PropertiesWindow.AutoSelectFormat="%1 (Automatický výber: %2)"
46
 Basic.PropertiesWindow.SelectColor="Vybrať farbu"
47
@@ -472,7 +479,7 @@
48
 Basic.Main.StartReplayBuffer="Spustiť záznam do pamäte"
49
 Basic.Main.SaveReplay="Uložiť záznam"
50
 Basic.Main.StartStreaming="Spustiť stream"
51
-Basic.Main.StartVirtualCam="Spustite virtuálnu kameru"
52
+Basic.Main.StartVirtualCam="Spustiť virtuálnu kameru"
53
 Basic.Main.StopRecording="Ukončiť nahrávanie"
54
 Basic.Main.PauseRecording="Pozastaviť nahrávanie"
55
 Basic.Main.UnpauseRecording="Pokračovať v nahrávaní"
56
@@ -484,7 +491,7 @@
57
 Basic.Main.ForceStopStreaming="Zastaviť vysielanie (bez oneskorenia)"
58
 Basic.Main.ShowContextBar="Zobraziť panel nástrojov zdroja"
59
 Basic.Main.HideContextBar="Skryť panel nástrojov zdroja"
60
-Basic.Main.StopVirtualCam="Vypnite virtuálnu kameru"
61
+Basic.Main.StopVirtualCam="Vypnúť virtuálnu kameru"
62
 Basic.Main.Group="Skupina %1"
63
 Basic.Main.GroupItems="Zoskupiť vybrané položky"
64
 Basic.Main.Ungroup="Rozdeliť skupinu"
65
@@ -635,13 +642,19 @@
66
 Basic.Settings.Stream.MissingUrlAndApiKey="Chýba vysielací kľúč a adresa.\n\nOtvorte nastavenia pre zadanie vysielacieho kľúča a adresy v záložke 'Vysielanie'."
67
 Basic.Settings.Stream.MissingUrl="Chýba vysielacia adresa.\n\nOtvorte nastavenia pre zadanie vysielacej adresy v záložke 'Vysielanie'."
68
 Basic.Settings.Stream.MissingStreamKey="Chýba vysielací kľúč.\n\nOtvorte nastavenia pre zadanie vysielacieho kľúča v záložke 'Vysielanie'."
69
+Basic.Settings.Stream.IgnoreRecommended="Ignorovať odporučené nastavenia streamovacej služby"
70
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Prepísať Odporúčané Nastavenia"
71
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Varovanie: Ignorovanie obmedzení služby môže mať za následok zníženú kvalitu streamu alebo môže úplne zabrániť streamovaniu.\n\nPokračovať?"
72
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Maximálny Video Bitrate: %1 kbps"
73
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Maximálny Audio Bitrate: %1 kbps"
74
+Basic.Settings.Stream.Recommended.MaxResolution="Maximálne rozlíšenie: %1"
75
+Basic.Settings.Stream.Recommended.MaxFPS="Maximálne FPS: %1"
76
 
77
 Basic.Settings.Output="Výstup"
78
 Basic.Settings.Output.Format="Formát nahrávania"
79
 Basic.Settings.Output.Encoder="Enkodér"
80
 Basic.Settings.Output.SelectDirectory="Vybrať adresár pre nahrávky"
81
 Basic.Settings.Output.SelectFile="Vybrať súbor nahrávky"
82
-Basic.Settings.Output.EnforceBitrate="Vynútiť obmedzenia bitratu streamovacej služby"
83
 Basic.Settings.Output.DynamicBitrate="Dynamicky meniť bitrate v závislosti na zahltení siete"
84
 Basic.Settings.Output.DynamicBitrate.Beta="Dynamicky meniť bitrate v závislosti na zahltení siete (Beta)"
85
 Basic.Settings.Output.DynamicBitrate.TT="Dynamicky mení bitrate počas behu, namiesto odhadzovania snímkov pre redukciu zahltenia siete.\n\nToto ale môže mať za následok zvýšenie odozvy pre divákov, keď dôjde k náhlemu zahlteniu siete.\nKeď sa bitrate zníži, môže pár minúť trvať než sa obnoví na pôvodnú hodnotu.\n\nMomentálne podporované iba pre RTMP."
86
@@ -662,8 +675,8 @@
87
 Basic.Settings.Output.Simple.RecordingQuality.Small="Vysoká kvalita, stredná veľkosť súboru"
88
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Nerozoznateľná kvalita, veľká veľkosť súboru"
89
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Bezstratová kvalita, ohromne veľké súbory"
90
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Upozornenie: Bitrate vysielaného obrazu bude nastavený na %1, čo je horná hranica pre súčasnú vysielaciu službu. Ak ste si istý, že chcete vysielať nad %1, v rozšírených nastaveniach enkodéra zakážte \"Vynútiť obmedzenia bitratu streamovacej služby\"."
91
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Upozornenie: Bitrate vysielaného zvuku bude nastavený na %1, čo je horná hranica pre súčasnú vysielaciu službu. Ak ste si istý, že chcete vysielať nad %1, v rozšírených nastaveniach enkodéra zakážte \"Vynútiť obmedzenia bitratu streamovacej služby\"."
92
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Varovanie: Streamovací video bitrate bude nastavený na %1, čo je horný limit pre momentálnu streamovaciu službu."
93
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Varovanie: Streamovací audio bitrate bude nastavený na %1, čo je horný limit pre momentálnu streamovaciu službu."
94
 Basic.Settings.Output.Simple.Warn.CannotPause="Upozornenie: Nahrávanie nemôže byť pozastavené, ak je kvalita nahrávania nastavená na \"Rovnaké ako pre vysielanie\"."
95
 Basic.Settings.Output.Simple.Warn.Encoder="Upozornenie: Nahrávanie softvérovým kodérom s rozdielnou kvalitou než vysielanie spôsobí zvýšenú záťaž CPU pri nahrávaní a vysielaní zároveň."
96
 Basic.Settings.Output.Simple.Warn.Lossless="Varovanie: Bezstratová kvalita generuje ohromne veľké súbory! Bezstratová kvalita môže použiť až 7 gigabajtov za minútu na disku pri vysokých rozlíšeniach a snímkoch za sekundu. Bezstratová kvalita nie je odporúčaná pre dlhé nahrávky pokiaľ nemáte veľmi veľa priestoru na disku."
97
@@ -674,6 +687,11 @@
98
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardvérový (AMD)"
99
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardvérový (NVENC)"
100
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Softvérový (x264, nízke zaťaženie CPU, zvyšuje veľkosť súboru)"
101
+Basic.Settings.Output.Simple.TwitchVodTrack="Twitch VOD záznam (používa stopu 2)"
102
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Nekompatibilné rozlíšenie/snímková frekvencia"
103
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Táto streamovacia služba nepodporuje vaše momentálne výstupne rozlíšenie a/alebo snímkovú frekvenciu. Budú zmenené na najbližšiu kompatibilnú hodnotu:\n\n%1\n\nChcete pokračovať?"
104
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Rozlíšenie: %1"
105
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS: %1"
106
 Basic.Settings.Output.VideoBitrate="Bitrate videa"
107
 Basic.Settings.Output.AudioBitrate="Bitrate zvuku"
108
 Basic.Settings.Output.Reconnect="Automatické znovupripojenie"
109
@@ -688,15 +706,16 @@
110
 Basic.Settings.Output.Adv.Rescale="Škálovať výstup"
111
 Basic.Settings.Output.Adv.AudioTrack="Zvuková stopa"
112
 Basic.Settings.Output.Adv.Streaming="Vysielanie"
113
-Basic.Settings.Output.Adv.ApplyServiceSettings="Vynútiť nastavenia kodéra vysielacou službou"
114
 Basic.Settings.Output.Adv.Audio.Track1="Stopa 1"
115
 Basic.Settings.Output.Adv.Audio.Track2="Stopa 2"
116
 Basic.Settings.Output.Adv.Audio.Track3="Stopa 3"
117
 Basic.Settings.Output.Adv.Audio.Track4="Stopa 4"
118
 Basic.Settings.Output.Adv.Audio.Track5="Stopa 5"
119
 Basic.Settings.Output.Adv.Audio.Track6="Stopa 6"
120
+Basic.Settings.Output.Adv.TwitchVodTrack="Twitch VOD záznam"
121
 
122
 Basic.Settings.Output.Adv.Recording="Nahrávanie"
123
+Basic.Settings.Output.Adv.Recording.RecType="Typ nahrávania"
124
 Basic.Settings.Output.Adv.Recording.Type="Typ"
125
 Basic.Settings.Output.Adv.Recording.Type.Standard="Štandardný"
126
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Vlastný výstup (FFmpeg)"
127
@@ -824,13 +843,18 @@
128
 Basic.AdvAudio.ActiveOnly="Iba Aktívne Zdroje"
129
 Basic.AdvAudio.Name="Názov"
130
 Basic.AdvAudio.Volume="Hlasitosť"
131
+Basic.AdvAudio.VolumeSource="Hlasitosť pre '%1'"
132
 Basic.AdvAudio.Mono="Mono"
133
+Basic.AdvAudio.MonoSource="Mono Downmix pre '%1'"
134
 Basic.AdvAudio.Balance="Vyváženie"
135
+Basic.AdvAudio.BalanceSource="Vyváženie pre '%1'"
136
 Basic.AdvAudio.SyncOffset="Oneskorenie synchronizácie"
137
+Basic.AdvAudio.SyncOffsetSource="Odchýlka synchronizácie pre '%1'"
138
 Basic.AdvAudio.Monitoring="Monitorovanie zvuku"
139
 Basic.AdvAudio.Monitoring.None="Vypnuté monitorovanie"
140
 Basic.AdvAudio.Monitoring.MonitorOnly="Iba monitorovanie (žiaden výstup)"
141
 Basic.AdvAudio.Monitoring.Both="Monitorovanie a výstup"
142
+Basic.AdvAudio.MonitoringSource="Monitorovanie zvuku pre '%1'"
143
 Basic.AdvAudio.AudioTracks="Stopy"
144
 
145
 Basic.Settings.Hotkeys="Klávesové skratky"
146
obs-studio-26.0.2.tar.xz/UI/data/locale/sl-SI.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/sl-SI.ini Changed
261
 
1
@@ -26,7 +26,7 @@
2
 Browse="Brskaj"
3
 Mono="Mono"
4
 Stereo="Stereo"
5
-DroppedFrames="Izpuščene sličice %1 (%2 %)"
6
+DroppedFrames="Spuščeni okvirji %1 (%2 %)"
7
 StudioProgramProjector="Celozaslonski projektor (program)"
8
 PreviewProjector="Celozaslonski projektor (predogled)"
9
 SceneProjector="Celozaslonski projektor (prizor)"
10
@@ -58,9 +58,9 @@
11
 Top="Zgoraj"
12
 Bottom="Spodaj"
13
 Reset="Ponastavi"
14
-Hours="urah"
15
-Minutes="minutah"
16
-Seconds="sekundah"
17
+Hours="ur"
18
+Minutes="minut"
19
+Seconds="sekund"
20
 Deprecated="Opuščeno"
21
 ReplayBuffer="Medpomn. za pon. predv."
22
 Import="Uvozi"
23
@@ -87,13 +87,20 @@
24
 Fullscreen="Celozaslonsko"
25
 Windowed="Okensko"
26
 Percent="Odstotkov"
27
+RefreshBrowser="Osveži"
28
 AspectRatio="Razmerje slike <b>%1%2</b>"
29
 LockVolume="Zakleni glasnost"
30
+LogViewer="Pregledovalnik dnevnika"
31
+ShowOnStartup="Pokaži ob zagonu"
32
+OpenFile="Odpri datoteko"
33
+AddValue="Dodaj %1"
34
 
35
 AlreadyRunning.Title="OBS se že izvaja"
36
-AlreadyRunning.Text="OBS se že izvaja! Razen če ste imeli namen zagnati več primerkov, pred zagonom novega primerka OBS-a zaustavite vse obstoječe. Če imate OBS nastavljen, da se skrči v sistemsko vrstico, preverite, če se tam še izvaja."
37
+AlreadyRunning.Text="OBS se že izvaja! Če tega niste že storili, zaprite vse obstoječe primerke OBS, preden poskusite zagnati nov primerek. Če imate OBS nastavljen, da se zmanjša v sistemsko vrstico, preverite, ali se tam še vedno izvaja."
38
 AlreadyRunning.LaunchAnyway="Vseeno zaženi"
39
 
40
+ChromeOS.Title="Nepodprta platforma"
41
+ChromeOS.Text="Izgleda, se OBS izvaja znotraj kontejnerja. Ta platforma ni podprta"
42
 
43
 DockCloseWarning.Title="Zapiranje sidrnega okna"
44
 DockCloseWarning.Text="Pravkar ste zaprli okno sidrišča. Če bi ga radi zopet prikazali, uporabite meni Pogled → Sidrišča."
45
@@ -130,7 +137,7 @@
46
 BandwidthTest.Region.US="Združene države Amerike"
47
 BandwidthTest.Region.EU="Evropa"
48
 BandwidthTest.Region.Asia="Azija"
49
-BandwidthTest.Region.Other="Drugo"
50
+BandwidthTest.Region.Other="Ostalo"
51
 
52
 Basic.AutoConfig="Čarovnik za samodejno nastavitev"
53
 Basic.AutoConfig.ApplySettings="Uporabi nastavitve"
54
@@ -140,6 +147,7 @@
55
 Basic.AutoConfig.StartPage.PrioritizeRecording="Optimiziraj samo za snemanje - ne bom pretakal"
56
 Basic.AutoConfig.StartPage.PrioritizeVirtualCam="Uporabljala se bo samo virtualna kamera"
57
 Basic.AutoConfig.VideoPage="Nastavitve videa"
58
+Basic.AutoConfig.VideoPage.SubTitle="Določite želene nastavitve videa, ki bi jih radi uporabili"
59
 Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Uporabi trenutno (%1x%2)"
60
 Basic.AutoConfig.VideoPage.BaseResolution.Display="Zaslon %1 (%2x%3)"
61
 Basic.AutoConfig.VideoPage.FPS.UseCurrent="Uporabi trenutno (%1)"
62
@@ -153,6 +161,7 @@
63
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Odklopim račun?"
64
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Ta sprememba bo začela veljati takoj. Ali res želite odklopiti račun?"
65
 Basic.AutoConfig.StreamPage.GetStreamKey="Dobi ključ pretoka"
66
+Basic.AutoConfig.StreamPage.MoreInfo="Več informacij"
67
 Basic.AutoConfig.StreamPage.UseStreamKey="Uporabi ključ pretoka"
68
 Basic.AutoConfig.StreamPage.Service="Storitev"
69
 Basic.AutoConfig.StreamPage.Service.ShowAll="Prikaži vse..."
70
@@ -180,7 +189,7 @@
71
 Basic.AutoConfig.TestPage.Result.StreamingEncoder="Kodirnik pretoka"
72
 Basic.AutoConfig.TestPage.Result.RecordingEncoder="Snemalni kodirnik"
73
 Basic.AutoConfig.TestPage.Result.Header="Program je ocenil, da so te nastavitve najprimernejše za vas:"
74
-Basic.AutoConfig.TestPage.Result.Footer="Za uporabo teh nastavitev kliknite 'Uporabi nastavitve'. Za ponovno nastavitev čarovnika in vnovičen poizkus kliknite 'Nazaj'. Za ročno nastavitev kliknite 'Prekliči' in odprite nastavitve."
75
+Basic.AutoConfig.TestPage.Result.Footer="Za uporabo teh nastavitev kliknite 'Uporabi nastavitve'. Za ponovno nastavitev čarovnika in vnovičen poskus kliknite 'Nazaj'. Za ročno nastavitev kliknite 'Prekliči' in odprite nastavitve."
76
 Basic.AutoConfig.Info="Namestitveni čarovnik bo določil najboljše nastavitve glede na tehnične specifikacije računalnika in na internetno povezavo."
77
 Basic.AutoConfig.RunAnytime="To lahko kadarkoli zaženete iz menija Orodja."
78
 
79
@@ -260,7 +269,7 @@
80
 ConfirmBWTest.Title="Zaženi preizkus pasovne širine?"
81
 ConfirmBWTest.Text="OBS imate nastavljen v načinu preizkusa pasovne širine. Ta način omogoča preizkušanje omrežja brez oddajanja v živo. Ko končate s preizkusom, ga boste morali onemogočiti, da si bodo gledalci lahko ogledali vaš pretok.\n\nŽelite nadaljevati?"
82
 
83
-ConfirmExit.Title="Zapusti OBS?"
84
+ConfirmExit.Title="Želite zapustiti OBS?"
85
 ConfirmExit.Text="OBS je trenutno aktiven. Vsi pretoki/snemanja bodo ustavljeni. Ali res želite končati?"
86
 
87
 ConfirmRemove.Title="Potrdite odstranitev"
88
@@ -286,7 +295,7 @@
89
 Output.StreamEncodeError.Msg="Med pretakanjem se je pojavila napaka kodirnika."
90
 
91
 Output.RecordFail.Title="Zagon snemanja je spodletel"
92
-Output.RecordFail.Unsupported="Izhodni format ni podprt ali pa ne podpira več kot ene zvočne sledi. Preverite nastavitve in poizkusite znova."
93
+Output.RecordFail.Unsupported="Izhodni format ni podprt ali pa ne podpira več kot ene zvočne steze. Preverite nastavitve in poizkusite znova."
94
 Output.RecordNoSpace.Title="Premalo prostora na disku"
95
 Output.RecordNoSpace.Msg="Za nadaljevanje snemanja na disku ni dovolj prostora."
96
 Output.RecordError.Title="Napaka pri snemanju"
97
@@ -357,8 +366,6 @@
98
 Deinterlacing.TopFieldFirst="Najprej zgornje polje"
99
 Deinterlacing.BottomFieldFirst="Najprej spodnje polje"
100
 
101
-VolControl.SliderUnmuted="Drsnik glasnosti za '%1': %2"
102
-VolControl.SliderMuted="Drsnik glasnosti za '%1': %2 (trenutno je utišano)"
103
 VolControl.Mute="Utišaj '%1'"
104
 VolControl.Properties="Lastnosti za '%1'"
105
 
106
@@ -374,6 +381,7 @@
107
 
108
 AddProfile.Title="Dodaj profil"
109
 AddProfile.Text="Vnesite ime profila"
110
+AddProfile.WizardCheckbox="Prikaži čarovnika za samodejno konfiguracijo"
111
 
112
 RenameProfile.Title="Preimenuj profil"
113
 
114
@@ -388,6 +396,7 @@
115
 Basic.SourceSelect.AddExisting="Dodaj obstoječega"
116
 Basic.SourceSelect.AddVisible="Prikaži vir"
117
 
118
+
119
 Basic.PropertiesWindow="Lastnosti za '%1'"
120
 Basic.PropertiesWindow.AutoSelectFormat="%1 (samodejno izberi: %2)"
121
 Basic.PropertiesWindow.SelectColor="Izberi barvo"
122
@@ -474,6 +483,8 @@
123
 Basic.Main.StopStreaming="Prenehaj pretakati"
124
 Basic.Main.StoppingStreaming="Ustavljanje pretoka …"
125
 Basic.Main.ForceStopStreaming="Prenehaj pretakati (zavrzi zakasnitev)"
126
+Basic.Main.ShowContextBar="Pokaži orodno vrstico vira"
127
+Basic.Main.HideContextBar="Skrij orodno vrstico vira"
128
 Basic.Main.StopVirtualCam="Zaustavitev virtualne kamere"
129
 Basic.Main.Group="%1. skupina"
130
 Basic.Main.GroupItems="Združi izbrane predmete"
131
@@ -530,6 +541,8 @@
132
 Basic.MainMenu.View.Docks.ResetUI="Ponastavi up. vmesnik"
133
 Basic.MainMenu.View.Docks.LockUI="Zakleni up. vmesnik"
134
 Basic.MainMenu.View.Docks.CustomBrowserDocks="Prilagojena sidrišča brskalnika..."
135
+Basic.MainMenu.View.ListboxToolbars="Gumbi za seznam prizorov/virov"
136
+Basic.MainMenu.View.ContextBar="Orodna vrstica vira"
137
 Basic.MainMenu.View.SceneTransitions="P&rehodi prizorov"
138
 Basic.MainMenu.View.SourceIcons="&Ikone virov"
139
 Basic.MainMenu.View.StatusBar="Vr&stica stanja"
140
@@ -623,13 +636,19 @@
141
 Basic.Settings.Stream.MissingUrlAndApiKey="Manjkata URL in ključ pretoka.\n\nOdprite nastavitve za vnos URLja in ključa pretoka v zavihek 'Pretok'."
142
 Basic.Settings.Stream.MissingUrl="Manjka URL pretoka.\n\nOdprite nastavitve za vnos URLja v zavihek 'Pretok'."
143
 Basic.Settings.Stream.MissingStreamKey="Manjka ključ pretoka.\n\nOdprite nastavitve za vnos ključa pretoka v zavihek 'Pretok'."
144
+Basic.Settings.Stream.IgnoreRecommended="Prezri priporočila za nastavitev storitve pretakanja"
145
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Preglasite priporočene nastavitve"
146
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Opozorilo: neupoštevanje omejitev storitve lahko povzroči poslabšanje kakovosti pretočnega predvajanja ali prepreči pretakanje.\n\nNadaljujem?"
147
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Največja bitna hitrost videa: %1 kbps"
148
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Največja bitna hitrost zvoka: %1 kbps"
149
+Basic.Settings.Stream.Recommended.MaxResolution="Največja ločljivost: %1"
150
+Basic.Settings.Stream.Recommended.MaxFPS="Največje število sl./s: %1"
151
 
152
 Basic.Settings.Output="Izhod"
153
 Basic.Settings.Output.Format="Format posnetkov"
154
 Basic.Settings.Output.Encoder="Kodirnik"
155
 Basic.Settings.Output.SelectDirectory="Izberite mapo za posnetke"
156
 Basic.Settings.Output.SelectFile="Izberite datoteko posnetka"
157
-Basic.Settings.Output.EnforceBitrate="Za pretočne storitve vsili omejitve bitne hitrost"
158
 Basic.Settings.Output.DynamicBitrate="Dinamično spreminjaj bitno hitrost za odpravo zastojev"
159
 Basic.Settings.Output.DynamicBitrate.Beta="Dinamično spreminjaj bitno hitrost za odpravo zastojev (beta)"
160
 Basic.Settings.Output.DynamicBitrate.TT="Namesto izpuščanja sličic za odpravo zastojev sproti dinamično spreminja bitno hitrost.\n\nUpoštevajte, da to lahko poveča zakasnitve pri gledalcih, če pride do nenadnega znatnega zastoja.\nKo se bitna hitrost zniža, lahko obnovitev traja nekaj minut.\n\nTrenutno podprto samo za RMTP."
161
@@ -650,8 +669,8 @@
162
 Basic.Settings.Output.Simple.RecordingQuality.Small="Visoka kakovost, srednja velikost datoteke"
163
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Nerazločljiva kakovost, zelo velika velikost datoteke"
164
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Brezizgubna kakovost, izjemno velika velikost datoteke"
165
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Opozorilo: bitna hitrost video pretoka bo nastavljena na %1, kar je zgornja meja trenutne pretočne storitve. Če ste prepričani, da želite preseči %1, vklopite napredne možnosti kodirnika in odznačite \"Za pretočne storitve vsili omejitve bitne hitrosti\"."
166
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Opozorilo: bitna hitrost zvočnega pretoka bo nastavljena na %1, kar je zgornja meja trenutne pretočne storitve. Če ste prepričani, da želite preseči %1, vklopite napredne možnosti kodirnika in odznačite \"Za pretočne storitve vsili omejitve bitne hitrosti\"."
167
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Opozorilo: bitna hitrost pretočnega videa bo nastavljena na %1, kar je zgornja meja za trenutno storitev pretakanja."
168
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Opozorilo: bitna hitrost pretočnega zvoka bo nastavljena na %1, kar je zgornja meja za trenutno storitev pretakanja."
169
 Basic.Settings.Output.Simple.Warn.CannotPause="Opozorilo: posnetkov ni mogoče začasno ustaviti, če je kakovost posnetka nastavljena na \"Enaka kot pri pretakanju\"."
170
 Basic.Settings.Output.Simple.Warn.Encoder="Opozorilo: snemanje s programskim kodirnikom z drugačno kakovostjo, kot jo ima pretok zahteva dodatno obremenitev procesorja, kadar hkrati pretakate in snemate."
171
 Basic.Settings.Output.Simple.Warn.Lossless="Opozorilo: brezizgubna kakovost ustvari izjemno velike velikosti datotek! Brezizgubna kakovost lahko porabi več kot 7 GB prostora na disku na minuto pri visokih ločljivostih in hitrostih sličic. Brezizgubna kakovost ni priporočljiva za dolge posnetke, razen če imate na voljo veliko prostora na disku."
172
@@ -662,6 +681,11 @@
173
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Strojni (AMD)"
174
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Strojni (NVENC)"
175
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Programski (prednastavitev x264 s nizko porabo CPE-ja, poveča velikost datoteke)"
176
+Basic.Settings.Output.Simple.TwitchVodTrack="Twitch VOD Track (Uporablja stezo 2)"
177
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Ločljivost ali št. sl./s nista podprta"
178
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Ta pretočna storitev ne podpira trenutne izhodne ločljivosti in/ali števila slik na sekundo. Spremenjena bosta na najbližjo podprto vrednost:\n\n%1\n\nAli želite nadaljevati?"
179
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Ločljivost: %1"
180
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="sl./s: %1"
181
 Basic.Settings.Output.VideoBitrate="Bitna hitrost slike"
182
 Basic.Settings.Output.AudioBitrate="Bitna hitrost zvoka"
183
 Basic.Settings.Output.Reconnect="Samodejno ponovno poveži"
184
@@ -674,15 +698,15 @@
185
 Basic.Settings.Output.NoSpaceFileName="Ustvari ime datoteke brez presledkov"
186
 
187
 Basic.Settings.Output.Adv.Rescale="Spremeni velikost izhoda"
188
-Basic.Settings.Output.Adv.AudioTrack="Zvočna sled"
189
+Basic.Settings.Output.Adv.AudioTrack="Zvočna steza"
190
 Basic.Settings.Output.Adv.Streaming="Pretakanje"
191
-Basic.Settings.Output.Adv.ApplyServiceSettings="Za pretočne storitve vsili nastavitve kodirnika"
192
-Basic.Settings.Output.Adv.Audio.Track1="1. sled"
193
-Basic.Settings.Output.Adv.Audio.Track2="2. sled"
194
-Basic.Settings.Output.Adv.Audio.Track3="3. sled"
195
-Basic.Settings.Output.Adv.Audio.Track4="4. sled"
196
-Basic.Settings.Output.Adv.Audio.Track5="5. sled"
197
-Basic.Settings.Output.Adv.Audio.Track6="6. sled"
198
+Basic.Settings.Output.Adv.Audio.Track1="1. steza"
199
+Basic.Settings.Output.Adv.Audio.Track2="2. steza"
200
+Basic.Settings.Output.Adv.Audio.Track3="3. steza"
201
+Basic.Settings.Output.Adv.Audio.Track4="4. steza"
202
+Basic.Settings.Output.Adv.Audio.Track5="5. steza"
203
+Basic.Settings.Output.Adv.Audio.Track6="6. steza"
204
+Basic.Settings.Output.Adv.TwitchVodTrack="Twitch VOD posnetek"
205
 
206
 Basic.Settings.Output.Adv.Recording="Snemanje"
207
 Basic.Settings.Output.Adv.Recording.Type="Vrsta"
208
@@ -713,6 +737,12 @@
209
 Basic.Settings.Output.Adv.FFmpeg.GOPSize="Razmik med ključnimi sličicami (sličic)"
210
 Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Prikaže vse kodeke (tudi če so mogoče nezdružljivi)"
211
 
212
+Screenshot="Izhod posnetka zaslona"
213
+Screenshot.SourceHotkey="Izbrani vir posnetka zaslona"
214
+Screenshot.StudioProgram="Posnetek zaslona (Program)"
215
+Screenshot.Preview="Posnetek zaslona (Predogled)"
216
+Screenshot.Scene="Posnetek zaslona (Scena)"
217
+Screenshot.Source="Posnetek zaslona (Vir)"
218
 
219
 FilenameFormatting.completer="%CCYY-%MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %Y-%m-%d %H-%M-%S\n%A %Y-%m-%d %H-%M-%S\n%Y-%b-%d %H-%M-%S\n%Y-%B-%d %H-%M-%S\n%Y-%m-%d %I-%M-%S-%p\n%Y-%m-%d %H-%M-%S-%z\n%Y-%m-%d %H-%M-%S-%Z\n%FPS\n%CRES\n%ORES\n%VF"
220
 
221
@@ -813,7 +843,7 @@
222
 Basic.AdvAudio.Monitoring.None="Nadzor je izklopljen"
223
 Basic.AdvAudio.Monitoring.MonitorOnly="Samo nadziraj (utišaj izhod)"
224
 Basic.AdvAudio.Monitoring.Both="Nadzor in izhod"
225
-Basic.AdvAudio.AudioTracks="Sledi"
226
+Basic.AdvAudio.AudioTracks="Steze"
227
 
228
 Basic.Settings.Hotkeys="Hitre tipke"
229
 Basic.Settings.Hotkeys.Pair="Kombinacije tipk, deljene s/z '%1', delujejo kot preklopniki"
230
@@ -871,7 +901,7 @@
231
 SceneItemShow="Prikaži '%1'"
232
 SceneItemHide="Skrij '%1'"
233
 
234
-OutputWarnings.NoTracksSelected="Izbrati morate vsaj eno sled"
235
+OutputWarnings.NoTracksSelected="Izbrati morate vsaj eno stezo"
236
 OutputWarnings.MP4Recording="Opozorilo: posnetkov, shranjenih v MP4/MOV, ne bo mogoče obnoviti, če datoteka ni dokončana (npr. kot posledica \"modrega zaslona smrti\", izgube napajanja itd.). Če želite posneti več zvočnih stez, lahko uporabite MKV-ja in ga na koncu prepakirate v MP4/MOV (Datoteka → Prepakiraj posnetke)"
237
 OutputWarnings.CannotPause="Opozorilo: posnetkov ni mogoče začasno ustaviti, če je snemalni kodirnik nastavljen na \"(uporabi pretočni kodirnik)\""
238
 
239
@@ -917,7 +947,18 @@
240
 
241
 
242
 Restart="Ponovni zagon"
243
-NeedsRestart="OBS Studi zahteva ponovni zagon? Ponovno zaženem zdaj?"
244
-
245
-
246
+NeedsRestart="OBS Studio zahteva ponovni zagon? Ponovno zaženem zdaj?"
247
+
248
+ContextBar.NoSelectedSource="Ni izbranih virov"
249
+ContextBar.ResetTransform="Ponastavi položaj, velikost in rotacijo elementa."
250
+ContextBar.FitToCanvas="Prilagodi na sliko"
251
+
252
+ContextBar.MediaControls.PlayMedia="Predvajaj"
253
+ContextBar.MediaControls.PauseMedia="Pavziraj"
254
+ContextBar.MediaControls.StopMedia="Ustavi"
255
+ContextBar.MediaControls.RestartMedia="Ponovno žaženi"
256
+ContextBar.MediaControls.PlaylistNext="Naprej na seznamu predvajanja"
257
+ContextBar.MediaControls.PlaylistPrevious="Prejšnje na seznamu predvajanja"
258
+ContextBar.MediaControls.MediaProperties="Lastnosti medijev"
259
+ContextBar.MediaControls.BlindSeek="Pripomoček za iskanje medijev"
260
 
261
obs-studio-26.0.2.tar.xz/UI/data/locale/sq-AL.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/sq-AL.ini Changed
6
 
1
@@ -241,3 +241,4 @@
2
 
3
 
4
 
5
+
6
obs-studio-26.0.2.tar.xz/UI/data/locale/sr-CS.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/sr-CS.ini Changed
43
 
1
@@ -316,8 +316,6 @@
2
 Deinterlacing.TopFieldFirst="Prvo gornje polje"
3
 Deinterlacing.BottomFieldFirst="Prvo donje polje"
4
 
5
-VolControl.SliderUnmuted="Slajder jačine zvuka za '%1': %2"
6
-VolControl.SliderMuted="Slajder jačine zvuka za '%1': %2 (trenutno isključen)"
7
 VolControl.Mute="Isključite zvuk '%1'"
8
 VolControl.Properties="Svojstva '%1'"
9
 
10
@@ -347,6 +345,7 @@
11
 Basic.SourceSelect.AddExisting="Dodaj postojeći"
12
 Basic.SourceSelect.AddVisible="Prikaži izvor"
13
 
14
+
15
 Basic.PropertiesWindow="Svojstva za '%1'"
16
 Basic.PropertiesWindow.AutoSelectFormat="%1 (automatski odabir: %2)"
17
 Basic.PropertiesWindow.SelectColor="Izaberi boju"
18
@@ -564,7 +563,6 @@
19
 Basic.Settings.Output.Encoder="Enkoder"
20
 Basic.Settings.Output.SelectDirectory="Odaberi direktorijum za snimanje"
21
 Basic.Settings.Output.SelectFile="Odaberi datoteku za snimanje"
22
-Basic.Settings.Output.EnforceBitrate="Sprovedi ograničenja u protoku striming servisa"
23
 Basic.Settings.Output.Mode="Režim izlaza"
24
 Basic.Settings.Output.Mode.Simple="Jednostavno"
25
 Basic.Settings.Output.Mode.Adv="Napredno"
26
@@ -581,8 +579,6 @@
27
 Basic.Settings.Output.Simple.RecordingQuality.Small="Visoki kvalitet, osrednja veličina datoteke"
28
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Kvalitet sa neprimetnim razlikama, velika datoteka"
29
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Kvalitet bez gubitka, izričito velika datoteka"
30
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Upozorenje: Video protok strima će biti postavljen na %1, što je gornja granica za trenutni striming servis. Ako ste sigurni da želite ići preko %1, omogućite napredne opcije enkodera i isključite \"Sprovedi ograničenja u protoku striming servisa\"."
31
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Upozorenje: Zvučni protok strima će biti postavljen na %1, što je gornja granica za trenutni striming servis. Ako ste sigurni da želite ići preko %1, omogućite napredne opcije enkodera i isključite \"Sprovedi ograničenja u protoku striming servisa\"."
32
 Basic.Settings.Output.Simple.Warn.Encoder="Upozorenje: Snimanje sa softverskim enkoderom drugačijeg kvaliteta u odnosu na strim će zahtevati dodatnu procesorsku snagu ako strimujete i snimate u isto vreme."
33
 Basic.Settings.Output.Simple.Warn.Lossless="Upozorenje: Kvalitet bez gubitka stvara izričito velike datoteke! Kvalitet bez gubitka može koristiti više od 7 gigabajta prostora na disku po minutu pri visokim rezolucijama i framerate-om. Kvalitet bez gubitka nije preporučen za duže snimanje osim ako imate veliku količinu slobodnog prostora na disku."
34
 Basic.Settings.Output.Simple.Warn.Lossless.Msg="Da li ste sigurni da želite koristiti kvalitet bez gubitka?"
35
@@ -605,7 +601,6 @@
36
 Basic.Settings.Output.Adv.Rescale="Skaliraj izlaz"
37
 Basic.Settings.Output.Adv.AudioTrack="Zvučni izvor"
38
 Basic.Settings.Output.Adv.Streaming="Strimovanje"
39
-Basic.Settings.Output.Adv.ApplyServiceSettings="Prisilna podešavanja enkodera striming servisa"
40
 Basic.Settings.Output.Adv.Audio.Track1="Izvor 1"
41
 Basic.Settings.Output.Adv.Audio.Track2="Izvor 2"
42
 Basic.Settings.Output.Adv.Audio.Track3="Izvor 3"
43
obs-studio-26.0.2.tar.xz/UI/data/locale/sr-SP.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/sr-SP.ini Changed
43
 
1
@@ -329,8 +329,6 @@
2
 Deinterlacing.TopFieldFirst="Прво горње поље"
3
 Deinterlacing.BottomFieldFirst="Прво доње поље"
4
 
5
-VolControl.SliderUnmuted="Слајдер јачине звука за '%1': %2"
6
-VolControl.SliderMuted="Слајдер јачине звука за '%1': %2 (тренутно искључен)"
7
 VolControl.Mute="Искључите звук '%1'"
8
 VolControl.Properties="Својства '%1'"
9
 
10
@@ -360,6 +358,7 @@
11
 Basic.SourceSelect.AddExisting="Додај постојећи"
12
 Basic.SourceSelect.AddVisible="Прикажи извор"
13
 
14
+
15
 Basic.PropertiesWindow="Својства за '%1'"
16
 Basic.PropertiesWindow.AutoSelectFormat="%1 (аутоматски одабир: %2)"
17
 Basic.PropertiesWindow.SelectColor="Изабери боју"
18
@@ -582,7 +581,6 @@
19
 Basic.Settings.Output.Encoder="Енкодер"
20
 Basic.Settings.Output.SelectDirectory="Одабери директоријум за снимање"
21
 Basic.Settings.Output.SelectFile="Одабери датотеку за снимање"
22
-Basic.Settings.Output.EnforceBitrate="Спроведи ограничења у протоку стриминг сервиса"
23
 Basic.Settings.Output.Mode="Режим излаза"
24
 Basic.Settings.Output.Mode.Simple="Једноставно"
25
 Basic.Settings.Output.Mode.Adv="Напредно"
26
@@ -599,8 +597,6 @@
27
 Basic.Settings.Output.Simple.RecordingQuality.Small="Високи квалитет, осредња величина датотеке"
28
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Квалитет са неприметним разликама, велика датотека"
29
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Квалитет без губитка, изричито велика датотека"
30
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Упозорење: Видео проток стрима ће бити постављен на %1, што је горња граница за тренутни стриминг сервис. Ако сте сигурни да желите ићи преко %1, омогућите напредне опције енкодера и искључите \"Спроведи ограничења у протоку стриминг сервиса\"."
31
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Упозорење: Звучни проток стрима ће бити постављен на %1, што је горња граница за тренутни стриминг сервис. Ако сте сигурни да желите ићи преко %1, омогућите напредне опције енкодера и искључите \"Спроведи ограничења у протоку стриминг сервиса\"."
32
 Basic.Settings.Output.Simple.Warn.Encoder="Упозорење: Снимање са софтверским енкодером другачијег квалитета у односу на стрим ће захтевати додатну процесорску снагу ако стримујете и снимате у исто време."
33
 Basic.Settings.Output.Simple.Warn.Lossless="Упозорење: Квалитет без губитка ствара изричито велике датотеке! Квалитет без губитка може користити више од 7 гигабајта простора на диску по минуту при високим резолуцијама и framerate-ом. Квалитет без губитка није препоручен за дуже снимање осим ако имате велику количину слободног простора на диску."
34
 Basic.Settings.Output.Simple.Warn.Lossless.Msg="Да ли сте сигурни да желите користити квалитет без губитка?"
35
@@ -623,7 +619,6 @@
36
 Basic.Settings.Output.Adv.Rescale="Скалирај излаз"
37
 Basic.Settings.Output.Adv.AudioTrack="Звучни извор"
38
 Basic.Settings.Output.Adv.Streaming="Стримовање"
39
-Basic.Settings.Output.Adv.ApplyServiceSettings="Присилна подешавања енкодера стриминг сервиса"
40
 Basic.Settings.Output.Adv.Audio.Track1="Извор 1"
41
 Basic.Settings.Output.Adv.Audio.Track2="Извор 2"
42
 Basic.Settings.Output.Adv.Audio.Track3="Извор 3"
43
obs-studio-26.0.2.tar.xz/UI/data/locale/sv-SE.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/sv-SE.ini Changed
193
 
1
@@ -93,6 +93,7 @@
2
 LogViewer="Loggvisare"
3
 ShowOnStartup="Visa vid uppstart"
4
 OpenFile="Öppna fil"
5
+AddValue="Lägg till %1"
6
 
7
 AlreadyRunning.Title="OBS körs redan"
8
 AlreadyRunning.Text="OBS körs redan! Såvida du gjorde detta med flit, stäng ned alla befintliga instanser av OBS innan du försöker köra en ny instans. Om du har minimerat OBS till systemfältet, kontroller om det fortfarande körs där."
9
@@ -112,7 +113,7 @@
10
 Auth.Authing.Text="Autentiserar med %1, var god vänta..."
11
 Auth.AuthFailure.Title="Autentiseringsfel"
12
 Auth.AuthFailure.Text="Misslyckades att autentisera med %1:\n\n%2: %3"
13
-Auth.InvalidScope.Title="Autentisering krävs"
14
+Auth.InvalidScope.Title="Verifiering krävs"
15
 Auth.InvalidScope.Text="Autentiseringskraven för %1 har ändrats. Vissa funktioner kanske inte är tillgängliga."
16
 Auth.LoadingChannel.Title="Läser in kanalinformation..."
17
 Auth.LoadingChannel.Text="Läser in kanalinformation för %1, var god vänta..."
18
@@ -160,6 +161,7 @@
19
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Koppla från konto?"
20
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Denna ändring kommer tillämpas direkt. Är du säker på att du vill koppla från ditt konto?"
21
 Basic.AutoConfig.StreamPage.GetStreamKey="Hämta strömnyckel"
22
+Basic.AutoConfig.StreamPage.MoreInfo="Mer information"
23
 Basic.AutoConfig.StreamPage.UseStreamKey="Använd strömnyckel"
24
 Basic.AutoConfig.StreamPage.Service="Tjänst"
25
 Basic.AutoConfig.StreamPage.Service.ShowAll="Visa alla..."
26
@@ -186,16 +188,16 @@
27
 Basic.AutoConfig.TestPage.TestingRes.Resolution="Testar %1x%2 i %3 bilder per sekund..."
28
 Basic.AutoConfig.TestPage.Result.StreamingEncoder="Strömningskodare"
29
 Basic.AutoConfig.TestPage.Result.RecordingEncoder="Inspelningskodare"
30
-Basic.AutoConfig.TestPage.Result.Header="Programmet har bestämt att dessa uppskattade inställningar är de mest idealiska för dig:"
31
-Basic.AutoConfig.TestPage.Result.Footer="För att använda dessa inställningar, klicka på Verkställ inställningar. För att omkonfigurera guiden och försöka igen, klicka på Tillbaka. För att konfigurera inställningarna manuellt, klicka på Avbryt och öppna Inställningar."
32
-Basic.AutoConfig.Info="Autokonfigurationsguiden bestämmer de bästa inställningarna baserat på dina datorspecifikationer och din internethastighet."
33
+Basic.AutoConfig.TestPage.Result.Header="Programmet har uppskattat att de här inställningar är de mest idealiska för dig:"
34
+Basic.AutoConfig.TestPage.Result.Footer="För att använda dessa inställningar, klicka på Verkställ inställningar. För att köra guiden igen, klicka på Tillbaka. För att konfigurera inställningarna manuellt, klicka på Avbryt och öppna Inställningar."
35
+Basic.AutoConfig.Info="Autokonfigurationsguiden kommer att avgöra de bästa inställningarna baserat på din dators specifikation och din internethastighet."
36
 Basic.AutoConfig.RunAnytime="Detta kan köras när som helst via verktygsmenyn."
37
 
38
 Basic.Stats="Statistik"
39
 Basic.Stats.CPUUsage="Processoranvändning"
40
 Basic.Stats.HDDSpaceAvailable="Ledigt hårddiskutrymme"
41
 Basic.Stats.MemoryUsage="Minnesanvändning"
42
-Basic.Stats.AverageTimeToRender="Medeltid för att rendera bildruta"
43
+Basic.Stats.AverageTimeToRender="Medeltid för att färdigställa bildruta"
44
 Basic.Stats.SkippedFrames="Bildrutor som hoppades över p.g.a. kodningslagg"
45
 Basic.Stats.MissedFrames="Bildrutor som saknas p.g.a. renderingslagg"
46
 Basic.Stats.Output.Stream="Ström"
47
@@ -364,8 +366,8 @@
48
 Deinterlacing.TopFieldFirst="Övre fältet först"
49
 Deinterlacing.BottomFieldFirst="Nedre fältet först"
50
 
51
-VolControl.SliderUnmuted="Volymreglage för \"%1\": %2"
52
-VolControl.SliderMuted="Volymreglage för \"%1\": %2 (tyst för tillfället)"
53
+VolControl.SliderUnmuted="Volymreglage för '%1':"
54
+VolControl.SliderMuted="Volymreglage för \"%1\": (tyst för tillfället)"
55
 VolControl.Mute="Tysta \"%1\""
56
 VolControl.Properties="Egenskaper för \"%1\""
57
 
58
@@ -381,6 +383,7 @@
59
 
60
 AddProfile.Title="Lägg till profil"
61
 AddProfile.Text="Var god ange profilens namn"
62
+AddProfile.WizardCheckbox="Visa automatisk konfigurationsguide"
63
 
64
 RenameProfile.Title="Byt namn på profilen"
65
 
66
@@ -395,6 +398,11 @@
67
 Basic.SourceSelect.AddExisting="Lägg till befintlig"
68
 Basic.SourceSelect.AddVisible="Gör källan synlig"
69
 
70
+Basic.Main.Sources.Visibility="Synlighet"
71
+Basic.Main.Sources.VisibilityDescription="Styr synligheten av \"%1\" i kanvas"
72
+Basic.Main.Sources.Lock="Lås"
73
+Basic.Main.Sources.LockDescription="Låser positionen och skalan av \"%1\" på kanvas"
74
+
75
 Basic.PropertiesWindow="Egenskaper för \"%1\""
76
 Basic.PropertiesWindow.AutoSelectFormat="%1 (välj automatiskt: %2)"
77
 Basic.PropertiesWindow.SelectColor="Välj färg"
78
@@ -421,11 +429,11 @@
79
 Basic.StatusBar.ReconnectSuccessful="Återanslutning lyckades"
80
 Basic.StatusBar.Delay="Fördröjning (%1 s)"
81
 Basic.StatusBar.DelayStartingIn="Fördröjning (börjar om %1 s)"
82
-Basic.StatusBar.DelayStoppingIn="Fördröjning (stoppar efter %1 s)"
83
+Basic.StatusBar.DelayStoppingIn="Fördröjning (stoppar om %1 s)"
84
 Basic.StatusBar.DelayStartingStoppingIn="Fördröjning (stoppar efter %1 s, börjar om %2 s)"
85
 
86
 Basic.Filters="Filter"
87
-Basic.Filters.AsyncFilters="Audio/Video filter"
88
+Basic.Filters.AsyncFilters="Ljud-/videofilter"
89
 Basic.Filters.AudioFilters="Ljudfilter"
90
 Basic.Filters.EffectFilters="Effektfilter"
91
 Basic.Filters.Title="Filter för \"%1\""
92
@@ -634,18 +642,24 @@
93
 Basic.Settings.Stream.MissingUrlAndApiKey="Webbadress och strömnyckel saknas.\n\nÖppna inställningarna för att ange webbadressen och strömnyckeln under fliken \"Ström\"."
94
 Basic.Settings.Stream.MissingUrl="Strömadress saknas.\n\nÖppna inställningarna för att ange webbadressen under fliken \"Ström\"."
95
 Basic.Settings.Stream.MissingStreamKey="Strömnyckel saknas.\n\nÖppna inställningarna för att ange strömnyckeln under fliken \"Ström\"."
96
+Basic.Settings.Stream.IgnoreRecommended="Ignorera strömningstjänstens rekommendationer"
97
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Åsidosätt rekommenderade inställningar"
98
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Varning: Om du ignorerar tjänstens begränsningar kan det leda till försämrad strömkvalitet eller förhindra dig från att strömma.\n\nVill du fortsätta?"
99
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Maximal videobithastighet: %1 kbps"
100
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Maximal ljudbithastighet: %1 kbps"
101
+Basic.Settings.Stream.Recommended.MaxResolution="Maximal upplösning: %1"
102
+Basic.Settings.Stream.Recommended.MaxFPS="Maximal bildfrekvens: %1"
103
 
104
 Basic.Settings.Output="Utmatning"
105
 Basic.Settings.Output.Format="Inspelningsformat"
106
 Basic.Settings.Output.Encoder="Kodare"
107
 Basic.Settings.Output.SelectDirectory="Välj inspelningsplats"
108
 Basic.Settings.Output.SelectFile="Välj inspelningsfil"
109
-Basic.Settings.Output.EnforceBitrate="Tvinga gränser för streamens bit-rate"
110
 Basic.Settings.Output.DynamicBitrate="Ändra bithastigheten dynamiskt för att hantera överbelastning"
111
 Basic.Settings.Output.DynamicBitrate.Beta="Ändra bithastigheten dynamiskt för att hantera överbelastning (beta)"
112
 Basic.Settings.Output.DynamicBitrate.TT="Istället för att kasta bildrutor för att reducera överbelastning kommer bithastigheten ändras dynamiskt.\n\nObservera att detta kan öka fördröjningen för tittare om en avsevärd belastning uppstår.\nNär bithastigheten sjunker kan det ta ett par minuter att återställas.\n\nStöds för närvarande endast för RTMP."
113
 Basic.Settings.Output.Mode="Utmatningsläge"
114
-Basic.Settings.Output.Mode.Simple="Simpel"
115
+Basic.Settings.Output.Mode.Simple="Enkelt"
116
 Basic.Settings.Output.Mode.Adv="Avancerat"
117
 Basic.Settings.Output.Mode.FFmpeg="FFmpeg-utmatning"
118
 Basic.Settings.Output.UseReplayBuffer="Aktivera reprisbuffert"
119
@@ -661,18 +675,23 @@
120
 Basic.Settings.Output.Simple.RecordingQuality.Small="Hög kvalitet, mellanstor filstorlek"
121
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Oskiljbar kvalitet, stor filstorlek"
122
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Förlustfri kvalitet, oerhört stor filstorlek"
123
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Varning: Streamens videobit-rate kommer att sättas till %1, vilket är den övre gränsen för den nuvarande streaming-tjänsten. Om du är säker på att du vill gå över %1, aktivera \"avancerade kodarinställningar\" och avaktivera \"Tvinga streaming-tjänstens bit-rategränser\"."
124
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Varning: Streamens ljudbit-rate kommer att sättas till %1, vilket är den övre gränsen för den nuvarande streaming-tjänsten. Om du är säker på att du vill gå över %1, aktivera \"avancerade kodarinställningar\" och avaktivera \"Tvinga streaming-tjänstens bit-rategränser\"."
125
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Varning: Strömmens videobithastighet kommer att ändras till %1, vilket är maxgränsen för den nuvarande strömtjänsten."
126
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Varning: Strömmens ljudbithastighet kommer att ändras till %1, vilket är maxgränsen för den nuvarande strömtjänsten."
127
 Basic.Settings.Output.Simple.Warn.CannotPause="Varning: Inspelningar kan inte pausas om inspelningskvaliteten är \"Samma som ström\"."
128
 Basic.Settings.Output.Simple.Warn.Encoder="Varning: Inspelning med en mjukvaru-kodare i annan kvalitet än streamen kräver mer CPU-använding om du streamar och spelar in samtidigt."
129
 Basic.Settings.Output.Simple.Warn.Lossless="Varning: Förlustfri kvalitet generar oerhört stora filstorlekar! Förlustfri kvalitet kan använda upp till 7 gigabyte hårddiskutrymme per minut vid höga upplösningar och bildfrekvenser. Detta rekommenderas inte för långa inspelningar såvida du har riktigt mycket hårddiskutrymme tillgängligt."
130
 Basic.Settings.Output.Simple.Warn.Lossless.Msg="Är du säker på att du vill använda förlustfri kvalitet?"
131
 Basic.Settings.Output.Simple.Warn.Lossless.Title="Varning angående förlustfri kvalitet!"
132
-Basic.Settings.Output.Simple.Encoder.Software="Programvara (x264)"
133
+Basic.Settings.Output.Simple.Encoder.Software="Mjukvara (x264)"
134
 Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Hårdvara (QSV)"
135
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hårdvara (AMD)"
136
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hårdvara (NVENC)"
137
-Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Mjukvaru-kodek (x264-förinställning för lågt CPU-användning, ökar filstorleken)"
138
+Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Mjukvara (x264 med förinställning för låg processoranvändning, ökar filstorleken)"
139
+Basic.Settings.Output.Simple.TwitchVodTrack="Twitch VOD-spår (använder spår 2)"
140
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Inkompatibel upplösning/bildfrekvens"
141
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Den här strömningstjänsten stöder inte din nuvarande utdataupplösning och/eller bildfrekvens. De kommer att ändras till närmaste kompatibla värde:\n\n%1\n\nVill du fortsätta?"
142
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Upplösning: %1"
143
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="Bildfrekvens: %1"
144
 Basic.Settings.Output.VideoBitrate="Bithastighet för video"
145
 Basic.Settings.Output.AudioBitrate="Bithastighet för ljud"
146
 Basic.Settings.Output.Reconnect="Automatisk återanslutning"
147
@@ -687,15 +706,16 @@
148
 Basic.Settings.Output.Adv.Rescale="Skala om utmatning"
149
 Basic.Settings.Output.Adv.AudioTrack="Ljudspår"
150
 Basic.Settings.Output.Adv.Streaming="Strömning"
151
-Basic.Settings.Output.Adv.ApplyServiceSettings="Tillämpa strömningstjänstens kodarinställningar"
152
 Basic.Settings.Output.Adv.Audio.Track1="Spår 1"
153
 Basic.Settings.Output.Adv.Audio.Track2="Spår 2"
154
 Basic.Settings.Output.Adv.Audio.Track3="Spår 3"
155
 Basic.Settings.Output.Adv.Audio.Track4="Spår 4"
156
 Basic.Settings.Output.Adv.Audio.Track5="Spår 5"
157
 Basic.Settings.Output.Adv.Audio.Track6="Spår 6"
158
+Basic.Settings.Output.Adv.TwitchVodTrack="Twitch VOD-spår"
159
 
160
 Basic.Settings.Output.Adv.Recording="Inspelning"
161
+Basic.Settings.Output.Adv.Recording.RecType="Inspelningstyp"
162
 Basic.Settings.Output.Adv.Recording.Type="Typ"
163
 Basic.Settings.Output.Adv.Recording.Type.Standard="Standard"
164
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Anpassad utmatning (FFmpeg)"
165
@@ -706,7 +726,7 @@
166
 Basic.Settings.Output.Adv.FFmpeg.Type.URL="Utmatning till URL"
167
 Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile="Utmatning till fil"
168
 Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Vanliga inspelningsformat"
169
-Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Alla Filer"
170
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Alla filer"
171
 Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Sökväg eller webbadress"
172
 Basic.Settings.Output.Adv.FFmpeg.Format="Kontainerformat"
173
 Basic.Settings.Output.Adv.FFmpeg.FormatAudio="Ljud"
174
@@ -823,13 +843,18 @@
175
 Basic.AdvAudio.ActiveOnly="Endast aktiva källor"
176
 Basic.AdvAudio.Name="Namn"
177
 Basic.AdvAudio.Volume="Volym"
178
+Basic.AdvAudio.VolumeSource="Volym för \"%1\""
179
 Basic.AdvAudio.Mono="Mono"
180
+Basic.AdvAudio.MonoSource="Mononedmixning för \"%1\""
181
 Basic.AdvAudio.Balance="Balans"
182
+Basic.AdvAudio.BalanceSource="Balans för \"%1\""
183
 Basic.AdvAudio.SyncOffset="Synkroniseringsavvikelse"
184
+Basic.AdvAudio.SyncOffsetSource="Synkroniseringsförskjutning för \"%1\""
185
 Basic.AdvAudio.Monitoring="Ljuduppspelning"
186
 Basic.AdvAudio.Monitoring.None="Monitor av"
187
 Basic.AdvAudio.Monitoring.MonitorOnly="Endast monitor (tysta utgång)"
188
 Basic.AdvAudio.Monitoring.Both="Monitor och utgång"
189
+Basic.AdvAudio.MonitoringSource="Ljudövervakning för \"%1\""
190
 Basic.AdvAudio.AudioTracks="Spår"
191
 
192
 Basic.Settings.Hotkeys="Kortkommandon"
193
obs-studio-26.0.2.tar.xz/UI/data/locale/ta-IN.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/ta-IN.ini Changed
26
 
1
@@ -328,8 +328,6 @@
2
 Deinterlacing.TopFieldFirst="முதலில் மேல் புலம்"
3
 Deinterlacing.BottomFieldFirst="முதலில் கீழ் புலம்"
4
 
5
-VolControl.SliderUnmuted="ஒலியளவு நகர்வுகோல் '%1': %2"
6
-VolControl.SliderMuted="ஒலியளவு நகர்வுகோல் '%1': %2 (தற்போது ஒலி தடுக்கப்பட்டது)"
7
 VolControl.Mute="'%1' ஒலிதடு"
8
 VolControl.Properties="'%1' பண்புகள்"
9
 
10
@@ -359,6 +357,7 @@
11
 Basic.SourceSelect.AddExisting="தற்போதுள்ள சேர்"
12
 Basic.SourceSelect.AddVisible="மூலத்தை காண்பி"
13
 
14
+
15
 Basic.PropertiesWindow="'%1' பண்புகள்"
16
 Basic.PropertiesWindow.AutoSelectFormat="%1 (தானியங்குதேர்வு: %2)"
17
 Basic.PropertiesWindow.SelectColor="வண்ணம் தேர்ந்தெடு"
18
@@ -577,7 +576,6 @@
19
 
20
 Basic.Settings.Output.Adv.AudioTrack="ஒலி தடம்"
21
 Basic.Settings.Output.Adv.Streaming="நேரலை"
22
-Basic.Settings.Output.Adv.ApplyServiceSettings="நேரலை சேவையை குறியாக்கி அமைப்புகளை செயற்படுத்து"
23
 Basic.Settings.Output.Adv.Audio.Track1="ஒலி தடம் 1"
24
 Basic.Settings.Output.Adv.Audio.Track2="ஒலி தடம் 2"
25
 Basic.Settings.Output.Adv.Audio.Track3="ஒலி தடம் 3"
26
obs-studio-26.0.2.tar.xz/UI/data/locale/th-TH.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/th-TH.ini Changed
36
 
1
@@ -37,6 +37,7 @@
2
 SourceWindow="แสดงผลแบบหน้าต่าง (ทรัพยากร)"
3
 MultiviewProjector="แสดงผลหลายหน้าจอ (เต็มจอ)"
4
 MultiviewWindowed="แสดงผลหลายหน้าจอ (หน้าต่าง)"
5
+ResizeProjectorWindowToContent="ปรับขนาดจอให้เท่ากับเนื้อหา"
6
 Clear="ล้าง"
7
 Revert="กลับค่าเดิม"
8
 Show="แสดง"
9
@@ -68,6 +69,7 @@
10
 Paste="วาง"
11
 PasteReference="วาง (อ้างอิง)"
12
 PasteDuplicate="วาง (ซ้ำ)"
13
+RemuxRecordings="กำลังบันทึก Remux"
14
 Next="ถัดไป"
15
 Back="กลับ"
16
 Defaults="ค่ามาตรฐาน"
17
@@ -85,8 +87,10 @@
18
 Fullscreen="เต็มจอ"
19
 Windowed="หน้าต่าง"
20
 Percent="เปอร์เซ็นต์"
21
+RefreshBrowser="รีเฟรช"
22
 AspectRatio="อัตราส่วนภาพ <b>%1:%2</b>"
23
 LockVolume="ล็อค ระดับเสียง"
24
+OpenFile="เปิดไฟล์"
25
 
26
 AlreadyRunning.Title="OBS กำลังทำงานอยู่"
27
 AlreadyRunning.Text="โปรแกรม OBS กำลังทำงานอยู่ หากคุณไม่ต้องการดำเนินการดังกล่าวโปรดปิดโปรแกรม OBS ที่มีอยู่ ก่อนที่จะพยายามเรียกใช้อินสแตนซ์ใหม่ หากคุณตั้งค่าโปรแกรม OBS ให้ย่อเล็กสุด ให้ดูที่แถบบาร์ของระบบว่าโปรแกรมยังคงเปิดยังใช้งานอยู่หรือไม่"
28
@@ -262,6 +266,7 @@
29
 
30
 Basic.SourceSelect.CreateNew="สร้างใหม่"
31
 
32
+
33
 Basic.PropertiesWindow.SelectColor="เลือกสี"
34
 Basic.PropertiesWindow.AddFiles="เพิ่มไฟล์"
35
 
36
obs-studio-26.0.2.tar.xz/UI/data/locale/tl-PH.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/tl-PH.ini Changed
43
 
1
@@ -282,8 +282,6 @@
2
 Deinterlacing.TopFieldFirst="Itaas ang Patlang Una"
3
 Deinterlacing.BottomFieldFirst="Ibaba ang Patlang Una"
4
 
5
-VolControl.SliderUnmuted="Dami ng islayder para sa '%1':%2"
6
-VolControl.SliderMuted="Dami ng islayder para sa '%1':%2 (na kasalukuyang mahina)"
7
 VolControl.Mute="Mahina '%1'"
8
 VolControl.Properties="Ari-arian na para sa '%1'"
9
 
10
@@ -313,6 +311,7 @@
11
 Basic.SourceSelect.AddExisting="Idagdag ang Umiiral na"
12
 Basic.SourceSelect.AddVisible="Palitawin ang source"
13
 
14
+
15
 Basic.PropertiesWindow="Mga Katangian para sa '%1'"
16
 Basic.PropertiesWindow.AutoSelectFormat="%1 (autoselect: %2)"
17
 Basic.PropertiesWindow.SelectColor="Pumili ng Kulay"
18
@@ -506,7 +505,6 @@
19
 Basic.Settings.Output.Encoder="Encoder"
20
 Basic.Settings.Output.SelectDirectory="Pumili ng Recording Directory"
21
 Basic.Settings.Output.SelectFile="Pumili ng Recording File"
22
-Basic.Settings.Output.EnforceBitrate="Ipatupad ang mga limitasyon sa serbisyo ng bitrate sa pag-stream"
23
 Basic.Settings.Output.Mode="Paraan ng Output"
24
 Basic.Settings.Output.Mode.Simple="Payak"
25
 Basic.Settings.Output.Mode.Adv="Mas Mahusay"
26
@@ -523,8 +521,6 @@
27
 Basic.Settings.Output.Simple.RecordingQuality.Small="Mataas na Kalidad, Katamtamang Laki ng File"
28
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Hindi Matukoy na Kalidad, Malaking File"
29
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Walang nabago sa Kalidad, Lubhang napakalaking File"
30
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Babala: Ang video bitrate ng pag-stream ay itatakda sa %1, na siyang mataas na limitasyon para sa pangkasalukuyang serbisyo ng pagstream. Kung sigurado kang nais mong lumagpas sa %1, paganahin ang advanced encoder options at tanggalin ang check sa \"Enforce streaming bitrate limits\"."
31
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Babala: Ang audio bitrate ng pag-stream ay itatakda sa %1, na siyang mataas na limitasyon para sa pangkasalukuyang serbisyo ng pag-strean. Kung sigurado kang nais mong lumagpas sa %1, paganahin ang advanced encoder options at tanggalin ang check sa \"Enforce streaming service bitrate limits\"."
32
 Basic.Settings.Output.Simple.Warn.Encoder="Babal: Ang pag-rekord gamit ang isang software encoder na iba ang kalidad sa pag-stream ay mangangailangan ng dagdag na pag-gamit sa CPU kung ikaw ay mag-stream at mag-rekord nang sabay."
33
 Basic.Settings.Output.Simple.Warn.Lossless="Babala: Ang kalidad na lossless ay nagbibigay ng lubhang malalaking file. Ang kalidad na lossless ay maaaring gumamit ng 7 gigabytes ng espasyo ng disk kada minuto o higit pa sa matataas na mga resolusyon o mga framerate. Ang lossless ay hindi minumungkahi para sa mga mahahabang recording maliban na lamang kung mayroon kang napakalaking espasyo sa disk na magagamit."
34
 Basic.Settings.Output.Simple.Warn.Lossless.Msg="Sigurado ka bang gusto mong gamitin ang lossless na kalidad?"
35
@@ -546,7 +542,6 @@
36
 Basic.Settings.Output.Adv.Rescale="I-re-iskala ang Output"
37
 Basic.Settings.Output.Adv.AudioTrack="Pangsubaybay ng Audio"
38
 Basic.Settings.Output.Adv.Streaming="Anod"
39
-Basic.Settings.Output.Adv.ApplyServiceSettings="I-enpors ang anod ng serbisyo ng mga enkoder seting"
40
 Basic.Settings.Output.Adv.Audio.Track1="Subaybayan 1"
41
 Basic.Settings.Output.Adv.Audio.Track2="Subaybayan 2"
42
 Basic.Settings.Output.Adv.Audio.Track3="Subaybayan 3"
43
obs-studio-26.0.2.tar.xz/UI/data/locale/tr-TR.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/tr-TR.ini Changed
121
 
1
@@ -161,6 +161,7 @@
2
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Hesap Bağlantısı Kesilsin Mi?"
3
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Bu değişiklik hemen uygulanacaktır. Hesabınızın bağlantısını kesmek istediğinize emin misiniz?"
4
 Basic.AutoConfig.StreamPage.GetStreamKey="Yayın Anahtarını Al"
5
+Basic.AutoConfig.StreamPage.MoreInfo="Daha Fazla Bilgi"
6
 Basic.AutoConfig.StreamPage.UseStreamKey="Yayın Anahtarını Kullan"
7
 Basic.AutoConfig.StreamPage.Service="Hizmet"
8
 Basic.AutoConfig.StreamPage.Service.ShowAll="Tümünü Göster..."
9
@@ -365,8 +366,8 @@
10
 Deinterlacing.TopFieldFirst="Önce Üst Alan"
11
 Deinterlacing.BottomFieldFirst="Önce Alt Alan"
12
 
13
-VolControl.SliderUnmuted="'%1' için ses kaydırıcı: %2"
14
-VolControl.SliderMuted="Повзунок гучності для '%1': %2 (şu anda sessiz)"
15
+VolControl.SliderUnmuted="'%1' için ses ayarı:"
16
+VolControl.SliderMuted="'%1' için ses ayarı: ('%1' susturuldu)"
17
 VolControl.Mute="Sessiz '%1'"
18
 VolControl.Properties="'%1' için özellikler"
19
 
20
@@ -382,6 +383,7 @@
21
 
22
 AddProfile.Title="Profil Ekle"
23
 AddProfile.Text="Lütfen profil isimini girin"
24
+AddProfile.WizardCheckbox="Otomatik yapılandırma sihirbazını göster"
25
 
26
 RenameProfile.Title="Profili Yeniden Adlandır"
27
 
28
@@ -396,6 +398,11 @@
29
 Basic.SourceSelect.AddExisting="Varolanı Ekle"
30
 Basic.SourceSelect.AddVisible="Kaynağı görünür yap"
31
 
32
+Basic.Main.Sources.Visibility="Görünürlük"
33
+Basic.Main.Sources.VisibilityDescription="'%1' 'in tuvaldeki görünebilirliğini ayarlar"
34
+Basic.Main.Sources.Lock="Kilitle"
35
+Basic.Main.Sources.LockDescription="'%1' 'in tuvaldeki konumunu ve boyutunu kilitler"
36
+
37
 Basic.PropertiesWindow="'%1' için özellikler"
38
 Basic.PropertiesWindow.AutoSelectFormat="%1(oto.seçim: %2)"
39
 Basic.PropertiesWindow.SelectColor="Renk seçin"
40
@@ -635,13 +642,19 @@
41
 Basic.Settings.Stream.MissingUrlAndApiKey="URL ve Akış Anahtarı eksik.\n\n ' stream ' sekmesinde URL ve Akış Anahtarını girmek için ayarları açın."
42
 Basic.Settings.Stream.MissingUrl="Akış URL'si eksik.\n\n ' Akış ' sekmesine URL’yi girmek için ayarları açın."
43
 Basic.Settings.Stream.MissingStreamKey="Akış anahtarı eksik.\n\n ' Stream ' sekmesinde stream tuşuna girmek için ayarları açın."
44
+Basic.Settings.Stream.IgnoreRecommended="Yayın hizmeti ayar önerilerini yoksay"
45
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Tavsiye Edilen Ayarların Üstüne Yaz"
46
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Uyarı: Hizmetin kısıtlamalarını yoksaymak, düşürülmüş yayın kalitesine neden olabilir veya yayın yapmanızı engelleyebilir.\n\nDevam edilsin mi?"
47
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="En Yüksek Vidyo Bit Hızı: %1 kbps"
48
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="En Yüksek Ses Bit Hızı: %1 kbps"
49
+Basic.Settings.Stream.Recommended.MaxResolution="En Yüksek Çözünürlük: %1"
50
+Basic.Settings.Stream.Recommended.MaxFPS="En Yüksek FPS: %1"
51
 
52
 Basic.Settings.Output="Çıkış"
53
 Basic.Settings.Output.Format="Kayıt Biçimi"
54
 Basic.Settings.Output.Encoder="Kodlayıcı"
55
 Basic.Settings.Output.SelectDirectory="Kayıt Dizinini Seçin"
56
 Basic.Settings.Output.SelectFile="Kayıt Dosyasını Seçin"
57
-Basic.Settings.Output.EnforceBitrate="Yayın hizmetini bit hızı sınırlarına zorla"
58
 Basic.Settings.Output.DynamicBitrate="Akışı yönetmek için bit hızını değişkenli bir biçimde değiştir"
59
 Basic.Settings.Output.DynamicBitrate.Beta="Akışı yönetmek için bit hızını değişkenli bir biçimde değiştir (Beta)"
60
 Basic.Settings.Output.DynamicBitrate.TT="Akışı azaltmak için kare hızını düşürmek yerine, bit hızını değişkenli bir biçimde değiştirir.\n\nBunun, eğer ani bir akış olursa izleyiciler için gecikme yaratabileceğini unutmayın.\nEğer bit hızı düşerse, yenilenmesi bir kaç dakika alabilir.\n\nŞu anlık sadece RTMP için destekli."
61
@@ -662,8 +675,8 @@
62
 Basic.Settings.Output.Simple.RecordingQuality.Small="Yüksek Kalite, Normal Dosya Boyutu"
63
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Aynı Kaliteye Yakın, Büyük Dosya Boyutu"
64
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Kayıpsız Kalite, Çok Büyük Dosya Boyutu"
65
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Uyarı: Yayın video bit hızı %1 olarak ayarlanacak, bu şu anki yayın hizmeti için üst sınırdır. Eğer %1 değerinin üstüne çıkmak istediğinizden eminseniz, gelişmiş kodlayıcı seçeneklerini etkinleştirin ve \"Yayın hizmetini bit hızı sınırlarına zorla\" işaretini kaldırın."
66
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Uyarı: Yayın audio bit hızı %1 olarak ayarlanacak, bu şu anki yayın hizmeti için üst sınırdır. Eğer %1 değerinin üstüne çıkmak istediğinizden eminseniz, gelişmiş kodlayıcı seçeneklerini etkinleştirin ve \"Yayın hizmetini bit hızı sınırlarına zorla\" işaretini kaldırın."
67
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Uyarı: Yayının vidyo bit hızı %1' e ayarlanacak, ki bu değer mevcut yayın hizmeti için üst sınırdır."
68
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Uyarı: Yayının ses bit hızı %1' e ayarlanacak, ki bu değer mevcut yayın hizmeti için üst sınırdır."
69
 Basic.Settings.Output.Simple.Warn.CannotPause="Dikkat: Kayıt kalitesi \"Yayın ile aynı\"ya ayarlanmışken kayıtlar durdurulamaz."
70
 Basic.Settings.Output.Simple.Warn.Encoder="Uyarı: Bir yazılım kodlayıcı ile yayın kalitesinden farklı kayıt yapmak eğer aynı anda hem kayıt hem de yayın yapıyorsanız ilave CPU kullanımı gerektirecektir."
71
 Basic.Settings.Output.Simple.Warn.Lossless="Uyarı: Kayıpsız kalite muazzam büyük dosya boyutları oluşturur! Kayıpsız kalite, yüksek çözünürlüklerde ve kare hızlarında, dakikada 7 gigabyte'a kadar disk alanı kullanabilir. Kayıpsız, kullanılabilir disk alanınız çok büyük değilse, uzun kayıtlar için tavsiye edilmez."
72
@@ -674,6 +687,11 @@
73
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Donanım (AMD)"
74
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Donanım (NVENC)"
75
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Yazılım (x264 düşük CPU kullanım önayarı, dosya boyutunu artırır)"
76
+Basic.Settings.Output.Simple.TwitchVodTrack="Twitch VOD Parçası (Parça 2'yi kullanır)"
77
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Uyumsuz Çözünürlük/Kare Hızı"
78
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Bu yayın hizmeti, mevcut çıkış çözünürlüğünüzü ve/veya kare hızınızı desteklemiyor. Bunlar, bu değerlere en yakın uyumlu değerlerle değiştirilecektir:\n\n%1\n\nDevam etmek istiyor musunuz?"
79
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Çözünürlük: %1"
80
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS: %1"
81
 Basic.Settings.Output.VideoBitrate="Video Bit Hızı"
82
 Basic.Settings.Output.AudioBitrate="Ses Bit Hızı"
83
 Basic.Settings.Output.Reconnect="Otomatik Yeniden Bağlan"
84
@@ -688,15 +706,16 @@
85
 Basic.Settings.Output.Adv.Rescale="Çıkışı Yeniden Boyutlandır"
86
 Basic.Settings.Output.Adv.AudioTrack="Ses Parçası"
87
 Basic.Settings.Output.Adv.Streaming="Yayın"
88
-Basic.Settings.Output.Adv.ApplyServiceSettings="Yayın hizmetini kodlayıcı ayarlarına zorla"
89
 Basic.Settings.Output.Adv.Audio.Track1="Parça 1"
90
 Basic.Settings.Output.Adv.Audio.Track2="Ses İzi 2"
91
 Basic.Settings.Output.Adv.Audio.Track3="Ses İzi 3"
92
 Basic.Settings.Output.Adv.Audio.Track4="Ses İzi 4"
93
 Basic.Settings.Output.Adv.Audio.Track5="Parça 5"
94
 Basic.Settings.Output.Adv.Audio.Track6="Parça 6"
95
+Basic.Settings.Output.Adv.TwitchVodTrack="Twitch VOD Parçası"
96
 
97
 Basic.Settings.Output.Adv.Recording="Kayıt"
98
+Basic.Settings.Output.Adv.Recording.RecType="Kaydetme Türü"
99
 Basic.Settings.Output.Adv.Recording.Type="Tür"
100
 Basic.Settings.Output.Adv.Recording.Type.Standard="Standart"
101
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Özel Çıkış (FFmpeg)"
102
@@ -824,13 +843,18 @@
103
 Basic.AdvAudio.ActiveOnly="Sadece Etkin Kaynaklar"
104
 Basic.AdvAudio.Name="İsim"
105
 Basic.AdvAudio.Volume="Ses"
106
+Basic.AdvAudio.VolumeSource="'%1' için ses seviyesi"
107
 Basic.AdvAudio.Mono="Mono"
108
+Basic.AdvAudio.MonoSource="'%1' için Mono Downmix"
109
 Basic.AdvAudio.Balance="Denge"
110
+Basic.AdvAudio.BalanceSource="'%1' için dengeleme"
111
 Basic.AdvAudio.SyncOffset="Eşitleme Uzaklığı"
112
+Basic.AdvAudio.SyncOffsetSource="'%1' için çıktıyı senkronize et"
113
 Basic.AdvAudio.Monitoring="Ses İzleme"
114
 Basic.AdvAudio.Monitoring.None="Ekran Kapalı"
115
 Basic.AdvAudio.Monitoring.MonitorOnly="Sadece Ekran (sessiz çıkış)"
116
 Basic.AdvAudio.Monitoring.Both="Ekran ve Çıkış"
117
+Basic.AdvAudio.MonitoringSource="'%1' için ses denetimi"
118
 Basic.AdvAudio.AudioTracks="Parçalar"
119
 
120
 Basic.Settings.Hotkeys="Kısayollar"
121
obs-studio-26.0.2.tar.xz/UI/data/locale/uk-UA.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/uk-UA.ini Changed
170
 
1
@@ -7,7 +7,7 @@
2
 Close="Закрити"
3
 Save="Зберегти"
4
 Discard="Відхилити"
5
-Disable="Вимкнуто"
6
+Disable="Вимкнено"
7
 Yes="Так"
8
 No="Ні"
9
 Add="Додати"
10
@@ -48,7 +48,7 @@
11
 Duplicate="Дублювати"
12
 Enable="Увімкнути"
13
 DisableOSXVSync="Вимкнути macOS V-Sync"
14
-ResetOSXVSyncOnExit="Відновити macOS V-Sync при виході"
15
+ResetOSXVSyncOnExit="Відновити macOS V-Sync під час виходу"
16
 HighResourceUsage="Кодування перевантажено! Треба знизити вимоги до налаштування відео або спробувати швидші налаштування енкодера."
17
 Transition="Монтажний перехід"
18
 QuickTransitions="Швидкі монтажні переходи"
19
@@ -161,6 +161,7 @@
20
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Від'єднати обліковий запис?"
21
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Ці зміни застосуються негайно. Справді від'єднати обліковий запис?"
22
 Basic.AutoConfig.StreamPage.GetStreamKey="Отримати ключ трансляції"
23
+Basic.AutoConfig.StreamPage.MoreInfo="Докладніше"
24
 Basic.AutoConfig.StreamPage.UseStreamKey="Використати ключ трансляції"
25
 Basic.AutoConfig.StreamPage.Service="Сервіс"
26
 Basic.AutoConfig.StreamPage.Service.ShowAll="Показати всі…"
27
@@ -189,8 +190,8 @@
28
 Basic.AutoConfig.TestPage.Result.RecordingEncoder="Кодувальник для запису"
29
 Basic.AutoConfig.TestPage.Result.Header="Програма визначила, що такі налаштування для вас найоптимальніші:"
30
 Basic.AutoConfig.TestPage.Result.Footer="Щоб використовувати ці налаштування, натисніть кнопку «Застосувати налаштування». Щоб переналаштувати майстер та спробувати знову – натисніть кнопку «Назад». Щоб налаштувати параметри самостійно – натисніть кнопку «Скасувати» та відкрийте «Налаштування»."
31
-Basic.AutoConfig.Info="Майстер автоконфігурації визначить найкращі налаштування на основі характеристик вашого комп'ютера та швидкості Інтернету."
32
-Basic.AutoConfig.RunAnytime="Його можна запустити в будь-який час, в меню «Інструменти»."
33
+Basic.AutoConfig.Info="Майстер з автоналаштування визначить найкращі параметри на основі характеристик вашого комп'ютера та швидкості Інтернету."
34
+Basic.AutoConfig.RunAnytime="Його можна запустити в будь-який час, в меню «Засоби»."
35
 
36
 Basic.Stats="Статистика"
37
 Basic.Stats.CPUUsage="Використання ЦП"
38
@@ -208,7 +209,7 @@
39
 Basic.Stats.Status.Inactive="Неактивний"
40
 Basic.Stats.Status.Active="Активовано"
41
 Basic.Stats.DroppedFrames="Пропущено кадрів (мережа)"
42
-Basic.Stats.MegabytesSent="Загалом вийшло даних"
43
+Basic.Stats.MegabytesSent="Загалом вихідних даних"
44
 Basic.Stats.Bitrate="Бітрейт"
45
 Basic.Stats.DiskFullIn="Диск заповниться через (прибл.)"
46
 Basic.Stats.ResetStats="Скинути статистику"
47
@@ -365,8 +366,8 @@
48
 Deinterlacing.TopFieldFirst="Спочатку непарні рядки"
49
 Deinterlacing.BottomFieldFirst="Спочатку парні рядки"
50
 
51
-VolControl.SliderUnmuted="Повзунок гучності для '%1': %2"
52
-VolControl.SliderMuted="Повзунок гучності для '%1': %2 (зараз заглушено)"
53
+VolControl.SliderUnmuted="Повзунок гучності для '%1':"
54
+VolControl.SliderMuted="Повзунок гучності для '%1': (зараз заглушено)"
55
 VolControl.Mute="Заглушити '%1'"
56
 VolControl.Properties="Параметри '%1'"
57
 
58
@@ -382,6 +383,7 @@
59
 
60
 AddProfile.Title="Додати профіль"
61
 AddProfile.Text="Будь ласка, введіть назву профілю"
62
+AddProfile.WizardCheckbox="Показувати майстер з автоналаштування"
63
 
64
 RenameProfile.Title="Перейменувати профіль"
65
 
66
@@ -396,6 +398,11 @@
67
 Basic.SourceSelect.AddExisting="Додати існуюче"
68
 Basic.SourceSelect.AddVisible="Зробити джерело видимим"
69
 
70
+Basic.Main.Sources.Visibility="Видимість"
71
+Basic.Main.Sources.VisibilityDescription="Контролює видимість '%1' на полотні"
72
+Basic.Main.Sources.Lock="Блокувати"
73
+Basic.Main.Sources.LockDescription="Фіксує позицію та масштаб «%1» на полотні"
74
+
75
 Basic.PropertiesWindow="Параметри '%1'"
76
 Basic.PropertiesWindow.AutoSelectFormat="%1 (автовибір: %2)"
77
 Basic.PropertiesWindow.SelectColor="Вибрати колір"
78
@@ -531,7 +538,7 @@
79
 Basic.MainMenu.Edit.Order.MoveUp="Вище (&U)"
80
 Basic.MainMenu.Edit.Order.MoveDown="Нижче (&D)"
81
 Basic.MainMenu.Edit.Order.MoveToTop="Перемістити вгору (&T)"
82
-Basic.MainMenu.Edit.Order.MoveToBottom="Вниз (&B)"
83
+Basic.MainMenu.Edit.Order.MoveToBottom="Перемістити вниз (&B)"
84
 Basic.MainMenu.Edit.AdvAudio="Розширені властивості аудіо (&A)"
85
 
86
 Basic.MainMenu.View="Вигляд (&V)"
87
@@ -635,13 +642,19 @@
88
 Basic.Settings.Stream.MissingUrlAndApiKey="URL-адреса та ключ трансляції відсутні.\n\nВідкрийте налаштування, щоб вказати URL-адресу та ключ трансляції на вкладці «Трансляція»."
89
 Basic.Settings.Stream.MissingUrl="URL-адреса трансляції відсутня.\n\nВідкрийте налаштування, щоб вказати URL-адресу трансляції на вкладці «Трансляція»."
90
 Basic.Settings.Stream.MissingStreamKey="Ключ трансляції відсутній.\n\nВідкрийте налаштування, щоб вказати ключ трансляції на вкладці «Трансляція»."
91
+Basic.Settings.Stream.IgnoreRecommended="Нехтувати порадами служби трансляцій щодо налаштувань"
92
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Перевизначення рекомендованих налаштувань"
93
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Попередження: Нехтування обмеженнями може призвести до погіршення якості потокового відео або завадити потоковій передачі.\n\nПродовжити?"
94
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Найбільший бітрейт відео: %1 Кбіт/с"
95
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Найбільший бітрейт звуку: %1 Кбіт/с"
96
+Basic.Settings.Stream.Recommended.MaxResolution="Найбільша роздільна здатність: %1"
97
+Basic.Settings.Stream.Recommended.MaxFPS="Найбільша частота кадрів на секунду: %1"
98
 
99
 Basic.Settings.Output="Вивід"
100
 Basic.Settings.Output.Format="Формат запису"
101
 Basic.Settings.Output.Encoder="Кодувальник"
102
 Basic.Settings.Output.SelectDirectory="Виберіть каталог записів"
103
 Basic.Settings.Output.SelectFile="Виберіть файл запису"
104
-Basic.Settings.Output.EnforceBitrate="Примусово обмежувати бітрейт згідно з правилами сервісу трансляцій"
105
 Basic.Settings.Output.DynamicBitrate="Динамічно змінювати бітрейт підлаштовуючись під мережу"
106
 Basic.Settings.Output.DynamicBitrate.Beta="Динамічно змінювати бітрейт підлаштовуючись під мережу (бета)"
107
 Basic.Settings.Output.DynamicBitrate.TT="Замість пропуску кадрів динамічно змінює бітрейт на ходу, підлаштовуючись під мережу.\n\nЗауважте, що це може збільшити затримку для глядачів, якщо є значні раптові помилки мережі.\nВідновлення бітрейту до початкового значення після падіння, може зайняти до кількох хвилин.\n\nНаразі підтримується лише для RTMP протоколу."
108
@@ -662,8 +675,8 @@
109
 Basic.Settings.Output.Simple.RecordingQuality.Small="Висока якість, середній розмір файлу"
110
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Надзвичайна якість, великий розмір файлу"
111
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Без втрат якості, надзвичайно великий розмір файлу"
112
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Попередження: бітрейт відео в трансляції буде встановлено %1, що є верхньою межею для обраного сервісу трансляцій. Якщо ви впевнені, що хочете встановити бітрейт вищий за %1 – увімкніть розширені налаштування кодувальника, та зніміть прапорець «Примусово обмежувати бітрейт згідно з правилами сервісу трансляцій»."
113
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Попередження: бітрейт аудіо в трансляції буде встановлено %1, що є верхньою межею для обраного сервісу трансляцій. Якщо ви впевнені, що хочете встановити бітрейт вищий за %1 – увімкніть розширені налаштування кодувальника, та зніміть прапорець «Примусово обмежувати бітрейт згідно з правилами сервісу трансляцій»."
114
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Увага: Буде встановлено бітрейт потокового відео %1, що є верхньою межею поточнї служби трансляцій."
115
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Увага: Буде встановлено бітрейт звуку %1, що є верхньою межею поточнї служби трансляцій."
116
 Basic.Settings.Output.Simple.Warn.CannotPause="Попередження: записи не можна призупиняти, якщо для якості запису встановлено значення «Така ж як у трансляції»."
117
 Basic.Settings.Output.Simple.Warn.Encoder="Попередження: запис програмним кодувальником з якістю, відмінною від якості трансляції, спричиняє додаткове навантаження на центральний процесор при одночасному використанні трансляції та запису."
118
 Basic.Settings.Output.Simple.Warn.Lossless="Попередження: якість без втрат генерує надзвичайно великі розміри файлів! Може використовуватись понад 7 гігабайтів дискового простору за хвилину при високих роздільній здатності та частоті кадрів. Якість без втрат не рекомендується для тривалого запису, хіба що у вас є дуже великий обсяг вільного дискового простору."
119
@@ -674,6 +687,11 @@
120
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Апаратний (AMD)"
121
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Апаратний (NVENC)"
122
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Програмний (шаблон x264 з низьким навантаженням на ЦП, збільшує розмір файлу)"
123
+Basic.Settings.Output.Simple.TwitchVodTrack="Доріжка Twitch VOD (Використовується доріжка 2)"
124
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Несумісна роздільна здатність/частота кадрів"
125
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Ця служба трансляцій не підтримує поточну роздільну здатність виводу та/або частоту кадрів. Їх буде змінено на найближче сумісне значення:\n\n%1\n\nБажаєте продовжити?"
126
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Роздільна здатність: %1"
127
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="Кадрів на секунду: %1"
128
 Basic.Settings.Output.VideoBitrate="Бітрейт відео"
129
 Basic.Settings.Output.AudioBitrate="Бітрейт аудіо"
130
 Basic.Settings.Output.Reconnect="Автоматично перепідключатися"
131
@@ -687,16 +705,17 @@
132
 
133
 Basic.Settings.Output.Adv.Rescale="Змінити масштаб виводу"
134
 Basic.Settings.Output.Adv.AudioTrack="Звукова доріжка"
135
-Basic.Settings.Output.Adv.Streaming="Потокова передача"
136
-Basic.Settings.Output.Adv.ApplyServiceSettings="Примусово застосувати налаштування кодувальника із сервісу трансляцій"
137
+Basic.Settings.Output.Adv.Streaming="Трансляція"
138
 Basic.Settings.Output.Adv.Audio.Track1="Доріжка 1"
139
 Basic.Settings.Output.Adv.Audio.Track2="Доріжка 2"
140
 Basic.Settings.Output.Adv.Audio.Track3="Доріжка 3"
141
 Basic.Settings.Output.Adv.Audio.Track4="Доріжка 4"
142
 Basic.Settings.Output.Adv.Audio.Track5="Доріжка 5"
143
 Basic.Settings.Output.Adv.Audio.Track6="Доріжка 6"
144
+Basic.Settings.Output.Adv.TwitchVodTrack="Доріжка Twitch VOD"
145
 
146
 Basic.Settings.Output.Adv.Recording="Записування"
147
+Basic.Settings.Output.Adv.Recording.RecType="Тип запису"
148
 Basic.Settings.Output.Adv.Recording.Type="Тип"
149
 Basic.Settings.Output.Adv.Recording.Type.Standard="Стандартний"
150
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Власний вивід (FFmpeg)"
151
@@ -824,13 +843,18 @@
152
 Basic.AdvAudio.ActiveOnly="Лише активні джерела"
153
 Basic.AdvAudio.Name="Назва"
154
 Basic.AdvAudio.Volume="Гучність"
155
+Basic.AdvAudio.VolumeSource="Гучність для «%1»"
156
 Basic.AdvAudio.Mono="Моно"
157
+Basic.AdvAudio.MonoSource="Mono Downmix для «%1»"
158
 Basic.AdvAudio.Balance="Баланс"
159
+Basic.AdvAudio.BalanceSource="Баланс для «%1»"
160
 Basic.AdvAudio.SyncOffset="Зсув синхронізації"
161
+Basic.AdvAudio.SyncOffsetSource="Синхронізувати зсув для «%1»"
162
 Basic.AdvAudio.Monitoring="Прослуховування звуку"
163
 Basic.AdvAudio.Monitoring.None="Прослуховування вимкнено"
164
 Basic.AdvAudio.Monitoring.MonitorOnly="Тільки прослуховування (заглушити вивід)"
165
 Basic.AdvAudio.Monitoring.Both="Прослуховування та вивід"
166
+Basic.AdvAudio.MonitoringSource="Моніторинг звуку для «%1»"
167
 Basic.AdvAudio.AudioTracks="Доріжки"
168
 
169
 Basic.Settings.Hotkeys="Гарячі клавіші"
170
obs-studio-26.0.2.tar.xz/UI/data/locale/ur-PK.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/ur-PK.ini Changed
95
 
1
@@ -77,29 +77,49 @@
2
 Auth.Authing.Title="توثیق کر رہا ہے..."
3
 Auth.AuthFailure.Title="تصدیق کی ناکامی"
4
 Auth.Chat="گفتگو"
5
+Auth.StreamInfo="نشر معلومات"
6
 
7
 
8
 
9
+BandwidthTest.Region="مقام"
10
+BandwidthTest.Region.US="ریاست متحد امریکہ"
11
 BandwidthTest.Region.EU="یورپ"
12
 BandwidthTest.Region.Asia="ایشیا"
13
 BandwidthTest.Region.Other="دیگر"
14
 
15
+Basic.AutoConfig.ApplySettings="تبدیلیاں لاگو کریں"
16
 Basic.AutoConfig.VideoPage="ویڈیو سیٹنگز"
17
+Basic.AutoConfig.StreamPage="نشر معلومات"
18
+Basic.AutoConfig.StreamPage.MoreInfo="مزید معلومات"
19
+Basic.AutoConfig.StreamPage.Service.ShowAll="سارے دکھائیں..."
20
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(لنک)"
21
+Basic.AutoConfig.StreamPage.StreamWarning.Title="نشریات تنبیع"
22
 
23
+Basic.Stats.Output.Stream="نشریات"
24
+Basic.Stats.Status="حال"
25
+Basic.Stats.Status.Live="براہِ راست"
26
 
27
 
28
+Updater.UpdateNow="تازہ کریں"
29
+Updater.RemindMeLater="بعد میں پتانا"
30
 
31
 
32
 
33
 
34
 
35
+NameExists.Title="نام پہلے سے موجود ہے"
36
 
37
 
38
 
39
+ConfirmStop.Text="کیا آپ نشریات کو بالکل روکنا چاہتے ہیں؟"
40
 
41
 
42
 
43
+ConfirmExit.Title="و ب س بند کریں؟"
44
+ConfirmExit.Text="و ب س فالحال چل رہا ہے، تمام نشریات اور رکوڈنگز رک گائیں گے۔ کیا آپ بالکل بند کرنا چاہتے ہیں؟"
45
 
46
+ConfirmRemove.Title="مٹان کی تصدیق"
47
+ConfirmRemove.Text="کیا آپ بالکل '$1' کو مٹانا چاہتے ہیں؟"
48
 
49
 
50
 
51
@@ -126,6 +146,8 @@
52
 
53
 
54
 
55
+Basic.SourceSelect.CreateNew="نیا بنائیں"
56
+Basic.SourceSelect.AddExisting="موجودہ استعمال کریں"
57
 
58
 
59
 
60
@@ -137,24 +159,34 @@
61
 
62
 
63
 
64
+Basic.Main.StopStreaming="نشریات روکیں"
65
+Basic.Main.StoppingStreaming="نشریات روکی جا رہی ہے..."
66
+Basic.Main.ForceStopStreaming="نشریات روکیں (اسی وقت)"
67
 
68
 
69
 
70
+Basic.MainMenu.View="&دیدار"
71
 
72
 
73
+Basic.MainMenu.Tools="&آلات"
74
 
75
+Basic.MainMenu.Help="&مدد"
76
+Basic.MainMenu.Help.Website="&ویبسائٹ پر جائیں"
77
 
78
 
79
 
80
 
81
 
82
 
83
+Basic.Settings.Output.Adv.FFmpeg.FormatAudio="آواز"
84
 
85
 
86
 
87
 
88
 
89
 
90
+Basic.Settings.Audio="آواز"
91
+
92
 
93
 
94
 
95
obs-studio-26.0.2.tar.xz/UI/data/locale/vi-VN.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/vi-VN.ini Changed
332
 
1
@@ -51,70 +51,70 @@
2
 ResetOSXVSyncOnExit="Đặt lại OSX V-Sync khi Thoát"
3
 HighResourceUsage="Bộ mã hóa bị quá tải! Hãy xem xét giảm chất lượng video hoặc sử dụng bộ mã hóa nhanh hơn."
4
 Transition="Chuyển cảnh"
5
-QuickTransitions="C. cảnh nhanh"
6
+QuickTransitions="Chuyển cảnh nhanh"
7
 FadeToBlack="Đen dần"
8
 Left="Trái"
9
 Right="Phải"
10
 Top="Trên"
11
 Bottom="Dưới"
12
-Reset="Thiết lập lại"
13
+Reset="Cài lại"
14
 Hours="Giờ"
15
 Minutes="Phút"
16
 Seconds="Giây"
17
-Deprecated="Dừng cập nhật"
18
-ReplayBuffer="Replay Buffer"
19
+Deprecated="Loại bỏ"
20
+ReplayBuffer="Lưu trữ đệm"
21
 Import="Nhập"
22
 Export="Xuất"
23
 Copy="Chép"
24
 Paste="Dán"
25
-PasteReference="Dán (Tham khảo)"
26
+PasteReference="Dán (Mẫu)"
27
 PasteDuplicate="Dán (Bản sao)"
28
-RemuxRecordings="Ghép lại các bản ghi"
29
+RemuxRecordings="Ghép bản ghi"
30
 Next="Tiếp tục"
31
 Back="Quay lại"
32
 Defaults="Mặc định"
33
-HideMixer="Ẩn trong bộ trộn"
34
-TransitionOverride="Ghi đè chuyển tiếp"
35
-None="Không có"
36
+HideMixer="Ẩn trong Bộ trộn"
37
+TransitionOverride="Ghi đè chuyển cảnh"
38
+None="Không"
39
 StudioMode.Preview="Xem trước"
40
 StudioMode.Program="Chương trình"
41
 ShowInMultiview="Xem trong Đa góc nhìn"
42
-VerticalLayout="Bố cục dọc"
43
+VerticalLayout="Chiều dọc"
44
 Group="Nhóm"
45
-DoNotShowAgain="Không hiện lại thông báo nữa"
46
+DoNotShowAgain="Không hiện thị lại"
47
 Default="(Mặc định)"
48
-Calculating="Đang tính toán..."
49
+Calculating="Đang tính..."
50
 Fullscreen="Toàn màn hình"
51
 Windowed="Dạng cửa sổ"
52
 Percent="Phần trăm"
53
 RefreshBrowser="Làm mới"
54
-AspectRatio="Tỉ lệ hiển thị <b>%1:%2</b>"
55
+AspectRatio="Tỉ lệ khung hình <b>%1:%2</b>"
56
 LockVolume="Khoá âm lượng"
57
 LogViewer="Xem log"
58
-ShowOnStartup="Hiện lên khi khởi động nguồn"
59
+ShowOnStartup="Hiện thị khi khởi động"
60
 OpenFile="Mở tệp"
61
 AddValue="Thêm %1"
62
 
63
-AlreadyRunning.Title="OBS đã chạy"
64
-AlreadyRunning.Text="OBS đã chạy rồi! Trừ khi bạn muốn làm điều này, xin vui lòng tắt mọi chương trình hiện tại của OBS trước khi cố gắng chạy một chương trình mới. Nếu bạn có OBS thiết lập để thu nhỏ trên khay hệ thống, xin vui lòng kiểm tra để xem nếu nó vẫn đang chạy hay không."
65
-AlreadyRunning.LaunchAnyway="Khởi động luôn"
66
+AlreadyRunning.Title="OBS hiện đang chạy"
67
+AlreadyRunning.Text="OBS hiện đang chạy! Trừ khi bạn muốn tiếp tục, xin vui lòng tắt mọi cửa sổ hiện tại của OBS trước khi cố gắng khởi chạy một cửa sổ mới. Nếu bạn để OBS ở trạng thái thu nhỏ trên thanh tác vụ, xin vui lòng kiểm tra xem ứng dụng có đang chạy hay không."
68
+AlreadyRunning.LaunchAnyway="Tiếp tục khởi động"
69
 
70
 ChromeOS.Title="Nền tảng không được hỗ trợ"
71
-ChromeOS.Text="Có vẻ OBS đang được chạy trên ChromeOS. Nền tảng này không được hỗ trợ"
72
+ChromeOS.Text="Có vẻ như OBS đang được chạy trên ChromeOS. Nền tảng này không được hỗ trợ"
73
 
74
-DockCloseWarning.Title="Đóng cửa sổ gắn đế được"
75
-DockCloseWarning.Text="Bạn vừa đóng một cửa số gắn đế được. Nếu bạn muốn hiển thị lại lần nữa, sử dụng trình đơn Hiển thị → Thanh đế trên thanh trình đơn."
76
+DockCloseWarning.Title="Đóng cửa sổ cố định được"
77
+DockCloseWarning.Text="Bạn vừa đóng một cửa số cố định được. Nếu bạn muốn hiển thị lại, lựa chọn Hiển thị → Cố định trên thanh công cụ."
78
 
79
-ExtraBrowsers="Thanh đế trình duyệt tùy chỉnh"
80
-ExtraBrowsers.Info="Thêm thanh đế bằng cách đặt tên và URL cho nó rồi nháy nút Áp dụng hoặc Đóng để mở thanh đế. Bạn có thể thêm hoặc xóa thanh đế bất kỳ lúc nào."
81
-ExtraBrowsers.DockName="Tên thanh đế"
82
+ExtraBrowsers="Trình duyệt tùy chỉnh cố định"
83
+ExtraBrowsers.Info="Thêm cố định bằng cách đặt tên và URL, rồi chọn Áp dụng hoặc Đóng để mở cố định. Bạn có thể thêm hoặc xóa cố định bất kỳ lúc nào."
84
+ExtraBrowsers.DockName="Tên cố định"
85
 
86
 Auth.Authing.Title="Đang xác thực..."
87
-Auth.Authing.Text="Đang xác thực với %1, chờ lát..."
88
+Auth.Authing.Text="Đang xác thực với %1, vui lòng chờ..."
89
 Auth.AuthFailure.Title="Xác thực không thành công"
90
 Auth.AuthFailure.Text="Không xác thực được với %1:\n\n%2: %3"
91
 Auth.InvalidScope.Title="Bắt buộc phải xác thực"
92
-Auth.InvalidScope.Text="Những yêu cầu cần có để xác thực cho %1 đã thay đổi. Một số tính năng sẽ không có dùng được."
93
+Auth.InvalidScope.Text="Yêu cầu xác thực cho %1 đã thay đổi. Một số tính năng có thể sẽ không còn."
94
 Auth.LoadingChannel.Title="Đang tải thông tin kênh..."
95
 Auth.LoadingChannel.Text="Đang tải thông tin về kênh cho %1, chờ lát..."
96
 Auth.ChannelFailure.Title="Bị lỗi khi nạp kênh"
97
@@ -122,9 +122,9 @@
98
 Auth.Chat="Tán gẫu"
99
 Auth.StreamInfo="Thông tin luồng phát"
100
 TwitchAuth.Stats="Thống kê Twitch"
101
-TwitchAuth.Feed="Bảng tin hoạt động Twitch"
102
+TwitchAuth.Feed="Bảng tin Twitch"
103
 TwitchAuth.TwoFactorFail.Title="Không thể truy vấn khóa luồng"
104
-TwitchAuth.TwoFactorFail.Text="OBS không thể kết nối với tài khoản Twitch của ban. Hãy chắc rằng xác minh 2 lớp đã được bật ở phần<a href='https://www.twitch.tv/settings/security'>cài đặt bảo mật Twitch</a> vì điều này là cần để phát luồng."
105
+TwitchAuth.TwoFactorFail.Text="OBS không thể kết nối với tài khoản Twitch của bạn. Hãy chắc rằng xác minh 2 lớp đã được bật ở phần<a href='https://www.twitch.tv/settings/security'>cài đặt bảo mật Twitch</a> vì điều này là cần để phát luồng."
106
 RestreamAuth.Channels="Kênh Restream"
107
 
108
 Copy.Filters="Sao chép các bộ lọc"
109
@@ -161,6 +161,7 @@
110
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Ngắt kết nối tài khoản?"
111
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Thay đổi này sẽ được áp dụng ngay lập tức. Bạn có chắc là bạn muốn ngắt kết nối tài khoản của bạn?"
112
 Basic.AutoConfig.StreamPage.GetStreamKey="Lấy khóa luồng"
113
+Basic.AutoConfig.StreamPage.MoreInfo="Thêm thông tin"
114
 Basic.AutoConfig.StreamPage.UseStreamKey="Dùng khóa luồng phát"
115
 Basic.AutoConfig.StreamPage.Service="Dịch vụ"
116
 Basic.AutoConfig.StreamPage.Service.ShowAll="Hiện tất cả..."
117
@@ -232,7 +233,9 @@
118
 QuickTransitions.SwapScenes="Hoán đổi cảnh Xem trước/Đầu ra sau khi Chuyển cảnh"
119
 QuickTransitions.SwapScenesTT="Hoán đổi cảnh xem trước và cảnh đầu ra sau khi chuyển cảnh (nếu cảnh đầu ra gốc vẫn tồn tại).\nMọi thay đổi với cảnh đầu ra gốc sẽ không hoàn tác."
120
 QuickTransitions.DuplicateScene="Tạo bản sao cảnh"
121
+QuickTransitions.DuplicateSceneTT="Khi chỉnh sửa trong cùng một cảnh, cho phép biến đổi bản sửa/hiển thị bản gốc mà không làm thay đổi bản xuất ra.\nĐể chỉnh sửa cấu hình bản gốc mà không thay đổi bản xuất ra, chọn 'Sao chép Bản gốc'.\nThay đổi lựa chọn này sẽ cài đặt lại bản xuất ra hiện tại (nếu bản đó vẫn còn tồn tại)."
122
 QuickTransitions.EditProperties="Bản sao nguồn"
123
+QuickTransitions.EditPropertiesTT="Khi chỉnh sửa trong cùng một cảnh, cho phép chỉnh sửa cấu hình bản gốc mà không ảnh hưởng đến bản xuất ra.\nChức năng chỉ được sử dụng khi chọn 'Sao chép Cảnh'.\nMột vài bản gốc (như ảnh chụp hoặc phương tiện gốc) không hỗ trợ chức năng này và không thể chỉnh sửa riêng.\nThay đổi lựa chọn này sẽ cài đặt lại bản xuất ra hiện tại (nếu bản đó vẫn còn tồn tại).\n\nChú ý: Hệ thống hoặc tài nguyên video có thể được sử dụng nhiều hơn vì chức năng sao chép bản gốc này."
124
 QuickTransitions.HotkeyName="C. cảnh nhanh: %1"
125
 
126
 Basic.AddTransition="Thêm cấu hình chuyển cảnh"
127
@@ -363,8 +366,6 @@
128
 Deinterlacing.TopFieldFirst="Trường đầu tiên"
129
 Deinterlacing.BottomFieldFirst="Trường dưới cùng trước"
130
 
131
-VolControl.SliderUnmuted="Thanh trượt âm lượng cho '%1': %2"
132
-VolControl.SliderMuted="Thanh trượt âm lượng cho '%1': %2 (hiện đang tắt tiếng)"
133
 VolControl.Mute="Tắt tiếng '%1'"
134
 VolControl.Properties="Thuộc tính '%1'"
135
 
136
@@ -380,6 +381,7 @@
137
 
138
 AddProfile.Title="Thêm cấu hình"
139
 AddProfile.Text="Vui lòng nhập tên cấu hình"
140
+AddProfile.WizardCheckbox="Hiện thuật sĩ tự cấu hình"
141
 
142
 RenameProfile.Title="Đổi tên cấu hình"
143
 
144
@@ -394,6 +396,8 @@
145
 Basic.SourceSelect.AddExisting="Thêm sẵn có"
146
 Basic.SourceSelect.AddVisible="Làm cho nguồn có thể nhìn thấy"
147
 
148
+Basic.Main.Sources.Lock="Khoá"
149
+
150
 Basic.PropertiesWindow="Thuộc tính '%1'"
151
 Basic.PropertiesWindow.AutoSelectFormat="%1 (autoselect: %2)"
152
 Basic.PropertiesWindow.SelectColor="Chọn Màu"
153
@@ -480,6 +484,8 @@
154
 Basic.Main.StopStreaming="Ngừng phát luồng"
155
 Basic.Main.StoppingStreaming="Đang dừng stream..."
156
 Basic.Main.ForceStopStreaming="Ngừng phát luồng (huỷ chậm trễ)"
157
+Basic.Main.ShowContextBar="Hiển thị Thanh công cụ Nguồn"
158
+Basic.Main.HideContextBar="Ẩn Thanh công cụ Nguồn"
159
 Basic.Main.StopVirtualCam="Dừng máy quay ảo"
160
 Basic.Main.Group="Nhóm %1"
161
 Basic.Main.GroupItems="Nhóm đã chọn"
162
@@ -536,6 +542,8 @@
163
 Basic.MainMenu.View.Docks.ResetUI="Đặt lại UI"
164
 Basic.MainMenu.View.Docks.LockUI="Khóa UI"
165
 Basic.MainMenu.View.Docks.CustomBrowserDocks="Thanh đế trình duyệt tùy chỉnh..."
166
+Basic.MainMenu.View.ListboxToolbars="Danh sách nút Cảnh/Nguồn"
167
+Basic.MainMenu.View.ContextBar="Thanh công cụ Nguồn"
168
 Basic.MainMenu.View.SceneTransitions="Chuyển cảnh"
169
 Basic.MainMenu.View.SourceIcons="B&iểu tượng nguồn"
170
 Basic.MainMenu.View.StatusBar="Thanh trạng thái (&S)"
171
@@ -585,6 +593,8 @@
172
 Basic.Settings.General.Snapping="Chụp liên kết nguồn"
173
 Basic.Settings.General.ScreenSnapping="Nguồn Snap đến cạnh màn hình"
174
 Basic.Settings.General.CenterSnapping="Chụp nguồn vào trung tâm ngang và dọc"
175
+Basic.Settings.General.SourceSnapping="Kéo nguồn tới các nguồn khác"
176
+Basic.Settings.General.SnapDistance="Độ nhạy kéo"
177
 Basic.Settings.General.RecordWhenStreaming="Tự động ghi hình khi phát luồng"
178
 Basic.Settings.General.KeepRecordingWhenStreamStops="Quay tiếp khi dừng stream"
179
 Basic.Settings.General.ReplayBufferWhileStreaming="Tự động bắt đầu replay buffer khi stream"
180
@@ -592,10 +602,14 @@
181
 Basic.Settings.General.SysTray="Khay hệ thống"
182
 Basic.Settings.General.SysTrayWhenStarted="Thu nhỏ về khay hệ thống khi bắt đầu"
183
 Basic.Settings.General.SystemTrayHideMinimize="Luôn luôn thu nhỏ về khay hệ thống thay vì thanh tác vụ"
184
+Basic.Settings.General.SaveProjectors="Lưu màn hình chiếu khi thoát"
185
 Basic.Settings.General.Preview="Xem trước"
186
 Basic.Settings.General.OverflowHidden="Ẩn phần tràn"
187
+Basic.Settings.General.OverflowAlwaysVisible="Luôn hiện thị tràn khung hình"
188
+Basic.Settings.General.OverflowSelectionHidden="Hiển thị tràn khung hình khi không thấy nguồn"
189
 Basic.Settings.General.Importers="Bộ nhập"
190
 Basic.Settings.General.AutomaticCollectionSearch="Tìm kiếm các bộ sưu tập cảnh ở các địa điểm đã biết khi nhập"
191
+Basic.Settings.General.SwitchOnDoubleClick="Nháy đúp chuột để chuyển cảnh"
192
 Basic.Settings.General.StudioPortraitLayout="Bật bố cục theo chiều ngang/dọc"
193
 Basic.Settings.General.TogglePreviewProgramLabels="Hiện nhãn của xem trước/chương trình"
194
 Basic.Settings.General.Multiview="Đa góc nhìn"
195
@@ -623,13 +637,17 @@
196
 Basic.Settings.Stream.MissingUrlAndApiKey="URL và khoá luồng đang bị thiếu.\n\nMở thiết đặt để nhập URL và khoá luồng trong thẻ 'luồng'."
197
 Basic.Settings.Stream.MissingUrl="URL luồng đang bị thiếu. \n\nMở thiết đặt để nhập URL trong thẻ 'Luồng'."
198
 Basic.Settings.Stream.MissingStreamKey="Khoá luồng đang bị thiếu. \n\nMở thiết đặt để nhập khoả luồng trong thẻ 'Luồng'."
199
+Basic.Settings.Stream.Recommended.MaxResolution="Độ phân giải tối đa: %1"
200
+Basic.Settings.Stream.Recommended.MaxFPS="FPS tối đa: %1"
201
 
202
 Basic.Settings.Output="Đầu ra"
203
 Basic.Settings.Output.Format="Định dạng ghi âm"
204
 Basic.Settings.Output.Encoder="Mã hóa"
205
 Basic.Settings.Output.SelectDirectory="Chọn thư mục ghi âm"
206
 Basic.Settings.Output.SelectFile="Chọn tập tin ghi âm"
207
-Basic.Settings.Output.EnforceBitrate="Bắt buộc phải giới hạn tốc độ bit dịch vụ phát luồng"
208
+Basic.Settings.Output.DynamicBitrate="Điều chỉnh tốc độ bit linh hoạt để quản lý tắc nghẽn mạng"
209
+Basic.Settings.Output.DynamicBitrate.Beta="Điều chỉnh tốc độ bit linh hoạt để quản lý tắc nghẽn mạng (Bản Beta)"
210
+Basic.Settings.Output.DynamicBitrate.TT="Thay vì hạ khung hình để giảm tắc nghẽn mạng, có thể ngay lập tức điều chỉnh tốc độ bit linh hoạt.\n\nChú ý điều này có thể dẫn đến tăng độ trễ với người xem nếu xuất hiện một lượng tắc nghẽn lớn.\nNếu sụt tốc độ bit có thể mất một vài phút để khôi phục.\n\nHiện tại chỉ hỗ trợ RTMP."
211
 Basic.Settings.Output.Mode="Đầu ra chế độ"
212
 Basic.Settings.Output.Mode.Simple="Dễ sử dụng"
213
 Basic.Settings.Output.Mode.Adv="Nâng cao"
214
@@ -639,6 +657,7 @@
215
 Basic.Settings.Output.ReplayBuffer.MegabytesMax="Bộ nhớ tối đa (Megabyte)"
216
 Basic.Settings.Output.ReplayBuffer.Estimate="Ước tính bộ nhớ sử dụng: %1 MB"
217
 Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Không thể ước tính sử dụng bộ nhớ. Xin vui lòng thiết lập giới hạn bộ nhớ tối đa."
218
+Basic.Settings.Output.ReplayBuffer.Prefix="Tiền tố tên tệp lưu Replay"
219
 Basic.Settings.Output.ReplayBuffer.Suffix="Hậu tố"
220
 Basic.Settings.Output.Simple.SavePath="Đường dẫn ghi âm"
221
 Basic.Settings.Output.Simple.RecordingQuality="Chất lượng ghi âm"
222
@@ -656,6 +675,9 @@
223
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Phần cứng (AMD)"
224
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Phần cứng (NVENC)"
225
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Phần mềm (x 264 sử dụng CPU thấp cài sẵn, tăng kích thước)"
226
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Tốc độ khung hình / độ phân giải không tương thích"
227
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Độ phân giải: %1"
228
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS: %1"
229
 Basic.Settings.Output.VideoBitrate="Tộc độ bit video"
230
 Basic.Settings.Output.AudioBitrate="Tốc độ bit âm thanh"
231
 Basic.Settings.Output.Reconnect="Tự động kết nối"
232
@@ -670,7 +692,6 @@
233
 Basic.Settings.Output.Adv.Rescale="Rescale đầu ra"
234
 Basic.Settings.Output.Adv.AudioTrack="Dải âm thanh"
235
 Basic.Settings.Output.Adv.Streaming="Phát luồng"
236
-Basic.Settings.Output.Adv.ApplyServiceSettings="Thực thi cài đặt mã hóa dịch vụ trực tuyến"
237
 Basic.Settings.Output.Adv.Audio.Track1="Dải âm 1"
238
 Basic.Settings.Output.Adv.Audio.Track2="Dải âm 2"
239
 Basic.Settings.Output.Adv.Audio.Track3="Dải âm 3"
240
@@ -679,6 +700,7 @@
241
 Basic.Settings.Output.Adv.Audio.Track6="Dải âm 6"
242
 
243
 Basic.Settings.Output.Adv.Recording="Đang ghi"
244
+Basic.Settings.Output.Adv.Recording.RecType="Loại ghi hình"
245
 Basic.Settings.Output.Adv.Recording.Type="Loại"
246
 Basic.Settings.Output.Adv.Recording.Type.Standard="Chuản"
247
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Tùy chỉnh đầu ra (FFmpeg)"
248
@@ -708,7 +730,9 @@
249
 Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Hiển thị tất cả các bộ mã hóa (ngay cả khi không tương thích)"
250
 
251
 Screenshot="Đầu ra chụp màn hình"
252
+Screenshot.SourceHotkey="Chụp màn hình Nguồn được chọn"
253
 Screenshot.StudioProgram="Chụp màn hình (Chương trình)"
254
+Screenshot.Preview="Chụp màn hình (Xem trước)"
255
 Screenshot.Scene="Chụp màn hình (Cảnh)"
256
 Screenshot.Source="Chụp màn hình (Nguồn)"
257
 
258
@@ -734,6 +758,7 @@
259
 Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (nhanh nhất, nhưng mờ nếu rộng)"
260
 Basic.Settings.Video.DownscaleFilter.Bicubic="Bicubic (Sharpened rộng, 16 mẫu)"
261
 Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (Sharpened rộng, 36 mẫu)"
262
+Basic.Settings.Video.DownscaleFilter.Area="Vùng (Tổng trọng số, mẫu 4/6/9)"
263
 
264
 Basic.Settings.Audio="Âm thanh"
265
 Basic.Settings.Audio.SampleRate="Tỷ lệ mẫu"
266
@@ -743,7 +768,11 @@
267
 Basic.Settings.Audio.MeterDecayRate.Fast="Nhanh"
268
 Basic.Settings.Audio.MeterDecayRate.Medium="Trung bình (Loại I PPM)"
269
 Basic.Settings.Audio.MeterDecayRate.Slow="Chậm (Loại II PPM)"
270
+Basic.Settings.Audio.PeakMeterType="Loại công cụ đo cực đại"
271
+Basic.Settings.Audio.PeakMeterType.SamplePeak="Âm thu cực đại"
272
+Basic.Settings.Audio.PeakMeterType.TruePeak="Âm thực cực đại (Sử dụng nhiều CPU hơn)"
273
 Basic.Settings.Audio.MultiChannelWarning.Enabled="CẢNH BÁO: Âm thanh vòm đang kích hoạt."
274
+Basic.Settings.Audio.MultichannelWarning="Khi truyền phát, hãy kiểm tra xem dịch vụ truyền phát của bạn có hỗ trợ cả âm thanh vòm tích hợp và phát lại. Facebook 360 Live là một ví dụ hỗ trợ hoàn toàn âm thanh vòm. Tuy Facebook Live và Youtube Live đều cho phép âm thanh vòm tích hợp, Facebook Live dùng bộ trộn downmix để phát âm thanh, còn Youtube Live lại xuất ra hai kênh.\n\nHệ thống lọc âm của OBS tương thích với âm thanh vòm tuy plugin bổ trợ chưa chắc được hỗ trợ."
275
 Basic.Settings.Audio.MultichannelWarning.Title="Kích hoạt âm thanh vòm?"
276
 Basic.Settings.Audio.MultichannelWarning.Confirm="Bạn có chắc chắc muốn kích hoạt âm thanh vòm?"
277
 Basic.Settings.Audio.Devices="Thiết bị âm thanh chung"
278
@@ -776,6 +805,7 @@
279
 Basic.Settings.Advanced.Video.ColorRange.Full="Đầy đủ"
280
 Basic.Settings.Advanced.Audio.MonitoringDevice="Thiết bị theo dõi"
281
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Mặc định"
282
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Tắt chỉnh âm của Windows"
283
 Basic.Settings.Advanced.StreamDelay="Stream trễ"
284
 Basic.Settings.Advanced.StreamDelay.Duration="Độ dài"
285
 Basic.Settings.Advanced.StreamDelay.Preserve="Giữ điểm cắt (tăng chậm trễ) khi kết nối lại"
286
@@ -783,7 +813,12 @@
287
 Basic.Settings.Advanced.Network="Mạng"
288
 Basic.Settings.Advanced.Network.BindToIP="Liên kết với IP"
289
 Basic.Settings.Advanced.Network.EnableNewSocketLoop="Bật tối ưu hóa mạng"
290
+Basic.Settings.Advanced.Network.EnableLowLatencyMode="Bật TCP pacing"
291
+Basic.Settings.Advanced.Network.TCPPacing.Tooltip="Cố gắng để đầu ra của RTMP thân thiện hơn với các ứng dụng có độ trễ nhạy khác bằng cách điều tuyến tốc độ băng thông.\nĐiều này có thể gia tăng nguy cơ sụt khung hình trên đường truyền không ổn định."
292
+Basic.Settings.Advanced.Hotkeys.HotkeyFocusBehavior="Tùy chọn sử dụng phím tắt"
293
 Basic.Settings.Advanced.Hotkeys.NeverDisableHotkeys="Không bao giờ tắt phím nóng"
294
+Basic.Settings.Advanced.Hotkeys.DisableHotkeysInFocus="Không dùng phím tắt khi cửa sổ chính không tập trung"
295
+Basic.Settings.Advanced.Hotkeys.DisableHotkeysOutOfFocus="Không dùng phím tắt khi cửa sổ chính được tập trung"
296
 Basic.Settings.Advanced.AutoRemux="Tự động ghép lại thành mp4"
297
 Basic.Settings.Advanced.AutoRemux.MP4="(ghi với định dạng mkv)"
298
 
299
@@ -857,11 +892,15 @@
300
 SceneItemHide="Ẩn '%1'"
301
 
302
 OutputWarnings.NoTracksSelected="Bạn phải chọn ít nhất một dải âm"
303
+OutputWarnings.MP4Recording="Chú ý: các bản ghi âm được lưu ở dạng MP4/MOV sẽ không thể phục hồi nếu các tập tin không thể hoàn thiện (ví dụ: như bị màn hình xanh, mất điện, vv...). Nếu bạn muốn ghi nhiều luồng âm thanh thì xem xét sử dụng MKV và remux video sang MP4/MOV sau khi hoàn thành (Tập tin → Remux video)"
304
+OutputWarnings.CannotPause="Chú ý: Ghi video không thể được dừng lại nếu bộ mã hóa ghi hình được đặt là \"(Sử dụng bộ mã hóa truyền phát)\""
305
 
306
 FinalScene.Title="Xóa cảnh"
307
 FinalScene.Text="Cần có ít nhất một cảnh."
308
 
309
 NoSources.Title="Không có nguồn"
310
+NoSources.Text="Có vẻ như bạn chưa thêm video nguồn nào rồi, kết quả sẽ chỉ xuất ra màn hình đen. Bạn có chắc bạn muốn tiếp tục không?"
311
+NoSources.Text.AddSource="Bạn có thể thêm nguồn bằng cách nhấn vào biểu tượng + dưới ô Nguồn trong của sổ chính bất cứ lúc nào."
312
 NoSources.Label="Bạn không có nguồn nào cả.\nNháy vào nút + bên dưới,\nHoặc nháy chuột phải vào đây để thêm một cái."
313
 
314
 ChangeBG="Thiết lập màu sắc"
315
@@ -901,5 +940,15 @@
316
 NeedsRestart="OBS Studio cần phải được khởi động lại. Bạn có muốn khởi động lại luôn không?"
317
 
318
 ContextBar.NoSelectedSource="Chưa chọn nguồn nào"
319
-
320
+ContextBar.ResetTransform="Đặt lại chuyển đổi"
321
+ContextBar.FitToCanvas="Vừa khung hình"
322
+
323
+ContextBar.MediaControls.PlayMedia="Chơi phương tiện"
324
+ContextBar.MediaControls.PauseMedia="Tạm dừng phương tiện"
325
+ContextBar.MediaControls.StopMedia="Dừng phương tiện"
326
+ContextBar.MediaControls.RestartMedia="Khởi động lại phương tiện"
327
+ContextBar.MediaControls.PlaylistNext="Tiếp trong danh sách"
328
+ContextBar.MediaControls.PlaylistPrevious="Trước trong danh sách"
329
+ContextBar.MediaControls.MediaProperties="Cấu hình phương tiện"
330
+ContextBar.MediaControls.BlindSeek="Công cụ tìm phương tiện"
331
 
332
obs-studio-26.0.2.tar.xz/UI/data/locale/zh-CN.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/zh-CN.ini Changed
121
 
1
@@ -161,6 +161,7 @@
2
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="解除帐户连接?"
3
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="此更改将立即应用。您确定要解除帐户连接吗?"
4
 Basic.AutoConfig.StreamPage.GetStreamKey="获取串流密钥"
5
+Basic.AutoConfig.StreamPage.MoreInfo="更多信息"
6
 Basic.AutoConfig.StreamPage.UseStreamKey="使用串流密钥"
7
 Basic.AutoConfig.StreamPage.Service="服务"
8
 Basic.AutoConfig.StreamPage.Service.ShowAll="显示全部..."
9
@@ -365,8 +366,8 @@
10
 Deinterlacing.TopFieldFirst="顶场优先"
11
 Deinterlacing.BottomFieldFirst="底场优先"
12
 
13
-VolControl.SliderUnmuted="音量滑动条 '%1': %2"
14
-VolControl.SliderMuted="音量滑动条 '%1': %2 (当前静音)"
15
+VolControl.SliderUnmuted="'%1'音量滑块:"
16
+VolControl.SliderMuted="'%1'音量滑块: (当前静音)"
17
 VolControl.Mute="静音 '%1'"
18
 VolControl.Properties="'%1' 的属性"
19
 
20
@@ -382,6 +383,7 @@
21
 
22
 AddProfile.Title="添加配置文件"
23
 AddProfile.Text="请输入配置文件的名称"
24
+AddProfile.WizardCheckbox="显示自动配置向导"
25
 
26
 RenameProfile.Title="重命名配置文件"
27
 
28
@@ -396,6 +398,11 @@
29
 Basic.SourceSelect.AddExisting="添加现有"
30
 Basic.SourceSelect.AddVisible="使源可见"
31
 
32
+Basic.Main.Sources.Visibility="可见性"
33
+Basic.Main.Sources.VisibilityDescription="控制画布中 '%1' 的可见性"
34
+Basic.Main.Sources.Lock="锁定"
35
+Basic.Main.Sources.LockDescription="锁定画布中 '%1' 的位置和比例"
36
+
37
 Basic.PropertiesWindow="属性 '%1'"
38
 Basic.PropertiesWindow.AutoSelectFormat="%1 (自动选择: %2)"
39
 Basic.PropertiesWindow.SelectColor="选择颜色"
40
@@ -635,13 +642,19 @@
41
 Basic.Settings.Stream.MissingUrlAndApiKey="URL和流密钥缺失。\n\n打开设置以在“串流”选项卡中输入URL和流密钥。"
42
 Basic.Settings.Stream.MissingUrl="缺少流的 URL。\n\n打开设置以在“流”选项卡中输入URL。"
43
 Basic.Settings.Stream.MissingStreamKey="缺少流密钥。\n\n打开设置以在“流”选项卡中输入流密钥。"
44
+Basic.Settings.Stream.IgnoreRecommended="忽略流媒体服务的推荐设置"
45
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="覆盖推荐设置"
46
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="警告:忽略服务的限制可能会导致推流质量降低或阻止您进行推流。\n\n继续吗?"
47
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="最大视频比特率: %1 kbps"
48
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="最大音频比特率: %1 kbps"
49
+Basic.Settings.Stream.Recommended.MaxResolution="最大分辨率: %1"
50
+Basic.Settings.Stream.Recommended.MaxFPS="最大FPS: %1"
51
 
52
 Basic.Settings.Output="输出"
53
 Basic.Settings.Output.Format="录像格式"
54
 Basic.Settings.Output.Encoder="编码器"
55
 Basic.Settings.Output.SelectDirectory="选择录像目录"
56
 Basic.Settings.Output.SelectFile="选择录像文件"
57
-Basic.Settings.Output.EnforceBitrate="强制执行流媒体服务比特率限制"
58
 Basic.Settings.Output.DynamicBitrate="动态调整比特率以应对网络拥堵"
59
 Basic.Settings.Output.DynamicBitrate.Beta="动态调整比特率以应对网络拥堵(Beta)"
60
 Basic.Settings.Output.DynamicBitrate.TT="在网络拥堵时快速动态调整比特率,而不是丢弃帧来减缓拥堵。\n\n注意:开启后,若有严重的突发网络拥堵,到观众的延迟可能会增加。\n比特率降低之后,可能需要几分钟时间才能恢复。\n\n当前只支持 RTMP 流。"
61
@@ -662,8 +675,8 @@
62
 Basic.Settings.Output.Simple.RecordingQuality.Small="高质量, 中等文件大小"
63
 Basic.Settings.Output.Simple.RecordingQuality.HQ="近似无损的质量, 大文件大小"
64
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="无损的质量, 非常大的文件大小"
65
-Basic.Settings.Output.Simple.Warn.VideoBitrate="警告: 视频比特率将设置为 %1, 这是当前的流媒体服务的上限值. 如果你确定你想要超过 %1, 启用高级的编码器选项并取消选中\"强制流媒体服务比特率限制\"."
66
-Basic.Settings.Output.Simple.Warn.AudioBitrate="警告: 音频比特率将设置为 %1, 这是当前的流媒体服务的上限值. 如果你确定你想要超过 %1, 启用高级的编码器选项并取消选中\"强制流媒体服务比特率限制\"."
67
+Basic.Settings.Output.Simple.Warn.VideoBitrate="警告:串流视频比特率将设置为 %1,这是当前串流服务的上限。"
68
+Basic.Settings.Output.Simple.Warn.AudioBitrate="警告:串流音频比特率将设置为 %1,这是当前串流服务的上限。"
69
 Basic.Settings.Output.Simple.Warn.CannotPause="警告:当录像质量设为“与串流画质相同”时,无法暂停录制。"
70
 Basic.Settings.Output.Simple.Warn.Encoder="警告: 同时传输流和录像, 并使用软件编码器编码与流不同的质量, 将会需要额外的CPU使用."
71
 Basic.Settings.Output.Simple.Warn.Lossless="警告:无损质量产生的文件大小非常大!无损质量在高分辨率和帧速率的情况下每分钟可使用超过 7GB 的磁盘空间。无损不适合长时间录像,除非你有很多可用的磁盘空间。"
72
@@ -674,6 +687,11 @@
73
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="硬件(AMD)"
74
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="硬件(NVENC)"
75
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="软件(x264 低 CPU 使用率预设,将会增加文件大小)"
76
+Basic.Settings.Output.Simple.TwitchVodTrack="Twitch VOD 轨道 (使用轨道 2)"
77
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="不兼容的分辨率/帧率"
78
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="此串流服务不支持您当前的输出分辨率和/或帧率。 它们将被更改为最接近的兼容值:\n\n%1\n\n你想要继续吗?"
79
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="分辨率:%1"
80
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS: %1"
81
 Basic.Settings.Output.VideoBitrate="视频比特率"
82
 Basic.Settings.Output.AudioBitrate="音频比特率"
83
 Basic.Settings.Output.Reconnect="自动重连"
84
@@ -688,15 +706,16 @@
85
 Basic.Settings.Output.Adv.Rescale="重新缩放输出"
86
 Basic.Settings.Output.Adv.AudioTrack="音轨"
87
 Basic.Settings.Output.Adv.Streaming="串流"
88
-Basic.Settings.Output.Adv.ApplyServiceSettings="强制执行流媒体服务编码器设置"
89
 Basic.Settings.Output.Adv.Audio.Track1="轨道 1"
90
 Basic.Settings.Output.Adv.Audio.Track2="轨道 2"
91
 Basic.Settings.Output.Adv.Audio.Track3="轨道 3"
92
 Basic.Settings.Output.Adv.Audio.Track4="轨道 4"
93
 Basic.Settings.Output.Adv.Audio.Track5="轨道 5"
94
 Basic.Settings.Output.Adv.Audio.Track6="轨道 6"
95
+Basic.Settings.Output.Adv.TwitchVodTrack="Twitch VOD 音轨"
96
 
97
 Basic.Settings.Output.Adv.Recording="录像"
98
+Basic.Settings.Output.Adv.Recording.RecType="录制类型"
99
 Basic.Settings.Output.Adv.Recording.Type="类型"
100
 Basic.Settings.Output.Adv.Recording.Type.Standard="标准"
101
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="自定义输出 (FFmpeg)"
102
@@ -824,13 +843,18 @@
103
 Basic.AdvAudio.ActiveOnly="仅活动源"
104
 Basic.AdvAudio.Name="名称"
105
 Basic.AdvAudio.Volume="音量"
106
+Basic.AdvAudio.VolumeSource="'%1' 的音量"
107
 Basic.AdvAudio.Mono="单声道"
108
+Basic.AdvAudio.MonoSource="'%1' 单声道缩混"
109
 Basic.AdvAudio.Balance="平衡"
110
+Basic.AdvAudio.BalanceSource="'%1' 平衡"
111
 Basic.AdvAudio.SyncOffset="同步偏移"
112
+Basic.AdvAudio.SyncOffsetSource="'%1' 同步偏移量"
113
 Basic.AdvAudio.Monitoring="音频监听"
114
 Basic.AdvAudio.Monitoring.None="关闭监听"
115
 Basic.AdvAudio.Monitoring.MonitorOnly="仅监听(输出静音)"
116
 Basic.AdvAudio.Monitoring.Both="监听并输出"
117
+Basic.AdvAudio.MonitoringSource="'%1' 的音频监测"
118
 Basic.AdvAudio.AudioTracks="轨道"
119
 
120
 Basic.Settings.Hotkeys="热键"
121
obs-studio-26.0.2.tar.xz/UI/data/locale/zh-TW.ini -> obs-studio-26.1.0.tar.xz/UI/data/locale/zh-TW.ini Changed
130
 
1
@@ -26,7 +26,7 @@
2
 Browse="瀏覽"
3
 Mono="單聲道"
4
 Stereo="立體聲"
5
-DroppedFrames="拋棄影格數:%1 (%2%)"
6
+DroppedFrames="影格遺失: %1 (%2%)"
7
 StudioProgramProjector="全螢幕投影(程式)"
8
 PreviewProjector="全螢幕投影(預覽)"
9
 SceneProjector="全螢幕投影(場景)"
10
@@ -161,6 +161,7 @@
11
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="是否要解除連結帳號?"
12
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="此變更將立即套用,確定斷開帳號連結?"
13
 Basic.AutoConfig.StreamPage.GetStreamKey="取得串流金鑰"
14
+Basic.AutoConfig.StreamPage.MoreInfo="更多資訊"
15
 Basic.AutoConfig.StreamPage.UseStreamKey="使用串流金鑰"
16
 Basic.AutoConfig.StreamPage.Service="服務"
17
 Basic.AutoConfig.StreamPage.Service.ShowAll="全部顯示..."
18
@@ -365,8 +366,8 @@
19
 Deinterlacing.TopFieldFirst="由偶數場開始"
20
 Deinterlacing.BottomFieldFirst="由奇數場開始"
21
 
22
-VolControl.SliderUnmuted="'%1' 的音量滑桿︰ %2"
23
-VolControl.SliderMuted="'%1' 的音量滑桿︰ %2 (目前靜音中)"
24
+VolControl.SliderUnmuted="'%1' 的音量滑桿︰"
25
+VolControl.SliderMuted="'%1' 的音量滑桿︰(目前靜音中)"
26
 VolControl.Mute="靜音 '%1'"
27
 VolControl.Properties="'%1' 的屬性"
28
 
29
@@ -382,6 +383,7 @@
30
 
31
 AddProfile.Title="新增設定檔"
32
 AddProfile.Text="請輸入設定檔的名稱"
33
+AddProfile.WizardCheckbox="顯示自動設定精靈"
34
 
35
 RenameProfile.Title="重新命名設定檔"
36
 
37
@@ -396,6 +398,11 @@
38
 Basic.SourceSelect.AddExisting="加入已建立來源"
39
 Basic.SourceSelect.AddVisible="顯示來源"
40
 
41
+Basic.Main.Sources.Visibility="可見性"
42
+Basic.Main.Sources.VisibilityDescription="控制畫布中「%1」的可見性"
43
+Basic.Main.Sources.Lock="鎖定"
44
+Basic.Main.Sources.LockDescription="鎖定畫布中「%1」的位置及比例"
45
+
46
 Basic.PropertiesWindow="屬性「%1」"
47
 Basic.PropertiesWindow.AutoSelectFormat="%1 (自動選擇: %2)"
48
 Basic.PropertiesWindow.SelectColor="選取顏色"
49
@@ -635,13 +642,19 @@
50
 Basic.Settings.Stream.MissingUrlAndApiKey="缺少網址及串流金鑰。\n\n開啟設定以在「串流」分頁輸入網址及串流金鑰。"
51
 Basic.Settings.Stream.MissingUrl="缺少串流網址。\n\n開啟設定以在「串流」分頁輸入網址。"
52
 Basic.Settings.Stream.MissingStreamKey="缺少串流金鑰。\n\n開啟設定以在「串流」分頁輸入串流金鑰。"
53
+Basic.Settings.Stream.IgnoreRecommended="忽略串流服務的建議設定"
54
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="覆蓋建議設定"
55
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="警告:忽略服務限制可能會導致串流品質變低或無法串流。\n\n是否繼續?"
56
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="最高視訊位元速率:%1 kbps"
57
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="最高音訊位元速率:%1 kbps"
58
+Basic.Settings.Stream.Recommended.MaxResolution="最高解析度:%1"
59
+Basic.Settings.Stream.Recommended.MaxFPS="最高 FPS:%1"
60
 
61
 Basic.Settings.Output="輸出"
62
 Basic.Settings.Output.Format="錄影格式"
63
 Basic.Settings.Output.Encoder="編碼器"
64
 Basic.Settings.Output.SelectDirectory="選擇錄影資料夾"
65
 Basic.Settings.Output.SelectFile="選擇錄影檔案"
66
-Basic.Settings.Output.EnforceBitrate="強制設定串流位元率上限"
67
 Basic.Settings.Output.DynamicBitrate="動態調整位元速率以管理堵塞問題"
68
 Basic.Settings.Output.DynamicBitrate.Beta="動態調整位元速率以管理堵塞問題 (Beta)"
69
 Basic.Settings.Output.DynamicBitrate.TT="快速動態變更位元速率而非丟棄影格來緩解堵塞問題。\n\n註:這可能會在突發嚴重堵塞時增加觀看者的延遲。\n位元速率降低後,可能會需要幾分鐘才會恢復。\n\n目前僅支援 RTMP。"
70
@@ -662,8 +675,8 @@
71
 Basic.Settings.Output.Simple.RecordingQuality.Small="高畫質,檔案大小中等"
72
 Basic.Settings.Output.Simple.RecordingQuality.HQ="近乎無損畫質,檔案大小巨大"
73
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="無損畫質,非常大的檔案"
74
-Basic.Settings.Output.Simple.Warn.VideoBitrate="警告:串流影像位元率將會被設為 %1,他是目前串流位元率的上限。如果您確定想要超過 %1 的限制,請開啟進階編碼器選項,並取消「強制設定串流位元率上限」。"
75
-Basic.Settings.Output.Simple.Warn.AudioBitrate="警告:實況串流位元率將會被設為 %1,他是目前串流位元率的上限。如果您確定想要超過 %1 的限制,請開啟進階編碼器選項,並取消「強制設定串流位元率上限」。"
76
+Basic.Settings.Output.Simple.Warn.VideoBitrate="警告:串流視訊位元速率將設定到目前串流服務的最高值—%1。"
77
+Basic.Settings.Output.Simple.Warn.AudioBitrate="警告:串流音訊位元速率將設定到目前串流服務的最高值—%1。"
78
 Basic.Settings.Output.Simple.Warn.CannotPause="警告:如果錄影編碼器畫質設為「(和直播編碼器相同)」,錄影時將無法暫停。"
79
 Basic.Settings.Output.Simple.Warn.Encoder="警告:如果錄影與串流同時運作,並使用與串流不同的編碼品質設定將會增加額外的CPU使用量"
80
 Basic.Settings.Output.Simple.Warn.Lossless="警告:無損畫質將會產生非常大的檔案!無損畫質在高解析度或高影格率時,可能會每分鐘使用高達 7GB(gigabytes)的容量。除非您擁有非常大量的硬碟空間,否則不建議使用無損畫質錄製長時間的影片。"
81
@@ -674,6 +687,11 @@
82
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="硬體 (AMD)"
83
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="硬體編碼 (NVENC)"
84
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="軟體編碼( x264 預設低 CPU 使用率,將增加檔案容量 )"
85
+Basic.Settings.Output.Simple.TwitchVodTrack="Twitch 視訊點播軌道 (使用軌道2)"
86
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="不相容的解析度或影格速率"
87
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="這個串流服務不支援您目前輸出之解析度和影格速率的其中一個或全部。將會變更為最接近的相容值:\n\n%1\n\n是否繼續?"
88
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="解析度:%1"
89
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS:%1"
90
 Basic.Settings.Output.VideoBitrate="影像位元率(kbit/s)"
91
 Basic.Settings.Output.AudioBitrate="音效位元率(kbit/s)"
92
 Basic.Settings.Output.Reconnect="自動重新連線"
93
@@ -688,15 +706,16 @@
94
 Basic.Settings.Output.Adv.Rescale="重新縮放輸出"
95
 Basic.Settings.Output.Adv.AudioTrack="音軌"
96
 Basic.Settings.Output.Adv.Streaming="串流"
97
-Basic.Settings.Output.Adv.ApplyServiceSettings="強制使用串流伺服器編碼設定"
98
 Basic.Settings.Output.Adv.Audio.Track1="音軌 1"
99
 Basic.Settings.Output.Adv.Audio.Track2="音軌 2"
100
 Basic.Settings.Output.Adv.Audio.Track3="音軌 3"
101
 Basic.Settings.Output.Adv.Audio.Track4="音軌 4"
102
 Basic.Settings.Output.Adv.Audio.Track5="音軌 5"
103
 Basic.Settings.Output.Adv.Audio.Track6="音軌 6"
104
+Basic.Settings.Output.Adv.TwitchVodTrack="Twitch 視訊點播軌道"
105
 
106
 Basic.Settings.Output.Adv.Recording="錄影"
107
+Basic.Settings.Output.Adv.Recording.RecType="錄影類型"
108
 Basic.Settings.Output.Adv.Recording.Type="類型"
109
 Basic.Settings.Output.Adv.Recording.Type.Standard="標準"
110
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="自訂輸出 (FFmpeg)"
111
@@ -824,13 +843,18 @@
112
 Basic.AdvAudio.ActiveOnly="僅使用中來源"
113
 Basic.AdvAudio.Name="名稱"
114
 Basic.AdvAudio.Volume="音量"
115
+Basic.AdvAudio.VolumeSource="'%1' 的音量"
116
 Basic.AdvAudio.Mono="單聲道"
117
+Basic.AdvAudio.MonoSource="'%1' 的單聲道降混"
118
 Basic.AdvAudio.Balance="聲道平衡"
119
+Basic.AdvAudio.BalanceSource="%1 的平衡"
120
 Basic.AdvAudio.SyncOffset="同步位移"
121
+Basic.AdvAudio.SyncOffsetSource="'%1' 的同步偏移"
122
 Basic.AdvAudio.Monitoring="音訊監測"
123
 Basic.AdvAudio.Monitoring.None="關閉監測"
124
 Basic.AdvAudio.Monitoring.MonitorOnly="僅監測(輸出為靜音)"
125
 Basic.AdvAudio.Monitoring.Both="監測和輸出"
126
+Basic.AdvAudio.MonitoringSource="'%1' 的音訊監控"
127
 Basic.AdvAudio.AudioTracks="音軌"
128
 
129
 Basic.Settings.Hotkeys="快捷鍵"
130
obs-studio-26.0.2.tar.xz/UI/forms/AutoConfigStreamPage.ui -> obs-studio-26.1.0.tar.xz/UI/forms/AutoConfigStreamPage.ui Changed
35
 
1
@@ -74,7 +74,32 @@
2
        </widget>
3
       </item>
4
       <item row="1" column="1">
5
-       <widget class="QComboBox" name="service"/>
6
+       <widget class="QWidget" name="serviceWidget" native="true">
7
+        <layout class="QHBoxLayout" name="serviceWidgetLayout">
8
+         <property name="leftMargin">
9
+          <number>0</number>
10
+         </property>
11
+         <property name="topMargin">
12
+          <number>0</number>
13
+         </property>
14
+         <property name="rightMargin">
15
+          <number>0</number>
16
+         </property>
17
+         <property name="bottomMargin">
18
+          <number>0</number>
19
+         </property>
20
+         <item>
21
+          <widget class="QComboBox" name="service"/>
22
+         </item>
23
+         <item>
24
+          <widget class="UrlPushButton" name="moreInfoButton">
25
+           <property name="text">
26
+            <string>Basic.AutoConfig.StreamPage.MoreInfo</string>
27
+           </property>
28
+          </widget>
29
+         </item>
30
+        </layout>
31
+       </widget>
32
       </item>
33
       <item row="2" column="1">
34
        <spacer name="verticalSpacer">
35
obs-studio-26.0.2.tar.xz/UI/forms/OBSBasicFilters.ui -> obs-studio-26.1.0.tar.xz/UI/forms/OBSBasicFilters.ui Changed
81
 
1
@@ -104,6 +104,9 @@
2
                <property name="themeID" stdset="0">
3
                 <string>addIconSmall</string>
4
                </property>
5
+               <property name="accessibleName">
6
+                <string>Add</string>
7
+               </property>
8
               </widget>
9
              </item>
10
              <item>
11
@@ -130,6 +133,9 @@
12
                <property name="themeID" stdset="0">
13
                 <string>removeIconSmall</string>
14
                </property>
15
+               <property name="accessibleName">
16
+                <string>Remove</string>
17
+               </property>
18
               </widget>
19
              </item>
20
              <item>
21
@@ -156,6 +162,9 @@
22
                <property name="themeID" stdset="0">
23
                 <string>upArrowIconSmall</string>
24
                </property>
25
+               <property name="accessibleName">
26
+                <string>MoveUp</string>
27
+               </property>
28
               </widget>
29
              </item>
30
              <item>
31
@@ -182,6 +191,9 @@
32
                <property name="themeID" stdset="0">
33
                 <string>downArrowIconSmall</string>
34
                </property>
35
+               <property name="accessibleName">
36
+                <string>MoveDown</string>
37
+               </property>
38
               </widget>
39
              </item>
40
             </layout>
41
@@ -280,6 +292,9 @@
42
                <property name="themeID" stdset="0">
43
                 <string>addIconSmall</string>
44
                </property>
45
+               <property name="accessibleName">
46
+                <string>Add</string>
47
+               </property>
48
               </widget>
49
              </item>
50
              <item>
51
@@ -306,6 +321,9 @@
52
                <property name="themeID" stdset="0">
53
                 <string>removeIconSmall</string>
54
                </property>
55
+               <property name="accessibleName">
56
+                <string>Remove</string>
57
+               </property>
58
               </widget>
59
              </item>
60
              <item>
61
@@ -332,6 +350,9 @@
62
                <property name="themeID" stdset="0">
63
                 <string>upArrowIconSmall</string>
64
                </property>
65
+               <property name="accessibleName">
66
+                <string>MoveUp</string>
67
+               </property>
68
               </widget>
69
              </item>
70
              <item>
71
@@ -358,6 +379,9 @@
72
                <property name="themeID" stdset="0">
73
                 <string>downArrowIconSmall</string>
74
                </property>
75
+               <property name="accessibleName">
76
+                <string>MoveDown</string>
77
+               </property>
78
               </widget>
79
              </item>
80
             </layout>
81
obs-studio-26.0.2.tar.xz/UI/forms/OBSBasicSettings.ui -> obs-studio-26.1.0.tar.xz/UI/forms/OBSBasicSettings.ui Changed
719
 
1
@@ -151,8 +151,8 @@
2
              <rect>
3
               <x>0</x>
4
               <y>0</y>
5
-              <width>806</width>
6
-              <height>1254</height>
7
+              <width>803</width>
8
+              <height>1026</height>
9
              </rect>
10
             </property>
11
             <layout class="QVBoxLayout" name="verticalLayout_19">
12
@@ -824,10 +824,41 @@
13
              </widget>
14
             </item>
15
             <item row="3" column="1">
16
-             <widget class="QComboBox" name="service">
17
-              <property name="maxVisibleItems">
18
-               <number>20</number>
19
-              </property>
20
+             <widget class="QWidget" name="serviceWidget" native="true">
21
+              <layout class="QHBoxLayout" name="serviceWidgetLayout" stretch="0,0">
22
+               <property name="leftMargin">
23
+                <number>0</number>
24
+               </property>
25
+               <property name="topMargin">
26
+                <number>0</number>
27
+               </property>
28
+               <property name="rightMargin">
29
+                <number>0</number>
30
+               </property>
31
+               <property name="bottomMargin">
32
+                <number>0</number>
33
+               </property>
34
+               <item>
35
+                <widget class="QComboBox" name="service">
36
+                 <property name="maxVisibleItems">
37
+                  <number>20</number>
38
+                 </property>
39
+                </widget>
40
+               </item>
41
+               <item>
42
+                <widget class="UrlPushButton" name="moreInfoButton">
43
+                 <property name="sizePolicy">
44
+                  <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
45
+                   <horstretch>0</horstretch>
46
+                   <verstretch>0</verstretch>
47
+                  </sizepolicy>
48
+                 </property>
49
+                 <property name="text">
50
+                  <string>Basic.AutoConfig.StreamPage.MoreInfo</string>
51
+                 </property>
52
+                </widget>
53
+               </item>
54
+              </layout>
55
              </widget>
56
             </item>
57
             <item row="1" column="0">
58
@@ -1214,6 +1245,20 @@
59
                </property>
60
               </widget>
61
              </item>
62
+             <item row="10" column="1">
63
+              <widget class="QCheckBox" name="ignoreRecommended">
64
+               <property name="text">
65
+                <string>Basic.Settings.Stream.IgnoreRecommended</string>
66
+               </property>
67
+              </widget>
68
+             </item>
69
+             <item row="11" column="1">
70
+              <widget class="QLabel" name="enforceSettingsLabel">
71
+               <property name="text">
72
+                <string notr="true"/>
73
+               </property>
74
+              </widget>
75
+             </item>
76
             </layout>
77
            </widget>
78
           </widget>
79
@@ -1250,8 +1295,8 @@
80
              <rect>
81
               <x>0</x>
82
               <y>0</y>
83
-              <width>813</width>
84
-              <height>761</height>
85
+              <width>820</width>
86
+              <height>677</height>
87
              </rect>
88
             </property>
89
             <layout class="QVBoxLayout" name="verticalLayout_21">
90
@@ -1347,7 +1392,7 @@
91
                   <number>0</number>
92
                  </property>
93
                  <item>
94
-                  <widget class="QGroupBox" name="groupBox_8">
95
+                  <widget class="QGroupBox" name="simpleStreamingGroupBox">
96
                    <property name="sizePolicy">
97
                     <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
98
                      <horstretch>0</horstretch>
99
@@ -1357,7 +1402,7 @@
100
                    <property name="title">
101
                     <string>Basic.Settings.Output.Adv.Streaming</string>
102
                    </property>
103
-                   <layout class="QFormLayout" name="formLayout_20">
104
+                   <layout class="QFormLayout" name="simpleStreamingLayout">
105
                     <property name="fieldGrowthPolicy">
106
                      <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
107
                     </property>
108
@@ -1396,6 +1441,19 @@
109
                       </property>
110
                      </widget>
111
                     </item>
112
+                    <item row="1" column="0">
113
+                     <widget class="QLabel" name="simpleOutStrEncoderLabel">
114
+                      <property name="text">
115
+                       <string>Basic.Settings.Output.Encoder</string>
116
+                      </property>
117
+                      <property name="buddy">
118
+                       <cstring>simpleOutRecEncoder</cstring>
119
+                      </property>
120
+                     </widget>
121
+                    </item>
122
+                    <item row="1" column="1">
123
+                     <widget class="QComboBox" name="simpleOutStrEncoder"/>
124
+                    </item>
125
                     <item row="2" column="0">
126
                      <widget class="QLabel" name="label_20">
127
                       <property name="text">
128
@@ -1478,10 +1536,7 @@
129
                       </property>
130
                      </widget>
131
                     </item>
132
-                    <item row="5" column="1">
133
-                     <widget class="QComboBox" name="simpleOutPreset"/>
134
-                    </item>
135
-                    <item row="5" column="0">
136
+                    <item row="4" column="0">
137
                      <widget class="QLabel" name="label_24">
138
                       <property name="enabled">
139
                        <bool>true</bool>
140
@@ -1494,7 +1549,10 @@
141
                       </property>
142
                      </widget>
143
                     </item>
144
-                    <item row="6" column="0">
145
+                    <item row="4" column="1">
146
+                     <widget class="QComboBox" name="simpleOutPreset"/>
147
+                    </item>
148
+                    <item row="5" column="0">
149
                      <widget class="QLabel" name="label_23">
150
                       <property name="text">
151
                        <string>Basic.Settings.Output.CustomEncoderSettings</string>
152
@@ -1504,29 +1562,9 @@
153
                       </property>
154
                      </widget>
155
                     </item>
156
-                    <item row="6" column="1">
157
+                    <item row="5" column="1">
158
                      <widget class="QLineEdit" name="simpleOutCustom"/>
159
                     </item>
160
-                    <item row="4" column="1">
161
-                     <widget class="QCheckBox" name="simpleOutEnforce">
162
-                      <property name="text">
163
-                       <string>Basic.Settings.Output.EnforceBitrate</string>
164
-                      </property>
165
-                     </widget>
166
-                    </item>
167
-                    <item row="1" column="1">
168
-                     <widget class="QComboBox" name="simpleOutStrEncoder"/>
169
-                    </item>
170
-                    <item row="1" column="0">
171
-                     <widget class="QLabel" name="simpleOutRecEncoderLabel_2">
172
-                      <property name="text">
173
-                       <string>Basic.Settings.Output.Encoder</string>
174
-                      </property>
175
-                      <property name="buddy">
176
-                       <cstring>simpleOutRecEncoder</cstring>
177
-                      </property>
178
-                     </widget>
179
-                    </item>
180
                    </layout>
181
                   </widget>
182
                  </item>
183
@@ -1876,7 +1914,7 @@
184
                             <verstretch>0</verstretch>
185
                            </sizepolicy>
186
                           </property>
187
-                          <layout class="QFormLayout" name="formLayout_7">
188
+                          <layout class="QFormLayout" name="advOutTopLayout">
189
                            <property name="fieldGrowthPolicy">
190
                             <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
191
                            </property>
192
@@ -1899,55 +1937,6 @@
193
                              </property>
194
                             </widget>
195
                            </item>
196
-                           <item row="2" column="0">
197
-                            <widget class="QLabel" name="advOutEncLabel">
198
-                             <property name="text">
199
-                              <string>Basic.Settings.Output.Encoder</string>
200
-                             </property>
201
-                             <property name="buddy">
202
-                              <cstring>advOutEncoder</cstring>
203
-                             </property>
204
-                            </widget>
205
-                           </item>
206
-                           <item row="2" column="1">
207
-                            <widget class="QComboBox" name="advOutEncoder"/>
208
-                           </item>
209
-                           <item row="3" column="1">
210
-                            <widget class="QCheckBox" name="advOutApplyService">
211
-                             <property name="text">
212
-                              <string>Basic.Settings.Output.Adv.ApplyServiceSettings</string>
213
-                             </property>
214
-                             <property name="checked">
215
-                              <bool>true</bool>
216
-                             </property>
217
-                            </widget>
218
-                           </item>
219
-                           <item row="4" column="0">
220
-                            <widget class="QCheckBox" name="advOutUseRescale">
221
-                             <property name="sizePolicy">
222
-                              <sizepolicy hsizetype="Minimum" vsizetype="Expanding">
223
-                               <horstretch>0</horstretch>
224
-                               <verstretch>0</verstretch>
225
-                              </sizepolicy>
226
-                             </property>
227
-                             <property name="layoutDirection">
228
-                              <enum>Qt::RightToLeft</enum>
229
-                             </property>
230
-                             <property name="text">
231
-                              <string>Basic.Settings.Output.Adv.Rescale</string>
232
-                             </property>
233
-                            </widget>
234
-                           </item>
235
-                           <item row="4" column="1">
236
-                            <widget class="QComboBox" name="advOutRescale">
237
-                             <property name="enabled">
238
-                              <bool>false</bool>
239
-                             </property>
240
-                             <property name="editable">
241
-                              <bool>true</bool>
242
-                             </property>
243
-                            </widget>
244
-                           </item>
245
                            <item row="1" column="1">
246
                             <widget class="QWidget" name="widget_8" native="true">
247
                              <property name="sizePolicy">
248
@@ -2017,6 +2006,45 @@
249
                              </layout>
250
                             </widget>
251
                            </item>
252
+                           <item row="2" column="0">
253
+                            <widget class="QLabel" name="advOutEncLabel">
254
+                             <property name="text">
255
+                              <string>Basic.Settings.Output.Encoder</string>
256
+                             </property>
257
+                             <property name="buddy">
258
+                              <cstring>advOutEncoder</cstring>
259
+                             </property>
260
+                            </widget>
261
+                           </item>
262
+                           <item row="2" column="1">
263
+                            <widget class="QComboBox" name="advOutEncoder"/>
264
+                           </item>
265
+                           <item row="3" column="0">
266
+                            <widget class="QCheckBox" name="advOutUseRescale">
267
+                             <property name="sizePolicy">
268
+                              <sizepolicy hsizetype="Minimum" vsizetype="Expanding">
269
+                               <horstretch>0</horstretch>
270
+                               <verstretch>0</verstretch>
271
+                              </sizepolicy>
272
+                             </property>
273
+                             <property name="layoutDirection">
274
+                              <enum>Qt::RightToLeft</enum>
275
+                             </property>
276
+                             <property name="text">
277
+                              <string>Basic.Settings.Output.Adv.Rescale</string>
278
+                             </property>
279
+                            </widget>
280
+                           </item>
281
+                           <item row="3" column="1">
282
+                            <widget class="QComboBox" name="advOutRescale">
283
+                             <property name="enabled">
284
+                              <bool>false</bool>
285
+                             </property>
286
+                             <property name="editable">
287
+                              <bool>true</bool>
288
+                             </property>
289
+                            </widget>
290
+                           </item>
291
                           </layout>
292
                          </widget>
293
                         </item>
294
@@ -2492,10 +2520,22 @@
295
                          </item>
296
                          <item row="1" column="1">
297
                           <widget class="QStackedWidget" name="stackedWidget_2">
298
+                           <property name="sizePolicy">
299
+                            <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
300
+                             <horstretch>0</horstretch>
301
+                             <verstretch>0</verstretch>
302
+                            </sizepolicy>
303
+                           </property>
304
                            <property name="currentIndex">
305
                             <number>0</number>
306
                            </property>
307
                            <widget class="QWidget" name="page_5">
308
+                            <property name="sizePolicy">
309
+                             <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
310
+                              <horstretch>0</horstretch>
311
+                              <verstretch>0</verstretch>
312
+                             </sizepolicy>
313
+                            </property>
314
                             <layout class="QHBoxLayout" name="horizontalLayout_12">
315
                              <property name="spacing">
316
                               <number>3</number>
317
@@ -2529,6 +2569,12 @@
318
                             </layout>
319
                            </widget>
320
                            <widget class="QWidget" name="page_4">
321
+                            <property name="sizePolicy">
322
+                             <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
323
+                              <horstretch>0</horstretch>
324
+                              <verstretch>0</verstretch>
325
+                             </sizepolicy>
326
+                            </property>
327
                             <layout class="QHBoxLayout" name="horizontalLayout_8">
328
                              <property name="spacing">
329
                               <number>0</number>
330
@@ -2583,7 +2629,69 @@
331
                            </property>
332
                           </widget>
333
                          </item>
334
-                         <item row="7" column="0">
335
+                         <item row="0" column="0">
336
+                          <widget class="QLabel" name="label_48">
337
+                           <property name="sizePolicy">
338
+                            <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
339
+                             <horstretch>0</horstretch>
340
+                             <verstretch>0</verstretch>
341
+                            </sizepolicy>
342
+                           </property>
343
+                           <property name="minimumSize">
344
+                            <size>
345
+                             <width>170</width>
346
+                             <height>0</height>
347
+                            </size>
348
+                           </property>
349
+                           <property name="text">
350
+                            <string>Basic.Settings.Output.Adv.FFmpeg.Type</string>
351
+                           </property>
352
+                           <property name="alignment">
353
+                            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
354
+                           </property>
355
+                           <property name="buddy">
356
+                            <cstring>advOutFFType</cstring>
357
+                           </property>
358
+                          </widget>
359
+                         </item>
360
+                         <item row="0" column="1">
361
+                          <widget class="QComboBox" name="advOutFFType">
362
+                           <item>
363
+                            <property name="text">
364
+                             <string>Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile</string>
365
+                            </property>
366
+                           </item>
367
+                           <item>
368
+                            <property name="text">
369
+                             <string>Basic.Settings.Output.Adv.FFmpeg.Type.URL</string>
370
+                            </property>
371
+                           </item>
372
+                          </widget>
373
+                         </item>
374
+                         <item row="5" column="0">
375
+                          <widget class="QLabel" name="label_1337">
376
+                           <property name="text">
377
+                            <string>Basic.Settings.Output.Adv.FFmpeg.MuxerSettings</string>
378
+                           </property>
379
+                           <property name="buddy">
380
+                            <cstring>advOutFFMCfg</cstring>
381
+                           </property>
382
+                          </widget>
383
+                         </item>
384
+                         <item row="5" column="1">
385
+                          <widget class="QLineEdit" name="advOutFFMCfg"/>
386
+                         </item>
387
+                         <item row="2" column="1">
388
+                          <widget class="QCheckBox" name="advOutFFNoSpace">
389
+                           <property name="text">
390
+                            <string>Basic.Settings.Output.NoSpaceFileName</string>
391
+                           </property>
392
+                           <property name="checked">
393
+                            <bool>true</bool>
394
+                           </property>
395
+                          </widget>
396
+                         </item>
397
+                         <item row="6" column="0">
398
                           <widget class="QLabel" name="label_40">
399
                            <property name="text">
400
                             <string>Basic.Settings.Output.VideoBitrate</string>
401
@@ -2593,7 +2701,7 @@
402
                            </property>
403
                           </widget>
404
                          </item>
405
-                         <item row="7" column="1">
406
+                         <item row="6" column="1">
407
                           <widget class="QSpinBox" name="advOutFFVBitrate">
408
                            <property name="minimum">
409
                             <number>0</number>
410
@@ -2606,7 +2714,17 @@
411
                            </property>
412
                           </widget>
413
                          </item>
414
-                         <item row="8" column="1">
415
+                         <item row="7" column="0">
416
+                          <widget class="QLabel" name="label_63">
417
+                           <property name="text">
418
+                            <string>Basic.Settings.Output.Adv.FFmpeg.GOPSize</string>
419
+                           </property>
420
+                           <property name="buddy">
421
+                            <cstring>advOutFFVGOPSize</cstring>
422
+                           </property>
423
+                          </widget>
424
+                         </item>
425
+                         <item row="7" column="1">
426
                           <widget class="QSpinBox" name="advOutFFVGOPSize">
427
                            <property name="maximum">
428
                             <number>1000000000</number>
429
@@ -2617,16 +2735,6 @@
430
                           </widget>
431
                          </item>
432
                          <item row="8" column="0">
433
-                          <widget class="QLabel" name="label_63">
434
-                           <property name="text">
435
-                            <string>Basic.Settings.Output.Adv.FFmpeg.GOPSize</string>
436
-                           </property>
437
-                           <property name="buddy">
438
-                            <cstring>advOutFFVGOPSize</cstring>
439
-                           </property>
440
-                          </widget>
441
-                         </item>
442
-                         <item row="9" column="0">
443
                           <widget class="QCheckBox" name="advOutFFUseRescale">
444
                            <property name="sizePolicy">
445
                             <sizepolicy hsizetype="Minimum" vsizetype="Expanding">
446
@@ -2642,7 +2750,7 @@
447
                            </property>
448
                           </widget>
449
                          </item>
450
-                         <item row="9" column="1">
451
+                         <item row="8" column="1">
452
                           <widget class="QComboBox" name="advOutFFRescale">
453
                            <property name="enabled">
454
                             <bool>false</bool>
455
@@ -2652,14 +2760,17 @@
456
                            </property>
457
                           </widget>
458
                          </item>
459
-                         <item row="10" column="1">
460
+                         <item row="9" column="1">
461
                           <widget class="QCheckBox" name="advOutFFIgnoreCompat">
462
                            <property name="text">
463
                             <string>Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat</string>
464
                            </property>
465
                           </widget>
466
                          </item>
467
-                         <item row="11" column="0">
468
+                         <item row="10" column="1">
469
+                          <widget class="QComboBox" name="advOutFFVEncoder"/>
470
+                         </item>
471
+                         <item row="10" column="0">
472
                           <widget class="QLabel" name="label_37">
473
                            <property name="text">
474
                             <string>Basic.Settings.Output.Adv.FFmpeg.VEncoder</string>
475
@@ -2670,9 +2781,9 @@
476
                           </widget>
477
                          </item>
478
                          <item row="11" column="1">
479
-                          <widget class="QComboBox" name="advOutFFVEncoder"/>
480
+                          <widget class="QLineEdit" name="advOutFFVCfg"/>
481
                          </item>
482
-                         <item row="13" column="0">
483
+                         <item row="11" column="0">
484
                           <widget class="QLabel" name="label_38">
485
                            <property name="text">
486
                             <string>Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings</string>
487
@@ -2682,20 +2793,7 @@
488
                            </property>
489
                           </widget>
490
                          </item>
491
-                         <item row="13" column="1">
492
-                          <widget class="QLineEdit" name="advOutFFVCfg"/>
493
-                         </item>
494
-                         <item row="14" column="0">
495
-                          <widget class="QLabel" name="label_41">
496
-                           <property name="text">
497
-                            <string>Basic.Settings.Output.AudioBitrate</string>
498
-                           </property>
499
-                           <property name="buddy">
500
-                            <cstring>advOutFFABitrate</cstring>
501
-                           </property>
502
-                          </widget>
503
-                         </item>
504
-                         <item row="14" column="1">
505
+                         <item row="12" column="1">
506
                           <widget class="QSpinBox" name="advOutFFABitrate">
507
                            <property name="minimum">
508
                             <number>32</number>
509
@@ -2711,14 +2809,17 @@
510
                            </property>
511
                           </widget>
512
                          </item>
513
-                         <item row="15" column="0">
514
-                          <widget class="QLabel" name="label_47">
515
+                         <item row="12" column="0">
516
+                          <widget class="QLabel" name="label_41">
517
                            <property name="text">
518
-                            <string>Basic.Settings.Output.Adv.AudioTrack</string>
519
+                            <string>Basic.Settings.Output.AudioBitrate</string>
520
+                           </property>
521
+                           <property name="buddy">
522
+                            <cstring>advOutFFABitrate</cstring>
523
                            </property>
524
                           </widget>
525
                          </item>
526
-                         <item row="15" column="1">
527
+                         <item row="13" column="1">
528
                           <widget class="QWidget" name="widget_10" native="true">
529
                            <property name="sizePolicy">
530
                             <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
531
@@ -2787,7 +2888,14 @@
532
                            </layout>
533
                           </widget>
534
                          </item>
535
-                         <item row="17" column="0">
536
+                         <item row="13" column="0">
537
+                          <widget class="QLabel" name="label_47">
538
+                           <property name="text">
539
+                            <string>Basic.Settings.Output.Adv.AudioTrack</string>
540
+                           </property>
541
+                          </widget>
542
+                         </item>
543
+                         <item row="14" column="0">
544
                           <widget class="QLabel" name="label_39">
545
                            <property name="text">
546
                             <string>Basic.Settings.Output.Adv.FFmpeg.AEncoder</string>
547
@@ -2797,10 +2905,10 @@
548
                            </property>
549
                           </widget>
550
                          </item>
551
-                         <item row="17" column="1">
552
+                         <item row="14" column="1">
553
                           <widget class="QComboBox" name="advOutFFAEncoder"/>
554
                          </item>
555
-                         <item row="18" column="0">
556
+                         <item row="15" column="0">
557
                           <widget class="QLabel" name="label_46">
558
                            <property name="text">
559
                             <string>Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings</string>
560
@@ -2810,70 +2918,21 @@
561
                            </property>
562
                           </widget>
563
                          </item>
564
-                         <item row="18" column="1">
565
+                         <item row="15" column="1">
566
                           <widget class="QLineEdit" name="advOutFFACfg"/>
567
                          </item>
568
-                         <item row="0" column="0">
569
-                          <widget class="QLabel" name="label_48">
570
-                           <property name="sizePolicy">
571
-                            <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
572
-                             <horstretch>0</horstretch>
573
-                             <verstretch>0</verstretch>
574
-                            </sizepolicy>
575
+                         <item row="16" column="1">
576
+                          <spacer name="verticalSpacer_3">
577
+                           <property name="orientation">
578
+                            <enum>Qt::Vertical</enum>
579
                            </property>
580
-                           <property name="minimumSize">
581
+                           <property name="sizeHint" stdset="0">
582
                             <size>
583
-                             <width>170</width>
584
-                             <height>0</height>
585
+                             <width>20</width>
586
+                             <height>40</height>
587
                             </size>
588
                            </property>
589
-                           <property name="text">
590
-                            <string>Basic.Settings.Output.Adv.FFmpeg.Type</string>
591
-                           </property>
592
-                           <property name="alignment">
593
-                            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
594
-                           </property>
595
-                           <property name="buddy">
596
-                            <cstring>advOutFFType</cstring>
597
-                           </property>
598
-                          </widget>
599
-                         </item>
600
-                         <item row="0" column="1">
601
-                          <widget class="QComboBox" name="advOutFFType">
602
-                           <item>
603
-                            <property name="text">
604
-                             <string>Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile</string>
605
-                            </property>
606
-                           </item>
607
-                           <item>
608
-                            <property name="text">
609
-                             <string>Basic.Settings.Output.Adv.FFmpeg.Type.URL</string>
610
-                            </property>
611
-                           </item>
612
-                          </widget>
613
-                         </item>
614
-                         <item row="5" column="0">
615
-                          <widget class="QLabel" name="label_1337">
616
-                           <property name="text">
617
-                            <string>Basic.Settings.Output.Adv.FFmpeg.MuxerSettings</string>
618
-                           </property>
619
-                           <property name="buddy">
620
-                            <cstring>advOutFFMCfg</cstring>
621
-                           </property>
622
-                          </widget>
623
-                         </item>
624
-                         <item row="5" column="1">
625
-                          <widget class="QLineEdit" name="advOutFFMCfg"/>
626
-                         </item>
627
-                         <item row="2" column="1">
628
-                          <widget class="QCheckBox" name="advOutFFNoSpace">
629
-                           <property name="text">
630
-                            <string>Basic.Settings.Output.NoSpaceFileName</string>
631
-                           </property>
632
-                           <property name="checked">
633
-                            <bool>true</bool>
634
-                           </property>
635
-                          </widget>
636
+                          </spacer>
637
                          </item>
638
                         </layout>
639
                        </widget>
640
@@ -3745,8 +3804,8 @@
641
              <rect>
642
               <x>0</x>
643
               <y>0</y>
644
-              <width>767</width>
645
-              <height>582</height>
646
+              <width>555</width>
647
+              <height>469</height>
648
              </rect>
649
             </property>
650
             <layout class="QVBoxLayout" name="verticalLayout_50">
651
@@ -4266,7 +4325,7 @@
652
           </layout>
653
          </item>
654
          <item row="3" column="0">
655
-          <widget class="QLabel" name="label_10">
656
+          <widget class="QLabel" name="outputResLabel">
657
            <property name="text">
658
             <string>Basic.Settings.Video.ScaledResolution</string>
659
            </property>
660
@@ -4514,7 +4573,7 @@
661
           </widget>
662
          </item>
663
          <item row="3" column="1">
664
-          <layout class="QHBoxLayout" name="horizontalLayout_28">
665
+          <layout class="QHBoxLayout" name="outputResLayout">
666
            <property name="spacing">
667
             <number>6</number>
668
            </property>
669
@@ -4601,8 +4660,8 @@
670
              <rect>
671
               <x>0</x>
672
               <y>0</y>
673
-              <width>791</width>
674
-              <height>970</height>
675
+              <width>602</width>
676
+              <height>781</height>
677
              </rect>
678
             </property>
679
             <layout class="QVBoxLayout" name="verticalLayout_23">
680
@@ -5476,7 +5535,6 @@
681
   <tabstop>simpleOutStrEncoder</tabstop>
682
   <tabstop>simpleOutputABitrate</tabstop>
683
   <tabstop>simpleOutAdvanced</tabstop>
684
-  <tabstop>simpleOutEnforce</tabstop>
685
   <tabstop>simpleOutPreset</tabstop>
686
   <tabstop>simpleOutCustom</tabstop>
687
   <tabstop>simpleOutputPath</tabstop>
688
@@ -5497,7 +5555,6 @@
689
   <tabstop>advOutTrack5</tabstop>
690
   <tabstop>advOutTrack6</tabstop>
691
   <tabstop>advOutEncoder</tabstop>
692
-  <tabstop>advOutApplyService</tabstop>
693
   <tabstop>advOutUseRescale</tabstop>
694
   <tabstop>advOutRescale</tabstop>
695
   <tabstop>advOutRecType</tabstop>
696
@@ -5803,22 +5860,6 @@
697
     </hint>
698
    </hints>
699
   </connection>
700
-  <connection>
701
-   <sender>simpleOutAdvanced</sender>
702
-   <signal>toggled(bool)</signal>
703
-   <receiver>simpleOutEnforce</receiver>
704
-   <slot>setVisible(bool)</slot>
705
-   <hints>
706
-    <hint type="sourcelabel">
707
-     <x>251</x>
708
-     <y>64</y>
709
-    </hint>
710
-    <hint type="destinationlabel">
711
-     <x>251</x>
712
-     <y>64</y>
713
-    </hint>
714
-   </hints>
715
-  </connection>
716
   <connection>
717
    <sender>systemTrayEnabled</sender>
718
    <signal>toggled(bool)</signal>
719
obs-studio-26.1.0.tar.xz/UI/forms/images/obs_256x256.png Added
obs-studio-26.1.0.tar.xz/UI/forms/images/obs_macos.png Added
obs-studio-26.1.0.tar.xz/UI/forms/images/obs_paused_macos.png Added
obs-studio-26.1.0.tar.xz/UI/forms/images/tray_active_macos.png Added
obs-studio-26.0.2.tar.xz/UI/forms/obs.qrc -> obs-studio-26.1.0.tar.xz/UI/forms/obs.qrc Changed
15
 
1
@@ -10,9 +10,13 @@
2
     <file>images/plus.svg</file>
3
     <file>images/down.svg</file>
4
     <file>images/up.svg</file>
5
+    <file>images/obs_256x256.png</file>
6
     <file>images/obs.png</file>
7
+    <file>images/obs_macos.png</file>
8
     <file>images/obs_paused.png</file>
9
+    <file>images/obs_paused_macos.png</file>
10
     <file>images/tray_active.png</file>
11
+    <file>images/tray_active_macos.png</file>
12
     <file>images/expand.svg</file>
13
     <file>images/unlocked.svg</file>
14
     <file>images/locked.svg</file>
15
obs-studio-26.0.2.tar.xz/UI/frontend-plugins/CMakeLists.txt -> obs-studio-26.1.0.tar.xz/UI/frontend-plugins/CMakeLists.txt Changed
5
 
1
@@ -1,2 +1,3 @@
2
 add_subdirectory(decklink-output-ui)
3
 add_subdirectory(frontend-tools)
4
+add_subdirectory(decklink-captions)
5
obs-studio-26.1.0.tar.xz/UI/frontend-plugins/decklink-captions Added
2
 
1
+(directory)
2
obs-studio-26.1.0.tar.xz/UI/frontend-plugins/decklink-captions/CMakeLists.txt Added
46
 
1
@@ -0,0 +1,44 @@
2
+project(decklink-captions)
3
+
4
+if(APPLE)
5
+    find_library(COCOA Cocoa)
6
+    include_directories(${COCOA})
7
+endif()
8
+
9
+if(UNIX AND NOT APPLE)
10
+    find_package(X11 REQUIRED)
11
+    link_libraries(${X11_LIBRARIES})
12
+    include_directories(${X11_INCLUDE_DIR})
13
+endif()
14
+
15
+set(decklink-captions_HEADERS
16
+        decklink-captions.h
17
+        )
18
+set(decklink-captions_SOURCES
19
+        decklink-captions.cpp
20
+        )
21
+set(decklink-captions_UI
22
+        forms/captions.ui
23
+        )
24
+
25
+if(APPLE)
26
+    set(decklink-captions_PLATFORM_LIBS
27
+            ${COCOA})
28
+endif()
29
+
30
+qt5_wrap_ui(decklink-captions_UI_HEADERS
31
+        ${decklink-captions_UI})
32
+
33
+add_library(decklink-captions MODULE
34
+        ${decklink-captions_HEADERS}
35
+        ${decklink-captions_SOURCES}
36
+        ${decklink-captions_UI_HEADERS}
37
+        )
38
+target_link_libraries(decklink-captions
39
+        ${frontend-tools_PLATFORM_LIBS}
40
+        obs-frontend-api
41
+        Qt5::Widgets
42
+        libobs)
43
+set_target_properties(decklink-captions PROPERTIES FOLDER "plugins/decklink")
44
+
45
+install_obs_plugin_with_data(decklink-captions data)
46
obs-studio-26.1.0.tar.xz/UI/frontend-plugins/decklink-captions/data Added
2
 
1
+(directory)
2
obs-studio-26.1.0.tar.xz/UI/frontend-plugins/decklink-captions/data/.keepme Added
obs-studio-26.1.0.tar.xz/UI/frontend-plugins/decklink-captions/decklink-captions.cpp Added
161
 
1
@@ -0,0 +1,159 @@
2
+#include <obs-frontend-api.h>
3
+#include <QMainWindow>
4
+#include <QAction>
5
+#include <obs.hpp>
6
+#include "decklink-captions.h"
7
+
8
+OBS_DECLARE_MODULE()
9
+OBS_MODULE_USE_DEFAULT_LOCALE("decklink-captons", "en-US")
10
+
11
+struct obs_captions {
12
+   std::string source_name;
13
+   OBSWeakSource source;
14
+
15
+   void start();
16
+   void stop();
17
+
18
+   obs_captions();
19
+   inline ~obs_captions() { stop(); }
20
+};
21
+
22
+obs_captions::obs_captions() {}
23
+
24
+static obs_captions *captions = nullptr;
25
+
26
+DecklinkCaptionsUI::DecklinkCaptionsUI(QWidget *parent)
27
+   : QDialog(parent), ui(new Ui_CaptionsDialog)
28
+{
29
+   ui->setupUi(this);
30
+
31
+   setSizeGripEnabled(true);
32
+
33
+   setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
34
+
35
+   auto cb = [this](obs_source_t *source) {
36
+       uint32_t caps = obs_source_get_output_flags(source);
37
+       QString name = obs_source_get_name(source);
38
+
39
+       if (caps & OBS_SOURCE_CEA_708)
40
+           ui->source->addItem(name);
41
+
42
+       OBSWeakSource weak = OBSGetWeakRef(source);
43
+       if (weak == captions->source)
44
+           ui->source->setCurrentText(name);
45
+       return true;
46
+   };
47
+
48
+   using cb_t = decltype(cb);
49
+
50
+   ui->source->blockSignals(true);
51
+   ui->source->addItem(QStringLiteral(""));
52
+   ui->source->setCurrentIndex(0);
53
+   obs_enum_sources(
54
+       [](void *data, obs_source_t *source) {
55
+           return (*static_cast<cb_t *>(data))(source);
56
+       },
57
+       &cb);
58
+   ui->source->blockSignals(false);
59
+}
60
+
61
+void DecklinkCaptionsUI::on_source_currentIndexChanged(int)
62
+{
63
+   captions->stop();
64
+
65
+   captions->source_name = ui->source->currentText().toUtf8().constData();
66
+   captions->source = GetWeakSourceByName(captions->source_name.c_str());
67
+
68
+   captions->start();
69
+}
70
+
71
+static void caption_callback(void *param, obs_source_t *source,
72
+                const struct obs_source_cea_708 *captions)
73
+{
74
+   UNUSED_PARAMETER(param);
75
+   UNUSED_PARAMETER(source);
76
+   obs_output *output = obs_frontend_get_streaming_output();
77
+   if (output) {
78
+       if (obs_frontend_streaming_active() &&
79
+           obs_output_active(output)) {
80
+           obs_output_caption(output, captions);
81
+       }
82
+       obs_output_release(output);
83
+   }
84
+}
85
+
86
+void obs_captions::start()
87
+{
88
+   OBSSource s = OBSGetStrongRef(source);
89
+   if (!s) {
90
+       //warn("Source invalid");
91
+       return;
92
+   }
93
+   obs_source_add_caption_callback(s, caption_callback, nullptr);
94
+}
95
+
96
+void obs_captions::stop()
97
+{
98
+   OBSSource s = OBSGetStrongRef(source);
99
+   if (s)
100
+       obs_source_remove_caption_callback(s, caption_callback,
101
+                          nullptr);
102
+}
103
+
104
+static void save_decklink_caption_data(obs_data_t *save_data, bool saving,
105
+                      void *)
106
+{
107
+   if (saving) {
108
+       obs_data_t *obj = obs_data_create();
109
+
110
+       obs_data_set_string(obj, "source",
111
+                   captions->source_name.c_str());
112
+
113
+       obs_data_set_obj(save_data, "decklink_captions", obj);
114
+       obs_data_release(obj);
115
+   } else {
116
+       captions->stop();
117
+
118
+       obs_data_t *obj =
119
+           obs_data_get_obj(save_data, "decklink_captions");
120
+       if (!obj)
121
+           obj = obs_data_create();
122
+
123
+       captions->source_name = obs_data_get_string(obj, "source");
124
+       captions->source =
125
+           GetWeakSourceByName(captions->source_name.c_str());
126
+       obs_data_release(obj);
127
+
128
+       captions->start();
129
+   }
130
+}
131
+
132
+void addOutputUI(void)
133
+{
134
+   QAction *action = (QAction *)obs_frontend_add_tools_menu_qaction(
135
+       obs_module_text("Decklink Captions"));
136
+
137
+   captions = new obs_captions;
138
+
139
+   auto cb = []() {
140
+       obs_frontend_push_ui_translation(obs_module_get_string);
141
+
142
+       QWidget *window = (QWidget *)obs_frontend_get_main_window();
143
+
144
+       DecklinkCaptionsUI dialog(window);
145
+       dialog.exec();
146
+
147
+       obs_frontend_pop_ui_translation();
148
+   };
149
+
150
+   obs_frontend_add_save_callback(save_decklink_caption_data, nullptr);
151
+
152
+   action->connect(action, &QAction::triggered, cb);
153
+}
154
+
155
+bool obs_module_load(void)
156
+{
157
+   addOutputUI();
158
+
159
+   return true;
160
+}
161
obs-studio-26.1.0.tar.xz/UI/frontend-plugins/decklink-captions/decklink-captions.h Added
32
 
1
@@ -0,0 +1,30 @@
2
+#include <QDialog>
3
+#include <obs-module.h>
4
+#include <util/platform.h>
5
+#include <obs.hpp>
6
+#include <memory>
7
+#include "ui_captions.h"
8
+
9
+class DecklinkCaptionsUI : public QDialog {
10
+   Q_OBJECT
11
+private:
12
+public:
13
+   std::unique_ptr<Ui_CaptionsDialog> ui;
14
+   DecklinkCaptionsUI(QWidget *parent);
15
+
16
+public slots:
17
+   void on_source_currentIndexChanged(int idx);
18
+};
19
+
20
+static inline OBSWeakSource GetWeakSourceByName(const char *name)
21
+{
22
+   OBSWeakSource weak;
23
+   obs_source_t *source = obs_get_source_by_name(name);
24
+   if (source) {
25
+       weak = obs_source_get_weak_source(source);
26
+       obs_weak_source_release(weak);
27
+       obs_source_release(source);
28
+   }
29
+
30
+   return weak;
31
+}
32
obs-studio-26.1.0.tar.xz/UI/frontend-plugins/decklink-captions/forms Added
2
 
1
+(directory)
2
obs-studio-26.1.0.tar.xz/UI/frontend-plugins/decklink-captions/forms/captions.ui Added
117
 
1
@@ -0,0 +1,115 @@
2
+<?xml version="1.0" encoding="UTF-8"?>
3
+<ui version="4.0">
4
+ <class>CaptionsDialog</class>
5
+ <widget class="QDialog" name="CaptionsDialog">
6
+  <property name="geometry">
7
+   <rect>
8
+    <x>0</x>
9
+    <y>0</y>
10
+    <width>519</width>
11
+    <height>104</height>
12
+   </rect>
13
+  </property>
14
+  <property name="windowTitle">
15
+   <string>Captions</string>
16
+  </property>
17
+  <layout class="QVBoxLayout" name="verticalLayout">
18
+   <item>
19
+    <layout class="QFormLayout" name="formLayout">
20
+     <property name="labelAlignment">
21
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
22
+     </property>
23
+     <item row="0" column="0">
24
+      <widget class="QLabel" name="label">
25
+       <property name="text">
26
+        <string>Captions.Source</string>
27
+       </property>
28
+       <property name="buddy">
29
+        <cstring>source</cstring>
30
+       </property>
31
+      </widget>
32
+     </item>
33
+     <item row="0" column="1">
34
+      <widget class="QComboBox" name="source">
35
+       <property name="insertPolicy">
36
+        <enum>QComboBox::InsertAlphabetically</enum>
37
+       </property>
38
+       <property name="sizeAdjustPolicy">
39
+        <enum>QComboBox::AdjustToContents</enum>
40
+       </property>
41
+      </widget>
42
+     </item>
43
+    </layout>
44
+   </item>
45
+   <item>
46
+    <spacer name="verticalSpacer">
47
+     <property name="orientation">
48
+      <enum>Qt::Vertical</enum>
49
+     </property>
50
+     <property name="sizeHint" stdset="0">
51
+      <size>
52
+       <width>0</width>
53
+       <height>0</height>
54
+      </size>
55
+     </property>
56
+    </spacer>
57
+   </item>
58
+   <item>
59
+    <layout class="QHBoxLayout" name="horizontalLayout">
60
+     <item>
61
+      <spacer name="horizontalSpacer">
62
+       <property name="orientation">
63
+        <enum>Qt::Horizontal</enum>
64
+       </property>
65
+       <property name="sizeHint" stdset="0">
66
+        <size>
67
+         <width>40</width>
68
+         <height>20</height>
69
+        </size>
70
+       </property>
71
+      </spacer>
72
+     </item>
73
+     <item>
74
+      <widget class="QPushButton" name="accept">
75
+       <property name="text">
76
+        <string>OK</string>
77
+       </property>
78
+      </widget>
79
+     </item>
80
+     <item>
81
+      <spacer name="horizontalSpacer_2">
82
+       <property name="orientation">
83
+        <enum>Qt::Horizontal</enum>
84
+       </property>
85
+       <property name="sizeHint" stdset="0">
86
+        <size>
87
+         <width>40</width>
88
+         <height>20</height>
89
+        </size>
90
+       </property>
91
+      </spacer>
92
+     </item>
93
+    </layout>
94
+   </item>
95
+  </layout>
96
+ </widget>
97
+ <resources/>
98
+ <connections>
99
+  <connection>
100
+   <sender>accept</sender>
101
+   <signal>clicked()</signal>
102
+   <receiver>CaptionsDialog</receiver>
103
+   <slot>accept()</slot>
104
+   <hints>
105
+    <hint type="sourcelabel">
106
+     <x>268</x>
107
+     <y>331</y>
108
+    </hint>
109
+    <hint type="destinationlabel">
110
+     <x>229</x>
111
+     <y>-11</y>
112
+    </hint>
113
+   </hints>
114
+  </connection>
115
+ </connections>
116
+</ui>
117
obs-studio-26.0.2.tar.xz/UI/frontend-plugins/frontend-tools/CMakeLists.txt -> obs-studio-26.1.0.tar.xz/UI/frontend-plugins/frontend-tools/CMakeLists.txt Changed
36
 
1
@@ -81,21 +81,19 @@
2
        auto-scene-switcher-win.cpp
3
        frontend-tools.rc)
4
 
5
-   if(BUILD_CAPTIONS)
6
-       set(frontend-tools_PLATFORM_SOURCES
7
-           ${frontend-tools_PLATFORM_SOURCES}
8
-           captions.cpp
9
-           captions-handler.cpp
10
-           captions-mssapi.cpp
11
-           captions-mssapi-stream.cpp)
12
-       set(frontend-tools_PLATFORM_HEADERS
13
-           captions.hpp
14
-           captions-handler.hpp
15
-           captions-mssapi.hpp
16
-           captions-mssapi-stream.hpp)
17
-       set(frontend-tools_PLATFORM_UI
18
-           forms/captions.ui)
19
-   endif()
20
+   set(frontend-tools_PLATFORM_SOURCES
21
+       ${frontend-tools_PLATFORM_SOURCES}
22
+       captions.cpp
23
+       captions-handler.cpp
24
+       captions-mssapi.cpp
25
+       captions-mssapi-stream.cpp)
26
+   set(frontend-tools_PLATFORM_HEADERS
27
+       captions.hpp
28
+       captions-handler.hpp
29
+       captions-mssapi.hpp
30
+       captions-mssapi-stream.hpp)
31
+   set(frontend-tools_PLATFORM_UI
32
+       forms/captions.ui)
33
 elseif(APPLE)
34
    set(frontend-tools_PLATFORM_SOURCES
35
        auto-scene-switcher-osx.mm)
36
obs-studio-26.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/az-AZ.ini -> obs-studio-26.1.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/az-AZ.ini Changed
50
 
1
@@ -1,6 +1,48 @@
2
+SceneSwitcher="Avtomatik Səhnə Dəyişdirici"
3
+SceneSwitcher.OnNoMatch="Heç bir pəncərəyə uyğun gəlməyəndə:"
4
+SceneSwitcher.OnNoMatch.DontSwitch="Dəyişdirmə"
5
+SceneSwitcher.OnNoMatch.SwitchTo="Dəyişdir:"
6
+SceneSwitcher.CheckInterval="Aktiv pəncərə başlığını yoxla:"
7
+SceneSwitcher.ActiveOrNotActive="Səhnə Dəyişdirici:"
8
+InvalidRegex.Title="Etibarsız Müntəzəm İfadə"
9
+InvalidRegex.Text="Daxil etdiyiniz müntəzəm ifadə etibarsızdır."
10
+Active="Aktiv"
11
+Inactive="Qeyri aktiv"
12
+Start="Başlat"
13
+Stop="Dayandır"
14
 
15
+Captions="Altyazılar (Təcrübi)"
16
+Captions.AudioSource="Səs mənbəsi"
17
+Captions.CurrentSystemLanguage="Hazırki Sistem Dili (%1)"
18
+Captions.Provider="Təchizatçı"
19
+Captions.Error.GenericFail="Altyazı başladılmadı"
20
 
21
+OutputTimer="Çıxış Vaxtölçəni"
22
+OutputTimer.Stream="Yayımı dayandır:"
23
+OutputTimer.Record="Yazmanı dayandır:"
24
+OutputTimer.Stream.StoppingIn="Yayım dayandırılır:"
25
+OutputTimer.Record.StoppingIn="Yazma dayandırılır:"
26
+OutputTimer.Stream.EnableEverytime="Hər dəfə yayım vaxtölçənini fəallaşdır"
27
+OutputTimer.Record.EnableEverytime="Hər dəfə yazma vaxtölçənini fəallaşdır"
28
+OutputTimer.Record.PauseTimer="Yazmaya fasilə veriləndə vaxtölçənə də fasilə ver"
29
 
30
+Scripts="Skriptlər"
31
+LoadedScripts="Yüklənmiş skriptlər"
32
+AddScripts="Skript əlavə et"
33
+RemoveScripts="Skripti çıxart"
34
+ReloadScripts="Skripti yenidən yüklə"
35
+Reload="Yenidən yüklə"
36
 OpenFileLocation="Fayl yerləşməsini aç"
37
+PythonSettings="Python Tənzimləmələri"
38
+PythonSettings.PythonInstallPath32bit="Python Quraşdırma Yolu (32 bit)"
39
+PythonSettings.PythonInstallPath64bit="Python Quraşdırma Yolu (64 bit)"
40
+PythonSettings.BrowsePythonPath="Python yoluna nəzər yetir"
41
+ScriptLogWindow="Sktript jurnalı"
42
+Description="Açıqlama"
43
+ScriptDescriptionLink.Text="Bu bağlantı ilkin veb səyyahında açılsın?"
44
+ScriptDescriptionLink.Text.Url="URL: %1"
45
+ScriptDescriptionLink.OpenURL="URL-ni aç"
46
 
47
+FileFilter.ScriptFiles="Skript faylları"
48
+FileFilter.AllFiles="Bütün fayllar"
49
 
50
obs-studio-26.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/de-DE.ini -> obs-studio-26.1.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/de-DE.ini Changed
20
 
1
@@ -33,13 +33,13 @@
2
 ReloadScripts="Skripte neu laden"
3
 Reload="Neu laden"
4
 OpenFileLocation="Dateipfad öffnen"
5
-PythonSettings="Python‐Einstellungen"
6
-PythonSettings.PythonInstallPath32bit="Python‐Installationspfad (32bit)"
7
-PythonSettings.PythonInstallPath64bit="Python‐Installationspfad (64bit)"
8
-PythonSettings.BrowsePythonPath="Python‐Pfad öffnen"
9
+PythonSettings="Python-Einstellungen"
10
+PythonSettings.PythonInstallPath32bit="Python-Installationspfad (32bit)"
11
+PythonSettings.PythonInstallPath64bit="Python-Installationspfad (64bit)"
12
+PythonSettings.BrowsePythonPath="Python-Pfad öffnen"
13
 ScriptLogWindow="Skriptlog"
14
 Description="Beschreibung"
15
-ScriptDescriptionLink.Text="Diesen Link in Ihrem Standard‐Webbrowser öffnen?"
16
+ScriptDescriptionLink.Text="Diesen Link in Ihrem Standard-Webbrowser öffnen?"
17
 ScriptDescriptionLink.Text.Url="URL: %1"
18
 ScriptDescriptionLink.OpenURL="URL öffnen"
19
 
20
obs-studio-26.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/el-GR.ini -> obs-studio-26.1.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/el-GR.ini Changed
18
 
1
@@ -31,6 +31,8 @@
2
 AddScripts="Προσθήκη δεσμών ενεργειών"
3
 RemoveScripts="Αφαίρεση δεσμών ενεργειών"
4
 ReloadScripts="Επαναφόρτωση δεσμών ενεργειών"
5
+Reload="Επαναφόρτωση"
6
+OpenFileLocation="Άνοιγμα τοποθεσίας αρχείου"
7
 PythonSettings="Ρυθμίσεις Python"
8
 PythonSettings.PythonInstallPath32bit="Χώρος εγκατάστασης Python (32bit)"
9
 PythonSettings.PythonInstallPath64bit="Χώρος εγκατάστασης Python (64bit)"
10
@@ -38,6 +40,7 @@
11
 ScriptLogWindow="Script Log"
12
 Description="Περιγραφή"
13
 ScriptDescriptionLink.Text="Ανοίξτε αυτόν τον σύνδεσμο με το προκαθορισμένο πρόγραμα περιήγησης;"
14
+ScriptDescriptionLink.Text.Url="Σύνδεσμος: %1"
15
 ScriptDescriptionLink.OpenURL="Άνοιγμα Συνδέσμων"
16
 
17
 FileFilter.ScriptFiles="Κρυπτογραφημένο αρχείο δέσμης ενεργειών"
18
obs-studio-26.1.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/eo-UY.ini Added
50
 
1
@@ -0,0 +1,48 @@
2
+SceneSwitcher="Aŭtomata scen-ŝanĝilo"
3
+SceneSwitcher.OnNoMatch="Kiam neniu fenestro kongruas:"
4
+SceneSwitcher.OnNoMatch.DontSwitch="Ne ŝanĝu"
5
+SceneSwitcher.OnNoMatch.SwitchTo="Ŝanĝu al:"
6
+SceneSwitcher.CheckInterval="Kontrolu aktivan fenestro-titolon ĉiu(j)n:"
7
+SceneSwitcher.ActiveOrNotActive="Scen-ŝanĝilo estas:"
8
+InvalidRegex.Title="Nevalida regula esprimo"
9
+InvalidRegex.Text="La regula esprimo, kiun vi enigis, estas nevalida."
10
+Active="Aktiva"
11
+Inactive="Neaktiva"
12
+Start="Startigi"
13
+Stop="Ĉesigi"
14
+
15
+Captions="Subtekstoj (eksperimenta)"
16
+Captions.AudioSource="Sonfonto"
17
+Captions.CurrentSystemLanguage="Aktuala sistem-lingvo (%1)"
18
+Captions.Provider="Provizanto"
19
+Captions.Error.GenericFail="Malsukcesis startigi subtekstojn"
20
+
21
+OutputTimer="Elig-prokrastilo"
22
+OutputTimer.Stream="Ĉesi elsendi post:"
23
+OutputTimer.Record="Ĉesi registri post:"
24
+OutputTimer.Stream.StoppingIn="Elsendado ĉesos en:"
25
+OutputTimer.Record.StoppingIn="Registrado ĉesos en:"
26
+OutputTimer.Stream.EnableEverytime="Ebligi elsend-prokrastilon ĉiun fojon"
27
+OutputTimer.Record.EnableEverytime="Ebligi registro-prokrastilon ĉiun fojon"
28
+OutputTimer.Record.PauseTimer="Paŭzigi prokrastilon kiam registrado estas paŭzigita"
29
+
30
+Scripts="Skriptoj"
31
+LoadedScripts="Ŝargitaj skriptoj"
32
+AddScripts="Aldoni skriptojn"
33
+RemoveScripts="Forigi skriptojn"
34
+ReloadScripts="Reŝargi skriptojn"
35
+Reload="Reŝargi"
36
+OpenFileLocation="Malfermi dosierlokon"
37
+PythonSettings="Python-agordoj"
38
+PythonSettings.PythonInstallPath32bit="Instal-loko de Python (32-bita)"
39
+PythonSettings.PythonInstallPath64bit="Instal-loko de Python (64-bita)"
40
+PythonSettings.BrowsePythonPath="Malfermi Python-indikon"
41
+ScriptLogWindow="Skript-protokolo"
42
+Description="Priskribo"
43
+ScriptDescriptionLink.Text="Ĉu malfermi tiun ĉi ligilon en via defaŭlta retfoliumilon?"
44
+ScriptDescriptionLink.Text.Url="Retadreso: %1"
45
+ScriptDescriptionLink.OpenURL="Malfermi retadreson"
46
+
47
+FileFilter.ScriptFiles="Skript-dosieroj"
48
+FileFilter.AllFiles="Ĉiuj dosieroj"
49
+
50
obs-studio-26.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/es-ES.ini -> obs-studio-26.1.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/es-ES.ini Changed
14
 
1
@@ -34,9 +34,9 @@
2
 Reload="Recargar"
3
 OpenFileLocation="Abrir ubicación del archivo"
4
 PythonSettings="Configuración de Python"
5
-PythonSettings.PythonInstallPath32bit="Dirección de la instalación de Python (32bit)"
6
-PythonSettings.PythonInstallPath64bit="Dirección de la instalación de Python (64bit)"
7
-PythonSettings.BrowsePythonPath="Buscar Ruta de Phyton"
8
+PythonSettings.PythonInstallPath32bit="Ruta de la instalación de Python (32 bits)"
9
+PythonSettings.PythonInstallPath64bit="Ruta de la instalación de Python (64 bits)"
10
+PythonSettings.BrowsePythonPath="Explorar ruta de Python"
11
 ScriptLogWindow="Registro de secuencia de comandos"
12
 Description="Descripción"
13
 ScriptDescriptionLink.Text="¿Abrir este enlace en su navegador predeterminado?"
14
obs-studio-26.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/et-EE.ini -> obs-studio-26.1.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/et-EE.ini Changed
13
 
1
@@ -25,5 +25,11 @@
2
 OutputTimer.Record.EnableEverytime="Lülita salvestus taimer alati sisse"
3
 
4
 Scripts="Skriptid"
5
+Reload="Lae uuesti"
6
+Description="Kirjeldus"
7
+ScriptDescriptionLink.Text.Url="URL: %1"
8
+ScriptDescriptionLink.OpenURL="Ava URL"
9
 
10
+FileFilter.ScriptFiles="Skriptifailid"
11
+FileFilter.AllFiles="Kõik failid"
12
 
13
obs-studio-26.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/eu-ES.ini -> obs-studio-26.1.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/eu-ES.ini Changed
19
 
1
@@ -31,12 +31,17 @@
2
 AddScripts="Gehitu script-ak"
3
 RemoveScripts="Kendu script-ak"
4
 ReloadScripts="Birkargatu script-ak"
5
+Reload="Berriro kargatu"
6
+OpenFileLocation="Artxiboaren kokapena ireki"
7
 PythonSettings="Python ezarpenak"
8
 PythonSettings.PythonInstallPath32bit="Python instalazioaren bide-izena (32bit)"
9
 PythonSettings.PythonInstallPath64bit="Python instalazioaren bide-izena (64bit)"
10
 PythonSettings.BrowsePythonPath="Arakatu Python-en bide-izena"
11
 ScriptLogWindow="Script-aren erregistroa"
12
 Description="Deskribapena"
13
+ScriptDescriptionLink.Text="Ireki esteka hau zure nabigatzaile lehenetsian?"
14
+ScriptDescriptionLink.Text.Url="URLa: %1"
15
+ScriptDescriptionLink.OpenURL="Ireki web-helbidea"
16
 
17
 FileFilter.ScriptFiles="Script-aren fitxategiak"
18
 FileFilter.AllFiles="Fitxategi guztiak"
19
obs-studio-26.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/fa-IR.ini -> obs-studio-26.1.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/fa-IR.ini Changed
49
 
1
@@ -1,24 +1,47 @@
2
+SceneSwitcher="تغییر صحنه خودکار"
3
 SceneSwitcher.OnNoMatch="وقتی هیچ پنجرهای همخوانی نداشت:"
4
 SceneSwitcher.OnNoMatch.DontSwitch="سوییچ نکن"
5
 SceneSwitcher.OnNoMatch.SwitchTo="سویچ کن به:"
6
+SceneSwitcher.CheckInterval="عنوان پنجره فعال را هر بار بررسی کنید:"
7
+SceneSwitcher.ActiveOrNotActive="تغییر صحنه:"
8
+InvalidRegex.Title="عبارت منظم نامعتبر است"
9
+InvalidRegex.Text="عبارت منظمی که وارد کرده اید نامعتبر است."
10
 Active="فعال"
11
 Inactive="غیر فعال"
12
 Start="شروع"
13
 Stop="توقف"
14
 
15
+Captions="زیرنویس ها (تجربی)"
16
+Captions.AudioSource="منبع صدا"
17
+Captions.CurrentSystemLanguage="زبان سیستم فعلی (%1)"
18
+Captions.Provider="ارائه دهنده"
19
+Captions.Error.GenericFail="زیرنویس شروع نشد"
20
 
21
+OutputTimer="تایمر خروجی"
22
+OutputTimer.Stream="توقف پخش جریانی بعد از:"
23
+OutputTimer.Record="توقف ضبط بعد از:"
24
+OutputTimer.Stream.StoppingIn="توقف پخش جریان در:"
25
+OutputTimer.Record.StoppingIn="متوقف کردن ضبط در:"
26
 OutputTimer.Stream.EnableEverytime="هربار زمان سنج پخش جریانی را فعال کنید"
27
 OutputTimer.Record.EnableEverytime="هربار زمان سنج ضبط را فعال کنید"
28
+OutputTimer.Record.PauseTimer="هنگام مکث ضبط، تایمر مکث کند"
29
 
30
 Scripts="اسکریپت ها"
31
 LoadedScripts="اسکریپت های بارگیری شده"
32
 AddScripts="اضافه کردن اسکریپت ها"
33
 RemoveScripts="پاک کردن اسکریپت ها"
34
 ReloadScripts="بارگیری مجدد اسکریپت ها"
35
+Reload="تازهسازی"
36
+OpenFileLocation="بازکردن مکان فایل"
37
 PythonSettings="تنظیمات پایتون"
38
+PythonSettings.PythonInstallPath32bit="مسیر نصب پایتون (32 بیت)"
39
+PythonSettings.PythonInstallPath64bit="مسیر نصب پایتون (64 بیت)"
40
 PythonSettings.BrowsePythonPath="مرور مسیر پایتون"
41
 ScriptLogWindow="اسکریپت نویسی"
42
 Description="توضیحات"
43
+ScriptDescriptionLink.Text="این پیوند را در مرورگر وب پیش فرض خود باز می کنید?"
44
+ScriptDescriptionLink.Text.Url="نشانی: %1"
45
+ScriptDescriptionLink.OpenURL="باز کردن نشانی"
46
 
47
 FileFilter.ScriptFiles="فایل های اسکریپت"
48
 FileFilter.AllFiles="همهی فایل ها"
49
obs-studio-26.1.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/kab-KAB.ini Added
50
 
1
@@ -0,0 +1,48 @@
2
+SceneSwitcher="Asenfal awurman n usayes"
3
+SceneSwitcher.OnNoMatch="Ma ulac asfaylu inmeɣran:"
4
+SceneSwitcher.OnNoMatch.DontSwitch="Ur senfal ara"
5
+SceneSwitcher.OnNoMatch.SwitchTo="Senfel ɣer:"
6
+SceneSwitcher.CheckInterval="Selken azwel n usfaylu urmid yal:"
7
+SceneSwitcher.ActiveOrNotActive="Asenfal n usayes:"
8
+InvalidRegex.Title="Tanfalit talugant d tarmeɣtut"
9
+InvalidRegex.Text="Tanfalit talugant i tsekcmeḍ d tarmeɣtut."
10
+Active="Yermed"
11
+Inactive="Yensa"
12
+Start="Sekker"
13
+Stop="Seḥbes"
14
+
15
+Captions="Iduzwilen (d tarmit)"
16
+Captions.AudioSource="Aɣbalu n umeslaw"
17
+Captions.CurrentSystemLanguage="Tutlayt tamirant n unagraw (%1)"
18
+Captions.Provider="Aseǧǧaw"
19
+Captions.Error.GenericFail="Asekker n twaṭṭfiwin ur yeddi ara"
20
+
21
+OutputTimer="Amakud n tuffɣa"
22
+OutputTimer.Stream="Ḥbes asuddem mbaɛd:"
23
+OutputTimer.Record="Ḥbes asekles mbaɛd:"
24
+OutputTimer.Stream.StoppingIn="Asuddem ad iḥbes di:"
25
+OutputTimer.Record.StoppingIn="Asekles ad iḥbes di:"
26
+OutputTimer.Stream.EnableEverytime="Sermed amakud n usuddem yal tikkelt"
27
+OutputTimer.Record.EnableEverytime="Sermed amakud n usekles yal tikkelt"
28
+OutputTimer.Record.PauseTimer="Ḥbes amakud ticki yeḥbes usekles"
29
+
30
+Scripts="Iskripten"
31
+LoadedScripts="Iskripten yulin"
32
+AddScripts="Rnu iskripten"
33
+RemoveScripts="Kkes iskripten"
34
+ReloadScripts="Ales asali n yiskripten"
35
+Reload="Ales asali"
36
+OpenFileLocation="Ldi adig n ufaylu"
37
+PythonSettings="Iɣewwaren n Python"
38
+PythonSettings.PythonInstallPath32bit="Abrid n usbeddi n Python (32bit)"
39
+PythonSettings.PythonInstallPath64bit="Abrid n usbeddi n Python (64bit)"
40
+PythonSettings.BrowsePythonPath="Snirem abrid n Python"
41
+ScriptLogWindow="Aɣmis n uskript"
42
+Description="Aglam"
43
+ScriptDescriptionLink.Text="Ad teldiḍ aseɣwen-agi deg yiminig n web inek m n lexṣas?"
44
+ScriptDescriptionLink.Text.Url="URL: %1"
45
+ScriptDescriptionLink.OpenURL="Ldi URL"
46
+
47
+FileFilter.ScriptFiles="Ifuyla n uskript"
48
+FileFilter.AllFiles="Akk ifuyla"
49
+
50
obs-studio-26.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/nb-NO.ini -> obs-studio-26.1.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/nb-NO.ini Changed
19
 
1
@@ -31,12 +31,17 @@
2
 AddScripts="Legg til skripter"
3
 RemoveScripts="Fjern skripter"
4
 ReloadScripts="Last inn skripter på nytt"
5
+Reload="Oppdater"
6
+OpenFileLocation="Åpne filplassering"
7
 PythonSettings="Python-innstillinger"
8
 PythonSettings.PythonInstallPath32bit="Python-installasjonsfilbane (32-bit)"
9
 PythonSettings.PythonInstallPath64bit="Python-installasjonsfilbane (64-bit)"
10
 PythonSettings.BrowsePythonPath="Finn Python-filbanen"
11
 ScriptLogWindow="Skripthistorikk"
12
 Description="Beskrivelse"
13
+ScriptDescriptionLink.Text="Åpne denne lenken i standard nettleser?"
14
+ScriptDescriptionLink.Text.Url="URL: %1"
15
+ScriptDescriptionLink.OpenURL="Åpne URL"
16
 
17
 FileFilter.ScriptFiles="Skriptfiler"
18
 FileFilter.AllFiles="Alle filer"
19
obs-studio-26.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/pl-PL.ini -> obs-studio-26.1.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/pl-PL.ini Changed
10
 
1
@@ -24,7 +24,7 @@
2
 OutputTimer.Record.StoppingIn="Zatrzymanie nagrywania za:"
3
 OutputTimer.Stream.EnableEverytime="Włącz timer streamu za każdym razem"
4
 OutputTimer.Record.EnableEverytime="Włącz timer nagrywania za każdym razem"
5
-OutputTimer.Record.PauseTimer="Zatrzymaj czas, gdy nagrywanie jest spauzowane"
6
+OutputTimer.Record.PauseTimer="Zatrzymaj czas, gdy nagrywanie jest zapauzowane"
7
 
8
 Scripts="Skrypty"
9
 LoadedScripts="Wczytane skrypty"
10
obs-studio-26.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/pt-BR.ini -> obs-studio-26.1.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/pt-BR.ini Changed
56
 
1
@@ -4,16 +4,16 @@
2
 SceneSwitcher.OnNoMatch.SwitchTo="Alternar para:"
3
 SceneSwitcher.CheckInterval="Checar o título da janela ativa a cada:"
4
 SceneSwitcher.ActiveOrNotActive="O alternador de cenas está:"
5
-InvalidRegex.Title="Expressão Regular inválida"
6
+InvalidRegex.Title="Expressão regular inválida"
7
 InvalidRegex.Text="A expressão regular que você inseriu é inválida."
8
 Active="Ligado"
9
 Inactive="Desligado"
10
 Start="Iniciar"
11
 Stop="Parar"
12
 
13
-Captions="Legendas (Experimental)"
14
-Captions.AudioSource="Fonte de Áudio"
15
-Captions.CurrentSystemLanguage="Idioma Atual do Sistema (%1)"
16
+Captions="Legendas (experimental)"
17
+Captions.AudioSource="Fonte de áudio"
18
+Captions.CurrentSystemLanguage="Idioma atual do sistema (%1)"
19
 Captions.Provider="Provedor"
20
 Captions.Error.GenericFail="Falha ao iniciar legendas"
21
 
22
@@ -27,22 +27,22 @@
23
 OutputTimer.Record.PauseTimer="Pausar o temporizador quando a gravação é pausada"
24
 
25
 Scripts="Scripts"
26
-LoadedScripts="Scripts Carregados"
27
-AddScripts="Adicionar Scripts"
28
-RemoveScripts="Remover Scripts"
29
-ReloadScripts="Recarregar Scripts"
30
+LoadedScripts="Scripts carregados"
31
+AddScripts="Adicionar scripts"
32
+RemoveScripts="Remover scripts"
33
+ReloadScripts="Recarregar scripts"
34
 Reload="Recarregar"
35
 OpenFileLocation="Abrir local do arquivo"
36
-PythonSettings="Configurações Python"
37
-PythonSettings.PythonInstallPath32bit="Caminho de Instalação Python (32 bits)"
38
-PythonSettings.PythonInstallPath64bit="Caminho de Instalação Python (64 bits)"
39
-PythonSettings.BrowsePythonPath="Procurar Caminho do Python"
40
-ScriptLogWindow="Log dos Scripts"
41
+PythonSettings="Configurações do Python"
42
+PythonSettings.PythonInstallPath32bit="Caminho de instalação do Python (32 bits)"
43
+PythonSettings.PythonInstallPath64bit="Caminho de instalação do Python (64 bits)"
44
+PythonSettings.BrowsePythonPath="Procurar caminho do Python"
45
+ScriptLogWindow="Log de scripts"
46
 Description="Descrição"
47
 ScriptDescriptionLink.Text="Abrir este link no seu navegador padrão?"
48
 ScriptDescriptionLink.Text.Url="URL: %1"
49
 ScriptDescriptionLink.OpenURL="Abrir URL"
50
 
51
-FileFilter.ScriptFiles="Arquivos de Scripts"
52
-FileFilter.AllFiles="Todos os Arquivos"
53
+FileFilter.ScriptFiles="Arquivos de scripts"
54
+FileFilter.AllFiles="Todos os arquivos"
55
 
56
obs-studio-26.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/pt-PT.ini -> obs-studio-26.1.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/pt-PT.ini Changed
17
 
1
@@ -31,12 +31,15 @@
2
 AddScripts="Adicionar Scripts"
3
 RemoveScripts="Remover Scripts"
4
 ReloadScripts="Recarregar Scripts"
5
+Reload="Recarregar"
6
+OpenFileLocation="Abrir local do ficheiro"
7
 PythonSettings="Definições do Python"
8
 PythonSettings.PythonInstallPath32bit="Caminho da Instalação do Python (32bits)"
9
 PythonSettings.PythonInstallPath64bit="Caminho da Instalação do Python (64bits)"
10
 PythonSettings.BrowsePythonPath="Procurar o Caminho Python"
11
 ScriptLogWindow="Log do Script"
12
 Description="Descrição"
13
+ScriptDescriptionLink.Text="Abrir este link no teu navegador padrão?"
14
 ScriptDescriptionLink.Text.Url="URL: %1"
15
 ScriptDescriptionLink.OpenURL="Abrir URL"
16
 
17
obs-studio-26.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ro-RO.ini -> obs-studio-26.1.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ro-RO.ini Changed
23
 
1
@@ -5,7 +5,7 @@
2
 SceneSwitcher.CheckInterval="Verifică titlul ferestrei active la fiecare:"
3
 SceneSwitcher.ActiveOrNotActive="Schimbătorul de scene este:"
4
 InvalidRegex.Title="Expresie regulată invalidă"
5
-InvalidRegex.Text="Expresia obișnuită pe care ați introdus-o este invalidă."
6
+InvalidRegex.Text="Expresia regulată pe care ai introdus-o este nevalidă."
7
 Active="Activ"
8
 Inactive="Inactiv"
9
 Start="Pornește"
10
@@ -39,10 +39,10 @@
11
 PythonSettings.BrowsePythonPath="Răsfoiește calea Python"
12
 ScriptLogWindow="Jurnalul scripturilor"
13
 Description="Descriere"
14
-ScriptDescriptionLink.Text="Deschideți acest link în browser-ul web implicit?"
15
+ScriptDescriptionLink.Text="Deschizi acest link în browserul web implicit?"
16
 ScriptDescriptionLink.Text.Url="URL: %1"
17
 ScriptDescriptionLink.OpenURL="Deschide URL-ul"
18
 
19
-FileFilter.ScriptFiles="Fișiere Script"
20
+FileFilter.ScriptFiles="Fișiere de script"
21
 FileFilter.AllFiles="Toate fișierele"
22
 
23
obs-studio-26.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/sl-SI.ini -> obs-studio-26.1.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/sl-SI.ini Changed
10
 
1
@@ -31,6 +31,8 @@
2
 AddScripts="Dodaj skripte"
3
 RemoveScripts="Odstrani skripte"
4
 ReloadScripts="Ponovno naloži skripte"
5
+Reload="Ponovno naloži"
6
+OpenFileLocation="Odpri lokacijo datoteke"
7
 PythonSettings="Nastavitve Python"
8
 PythonSettings.PythonInstallPath32bit="Namestitvena pot Pythona (32-bitni)"
9
 PythonSettings.PythonInstallPath64bit="Namestitvena pot Pythona (64-bitni)"
10
obs-studio-26.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/sv-SE.ini -> obs-studio-26.1.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/sv-SE.ini Changed
22
 
1
@@ -2,7 +2,7 @@
2
 SceneSwitcher.OnNoMatch="När inget fönster matchar:"
3
 SceneSwitcher.OnNoMatch.DontSwitch="Byt inte"
4
 SceneSwitcher.OnNoMatch.SwitchTo="Byt till:"
5
-SceneSwitcher.CheckInterval="Kontrollera aktiv fönstertitel varje:"
6
+SceneSwitcher.CheckInterval="Kontrollera titel på aktivt fönster varje:"
7
 SceneSwitcher.ActiveOrNotActive="Scenbytaren är:"
8
 InvalidRegex.Title="Ogiltigt reguljärt uttryck"
9
 InvalidRegex.Text="Det reguljära uttrycket du angav är ogiltigt."
10
@@ -18,9 +18,9 @@
11
 Captions.Error.GenericFail="Det gick inte att starta undertexter"
12
 
13
 OutputTimer="Utdatatimer"
14
-OutputTimer.Stream="Sluta streama efter:"
15
+OutputTimer.Stream="Stoppa strömmen efter:"
16
 OutputTimer.Record="Stoppa inspelningen efter:"
17
-OutputTimer.Stream.StoppingIn="Streamen stoppas om:"
18
+OutputTimer.Stream.StoppingIn="Strömmen stoppas om:"
19
 OutputTimer.Record.StoppingIn="Inspelningen stoppas om:"
20
 OutputTimer.Stream.EnableEverytime="Aktivera strömtimer varje gång"
21
 OutputTimer.Record.EnableEverytime="Aktivera inspelningstimer varje gång"
22
obs-studio-26.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/vi-VN.ini -> obs-studio-26.1.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/vi-VN.ini Changed
26
 
1
@@ -24,18 +24,24 @@
2
 OutputTimer.Record.StoppingIn="Quay video sẽ dừng trong:"
3
 OutputTimer.Stream.EnableEverytime="Bật hẹn giờ phát luồng mỗi lần"
4
 OutputTimer.Record.EnableEverytime="Bật hẹn giờ phát mỗi lần"
5
+OutputTimer.Record.PauseTimer="Dừng bấm giờ khi ghi hình tạm dừng"
6
 
7
 Scripts="Kịch bản"
8
 LoadedScripts="Kịch bản đã nạp"
9
 AddScripts="Thêm script"
10
 RemoveScripts="Gỡ bỏ kịch bản"
11
 ReloadScripts="Nạp lại kịch bản"
12
+Reload="Tải lại"
13
+OpenFileLocation="Mở vị trí tệp"
14
 PythonSettings="Thiết đặt Python"
15
 PythonSettings.PythonInstallPath32bit="Đường dẫn cài đặt Python (32bit)"
16
 PythonSettings.PythonInstallPath64bit="Đường dẫn cài đặt Python (64bit)"
17
 PythonSettings.BrowsePythonPath="Duyệt đường dẫn Python"
18
 ScriptLogWindow="Bản ghi kịch bản"
19
 Description="Mô tả"
20
+ScriptDescriptionLink.Text="Mở liên kết trên trình duyệt web mặc định?"
21
+ScriptDescriptionLink.Text.Url="URL: %1"
22
+ScriptDescriptionLink.OpenURL="Mở URL"
23
 
24
 FileFilter.ScriptFiles="Tập tin script"
25
 FileFilter.AllFiles="Tất cả tập tin"
26
obs-studio-26.0.2.tar.xz/UI/frontend-plugins/frontend-tools/frontend-tools-config.h.in -> obs-studio-26.1.0.tar.xz/UI/frontend-plugins/frontend-tools/frontend-tools-config.h.in Changed
9
 
1
@@ -16,7 +16,6 @@
2
 #define OFF 0
3
 #endif
4
 
5
-#define BUILD_CAPTIONS @BUILD_CAPTIONS@
6
 #define ENABLE_SCRIPTING @SCRIPTING_ENABLED@
7
 #define COMPILE_LUA @COMPILE_LUA@
8
 #define COMPILE_PYTHON @COMPILE_PYTHON@
9
obs-studio-26.0.2.tar.xz/UI/frontend-plugins/frontend-tools/frontend-tools.c -> obs-studio-26.1.0.tar.xz/UI/frontend-plugins/frontend-tools/frontend-tools.c Changed
28
 
1
@@ -7,7 +7,7 @@
2
 void InitSceneSwitcher();
3
 void FreeSceneSwitcher();
4
 
5
-#if defined(_WIN32) && BUILD_CAPTIONS
6
+#if defined(_WIN32)
7
 void InitCaptions();
8
 void FreeCaptions();
9
 #endif
10
@@ -22,7 +22,7 @@
11
 
12
 bool obs_module_load(void)
13
 {
14
-#if defined(_WIN32) && BUILD_CAPTIONS
15
+#if defined(_WIN32)
16
    InitCaptions();
17
 #endif
18
    InitSceneSwitcher();
19
@@ -35,7 +35,7 @@
20
 
21
 void obs_module_unload(void)
22
 {
23
-#if defined(_WIN32) && BUILD_CAPTIONS
24
+#if defined(_WIN32)
25
    FreeCaptions();
26
 #endif
27
    FreeSceneSwitcher();
28
obs-studio-26.0.2.tar.xz/UI/hotkey-edit.cpp -> obs-studio-26.1.0.tar.xz/UI/hotkey-edit.cpp Changed
24
 
1
@@ -101,7 +101,7 @@
2
    case Qt::MouseButtonMask:
3
        return;
4
 
5
-   case Qt::MidButton:
6
+   case Qt::MiddleButton:
7
        new_key.key = OBS_KEY_MOUSE3;
8
        break;
9
 
10
@@ -293,11 +293,13 @@
11
 
12
    auto add = new QPushButton;
13
    add->setProperty("themeID", "addIconSmall");
14
+   add->setToolTip(QTStr("Add"));
15
    add->setFixedSize(24, 24);
16
    add->setFlat(true);
17
 
18
    auto remove = new QPushButton;
19
    remove->setProperty("themeID", "removeIconSmall");
20
+   remove->setToolTip(QTStr("Remove"));
21
    remove->setEnabled(removeButtons.size() > 0);
22
    remove->setFixedSize(24, 24);
23
    remove->setFlat(true);
24
obs-studio-26.0.2.tar.xz/UI/installer/mp-installer.nsi -> obs-studio-26.1.0.tar.xz/UI/installer/mp-installer.nsi Changed
57
 
1
@@ -104,35 +104,34 @@
2
    ${EndIf}
3
 
4
 !ifdef INSTALL64
5
-   ; 64 bit Visual Studio 2017 runtime check
6
+   ; 64 bit Visual Studio 2019 runtime check
7
    ClearErrors
8
-   SetOutPath "$TEMP\OBS"
9
-   File check_for_64bit_visual_studio_2017_runtimes.exe
10
-   ExecWait "$TEMP\OBS\check_for_64bit_visual_studio_2017_runtimes.exe" $R0
11
-   Delete "$TEMP\OBS\check_for_64bit_visual_studio_2017_runtimes.exe"
12
-   RMDir "$TEMP\OBS"
13
-   IntCmp $R0 126 vs2017Missing_64 vs2017OK_64
14
-   vs2017Missing_64:
15
-       MessageBox MB_YESNO|MB_ICONEXCLAMATION "Your system is missing runtime components that ${APPNAME} requires. Would you like to download them?" IDYES vs2017true_64 IDNO vs2017false_64
16
-       vs2017true_64:
17
-           ExecShell "open" "https://obsproject.com/visual-studio-2017-runtimes-64-bit"
18
-       vs2017false_64:
19
+   SetOutPath "$PLUGINSDIR"
20
+   File check_for_64bit_visual_studio_2019_runtimes.exe
21
+   ExecWait "$PLUGINSDIR\check_for_64bit_visual_studio_2019_runtimes.exe" $R0
22
+   Delete "$PLUGINSDIR\check_for_64bit_visual_studio_2019_runtimes.exe"
23
+   IntCmp $R0 126 vs2019Missing_64 vs2019OK_64
24
+   vs2019Missing_64:
25
+       MessageBox MB_YESNO|MB_ICONEXCLAMATION "Your system is missing runtime components that ${APPNAME} requires. Would you like to download them?" IDYES vs2019true_64 IDNO vs2019false_64
26
+       vs2019true_64:
27
+           ExecShell "open" "https://obsproject.com/visual-studio-2019-runtimes-64-bit"
28
+       vs2019false_64:
29
        Quit
30
-   vs2017OK_64:
31
+   vs2019OK_64:
32
    ClearErrors
33
 !else
34
-   ; 32 bit Visual Studio 2017 runtime check
35
+   ; 32 bit Visual Studio 2019 runtime check
36
    ClearErrors
37
    GetDLLVersion "vcruntime140.DLL" $R0 $R1
38
    GetDLLVersion "msvcp140.DLL" $R0 $R1
39
-   IfErrors vs2017Missing_32 vs2017OK_32
40
-   vs2017Missing_32:
41
-       MessageBox MB_YESNO|MB_ICONEXCLAMATION "Your system is missing runtime components that ${APPNAME} requires. Would you like to download them?" IDYES vs2017true_32 IDNO vs2017false_32
42
-       vs2017true_32:
43
-           ExecShell "open" "https://obsproject.com/visual-studio-2017-runtimes-32-bit"
44
-       vs2017false_32:
45
+   IfErrors vs2019Missing_32 vs2019OK_32
46
+   vs2019Missing_32:
47
+       MessageBox MB_YESNO|MB_ICONEXCLAMATION "Your system is missing runtime components that ${APPNAME} requires. Would you like to download them?" IDYES vs2019true_32 IDNO vs2019false_32
48
+       vs2019true_32:
49
+           ExecShell "open" "https://obsproject.com/visual-studio-2019-runtimes-32-bit"
50
+       vs2019false_32:
51
        Quit
52
-   vs2017OK_32:
53
+   vs2019OK_32:
54
    ClearErrors
55
 !endif
56
 
57
obs-studio-26.0.2.tar.xz/UI/obs-app.cpp -> obs-studio-26.1.0.tar.xz/UI/obs-app.cpp Changed
132
 
1
@@ -35,10 +35,12 @@
2
 #include <QProxyStyle>
3
 #include <QScreen>
4
 #include <QProcess>
5
+#include <QAccessible>
6
 
7
 #include "qt-wrappers.hpp"
8
 #include "obs-app.hpp"
9
 #include "log-viewer.hpp"
10
+#include "slider-ignorewheel.hpp"
11
 #include "window-basic-main.hpp"
12
 #include "window-basic-settings.hpp"
13
 #include "crash-report.hpp"
14
@@ -114,7 +116,7 @@
15
            case Qt::MouseButtonMask:
16
                return false;
17
 
18
-           case Qt::MidButton:
19
+           case Qt::MiddleButton:
20
                hotkey.key = OBS_KEY_MOUSE3;
21
                break;
22
 
23
@@ -446,6 +448,8 @@
24
                true);
25
    config_set_default_bool(globalConfig, "BasicWindow", "ShowSourceIcons",
26
                true);
27
+   config_set_default_bool(globalConfig, "BasicWindow",
28
+               "ShowContextToolbars", true);
29
    config_set_default_bool(globalConfig, "BasicWindow", "StudioModeLabels",
30
                true);
31
 
32
@@ -1125,7 +1129,12 @@
33
 {
34
    sleepInhibitor = os_inhibit_sleep_create("OBS Video/audio");
35
 
36
+#ifdef __APPLE__
37
+   setWindowIcon(
38
+       QIcon::fromTheme("obs", QIcon(":/res/images/obs_256x256.png")));
39
+#else
40
    setWindowIcon(QIcon::fromTheme("obs", QIcon(":/res/images/obs.png")));
41
+#endif
42
 }
43
 
44
 OBSApp::~OBSApp()
45
@@ -1257,6 +1266,8 @@
46
                  Str("Untitled"));
47
    config_set_default_string(globalConfig, "Basic", "SceneCollectionFile",
48
                  Str("Untitled"));
49
+   config_set_default_bool(globalConfig, "Basic", "ConfigOnNewProfile",
50
+               true);
51
 
52
    if (!config_has_user_value(globalConfig, "Basic", "Profile")) {
53
        config_set_string(globalConfig, "Basic", "Profile",
54
@@ -1433,6 +1444,8 @@
55
    ver << "windows)";
56
 #elif __APPLE__
57
    ver << "mac)";
58
+#elif __OpenBSD__
59
+   ver << "openbsd)";
60
 #elif __FreeBSD__
61
    ver << "freebsd)";
62
 #else /* assume linux for the time being */
63
@@ -1890,6 +1903,17 @@
64
    profiler_free();
65
 };
66
 
67
+QAccessibleInterface *accessibleFactory(const QString &classname,
68
+                   QObject *object)
69
+{
70
+   if (classname == QLatin1String("VolumeSlider") && object &&
71
+       object->isWidgetType())
72
+       return new VolumeAccessibleInterface(
73
+           static_cast<QWidget *>(object));
74
+
75
+   return nullptr;
76
+}
77
+
78
 static const char *run_program_init = "run_program_init";
79
 static int run_program(fstream &logFile, int argc, char *argv[])
80
 {
81
@@ -1908,6 +1932,10 @@
82
 #if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0))
83
    QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
84
 #endif
85
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
86
+   QGuiApplication::setHighDpiScaleFactorRoundingPolicy(
87
+       Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
88
+#endif
89
 
90
 #if !defined(_WIN32) && !defined(__APPLE__) && BROWSER_AVAILABLE
91
    setenv("QT_NO_GLIB", "1", true);
92
@@ -1921,6 +1949,8 @@
93
 
94
    OBSApp program(argc, argv, profilerNameStore.get());
95
    try {
96
+       QAccessible::installFactory(accessibleFactory);
97
+
98
        bool created_log = false;
99
 
100
        program.AppInit();
101
@@ -1929,13 +1959,21 @@
102
        OBSTranslator translator;
103
        program.installTranslator(&translator);
104
 
105
-#ifdef _WIN32
106
        /* --------------------------------------- */
107
        /* check and warn if already running       */
108
 
109
        bool cancel_launch = false;
110
        bool already_running = false;
111
+
112
+#if defined(_WIN32)
113
        RunOnceMutex rom = GetRunOnceMutex(already_running);
114
+#elif defined(__APPLE__)
115
+       CheckAppWithSameBundleID(already_running);
116
+#elif defined(__linux__)
117
+       RunningInstanceCheck(already_running);
118
+#elif defined(__FreeBSD__) || defined(__DragonFly__)
119
+       PIDFileCheck(already_running);
120
+#endif
121
 
122
        if (!already_running) {
123
            goto run;
124
@@ -1979,7 +2017,6 @@
125
 
126
        /* --------------------------------------- */
127
    run:
128
-#endif
129
 
130
 #if !defined(_WIN32) && !defined(__APPLE__) && !defined(__FreeBSD__)
131
        // Mounted by termina during chromeOS linux container startup
132
obs-studio-26.0.2.tar.xz/UI/obs-frontend-api/obs-frontend-api.h -> obs-studio-26.1.0.tar.xz/UI/obs-frontend-api/obs-frontend-api.h Changed
9
 
1
@@ -49,6 +49,7 @@
2
    OBS_FRONTEND_EVENT_RECORDING_UNPAUSED,
3
 
4
    OBS_FRONTEND_EVENT_TRANSITION_DURATION_CHANGED,
5
+   OBS_FRONTEND_EVENT_REPLAY_BUFFER_SAVED,
6
 };
7
 
8
 /* ------------------------------------------------------------------------- */
9
obs-studio-26.0.2.tar.xz/UI/platform-osx.mm -> obs-studio-26.1.0.tar.xz/UI/platform-osx.mm Changed
31
 
1
@@ -87,6 +87,29 @@
2
 #endif
3
 }
4
 
5
+void CheckAppWithSameBundleID(bool &already_running)
6
+{
7
+   try {
8
+       NSBundle *bundle = [NSBundle mainBundle];
9
+       if (!bundle)
10
+           throw "Could not find main bundle";
11
+
12
+       NSString *bundleID = [bundle bundleIdentifier];
13
+       if (!bundleID)
14
+           throw "Could not find bundle identifier";
15
+
16
+       int app_count =
17
+           [NSRunningApplication
18
+               runningApplicationsWithBundleIdentifier:bundleID]
19
+               .count;
20
+
21
+       already_running = app_count > 1;
22
+
23
+   } catch (const char *error) {
24
+       blog(LOG_ERROR, "CheckAppWithSameBundleID: %s", error);
25
+   }
26
+}
27
+
28
 string GetDefaultVideoSavePath()
29
 {
30
    NSFileManager *fm = [NSFileManager defaultManager];
31
obs-studio-26.0.2.tar.xz/UI/platform-x11.cpp -> obs-studio-26.1.0.tar.xz/UI/platform-x11.cpp Changed
153
 
1
@@ -27,8 +27,151 @@
2
 #include <locale.h>
3
 
4
 #include "platform.hpp"
5
+
6
+#ifdef __linux__
7
+#include <sys/socket.h>
8
+#include <string.h>
9
+#include <sys/types.h>
10
+#include <stdio.h>
11
+#include <sys/un.h>
12
+#endif
13
+#if defined(__FreeBSD__) || defined(__DragonFly__)
14
+#include <sys/param.h>
15
+#include <fcntl.h>
16
+#include <sys/sysctl.h>
17
+#include <sys/user.h>
18
+#include <libprocstat.h>
19
+#include <pthread_np.h>
20
+
21
+#include <condition_variable>
22
+#include <mutex>
23
+#include <thread>
24
+#endif
25
+
26
 using namespace std;
27
 
28
+#ifdef __linux__
29
+void RunningInstanceCheck(bool &already_running)
30
+{
31
+   int uniq = socket(AF_LOCAL, SOCK_DGRAM | SOCK_CLOEXEC, 0);
32
+
33
+   if (uniq == -1) {
34
+       blog(LOG_ERROR,
35
+            "Failed to check for running instance, socket: %d", errno);
36
+       already_running = 0;
37
+       return;
38
+   }
39
+
40
+   struct sockaddr_un bindInfo;
41
+   memset(&bindInfo, 0, sizeof(sockaddr_un));
42
+   bindInfo.sun_family = AF_LOCAL;
43
+   char *abstactSockName = NULL;
44
+   asprintf(&abstactSockName, "%s %d %s", "/com/obsproject", getpid(),
45
+        App()->GetVersionString().c_str());
46
+   memmove(bindInfo.sun_path + 1, abstactSockName,
47
+       strlen(abstactSockName));
48
+   free(abstactSockName);
49
+
50
+   int bindErr = bind(uniq, (struct sockaddr *)&bindInfo,
51
+              sizeof(struct sockaddr_un));
52
+   already_running = bindErr == 0 ? 0 : 1;
53
+
54
+   if (already_running) {
55
+       return;
56
+   }
57
+
58
+   FILE *fp = fopen("/proc/net/unix", "re");
59
+
60
+   if (fp == NULL) {
61
+       return;
62
+   }
63
+
64
+   char *line = NULL;
65
+   size_t n = 0;
66
+   int obsCnt = 0;
67
+   while (getdelim(&line, &n, ' ', fp) != EOF) {
68
+       line[strcspn(line, "\n")] = '\0';
69
+       if (*line == '@') {
70
+           if (strstr(line, "@/com/obsproject") != NULL) {
71
+               ++obsCnt;
72
+           }
73
+       }
74
+   }
75
+   already_running = obsCnt == 1 ? 0 : 1;
76
+   free(line);
77
+   fclose(fp);
78
+}
79
+#endif
80
+#if defined(__FreeBSD__) || defined(__DragonFly__)
81
+struct RunOnce {
82
+   std::thread thr;
83
+   static const char *thr_name;
84
+   std::condition_variable cv;
85
+   std::condition_variable wait_cv;
86
+   std::mutex mtx;
87
+   bool exiting = false;
88
+   bool name_changed = false;
89
+
90
+   void thr_proc()
91
+   {
92
+       std::unique_lock<std::mutex> lk(mtx);
93
+       pthread_set_name_np(pthread_self(), thr_name);
94
+       name_changed = true;
95
+       wait_cv.notify_all();
96
+       cv.wait(lk, [this]() { return exiting; });
97
+   }
98
+
99
+   ~RunOnce()
100
+   {
101
+       if (thr.joinable()) {
102
+           std::unique_lock<std::mutex> lk(mtx);
103
+           exiting = true;
104
+           cv.notify_one();
105
+           lk.unlock();
106
+           thr.join();
107
+       }
108
+   }
109
+} RO;
110
+const char *RunOnce::thr_name = "OBS runonce";
111
+
112
+void PIDFileCheck(bool &already_running)
113
+{
114
+   std::string tmpfile_name =
115
+       "/tmp/obs-studio.lock." + to_string(geteuid());
116
+   int fd = open(tmpfile_name.c_str(), O_RDWR | O_CREAT | O_EXLOCK, 0600);
117
+   if (fd == -1) {
118
+       already_running = true;
119
+       return;
120
+   }
121
+
122
+   already_running = false;
123
+
124
+   procstat *ps = procstat_open_sysctl();
125
+   unsigned int count;
126
+   auto procs = procstat_getprocs(ps, KERN_PROC_UID | KERN_PROC_INC_THREAD,
127
+                      geteuid(), &count);
128
+   for (unsigned int i = 0; i < count; i++) {
129
+       if (!strncmp(procs[i].ki_tdname, RunOnce::thr_name,
130
+                sizeof(procs[i].ki_tdname))) {
131
+           already_running = true;
132
+           break;
133
+       }
134
+   }
135
+   procstat_freeprocs(ps, procs);
136
+   procstat_close(ps);
137
+
138
+   RO.thr = std::thread(std::mem_fn(&RunOnce::thr_proc), &RO);
139
+
140
+   {
141
+       std::unique_lock<std::mutex> lk(RO.mtx);
142
+       RO.wait_cv.wait(lk, []() { return RO.name_changed; });
143
+   }
144
+
145
+   unlink(tmpfile_name.c_str());
146
+   close(fd);
147
+}
148
+#endif
149
+
150
 static inline bool check_path(const char *data, const char *path,
151
                  string &output)
152
 {
153
obs-studio-26.0.2.tar.xz/UI/platform.hpp -> obs-studio-26.1.0.tar.xz/UI/platform.hpp Changed
13
 
1
@@ -68,4 +68,11 @@
2
 void EnableOSXDockIcon(bool enable);
3
 void InstallNSApplicationSubclass();
4
 void disableColorSpaceConversion(QWidget *window);
5
+void CheckAppWithSameBundleID(bool &already_running);
6
+#endif
7
+#ifdef __linux__
8
+void RunningInstanceCheck(bool &already_running);
9
+#endif
10
+#if defined(__FreeBSD__) || defined(__DragonFly__)
11
+void PIDFileCheck(bool &already_running);
12
 #endif
13
obs-studio-26.0.2.tar.xz/UI/properties-view.cpp -> obs-studio-26.1.0.tar.xz/UI/properties-view.cpp Changed
19
 
1
@@ -329,8 +329,7 @@
2
    int val = (int)obs_data_get_int(settings, name);
3
    QSpinBox *spin = new SpinBoxIgnoreScroll();
4
 
5
-   if (!obs_property_enabled(prop))
6
-       spin->setEnabled(false);
7
+   spin->setEnabled(obs_property_enabled(prop));
8
 
9
    int minVal = obs_property_int_min(prop);
10
    int maxVal = obs_property_int_max(prop);
11
@@ -354,6 +353,7 @@
12
        slider->setPageStep(stepVal);
13
        slider->setValue(val);
14
        slider->setOrientation(Qt::Horizontal);
15
+       slider->setEnabled(obs_property_enabled(prop));
16
        subLayout->addWidget(slider);
17
 
18
        connect(slider, SIGNAL(valueChanged(int)), spin,
19
obs-studio-26.0.2.tar.xz/UI/qt-wrappers.cpp -> obs-studio-26.1.0.tar.xz/UI/qt-wrappers.cpp Changed
30
 
1
@@ -22,10 +22,12 @@
2
 #include <util/threading.h>
3
 #include <QWidget>
4
 #include <QLayout>
5
+#include <QComboBox>
6
 #include <QMessageBox>
7
 #include <QDataStream>
8
 #include <QKeyEvent>
9
 #include <QFileDialog>
10
+#include <QStandardItemModel>
11
 
12
 #if !defined(_WIN32) && !defined(__APPLE__)
13
 #include <QX11Info>
14
@@ -326,6 +328,15 @@
15
    return false;
16
 }
17
 
18
+void SetComboItemEnabled(QComboBox *c, int idx, bool enabled)
19
+{
20
+   QStandardItemModel *model =
21
+       dynamic_cast<QStandardItemModel *>(c->model());
22
+   QStandardItem *item = model->item(idx);
23
+   item->setFlags(enabled ? Qt::ItemIsSelectable | Qt::ItemIsEnabled
24
+                  : Qt::NoItemFlags);
25
+}
26
+
27
 void setThemeID(QWidget *widget, const QString &themeID)
28
 {
29
    if (widget->property("themeID").toString() != themeID) {
30
obs-studio-26.0.2.tar.xz/UI/qt-wrappers.hpp -> obs-studio-26.1.0.tar.xz/UI/qt-wrappers.hpp Changed
18
 
1
@@ -31,6 +31,7 @@
2
 #define QT_TO_UTF8(str) str.toUtf8().constData()
3
 
4
 class QDataStream;
5
+class QComboBox;
6
 class QWidget;
7
 class QLayout;
8
 class QString;
9
@@ -106,6 +107,8 @@
10
 bool LineEditCanceled(QEvent *event);
11
 bool LineEditChanged(QEvent *event);
12
 
13
+void SetComboItemEnabled(QComboBox *c, int idx, bool enabled);
14
+
15
 void setThemeID(QWidget *widget, const QString &themeID);
16
 
17
 QString SelectDirectory(QWidget *parent, QString title, QString path);
18
obs-studio-26.0.2.tar.xz/UI/slider-absoluteset-style.cpp -> obs-studio-26.1.0.tar.xz/UI/slider-absoluteset-style.cpp Changed
9
 
1
@@ -15,6 +15,6 @@
2
                      QStyleHintReturn *returnData = 0) const
3
 {
4
    if (hint == QStyle::SH_Slider_AbsoluteSetButtons)
5
-       return (Qt::LeftButton | Qt::MidButton);
6
+       return (Qt::LeftButton | Qt::MiddleButton);
7
    return QProxyStyle::styleHint(hint, option, widget, returnData);
8
 }
9
obs-studio-26.0.2.tar.xz/UI/slider-ignorewheel.cpp -> obs-studio-26.1.0.tar.xz/UI/slider-ignorewheel.cpp Changed
85
 
1
@@ -1,4 +1,5 @@
2
 #include "slider-ignorewheel.hpp"
3
+#include "volume-control.hpp"
4
 
5
 SliderIgnoreScroll::SliderIgnoreScroll(QWidget *parent) : QSlider(parent)
6
 {
7
@@ -20,3 +21,77 @@
8
    else
9
        QSlider::wheelEvent(event);
10
 }
11
+
12
+VolumeSlider::VolumeSlider(obs_fader_t *fader, QWidget *parent)
13
+   : SliderIgnoreScroll(parent)
14
+{
15
+   fad = fader;
16
+}
17
+
18
+VolumeSlider::VolumeSlider(obs_fader_t *fader, Qt::Orientation orientation,
19
+              QWidget *parent)
20
+   : SliderIgnoreScroll(orientation, parent)
21
+{
22
+   fad = fader;
23
+}
24
+
25
+VolumeAccessibleInterface::VolumeAccessibleInterface(QWidget *w)
26
+   : QAccessibleWidget(w)
27
+{
28
+}
29
+
30
+VolumeSlider *VolumeAccessibleInterface::slider() const
31
+{
32
+   return qobject_cast<VolumeSlider *>(object());
33
+}
34
+
35
+QString VolumeAccessibleInterface::text(QAccessible::Text t) const
36
+{
37
+   if (slider()->isVisible()) {
38
+       switch (t) {
39
+       case QAccessible::Text::Value:
40
+           return currentValue().toString();
41
+       default:
42
+           break;
43
+       }
44
+   }
45
+   return QAccessibleWidget::text(t);
46
+}
47
+
48
+QVariant VolumeAccessibleInterface::currentValue() const
49
+{
50
+   QString text;
51
+   float db = obs_fader_get_db(slider()->fad);
52
+
53
+   if (db < -96.0f)
54
+       text = "-inf dB";
55
+   else
56
+       text = QString::number(db, 'f', 1).append(" dB");
57
+
58
+   return text;
59
+}
60
+
61
+void VolumeAccessibleInterface::setCurrentValue(const QVariant &value)
62
+{
63
+   slider()->setValue(value.toInt());
64
+}
65
+
66
+QVariant VolumeAccessibleInterface::maximumValue() const
67
+{
68
+   return slider()->maximum();
69
+}
70
+
71
+QVariant VolumeAccessibleInterface::minimumValue() const
72
+{
73
+   return slider()->minimum();
74
+}
75
+
76
+QVariant VolumeAccessibleInterface::minimumStepSize() const
77
+{
78
+   return slider()->singleStep();
79
+}
80
+
81
+QAccessible::Role VolumeAccessibleInterface::role() const
82
+{
83
+   return QAccessible::Role::Slider;
84
+}
85
obs-studio-26.0.2.tar.xz/UI/slider-ignorewheel.hpp -> obs-studio-26.1.0.tar.xz/UI/slider-ignorewheel.hpp Changed
48
 
1
@@ -1,8 +1,10 @@
2
 #pragma once
3
 
4
+#include "obs.hpp"
5
 #include <QSlider>
6
 #include <QInputEvent>
7
 #include <QtCore/QObject>
8
+#include <QAccessibleWidget>
9
 
10
 class SliderIgnoreScroll : public QSlider {
11
    Q_OBJECT
12
@@ -15,3 +17,35 @@
13
 protected:
14
    virtual void wheelEvent(QWheelEvent *event) override;
15
 };
16
+
17
+class VolumeSlider : public SliderIgnoreScroll {
18
+   Q_OBJECT
19
+
20
+public:
21
+   obs_fader_t *fad;
22
+
23
+   VolumeSlider(obs_fader_t *fader, QWidget *parent = nullptr);
24
+   VolumeSlider(obs_fader_t *fader, Qt::Orientation orientation,
25
+            QWidget *parent = nullptr);
26
+};
27
+
28
+class VolumeAccessibleInterface : public QAccessibleWidget {
29
+
30
+public:
31
+   VolumeAccessibleInterface(QWidget *w);
32
+
33
+   QVariant currentValue() const;
34
+   void setCurrentValue(const QVariant &value);
35
+
36
+   QVariant maximumValue() const;
37
+   QVariant minimumValue() const;
38
+
39
+   QVariant minimumStepSize() const;
40
+
41
+private:
42
+   VolumeSlider *slider() const;
43
+
44
+protected:
45
+   virtual QAccessible::Role role() const override;
46
+   virtual QString text(QAccessible::Text t) const override;
47
+};
48
obs-studio-26.0.2.tar.xz/UI/source-tree.cpp -> obs-studio-26.1.0.tar.xz/UI/source-tree.cpp Changed
52
 
1
@@ -19,6 +19,7 @@
2
 #include <QVBoxLayout>
3
 #include <QHBoxLayout>
4
 #include <QMouseEvent>
5
+#include <QAccessible>
6
 
7
 #include <QStylePainter>
8
 #include <QStyleOptionFocusRect>
9
@@ -84,12 +85,18 @@
10
    vis->setFixedSize(16, 16);
11
    vis->setChecked(obs_sceneitem_visible(sceneitem));
12
    vis->setStyleSheet("background: none");
13
+   vis->setAccessibleName(QTStr("Basic.Main.Sources.Visibility"));
14
+   vis->setAccessibleDescription(
15
+       QTStr("Basic.Main.Sources.VisibilityDescription").arg(name));
16
 
17
    lock = new LockedCheckBox();
18
    lock->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
19
    lock->setFixedSize(16, 16);
20
    lock->setChecked(obs_sceneitem_locked(sceneitem));
21
    lock->setStyleSheet("background: none");
22
+   lock->setAccessibleName(QTStr("Basic.Main.Sources.Lock"));
23
+   lock->setAccessibleDescription(
24
+       QTStr("Basic.Main.Sources.LockDescription").arg(name));
25
 
26
    label = new QLabel(QT_UTF8(name));
27
    label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
28
@@ -354,6 +361,7 @@
29
    editor = nullptr;
30
    setFocusPolicy(Qt::NoFocus);
31
    boxLayout->insertWidget(index, label);
32
+   label->setFocus();
33
 
34
    /* ----------------------------------------- */
35
    /* check for empty string                    */
36
@@ -528,13 +536,13 @@
37
 void SourceTreeItem::Select()
38
 {
39
    tree->SelectItem(sceneitem, true);
40
-   OBSBasic::Get()->UpdateContextBar();
41
+   OBSBasic::Get()->UpdateContextBarDeferred();
42
 }
43
 
44
 void SourceTreeItem::Deselect()
45
 {
46
    tree->SelectItem(sceneitem, false);
47
-   OBSBasic::Get()->UpdateContextBar();
48
+   OBSBasic::Get()->UpdateContextBarDeferred();
49
 }
50
 
51
 /* ========================================================================= */
52
obs-studio-26.0.2.tar.xz/UI/volume-control.cpp -> obs-studio-26.1.0.tar.xz/UI/volume-control.cpp Changed
28
 
1
@@ -89,7 +89,7 @@
2
                      : "VolControl.SliderUnmuted";
3
 
4
    QString sourceName = obs_source_get_name(source);
5
-   QString accText = QTStr(accTextLookup).arg(sourceName, db);
6
+   QString accText = QTStr(accTextLookup).arg(sourceName);
7
 
8
    slider->setAccessibleName(accText);
9
 }
10
@@ -161,7 +161,7 @@
11
        QHBoxLayout *meterLayout = new QHBoxLayout;
12
 
13
        volMeter = new VolumeMeter(nullptr, obs_volmeter, true);
14
-       slider = new SliderIgnoreScroll(Qt::Vertical);
15
+       slider = new VolumeSlider(obs_fader, Qt::Vertical);
16
 
17
        nameLayout->setAlignment(Qt::AlignCenter);
18
        meterLayout->setAlignment(Qt::AlignCenter);
19
@@ -205,7 +205,7 @@
20
        QHBoxLayout *botLayout = new QHBoxLayout;
21
 
22
        volMeter = new VolumeMeter(nullptr, obs_volmeter, false);
23
-       slider = new SliderIgnoreScroll(Qt::Horizontal);
24
+       slider = new VolumeSlider(obs_fader, Qt::Horizontal);
25
 
26
        textLayout->setContentsMargins(0, 0, 0, 0);
27
        textLayout->addWidget(nameLabel);
28
obs-studio-26.0.2.tar.xz/UI/win-update/updater/CMakeLists.txt -> obs-studio-26.1.0.tar.xz/UI/win-update/updater/CMakeLists.txt Changed
30
 
1
@@ -9,17 +9,19 @@
2
 
3
 project(updater)
4
 
5
-include_directories(${OBS_JANSSON_INCLUDE_DIRS})
6
 include_directories(${LIBLZMA_INCLUDE_DIRS})
7
+include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/deps/json11")
8
 include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/libobs")
9
 include_directories(${BLAKE2_INCLUDE_DIR})
10
 
11
 set(updater_HEADERS
12
+   ${CMAKE_SOURCE_DIR}/deps/json11/json11.hpp
13
    ../win-update-helpers.hpp
14
    resource.h
15
    updater.hpp
16
    )
17
 set(updater_SOURCES
18
+   ${CMAKE_SOURCE_DIR}/deps/json11/json11.cpp
19
    ../win-update-helpers.cpp
20
    init-hook-files.c
21
    updater.cpp
22
@@ -40,7 +42,6 @@
23
    ${updater_SOURCES}
24
    )
25
 target_link_libraries(updater
26
-   ${OBS_JANSSON_IMPORT}
27
    ${STATIC_ZLIB_PATH}
28
    lzma
29
    blake2
30
obs-studio-26.0.2.tar.xz/UI/win-update/updater/updater.cpp -> obs-studio-26.1.0.tar.xz/UI/win-update/updater/updater.cpp Changed
448
 
1
@@ -26,6 +26,7 @@
2
 #include <mutex>
3
 
4
 using namespace std;
5
+using namespace json11;
6
 
7
 /* ----------------------------------------------------------------------- */
8
 
9
@@ -59,7 +60,7 @@
10
 
11
 static inline bool is_64bit_windows(void);
12
 
13
-static inline bool HasVS2017Redist2()
14
+static inline bool HasVS2019Redist2()
15
 {
16
    wchar_t base[MAX_PATH];
17
    wchar_t path[MAX_PATH];
18
@@ -70,32 +71,34 @@
19
 
20
    SHGetFolderPathW(NULL, folder, NULL, SHGFP_TYPE_CURRENT, base);
21
 
22
-   StringCbCopyW(path, sizeof(path), base);
23
-   StringCbCatW(path, sizeof(path), L"\\msvcp140.dll");
24
-   handle = FindFirstFileW(path, &wfd);
25
-   if (handle == INVALID_HANDLE_VALUE) {
26
-       return false;
27
-   } else {
28
-       FindClose(handle);
29
-   }
30
+#define check_dll_installed(dll)                                    \
31
+   do {                                                        \
32
+       StringCbCopyW(path, sizeof(path), base);            \
33
+       StringCbCatW(path, sizeof(path), L"\\" dll ".dll"); \
34
+       handle = FindFirstFileW(path, &wfd);                \
35
+       if (handle == INVALID_HANDLE_VALUE) {               \
36
+           return false;                               \
37
+       } else {                                            \
38
+           FindClose(handle);                          \
39
+       }                                                   \
40
+   } while (false)
41
 
42
-   StringCbCopyW(path, sizeof(path), base);
43
-   StringCbCatW(path, sizeof(path), L"\\vcruntime140.dll");
44
-   handle = FindFirstFileW(path, &wfd);
45
-   if (handle == INVALID_HANDLE_VALUE) {
46
-       return false;
47
-   } else {
48
-       FindClose(handle);
49
+   check_dll_installed(L"msvcp140");
50
+   check_dll_installed(L"vcruntime140");
51
+   if (!is32bit) {
52
+       check_dll_installed(L"vcruntime140_1");
53
    }
54
 
55
+#undef check_dll_installed
56
+
57
    return true;
58
 }
59
 
60
-static bool HasVS2017Redist()
61
+static bool HasVS2019Redist()
62
 {
63
    PVOID old = nullptr;
64
    bool redirect = !!Wow64DisableWow64FsRedirection(&old);
65
-   bool success = HasVS2017Redist2();
66
+   bool success = HasVS2019Redist2();
67
    if (redirect)
68
        Wow64RevertWow64FsRedirection(old);
69
    return success;
70
@@ -603,68 +606,63 @@
71
           strstr(file, "64.exe") != nullptr;
72
 }
73
 
74
-static inline bool has_str(const char *file, const char *str)
75
-{
76
-   return (file && str) ? (strstr(file, str) != nullptr) : false;
77
-}
78
-
79
 #define UTF8ToWideBuf(wide, utf8) UTF8ToWide(wide, _countof(wide), utf8)
80
 #define WideToUTF8Buf(utf8, wide) WideToUTF8(utf8, _countof(utf8), wide)
81
 
82
 #define UPDATE_URL L"https://cdn-fastly.obsproject.com/update_studio"
83
 
84
-static bool AddPackageUpdateFiles(json_t *root, size_t idx,
85
+static bool AddPackageUpdateFiles(const Json &root, size_t idx,
86
                  const wchar_t *tempPath)
87
 {
88
-   json_t *package = json_array_get(root, idx);
89
-   json_t *name = json_object_get(package, "name");
90
-   json_t *files = json_object_get(package, "files");
91
+   const Json &package = root[idx];
92
+   const Json &name = package["name"];
93
+   const Json &files = package["files"];
94
 
95
    bool isWin64 = is_64bit_windows();
96
 
97
-   if (!json_is_array(files))
98
+   if (!files.is_array())
99
        return true;
100
-   if (!json_is_string(name))
101
+   if (!name.is_string())
102
        return true;
103
 
104
    wchar_t wPackageName[512];
105
-   const char *packageName = json_string_value(name);
106
-   size_t fileCount = json_array_size(files);
107
+   const string &packageName = name.string_value();
108
+   size_t fileCount = files.array_items().size();
109
 
110
-   if (!UTF8ToWideBuf(wPackageName, packageName))
111
+   if (!UTF8ToWideBuf(wPackageName, packageName.c_str()))
112
        return false;
113
 
114
-   if (strcmp(packageName, "core") != 0 &&
115
-       !NonCorePackageInstalled(packageName))
116
+   if (packageName != "core" &&
117
+       !NonCorePackageInstalled(packageName.c_str()))
118
        return true;
119
 
120
    for (size_t j = 0; j < fileCount; j++) {
121
-       json_t *file = json_array_get(files, j);
122
-       json_t *fileName = json_object_get(file, "name");
123
-       json_t *hash = json_object_get(file, "hash");
124
-       json_t *size = json_object_get(file, "size");
125
+       const Json &file = files[j];
126
+       const Json &fileName = file["name"];
127
+       const Json &hash = file["hash"];
128
+       const Json &size = file["size"];
129
 
130
-       if (!json_is_string(fileName))
131
+       if (!fileName.is_string())
132
            continue;
133
-       if (!json_is_string(hash))
134
+       if (!hash.is_string())
135
            continue;
136
-       if (!json_is_integer(size))
137
+       if (!size.is_number())
138
            continue;
139
 
140
-       const char *fileUTF8 = json_string_value(fileName);
141
-       const char *hashUTF8 = json_string_value(hash);
142
-       int fileSize = (int)json_integer_value(size);
143
+       const string &fileUTF8 = fileName.string_value();
144
+       const string &hashUTF8 = hash.string_value();
145
+       int fileSize = size.int_value();
146
 
147
-       if (strlen(hashUTF8) != BLAKE2_HASH_LENGTH * 2)
148
+       if (hashUTF8.size() != BLAKE2_HASH_LENGTH * 2)
149
            continue;
150
 
151
-       if (!isWin64 && is_64bit_file(fileUTF8))
152
+       if (!isWin64 && is_64bit_file(fileUTF8.c_str()))
153
            continue;
154
 
155
        /* ignore update files of opposite arch to reduce download */
156
 
157
-       if ((is32bit && has_str(fileUTF8, "/64bit/")) ||
158
-           (!is32bit && has_str(fileUTF8, "/32bit/")))
159
+       if ((is32bit && fileUTF8.find("/64bit/") != string::npos) ||
160
+           (!is32bit && fileUTF8.find("/32bit/") != string::npos))
161
            continue;
162
 
163
        /* convert strings to wide */
164
@@ -674,9 +672,9 @@
165
        wchar_t updateHashStr[BLAKE2_HASH_STR_LENGTH];
166
        wchar_t tempFilePath[MAX_PATH];
167
 
168
-       if (!UTF8ToWideBuf(updateFileName, fileUTF8))
169
+       if (!UTF8ToWideBuf(updateFileName, fileUTF8.c_str()))
170
            continue;
171
-       if (!UTF8ToWideBuf(updateHashStr, hashUTF8))
172
+       if (!UTF8ToWideBuf(updateHashStr, hashUTF8.c_str()))
173
            continue;
174
 
175
        /* make sure paths are safe */
176
@@ -928,7 +926,7 @@
177
    L"https://obsproject.com/update_studio/getpatchmanifest"
178
 #define HASH_NULL L"0000000000000000000000000000000000000000"
179
 
180
-static bool UpdateVS2017Redists(json_t *root)
181
+static bool UpdateVS2019Redists(const Json &root)
182
 {
183
    /* ------------------------------------------ *
184
     * Initialize session                         */
185
@@ -965,10 +963,10 @@
186
    /* ------------------------------------------ *
187
     * Download redist                            */
188
 
189
-   Status(L"Downloading %s", L"Visual C++ 2017 Redistributable");
190
+   Status(L"Downloading %s", L"Visual C++ 2019 Redistributable");
191
 
192
-   const wchar_t *file = (is32bit) ? L"vc2017redist_x86.exe"
193
-                   : L"vc2017redist_x64.exe";
194
+   const wchar_t *file = (is32bit) ? L"VC_redist.x86.exe"
195
+                   : L"VC_redist.x64.exe";
196
 
197
    wstring sourceURL;
198
    sourceURL += L"https://cdn-fastly.obsproject.com/downloads/";
199
@@ -985,25 +983,25 @@
200
        DeleteFile(destPath.c_str());
201
        Status(L"Update failed: Could not download "
202
               L"%s (error code %d)",
203
-              L"Visual C++ 2017 Redistributable", responseCode);
204
+              L"Visual C++ 2019 Redistributable", responseCode);
205
        return false;
206
    }
207
 
208
    /* ------------------------------------------ *
209
     * Get expected hash                          */
210
 
211
-   json_t *redistJson = json_object_get(
212
-       root, is32bit ? "vc2017_redist_x86" : "vc2017_redist_x64");
213
-   if (!redistJson) {
214
-       Status(L"Update failed: Could not parse VC2017 redist json");
215
+   const char *which = is32bit ? "vc2019_redist_x86" : "vc2019_redist_x64";
216
+   const Json &redistJson = root[which];
217
+   if (!redistJson.is_string()) {
218
+       Status(L"Update failed: Could not parse VC2019 redist json");
219
        return false;
220
    }
221
 
222
-   const char *expectedHashUTF8 = json_string_value(redistJson);
223
+   const string &expectedHashUTF8 = redistJson.string_value();
224
    wchar_t expectedHashWide[BLAKE2_HASH_STR_LENGTH];
225
    BYTE expectedHash[BLAKE2_HASH_LENGTH];
226
 
227
-   if (!UTF8ToWideBuf(expectedHashWide, expectedHashUTF8)) {
228
+   if (!UTF8ToWideBuf(expectedHashWide, expectedHashUTF8.c_str())) {
229
        DeleteFile(destPath.c_str());
230
        Status(L"Update failed: Couldn't convert Json for redist hash");
231
        return false;
232
@@ -1020,7 +1018,7 @@
233
    if (!CalculateFileHash(destPath.c_str(), downloadHash)) {
234
        DeleteFile(destPath.c_str());
235
        Status(L"Update failed: Couldn't verify integrity of %s",
236
-              L"Visual C++ 2017 Redistributable");
237
+              L"Visual C++ 2019 Redistributable");
238
        return false;
239
    }
240
 
241
@@ -1031,7 +1029,7 @@
242
    if (wcscmp(expectedHashWide, downloadHashWide) != 0) {
243
        DeleteFile(destPath.c_str());
244
        Status(L"Update failed: Couldn't verify integrity of %s",
245
-              L"Visual C++ 2017 Redistributable");
246
+              L"Visual C++ 2019 Redistributable");
247
        return false;
248
    }
249
 
250
@@ -1050,7 +1048,7 @@
251
                    nullptr, false, CREATE_NO_WINDOW,
252
                    nullptr, nullptr, &si, &pi);
253
    if (success) {
254
-       Status(L"Installing %s...", L"Visual C++ 2017 Redistributable");
255
+       Status(L"Installing %s...", L"Visual C++ 2019 Redistributable");
256
 
257
        CloseHandle(pi.hThread);
258
        WaitForSingleObject(pi.hProcess, INFINITE);
259
@@ -1058,7 +1056,7 @@
260
    } else {
261
        Status(L"Update failed: Could not execute "
262
               L"%s (error code %d)",
263
-              L"Visual C++ 2017 Redistributable", (int)GetLastError());
264
+              L"Visual C++ 2019 Redistributable", (int)GetLastError());
265
    }
266
 
267
    DeleteFile(destPath.c_str());
268
@@ -1218,18 +1216,18 @@
269
            return false;
270
        }
271
 
272
-       json_error_t error;
273
-       root = json_loads(manifestFile.c_str(), 0, &error);
274
+       string error;
275
+       root = Json::parse(manifestFile, error);
276
 
277
-       if (!root) {
278
+       if (!error.empty()) {
279
            Status(L"Update failed: Couldn't parse update "
280
                   L"manifest: %S",
281
-                  error.text);
282
+                  error.c_str());
283
            return false;
284
        }
285
    }
286
 
287
-   if (!json_is_object(root.get())) {
288
+   if (!root.is_object()) {
289
        Status(L"Update failed: Invalid update manifest");
290
        return false;
291
    }
292
@@ -1237,10 +1235,8 @@
293
    /* ------------------------------------- *
294
     * Parse current manifest update files   */
295
 
296
-   json_t *packages = json_object_get(root, "packages");
297
-   size_t packageCount = json_array_size(packages);
298
-
299
-   for (size_t i = 0; i < packageCount; i++) {
300
+   const Json::array &packages = root["packages"].array_items();
301
+   for (size_t i = 0; i < packages.size(); i++) {
302
        if (!AddPackageUpdateFiles(packages, i, tempPath)) {
303
            Status(L"Update failed: Failed to process update packages");
304
            return false;
305
@@ -1260,10 +1256,10 @@
306
    }
307
 
308
    /* ------------------------------------- *
309
-    * Check for VS2017 redistributables     */
310
+    * Check for VS2019 redistributables     */
311
 
312
-   if (!HasVS2017Redist()) {
313
-       if (!UpdateVS2017Redists(root)) {
314
+   if (!HasVS2019Redist()) {
315
+       if (!UpdateVS2019Redists(root)) {
316
            return false;
317
        }
318
    }
319
@@ -1271,7 +1267,7 @@
320
    /* ------------------------------------- *
321
     * Generate file hash json               */
322
 
323
-   Json files(json_array());
324
+   Json::array files;
325
 
326
    for (update_t &update : updates) {
327
        wchar_t whash_string[BLAKE2_HASH_STR_LENGTH];
328
@@ -1296,10 +1292,10 @@
329
        package_path += "/";
330
        package_path += outputPath;
331
 
332
-       json_t *obj = json_object();
333
-       json_object_set(obj, "name", json_string(package_path.c_str()));
334
-       json_object_set(obj, "hash", json_string(hash_string));
335
-       json_array_append_new(files, obj);
336
+       files.emplace_back(Json::object{
337
+           {"name", package_path},
338
+           {"hash", hash_string},
339
+       });
340
    }
341
 
342
    /* ------------------------------------- *
343
@@ -1307,18 +1303,20 @@
344
 
345
    string newManifest;
346
 
347
-   if (json_array_size(files) > 0) {
348
-       char *post_body = json_dumps(files, JSON_COMPACT);
349
+   if (files.size() > 0) {
350
+       string post_body;
351
+       Json(files).dump(post_body);
352
 
353
        int responseCode;
354
 
355
-       int len = (int)strlen(post_body);
356
+       int len = (int)post_body.size();
357
        uLong compressSize = compressBound(len);
358
        string compressedJson;
359
 
360
        compressedJson.resize(compressSize);
361
        compress2((Bytef *)&compressedJson[0], &compressSize,
362
-             (const Bytef *)post_body, len, Z_BEST_COMPRESSION);
363
+             (const Bytef *)post_body.c_str(), len,
364
+             Z_BEST_COMPRESSION);
365
        compressedJson.resize(compressSize);
366
 
367
        bool success = !!HTTPPostData(PATCH_MANIFEST_URL,
368
@@ -1326,7 +1324,6 @@
369
                          (int)compressedJson.size(),
370
                          L"Accept-Encoding: gzip",
371
                          &responseCode, newManifest);
372
-       free(post_body);
373
 
374
        if (!success)
375
            return false;
376
@@ -1344,49 +1341,50 @@
377
    /* ------------------------------------- *
378
     * Parse new manifest                    */
379
 
380
-   json_error_t error;
381
-   root = json_loads(newManifest.c_str(), 0, &error);
382
-   if (!root) {
383
+   string error;
384
+   root = Json::parse(newManifest, error);
385
+   if (!error.empty()) {
386
        Status(L"Update failed: Couldn't parse patch manifest: %S",
387
-              error.text);
388
+              error.c_str());
389
        return false;
390
    }
391
 
392
-   if (!json_is_array(root.get())) {
393
+   if (!root.is_array()) {
394
        Status(L"Update failed: Invalid patch manifest");
395
        return false;
396
    }
397
 
398
-   packageCount = json_array_size(root);
399
+   size_t packageCount = root.array_items().size();
400
 
401
    for (size_t i = 0; i < packageCount; i++) {
402
-       json_t *patch = json_array_get(root, i);
403
+       const Json &patch = root[i];
404
 
405
-       if (!json_is_object(patch)) {
406
+       if (!patch.is_object()) {
407
            Status(L"Update failed: Invalid patch manifest");
408
            return false;
409
        }
410
 
411
-       json_t *name_json = json_object_get(patch, "name");
412
-       json_t *hash_json = json_object_get(patch, "hash");
413
-       json_t *source_json = json_object_get(patch, "source");
414
-       json_t *size_json = json_object_get(patch, "size");
415
+       const Json &name_json = patch["name"];
416
+       const Json &hash_json = patch["hash"];
417
+       const Json &source_json = patch["source"];
418
+       const Json &size_json = patch["size"];
419
 
420
-       if (!json_is_string(name_json))
421
+       if (!name_json.is_string())
422
            continue;
423
-       if (!json_is_string(hash_json))
424
+       if (!hash_json.is_string())
425
            continue;
426
-       if (!json_is_string(source_json))
427
+       if (!source_json.is_string())
428
            continue;
429
-       if (!json_is_integer(size_json))
430
+       if (!size_json.is_number())
431
            continue;
432
 
433
-       const char *name = json_string_value(name_json);
434
-       const char *hash = json_string_value(hash_json);
435
-       const char *source = json_string_value(source_json);
436
-       int size = (int)json_integer_value(size_json);
437
+       const string &name = name_json.string_value();
438
+       const string &hash = hash_json.string_value();
439
+       const string &source = source_json.string_value();
440
+       int size = size_json.int_value();
441
 
442
-       UpdateWithPatchIfAvailable(name, hash, source, size);
443
+       UpdateWithPatchIfAvailable(name.c_str(), hash.c_str(),
444
+                      source.c_str(), size);
445
    }
446
 
447
    /* ------------------------------------- *
448
obs-studio-26.0.2.tar.xz/UI/win-update/updater/updater.hpp -> obs-studio-26.1.0.tar.xz/UI/win-update/updater/updater.hpp Changed
10
 
1
@@ -74,7 +74,7 @@
2
 #endif
3
 
4
 #include <util/windows/WinHandle.hpp>
5
-#include <jansson.h>
6
+#include <json11.hpp>
7
 #include "resource.h"
8
 
9
 bool HTTPGetFile(HINTERNET hConnect, const wchar_t *url,
10
obs-studio-26.0.2.tar.xz/UI/win-update/win-update-helpers.hpp -> obs-studio-26.1.0.tar.xz/UI/win-update/win-update-helpers.hpp Changed
83
 
1
@@ -4,8 +4,6 @@
2
 #include <windows.h>
3
 #include <Wincrypt.h>
4
 
5
-#include <jansson.h>
6
-
7
 #include <cstdint>
8
 #include <string>
9
 
10
@@ -69,72 +67,5 @@
11
 
12
 /* ------------------------------------------------------------------------ */
13
 
14
-class Json {
15
-   json_t *json;
16
-
17
-public:
18
-   inline Json() : json(nullptr) {}
19
-   explicit inline Json(json_t *json_) : json(json_) {}
20
-   inline Json(const Json &from) : json(json_incref(from.json)) {}
21
-   inline Json(Json &&from) : json(from.json) { from.json = nullptr; }
22
-
23
-   inline ~Json()
24
-   {
25
-       if (json)
26
-           json_decref(json);
27
-   }
28
-
29
-   inline Json &operator=(json_t *json_)
30
-   {
31
-       if (json)
32
-           json_decref(json);
33
-       json = json_;
34
-       return *this;
35
-   }
36
-   inline Json &operator=(const Json &from)
37
-   {
38
-       if (json)
39
-           json_decref(json);
40
-       json = json_incref(from.json);
41
-       return *this;
42
-   }
43
-   inline Json &operator=(Json &&from)
44
-   {
45
-       if (json)
46
-           json_decref(json);
47
-       json = from.json;
48
-       from.json = nullptr;
49
-       return *this;
50
-   }
51
-
52
-   inline operator json_t *() const { return json; }
53
-
54
-   inline bool operator!() const { return !json; }
55
-
56
-   inline const char *GetString(const char *name,
57
-                    const char *def = nullptr) const
58
-   {
59
-       json_t *obj(json_object_get(json, name));
60
-       if (!obj)
61
-           return def;
62
-       return json_string_value(obj);
63
-   }
64
-   inline int64_t GetInt(const char *name, int def = 0) const
65
-   {
66
-       json_t *obj(json_object_get(json, name));
67
-       if (!obj)
68
-           return def;
69
-       return json_integer_value(obj);
70
-   }
71
-   inline json_t *GetObject(const char *name) const
72
-   {
73
-       return json_object_get(json, name);
74
-   }
75
-
76
-   inline json_t *get() const { return json; }
77
-};
78
-
79
-/* ------------------------------------------------------------------------ */
80
-
81
 std::string vstrprintf(const char *format, va_list args);
82
 std::string strprintf(const char *format, ...);
83
obs-studio-26.0.2.tar.xz/UI/win-update/win-update.cpp -> obs-studio-26.1.0.tar.xz/UI/win-update/win-update.cpp Changed
64
 
1
@@ -12,7 +12,7 @@
2
 
3
 #include <util/windows/WinHandle.hpp>
4
 #include <util/util.hpp>
5
-#include <jansson.h>
6
+#include <json11.hpp>
7
 #include <blake2.h>
8
 
9
 #include <time.h>
10
@@ -25,6 +25,7 @@
11
 #endif
12
 
13
 using namespace std;
14
+using namespace json11;
15
 
16
 struct QCef;
17
 extern QCef *cef;
18
@@ -402,31 +403,31 @@
19
                string &notes_str, int &updateVer)
20
 try {
21
 
22
-   json_error_t error;
23
-   Json root(json_loads(manifest, 0, &error));
24
-   if (!root)
25
-       throw strprintf("Failed reading json string (%d): %s",
26
-               error.line, error.text);
27
+   string error;
28
+   Json root = Json::parse(manifest, error);
29
+   if (!error.empty())
30
+       throw strprintf("Failed reading json string: %s",
31
+               error.c_str());
32
 
33
-   if (!json_is_object(root.get()))
34
+   if (!root.is_object())
35
        throw string("Root of manifest is not an object");
36
 
37
-   int major = root.GetInt("version_major");
38
-   int minor = root.GetInt("version_minor");
39
-   int patch = root.GetInt("version_patch");
40
+   int major = root["version_major"].int_value();
41
+   int minor = root["version_minor"].int_value();
42
+   int patch = root["version_patch"].int_value();
43
 
44
    if (major == 0)
45
        throw strprintf("Invalid version number: %d.%d.%d", major,
46
                minor, patch);
47
 
48
-   json_t *notes = json_object_get(root, "notes");
49
-   if (!json_is_string(notes))
50
+   const Json &notes = root["notes"];
51
+   if (!notes.is_string())
52
        throw string("'notes' value invalid");
53
 
54
-   notes_str = json_string_value(notes);
55
+   notes_str = notes.string_value();
56
 
57
-   json_t *packages = json_object_get(root, "packages");
58
-   if (!json_is_array(packages))
59
+   const Json &packages = root["packages"];
60
+   if (!packages.is_array())
61
        throw string("'packages' value invalid");
62
 
63
    int cur_ver = LIBOBS_API_VER;
64
obs-studio-26.0.2.tar.xz/UI/window-basic-auto-config-test.cpp -> obs-studio-26.1.0.tar.xz/UI/window-basic-auto-config-test.cpp Changed
57
 
1
@@ -963,6 +963,27 @@
2
 #define QUALITY_SAME "Basic.Settings.Output.Simple.RecordingQuality.Stream"
3
 #define QUALITY_HIGH "Basic.Settings.Output.Simple.RecordingQuality.Small"
4
 
5
+void set_closest_res(int &cx, int &cy, struct obs_service_resolution *res_list,
6
+            size_t count)
7
+{
8
+   int best_pixel_diff = 0x7FFFFFFF;
9
+   int start_cx = cx;
10
+   int start_cy = cy;
11
+
12
+   for (size_t i = 0; i < count; i++) {
13
+       struct obs_service_resolution &res = res_list[i];
14
+       int pixel_cx_diff = abs(start_cx - res.cx);
15
+       int pixel_cy_diff = abs(start_cy - res.cy);
16
+       int pixel_diff = pixel_cx_diff + pixel_cy_diff;
17
+
18
+       if (pixel_diff < best_pixel_diff) {
19
+           best_pixel_diff = pixel_diff;
20
+           cx = res.cx;
21
+           cy = res.cy;
22
+       }
23
+   }
24
+}
25
+
26
 void AutoConfigTestPage::FinalizeResults()
27
 {
28
    ui->stackedWidget->setCurrentIndex(1);
29
@@ -1013,6 +1034,27 @@
30
        obs_service_apply_encoder_settings(service, vencoder_settings,
31
                           nullptr);
32
 
33
+       struct obs_service_resolution *res_list;
34
+       size_t res_count;
35
+       int maxFPS;
36
+       obs_service_get_supported_resolutions(service, &res_list,
37
+                             &res_count);
38
+       obs_service_get_max_fps(service, &maxFPS);
39
+
40
+       if (res_list) {
41
+           set_closest_res(wiz->idealResolutionCX,
42
+                   wiz->idealResolutionCY, res_list,
43
+                   res_count);
44
+       }
45
+       if (maxFPS) {
46
+           double idealFPS = (double)wiz->idealFPSNum /
47
+                     (double)wiz->idealFPSDen;
48
+           if (idealFPS > (double)maxFPS) {
49
+               wiz->idealFPSNum = maxFPS;
50
+               wiz->idealFPSDen = 1;
51
+           }
52
+       }
53
+
54
        wiz->idealBitrate =
55
            (int)obs_data_get_int(vencoder_settings, "bitrate");
56
 
57
obs-studio-26.0.2.tar.xz/UI/window-basic-auto-config.cpp -> obs-studio-26.1.0.tar.xz/UI/window-basic-auto-config.cpp Changed
66
 
1
@@ -285,6 +285,8 @@
2
 
3
    connect(ui->service, SIGNAL(currentIndexChanged(int)), this,
4
        SLOT(UpdateKeyLink()));
5
+   connect(ui->service, SIGNAL(currentIndexChanged(int)), this,
6
+       SLOT(UpdateMoreInfoLink()));
7
 
8
    connect(ui->key, SIGNAL(textChanged(const QString &)), this,
9
        SLOT(UpdateCompleted()));
10
@@ -575,6 +577,35 @@
11
    UpdateCompleted();
12
 }
13
 
14
+void AutoConfigStreamPage::UpdateMoreInfoLink()
15
+{
16
+   if (IsCustomService()) {
17
+       ui->moreInfoButton->hide();
18
+       return;
19
+   }
20
+
21
+   QString serviceName = ui->service->currentText();
22
+   obs_properties_t *props = obs_get_service_properties("rtmp_common");
23
+   obs_property_t *services = obs_properties_get(props, "service");
24
+
25
+   OBSData settings = obs_data_create();
26
+   obs_data_release(settings);
27
+
28
+   obs_data_set_string(settings, "service", QT_TO_UTF8(serviceName));
29
+   obs_property_modified(services, settings);
30
+
31
+   const char *more_info_link =
32
+       obs_data_get_string(settings, "more_info_link");
33
+
34
+   if (!more_info_link || (*more_info_link == '\0')) {
35
+       ui->moreInfoButton->hide();
36
+   } else {
37
+       ui->moreInfoButton->setTargetUrl(QUrl(more_info_link));
38
+       ui->moreInfoButton->show();
39
+   }
40
+   obs_properties_destroy(props);
41
+}
42
+
43
 void AutoConfigStreamPage::UpdateKeyLink()
44
 {
45
    QString serviceName = ui->service->currentText();
46
@@ -583,9 +614,8 @@
47
    QString streamKeyLink;
48
 
49
    if (serviceName == "Twitch") {
50
-       streamKeyLink =
51
-           "https://www.twitch.tv/broadcast/dashboard/streamkey";
52
-   } else if (serviceName == "YouTube / YouTube Gaming") {
53
+       streamKeyLink = "https://dashboard.twitch.tv/settings/stream";
54
+   } else if (serviceName.startsWith("YouTube")) {
55
        streamKeyLink = "https://www.youtube.com/live_dashboard";
56
        isYoutube = true;
57
    } else if (serviceName.startsWith("Restream.io")) {
58
@@ -814,6 +844,7 @@
59
 
60
    streamPage->UpdateServerList();
61
    streamPage->UpdateKeyLink();
62
+   streamPage->UpdateMoreInfoLink();
63
    streamPage->lastService.clear();
64
 
65
    if (!customServer) {
66
obs-studio-26.0.2.tar.xz/UI/window-basic-auto-config.hpp -> obs-studio-26.1.0.tar.xz/UI/window-basic-auto-config.hpp Changed
9
 
1
@@ -195,6 +195,7 @@
2
    void on_useStreamKey_clicked();
3
    void ServiceChanged();
4
    void UpdateKeyLink();
5
+   void UpdateMoreInfoLink();
6
    void UpdateServerList();
7
    void UpdateCompleted();
8
 };
9
obs-studio-26.0.2.tar.xz/UI/window-basic-filters.cpp -> obs-studio-26.1.0.tar.xz/UI/window-basic-filters.cpp Changed
180
 
1
@@ -225,7 +225,7 @@
2
                  "ReloadProperties");
3
 }
4
 
5
-void OBSBasicFilters::AddFilter(OBSSource filter)
6
+void OBSBasicFilters::AddFilter(OBSSource filter, bool focus)
7
 {
8
    uint32_t flags = obs_source_get_output_flags(filter);
9
    bool async = (flags & OBS_SOURCE_ASYNC) != 0;
10
@@ -238,7 +238,8 @@
11
    item->setData(Qt::UserRole, QVariant::fromValue(filter));
12
 
13
    list->addItem(item);
14
-   list->setCurrentItem(item);
15
+   if (focus)
16
+       list->setCurrentItem(item);
17
    SetupVisibilityItem(list, item, filter);
18
 }
19
 
20
@@ -352,10 +353,16 @@
21
            OBSBasicFilters *window =
22
                reinterpret_cast<OBSBasicFilters *>(p);
23
 
24
-           window->AddFilter(filter);
25
+           window->AddFilter(filter, false);
26
        },
27
        this);
28
 
29
+   if (ui->asyncFilters->count() > 0) {
30
+       ui->asyncFilters->setCurrentItem(ui->asyncFilters->item(0));
31
+   } else if (ui->effectFilters->count() > 0) {
32
+       ui->effectFilters->setCurrentItem(ui->effectFilters->item(0));
33
+   }
34
+
35
    main->SaveProject();
36
 }
37
 
38
@@ -732,6 +739,10 @@
39
        popup.addMenu(addMenu);
40
 
41
    if (item) {
42
+       const char *dulpicateSlot =
43
+           async ? SLOT(DuplicateAsyncFilter())
44
+                 : SLOT(DuplicateEffectFilter());
45
+
46
        const char *renameSlot = async ? SLOT(RenameAsyncFilter())
47
                           : SLOT(RenameEffectFilter());
48
        const char *removeSlot =
49
@@ -739,10 +750,29 @@
50
                  : SLOT(on_removeEffectFilter_clicked());
51
 
52
        popup.addSeparator();
53
+       popup.addAction(QTStr("Duplicate"), this, dulpicateSlot);
54
+       popup.addSeparator();
55
        popup.addAction(QTStr("Rename"), this, renameSlot);
56
        popup.addAction(QTStr("Remove"), this, removeSlot);
57
+       popup.addSeparator();
58
+
59
+       QAction *copyAction = new QAction(QTStr("Copy"));
60
+       connect(copyAction, SIGNAL(triggered()), this,
61
+           SLOT(CopyFilter()));
62
+       copyAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_C));
63
+       ui->effectWidget->addAction(copyAction);
64
+       ui->asyncWidget->addAction(copyAction);
65
+       popup.addAction(copyAction);
66
    }
67
 
68
+   QAction *pasteAction = new QAction(QTStr("Paste"));
69
+   pasteAction->setEnabled(main->copyFilter);
70
+   connect(pasteAction, SIGNAL(triggered()), this, SLOT(PasteFilter()));
71
+   pasteAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_V));
72
+   ui->effectWidget->addAction(pasteAction);
73
+   ui->asyncWidget->addAction(pasteAction);
74
+   popup.addAction(pasteAction);
75
+
76
    popup.exec(QCursor::pos());
77
 }
78
 
79
@@ -764,6 +794,58 @@
80
    editActive = true;
81
 }
82
 
83
+void OBSBasicFilters::DuplicateItem(QListWidgetItem *item)
84
+{
85
+   OBSSource filter = item->data(Qt::UserRole).value<OBSSource>();
86
+   string name = obs_source_get_name(filter);
87
+   obs_source_t *existing_filter;
88
+
89
+   QString placeholder = QString::fromStdString(name);
90
+   QString text{placeholder};
91
+   int i = 2;
92
+   while ((existing_filter = obs_source_get_filter_by_name(
93
+           source, QT_TO_UTF8(text)))) {
94
+       obs_source_release(existing_filter);
95
+       text = QString("%1 %2").arg(placeholder).arg(i++);
96
+   }
97
+
98
+   bool success = NameDialog::AskForName(
99
+       this, QTStr("Basic.Filters.AddFilter.Title"),
100
+       QTStr("Basic.Filters.AddFilter.Text"), name, text);
101
+   if (!success)
102
+       return;
103
+
104
+   if (name.empty()) {
105
+       OBSMessageBox::warning(this, QTStr("NoNameEntered.Title"),
106
+                      QTStr("NoNameEntered.Text"));
107
+       DuplicateItem(item);
108
+       return;
109
+   }
110
+
111
+   existing_filter = obs_source_get_filter_by_name(source, name.c_str());
112
+   if (existing_filter) {
113
+       OBSMessageBox::warning(this, QTStr("NameExists.Title"),
114
+                      QTStr("NameExists.Text"));
115
+       obs_source_release(existing_filter);
116
+       DuplicateItem(item);
117
+       return;
118
+   }
119
+   bool enabled = obs_source_enabled(filter);
120
+   obs_source_t *new_filter =
121
+       obs_source_duplicate(filter, name.c_str(), false);
122
+   if (new_filter) {
123
+       const char *sourceName = obs_source_get_name(source);
124
+       const char *id = obs_source_get_id(new_filter);
125
+       blog(LOG_INFO,
126
+            "User duplicated filter '%s' (%s) from '%s' "
127
+            "to source '%s'",
128
+            name.c_str(), id, name.c_str(), sourceName);
129
+       obs_source_set_enabled(new_filter, enabled);
130
+       obs_source_filter_add(source, new_filter);
131
+       obs_source_release(new_filter);
132
+   }
133
+}
134
+
135
 void OBSBasicFilters::on_asyncFilters_customContextMenuRequested(
136
    const QPoint &pos)
137
 {
138
@@ -786,6 +868,16 @@
139
    EditItem(ui->effectFilters->currentItem(), false);
140
 }
141
 
142
+void OBSBasicFilters::DuplicateAsyncFilter()
143
+{
144
+   DuplicateItem(ui->asyncFilters->currentItem());
145
+}
146
+
147
+void OBSBasicFilters::DuplicateEffectFilter()
148
+{
149
+   DuplicateItem(ui->effectFilters->currentItem());
150
+}
151
+
152
 void OBSBasicFilters::FilterNameEdited(QWidget *editor, QListWidget *list)
153
 {
154
    QListWidgetItem *listItem = list->currentItem();
155
@@ -864,3 +956,24 @@
156
 
157
    view->RefreshProperties();
158
 }
159
+
160
+void OBSBasicFilters::CopyFilter()
161
+{
162
+   OBSSource filter = nullptr;
163
+
164
+   if (isAsync)
165
+       filter = GetFilter(ui->asyncFilters->currentRow(), true);
166
+   else
167
+       filter = GetFilter(ui->effectFilters->currentRow(), false);
168
+
169
+   main->copyFilter = OBSGetWeakRef(filter);
170
+}
171
+
172
+void OBSBasicFilters::PasteFilter()
173
+{
174
+   OBSSource filter = OBSGetStrongRef(main->copyFilter);
175
+   if (!filter)
176
+       return;
177
+
178
+   obs_source_copy_single_filter(source, filter);
179
+}
180
obs-studio-26.0.2.tar.xz/UI/window-basic-filters.hpp -> obs-studio-26.1.0.tar.xz/UI/window-basic-filters.hpp Changed
34
 
1
@@ -67,6 +67,7 @@
2
 
3
    void CustomContextMenu(const QPoint &pos, bool async);
4
    void EditItem(QListWidgetItem *item, bool async);
5
+   void DuplicateItem(QListWidgetItem *item);
6
 
7
    void FilterNameEdited(QWidget *editor, QListWidget *list);
8
 
9
@@ -77,11 +78,13 @@
10
    bool editActive = false;
11
 
12
 private slots:
13
-   void AddFilter(OBSSource filter);
14
+   void AddFilter(OBSSource filter, bool focus = true);
15
    void RemoveFilter(OBSSource filter);
16
    void ReorderFilters();
17
    void RenameAsyncFilter();
18
    void RenameEffectFilter();
19
+   void DuplicateAsyncFilter();
20
+   void DuplicateEffectFilter();
21
    void ResetFilters();
22
 
23
    void AddFilterFromAction();
24
@@ -111,6 +114,9 @@
25
    void EffectFilterNameEdited(QWidget *editor,
26
                    QAbstractItemDelegate::EndEditHint endHint);
27
 
28
+   void CopyFilter();
29
+   void PasteFilter();
30
+
31
 public:
32
    OBSBasicFilters(QWidget *parent, OBSSource source_);
33
    ~OBSBasicFilters();
34
obs-studio-26.0.2.tar.xz/UI/window-basic-interaction.cpp -> obs-studio-26.1.0.tar.xz/UI/window-basic-interaction.cpp Changed
32
 
1
@@ -218,6 +218,14 @@
2
 bool OBSBasicInteraction::GetSourceRelativeXY(int mouseX, int mouseY, int &relX,
3
                          int &relY)
4
 {
5
+#ifdef SUPPORTS_FRACTIONAL_SCALING
6
+   float pixelRatio = devicePixelRatioF();
7
+#else
8
+   float pixelRatio = devicePixelRatio();
9
+#endif
10
+   int mouseXscaled = (int)roundf(mouseX * pixelRatio);
11
+   int mouseYscaled = (int)roundf(mouseY * pixelRatio);
12
+
13
    QSize size = GetPixelSize(ui->preview);
14
 
15
    uint32_t sourceCX = max(obs_source_get_width(source), 1u);
16
@@ -230,11 +238,11 @@
17
                 y, scale);
18
 
19
    if (x > 0) {
20
-       relX = int(float(mouseX - x) / scale);
21
-       relY = int(float(mouseY / scale));
22
+       relX = int(float(mouseXscaled - x) / scale);
23
+       relY = int(float(mouseYscaled / scale));
24
    } else {
25
-       relX = int(float(mouseX / scale));
26
-       relY = int(float(mouseY - y) / scale);
27
+       relX = int(float(mouseXscaled / scale));
28
+       relY = int(float(mouseYscaled - y) / scale);
29
    }
30
 
31
    // Confirm mouse is inside the source
32
obs-studio-26.0.2.tar.xz/UI/window-basic-main-outputs.cpp -> obs-studio-26.1.0.tar.xz/UI/window-basic-main-outputs.cpp Changed
444
 
1
@@ -140,6 +140,13 @@
2
    UNUSED_PARAMETER(params);
3
 }
4
 
5
+static void OBSReplayBufferSaved(void *data, calldata_t *)
6
+{
7
+   BasicOutputHandler *output = static_cast<BasicOutputHandler *>(data);
8
+   QMetaObject::invokeMethod(output->main, "ReplayBufferSaved",
9
+                 Qt::QueuedConnection);
10
+}
11
+
12
 static void OBSStartVirtualCam(void *data, calldata_t *params)
13
 {
14
    BasicOutputHandler *output = static_cast<BasicOutputHandler *>(data);
15
@@ -242,10 +249,12 @@
16
    OBSEncoder aacStreaming;
17
    OBSEncoder h264Streaming;
18
    OBSEncoder aacRecording;
19
+   OBSEncoder aacArchive;
20
    OBSEncoder h264Recording;
21
 
22
    string aacRecEncID;
23
    string aacStreamEncID;
24
+   string aacArchiveEncID;
25
 
26
    string videoEncoder;
27
    string videoQuality;
28
@@ -279,6 +288,8 @@
29
    void UpdateRecording();
30
    bool ConfigureRecording(bool useReplayBuffer);
31
 
32
+   void SetupVodTrack(obs_service_t *service);
33
+
34
    virtual bool SetupStreaming(obs_service_t *service) override;
35
    virtual bool StartStreaming(obs_service_t *service) override;
36
    virtual bool StartRecording() override;
37
@@ -379,6 +390,8 @@
38
    }
39
 }
40
 
41
+#define SIMPLE_ARCHIVE_NAME "simple_archive_aac"
42
+
43
 SimpleOutput::SimpleOutput(OBSBasic *main_) : BasicOutputHandler(main_)
44
 {
45
    const char *encoder = config_get_string(main->Config(), "SimpleOutput",
46
@@ -402,6 +415,9 @@
47
    if (!CreateAACEncoder(aacStreaming, aacStreamEncID, GetAudioBitrate(),
48
                  "simple_aac", 0))
49
        throw "Failed to create aac streaming encoder (simple output)";
50
+   if (!CreateAACEncoder(aacArchive, aacArchiveEncID, GetAudioBitrate(),
51
+                 SIMPLE_ARCHIVE_NAME, 1))
52
+       throw "Failed to create aac arhive encoder (simple output)";
53
 
54
    LoadRecordingPreset();
55
 
56
@@ -437,6 +453,8 @@
57
            replayBufferStopping.Connect(signal, "stopping",
58
                             OBSReplayBufferStopping,
59
                             this);
60
+           replayBufferSaved.Connect(signal, "saved",
61
+                         OBSReplayBufferSaved, this);
62
        }
63
 
64
        fileOutput = obs_output_create(
65
@@ -473,8 +491,8 @@
66
    int audioBitrate = GetAudioBitrate();
67
    bool advanced =
68
        config_get_bool(main->Config(), "SimpleOutput", "UseAdvanced");
69
-   bool enforceBitrate = config_get_bool(main->Config(), "SimpleOutput",
70
-                         "EnforceBitrate");
71
+   bool enforceBitrate = !config_get_bool(main->Config(), "Stream1",
72
+                          "IgnoreRecommended");
73
    const char *custom = config_get_string(main->Config(), "SimpleOutput",
74
                           "x264Settings");
75
    const char *encoder = config_get_string(main->Config(), "SimpleOutput",
76
@@ -512,7 +530,7 @@
77
    obs_service_apply_encoder_settings(main->GetService(), h264Settings,
78
                       aacSettings);
79
 
80
-   if (advanced && !enforceBitrate) {
81
+   if (!enforceBitrate) {
82
        obs_data_set_int(h264Settings, "bitrate", videoBitrate);
83
        obs_data_set_int(aacSettings, "bitrate", audioBitrate);
84
    }
85
@@ -526,6 +544,7 @@
86
 
87
    obs_encoder_update(h264Streaming, h264Settings);
88
    obs_encoder_update(aacStreaming, aacSettings);
89
+   obs_encoder_update(aacArchive, aacSettings);
90
 
91
    obs_data_release(h264Settings);
92
    obs_data_release(aacSettings);
93
@@ -700,6 +719,7 @@
94
    SimpleOutput::Update();
95
    obs_encoder_set_video(h264Streaming, obs_get_video());
96
    obs_encoder_set_audio(aacStreaming, obs_get_audio());
97
+   obs_encoder_set_audio(aacArchive, obs_get_audio());
98
 
99
    if (usingRecordingPreset) {
100
        if (ffmpegOutput) {
101
@@ -824,6 +844,51 @@
102
    return true;
103
 }
104
 
105
+static inline bool ServiceSupportsVodTrack(const char *service);
106
+
107
+static void clear_archive_encoder(obs_output_t *output,
108
+                 const char *expected_name)
109
+{
110
+   obs_encoder_t *last = obs_output_get_audio_encoder(output, 1);
111
+   bool clear = false;
112
+
113
+   /* ensures that we don't remove twitch's soundtrack encoder */
114
+   if (last) {
115
+       const char *name = obs_encoder_get_name(last);
116
+       clear = name && strcmp(name, expected_name) == 0;
117
+       obs_encoder_release(last);
118
+   }
119
+
120
+   if (clear)
121
+       obs_output_set_audio_encoder(output, nullptr, 1);
122
+}
123
+
124
+void SimpleOutput::SetupVodTrack(obs_service_t *service)
125
+{
126
+   bool advanced =
127
+       config_get_bool(main->Config(), "SimpleOutput", "UseAdvanced");
128
+   bool enable = config_get_bool(main->Config(), "SimpleOutput",
129
+                     "VodTrackEnabled");
130
+   bool enableForCustomServer = config_get_bool(
131
+       GetGlobalConfig(), "General", "EnableCustomServerVodTrack");
132
+
133
+   obs_data_t *settings = obs_service_get_settings(service);
134
+   const char *name = obs_data_get_string(settings, "service");
135
+
136
+   const char *id = obs_service_get_id(service);
137
+   if (strcmp(id, "rtmp_custom") == 0)
138
+       enable = enableForCustomServer ? enable : false;
139
+   else
140
+       enable = advanced && enable && ServiceSupportsVodTrack(name);
141
+
142
+   if (enable)
143
+       obs_output_set_audio_encoder(streamOutput, aacArchive, 1);
144
+   else
145
+       clear_archive_encoder(streamOutput, SIMPLE_ARCHIVE_NAME);
146
+
147
+   obs_data_release(settings);
148
+}
149
+
150
 bool SimpleOutput::StartStreaming(obs_service_t *service)
151
 {
152
    bool reconnect = config_get_bool(main->Config(), "Output", "Reconnect");
153
@@ -863,6 +928,8 @@
154
 
155
    obs_output_set_reconnect_settings(streamOutput, maxRetries, retryDelay);
156
 
157
+   SetupVodTrack(service);
158
+
159
    if (obs_output_start(streamOutput)) {
160
        return true;
161
    }
162
@@ -1045,6 +1112,7 @@
163
 
164
 struct AdvancedOutput : BasicOutputHandler {
165
    OBSEncoder streamAudioEnc;
166
+   OBSEncoder streamArchiveEnc;
167
    OBSEncoder aacTrack[MAX_AUDIO_MIXES];
168
    OBSEncoder h264Streaming;
169
    OBSEncoder h264Recording;
170
@@ -1063,6 +1131,8 @@
171
    inline void UpdateAudioSettings();
172
    virtual void Update() override;
173
 
174
+   inline void SetupVodTrack(obs_service_t *service);
175
+
176
    inline void SetupStreaming();
177
    inline void SetupRecording();
178
    inline void SetupFFmpeg();
179
@@ -1112,6 +1182,8 @@
180
    settings = std::move(dataRet);
181
 }
182
 
183
+#define ADV_ARCHIVE_NAME "adv_archive_aac"
184
+
185
 AdvancedOutput::AdvancedOutput(OBSBasic *main_) : BasicOutputHandler(main_)
186
 {
187
    const char *recType =
188
@@ -1130,15 +1202,6 @@
189
    OBSData streamEncSettings = GetDataFromJsonFile("streamEncoder.json");
190
    OBSData recordEncSettings = GetDataFromJsonFile("recordEncoder.json");
191
 
192
-   const char *rate_control = obs_data_get_string(
193
-       useStreamEncoder ? streamEncSettings : recordEncSettings,
194
-       "rate_control");
195
-   if (!rate_control)
196
-       rate_control = "";
197
-   usesBitrate = astrcmpi(rate_control, "CBR") == 0 ||
198
-             astrcmpi(rate_control, "VBR") == 0 ||
199
-             astrcmpi(rate_control, "ABR") == 0;
200
-
201
    if (ffmpegOutput) {
202
        fileOutput = obs_output_create(
203
            "ffmpeg_output", "adv_ffmpeg_output", nullptr, nullptr);
204
@@ -1173,6 +1236,8 @@
205
            replayBufferStopping.Connect(signal, "stopping",
206
                             OBSReplayBufferStopping,
207
                             this);
208
+           replayBufferSaved.Connect(signal, "saved",
209
+                         OBSReplayBufferSaved, this);
210
        }
211
 
212
        fileOutput = obs_output_create(
213
@@ -1200,6 +1265,15 @@
214
              "(advanced output)";
215
    obs_encoder_release(h264Streaming);
216
 
217
+   const char *rate_control = obs_data_get_string(
218
+       useStreamEncoder ? streamEncSettings : recordEncSettings,
219
+       "rate_control");
220
+   if (!rate_control)
221
+       rate_control = "";
222
+   usesBitrate = astrcmpi(rate_control, "CBR") == 0 ||
223
+             astrcmpi(rate_control, "VBR") == 0 ||
224
+             astrcmpi(rate_control, "ABR") == 0;
225
+
226
    for (int i = 0; i < MAX_AUDIO_MIXES; i++) {
227
        char name[9];
228
        sprintf(name, "adv_aac%d", i);
229
@@ -1214,10 +1288,18 @@
230
    int streamTrack =
231
        config_get_int(main->Config(), "AdvOut", "TrackIndex") - 1;
232
    if (!CreateAACEncoder(streamAudioEnc, id, GetAudioBitrate(streamTrack),
233
-                 "avc_aac_stream", streamTrack))
234
+                 "adv_stream_aac", streamTrack))
235
        throw "Failed to create streaming audio encoder "
236
              "(advanced output)";
237
 
238
+   id = "";
239
+   int vodTrack =
240
+       config_get_int(main->Config(), "AdvOut", "VodTrackIndex") - 1;
241
+   if (!CreateAACEncoder(streamArchiveEnc, id, GetAudioBitrate(vodTrack),
242
+                 ADV_ARCHIVE_NAME, vodTrack))
243
+       throw "Failed to create archive audio encoder "
244
+             "(advanced output)";
245
+
246
    startRecording.Connect(obs_output_get_signal_handler(fileOutput),
247
                   "start", OBSStartRecording, this);
248
    stopRecording.Connect(obs_output_get_signal_handler(fileOutput), "stop",
249
@@ -1230,6 +1312,8 @@
250
 {
251
    bool applyServiceSettings = config_get_bool(main->Config(), "AdvOut",
252
                            "ApplyServiceSettings");
253
+   bool enforceBitrate = !config_get_bool(main->Config(), "Stream1",
254
+                          "IgnoreRecommended");
255
    bool dynBitrate =
256
        config_get_bool(main->Config(), "Output", "DynamicBitrate");
257
    const char *streamEncoder =
258
@@ -1238,9 +1322,13 @@
259
    OBSData settings = GetDataFromJsonFile("streamEncoder.json");
260
    ApplyEncoderDefaults(settings, h264Streaming);
261
 
262
-   if (applyServiceSettings)
263
+   if (applyServiceSettings) {
264
+       int bitrate = (int)obs_data_get_int(settings, "bitrate");
265
        obs_service_apply_encoder_settings(main->GetService(), settings,
266
                           nullptr);
267
+       if (!enforceBitrate)
268
+           obs_data_set_int(settings, "bitrate", bitrate);
269
+   }
270
 
271
    if (dynBitrate && astrcmpi(streamEncoder, "jim_nvenc") == 0)
272
        obs_data_set_bool(settings, "lookahead", false);
273
@@ -1269,6 +1357,18 @@
274
    UpdateAudioSettings();
275
 }
276
 
277
+static inline bool ServiceSupportsVodTrack(const char *service)
278
+{
279
+   static const char *vodTrackServices[] = {"Twitch"};
280
+
281
+   for (const char *vodTrackService : vodTrackServices) {
282
+       if (astrcmpi(vodTrackService, service) == 0)
283
+           return true;
284
+   }
285
+
286
+   return false;
287
+}
288
+
289
 inline void AdvancedOutput::SetupStreaming()
290
 {
291
    bool rescale = config_get_bool(main->Config(), "AdvOut", "Rescale");
292
@@ -1287,6 +1387,15 @@
293
    obs_output_set_audio_encoder(streamOutput, streamAudioEnc, 0);
294
    obs_encoder_set_scaled_size(h264Streaming, cx, cy);
295
    obs_encoder_set_video(h264Streaming, obs_get_video());
296
+
297
+   const char *id = obs_service_get_id(main->GetService());
298
+   if (strcmp(id, "rtmp_custom") == 0) {
299
+       obs_data_t *settings = obs_data_create();
300
+       obs_service_apply_encoder_settings(main->GetService(), settings,
301
+                          nullptr);
302
+       obs_encoder_update(h264Streaming, settings);
303
+       obs_data_release(settings);
304
+   }
305
 }
306
 
307
 inline void AdvancedOutput::SetupRecording()
308
@@ -1439,8 +1548,12 @@
309
 {
310
    bool applyServiceSettings = config_get_bool(main->Config(), "AdvOut",
311
                            "ApplyServiceSettings");
312
+   bool enforceBitrate = !config_get_bool(main->Config(), "Stream1",
313
+                          "IgnoreRecommended");
314
    int streamTrackIndex =
315
        config_get_int(main->Config(), "AdvOut", "TrackIndex");
316
+   int vodTrackIndex =
317
+       config_get_int(main->Config(), "AdvOut", "VodTrackIndex");
318
    obs_data_t *settings[MAX_AUDIO_MIXES];
319
 
320
    for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) {
321
@@ -1461,17 +1574,28 @@
322
    }
323
 
324
    for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) {
325
+       int track = (int)(i + 1);
326
+
327
        obs_encoder_update(aacTrack[i], settings[i]);
328
 
329
-       if ((int)(i + 1) == streamTrackIndex) {
330
+       if (track == streamTrackIndex || track == vodTrackIndex) {
331
            if (applyServiceSettings) {
332
+               int bitrate = (int)obs_data_get_int(settings[i],
333
+                                   "bitrate");
334
                obs_service_apply_encoder_settings(
335
                    main->GetService(), nullptr,
336
                    settings[i]);
337
+
338
+               if (!enforceBitrate)
339
+                   obs_data_set_int(settings[i], "bitrate",
340
+                            bitrate);
341
            }
342
+       }
343
 
344
+       if (track == streamTrackIndex)
345
            obs_encoder_update(streamAudioEnc, settings[i]);
346
-       }
347
+       if (track == vodTrackIndex)
348
+           obs_encoder_update(streamArchiveEnc, settings[i]);
349
 
350
        obs_data_release(settings[i]);
351
    }
352
@@ -1485,6 +1609,7 @@
353
    for (size_t i = 0; i < MAX_AUDIO_MIXES; i++)
354
        obs_encoder_set_audio(aacTrack[i], obs_get_audio());
355
    obs_encoder_set_audio(streamAudioEnc, obs_get_audio());
356
+   obs_encoder_set_audio(streamArchiveEnc, obs_get_audio());
357
 
358
    SetupStreaming();
359
 
360
@@ -1504,10 +1629,39 @@
361
    return FindClosestAvailableAACBitrate(bitrate);
362
 }
363
 
364
+inline void AdvancedOutput::SetupVodTrack(obs_service_t *service)
365
+{
366
+   int streamTrack =
367
+       config_get_int(main->Config(), "AdvOut", "TrackIndex");
368
+   bool vodTrackEnabled =
369
+       config_get_bool(main->Config(), "AdvOut", "VodTrackEnabled");
370
+   int vodTrackIndex =
371
+       config_get_int(main->Config(), "AdvOut", "VodTrackIndex");
372
+   bool enableForCustomServer = config_get_bool(
373
+       GetGlobalConfig(), "General", "EnableCustomServerVodTrack");
374
+
375
+   const char *id = obs_service_get_id(service);
376
+   if (strcmp(id, "rtmp_custom") == 0) {
377
+       vodTrackEnabled = enableForCustomServer ? vodTrackEnabled
378
+                           : false;
379
+   } else {
380
+       obs_data_t *settings = obs_service_get_settings(service);
381
+       const char *service = obs_data_get_string(settings, "service");
382
+       if (!ServiceSupportsVodTrack(service))
383
+           vodTrackEnabled = false;
384
+       obs_data_release(settings);
385
+   }
386
+
387
+   if (vodTrackEnabled && streamTrack != vodTrackIndex)
388
+       obs_output_set_audio_encoder(streamOutput, streamArchiveEnc, 1);
389
+   else
390
+       clear_archive_encoder(streamOutput, ADV_ARCHIVE_NAME);
391
+}
392
+
393
 bool AdvancedOutput::SetupStreaming(obs_service_t *service)
394
 {
395
    int streamTrack =
396
-       config_get_int(main->Config(), "AdvOut", "TrackIndex") - 1;
397
+       config_get_int(main->Config(), "AdvOut", "TrackIndex");
398
 
399
    if (!useStreamEncoder ||
400
        (!ffmpegOutput && !obs_output_active(fileOutput))) {
401
@@ -1589,7 +1743,7 @@
402
 
403
                streamAudioEnc = obs_audio_encoder_create(
404
                    id, "alt_audio_enc", nullptr,
405
-                   streamTrack, nullptr);
406
+                   streamTrack - 1, nullptr);
407
 
408
                if (!streamAudioEnc)
409
                    return false;
410
@@ -1606,6 +1760,7 @@
411
 
412
    obs_output_set_video_encoder(streamOutput, h264Streaming);
413
    obs_output_set_audio_encoder(streamOutput, streamAudioEnc, 0);
414
+
415
    return true;
416
 }
417
 
418
@@ -1648,6 +1803,8 @@
419
 
420
    obs_output_set_reconnect_settings(streamOutput, maxRetries, retryDelay);
421
 
422
+   SetupVodTrack(service);
423
+
424
    if (obs_output_start(streamOutput)) {
425
        return true;
426
    }
427
@@ -1798,9 +1955,15 @@
428
    }
429
 
430
    if (!obs_output_start(replayBuffer)) {
431
+       QString error_reason;
432
+       const char *error = obs_output_get_last_error(replayBuffer);
433
+       if (error)
434
+           error_reason = QT_UTF8(error);
435
+       else
436
+           error_reason = QTStr("Output.StartFailedGeneric");
437
        QMessageBox::critical(main,
438
                      QTStr("Output.StartRecordingFailed"),
439
-                     QTStr("Output.StartFailedGeneric"));
440
+                     error_reason);
441
        return false;
442
    }
443
 
444
obs-studio-26.0.2.tar.xz/UI/window-basic-main-outputs.hpp -> obs-studio-26.1.0.tar.xz/UI/window-basic-main-outputs.hpp Changed
9
 
1
@@ -33,6 +33,7 @@
2
    OBSSignal streamStopping;
3
    OBSSignal recordStopping;
4
    OBSSignal replayBufferStopping;
5
+   OBSSignal replayBufferSaved;
6
 
7
    inline BasicOutputHandler(OBSBasic *main_);
8
 
9
obs-studio-26.0.2.tar.xz/UI/window-basic-main-profiles.cpp -> obs-studio-26.1.0.tar.xz/UI/window-basic-main-profiles.cpp Changed
74
 
1
@@ -22,6 +22,7 @@
2
 #include <QVariant>
3
 #include <QFileDialog>
4
 #include "window-basic-main.hpp"
5
+#include "window-basic-auto-config.hpp"
6
 #include "window-namedialog.hpp"
7
 #include "qt-wrappers.hpp"
8
 
9
@@ -93,14 +94,25 @@
10
 
11
 static bool GetProfileName(QWidget *parent, std::string &name,
12
               std::string &file, const char *title,
13
-              const char *text, const char *oldName = nullptr)
14
+              const char *text, const bool showWizard,
15
+              bool &wizardChecked, const char *oldName = nullptr)
16
 {
17
    char path[512];
18
    int ret;
19
 
20
    for (;;) {
21
-       bool success = NameDialog::AskForName(parent, title, text, name,
22
-                             QT_UTF8(oldName));
23
+       bool success = false;
24
+
25
+       if (showWizard) {
26
+           success = NameDialog::AskForNameWithOption(
27
+               parent, title, text, name,
28
+               QTStr("AddProfile.WizardCheckbox"),
29
+               wizardChecked, QT_UTF8(oldName));
30
+       } else {
31
+           success = NameDialog::AskForName(
32
+               parent, title, text, name, QT_UTF8(oldName));
33
+       }
34
+
35
        if (!success) {
36
            return false;
37
        }
38
@@ -193,9 +205,18 @@
39
    std::string newPath;
40
    ConfigFile config;
41
 
42
-   if (!GetProfileName(this, newName, newDir, title, text, init_text))
43
+   bool showWizardChecked = config_get_bool(App()->GlobalConfig(), "Basic",
44
+                        "ConfigOnNewProfile");
45
+
46
+   if (!GetProfileName(this, newName, newDir, title, text, create_new,
47
+               showWizardChecked, init_text))
48
        return false;
49
 
50
+   if (create_new) {
51
+       config_set_bool(App()->GlobalConfig(), "Basic",
52
+               "ConfigOnNewProfile", showWizardChecked);
53
+   }
54
+
55
    std::string curDir =
56
        config_get_string(App()->GlobalConfig(), "Basic", "ProfileDir");
57
 
58
@@ -258,6 +279,15 @@
59
    config_save_safe(App()->GlobalConfig(), "tmp", nullptr);
60
    UpdateTitleBar();
61
 
62
+   // Run auto configuration setup wizard when a new profile is made to assist
63
+   // setting up blank settings
64
+   if (create_new && showWizardChecked) {
65
+       AutoConfig wizard(this);
66
+       wizard.setModal(true);
67
+       wizard.show();
68
+       wizard.exec();
69
+   }
70
+
71
    if (api) {
72
        api->on_event(OBS_FRONTEND_EVENT_PROFILE_LIST_CHANGED);
73
        api->on_event(OBS_FRONTEND_EVENT_PROFILE_CHANGED);
74
obs-studio-26.0.2.tar.xz/UI/window-basic-main-transitions.cpp -> obs-studio-26.1.0.tar.xz/UI/window-basic-main-transitions.cpp Changed
63
 
1
@@ -617,37 +617,35 @@
2
                           QTStr("TransitionNameDlg.Text"),
3
                           name, placeHolderText);
4
 
5
-   if (accepted) {
6
-       if (name.empty()) {
7
-           OBSMessageBox::warning(this,
8
-                          QTStr("NoNameEntered.Title"),
9
-                          QTStr("NoNameEntered.Text"));
10
-           RenameTransition();
11
-           return;
12
-       }
13
+   if (!accepted)
14
+       return;
15
+   if (name.empty()) {
16
+       OBSMessageBox::warning(this, QTStr("NoNameEntered.Title"),
17
+                      QTStr("NoNameEntered.Text"));
18
+       RenameTransition();
19
+       return;
20
+   }
21
 
22
-       source = FindTransition(name.c_str());
23
-       if (source) {
24
-           OBSMessageBox::warning(this, QTStr("NameExists.Title"),
25
-                          QTStr("NameExists.Text"));
26
+   source = FindTransition(name.c_str());
27
+   if (source) {
28
+       OBSMessageBox::warning(this, QTStr("NameExists.Title"),
29
+                      QTStr("NameExists.Text"));
30
 
31
-           RenameTransition();
32
-           return;
33
-       }
34
+       RenameTransition();
35
+       return;
36
+   }
37
 
38
-       obs_source_set_name(transition, name.c_str());
39
-       int idx = ui->transitions->findData(variant);
40
-       if (idx != -1) {
41
-           ui->transitions->setItemText(idx,
42
-                            QT_UTF8(name.c_str()));
43
+   obs_source_set_name(transition, name.c_str());
44
+   int idx = ui->transitions->findData(variant);
45
+   if (idx != -1) {
46
+       ui->transitions->setItemText(idx, QT_UTF8(name.c_str()));
47
 
48
-           if (api)
49
-               api->on_event(
50
-                   OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED);
51
+       if (api)
52
+           api->on_event(
53
+               OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED);
54
 
55
-           ClearQuickTransitionWidgets();
56
-           RefreshQuickTransitions();
57
-       }
58
+       ClearQuickTransitionWidgets();
59
+       RefreshQuickTransitions();
60
    }
61
 }
62
 
63
obs-studio-26.0.2.tar.xz/UI/window-basic-main.cpp -> obs-studio-26.1.0.tar.xz/UI/window-basic-main.cpp Changed
334
 
1
@@ -360,8 +360,6 @@
2
 
3
    QPoint curPos;
4
 
5
-   UpdateContextBar();
6
-
7
    //restore parent window geometry
8
    const char *geometry = config_get_string(App()->GlobalConfig(),
9
                         "BasicWindow", "geometry");
10
@@ -1112,6 +1110,7 @@
11
 
12
    copyStrings.clear();
13
    copyFiltersString = nullptr;
14
+   copyFilter = nullptr;
15
 
16
    LogScenes();
17
 
18
@@ -1268,6 +1267,22 @@
19
    }
20
 
21
    /* ----------------------------------------------------- */
22
+   /* move bitrate enforcement setting to new value         */
23
+   if (config_has_user_value(basicConfig, "SimpleOutput",
24
+                 "EnforceBitrate") &&
25
+       !config_has_user_value(basicConfig, "Stream1",
26
+                  "IgnoreRecommended") &&
27
+       !config_has_user_value(basicConfig, "Stream1", "MovedOldEnforce")) {
28
+       bool enforce = config_get_bool(basicConfig, "SimpleOutput",
29
+                          "EnforceBitrate");
30
+       config_set_bool(basicConfig, "Stream1", "IgnoreRecommended",
31
+               !enforce);
32
+       config_set_bool(basicConfig, "Stream1", "MovedOldEnforce",
33
+               true);
34
+       changed = true;
35
+   }
36
+
37
+   /* ----------------------------------------------------- */
38
 
39
    if (changed)
40
        config_save_safe(basicConfig, "tmp", nullptr);
41
@@ -1276,6 +1291,9 @@
42
 
43
    config_set_default_string(basicConfig, "Output", "Mode", "Simple");
44
 
45
+   config_set_default_bool(basicConfig, "Stream1", "IgnoreRecommended",
46
+               false);
47
+
48
    config_set_default_string(basicConfig, "SimpleOutput", "FilePath",
49
                  GetDefaultVideoSavePath().c_str());
50
    config_set_default_string(basicConfig, "SimpleOutput", "RecFormat",
51
@@ -1284,8 +1302,6 @@
52
    config_set_default_uint(basicConfig, "SimpleOutput", "ABitrate", 160);
53
    config_set_default_bool(basicConfig, "SimpleOutput", "UseAdvanced",
54
                false);
55
-   config_set_default_bool(basicConfig, "SimpleOutput", "EnforceBitrate",
56
-               true);
57
    config_set_default_string(basicConfig, "SimpleOutput", "Preset",
58
                  "veryfast");
59
    config_set_default_string(basicConfig, "SimpleOutput", "NVENCPreset",
60
@@ -1302,6 +1318,7 @@
61
                true);
62
    config_set_default_bool(basicConfig, "AdvOut", "UseRescale", false);
63
    config_set_default_uint(basicConfig, "AdvOut", "TrackIndex", 1);
64
+   config_set_default_uint(basicConfig, "AdvOut", "VodTrackIndex", 2);
65
    config_set_default_string(basicConfig, "AdvOut", "Encoder", "obs_x264");
66
 
67
    config_set_default_string(basicConfig, "AdvOut", "RecType", "Standard");
68
@@ -1452,7 +1469,7 @@
69
 
70
    ret = GetProfilePath(configPath, sizeof(configPath), "basic.ini");
71
    if (ret <= 0) {
72
-       OBSErrorBox(nullptr, "Failed to get base.ini path");
73
+       OBSErrorBox(nullptr, "Failed to get basic.ini path");
74
        return false;
75
    }
76
 
77
@@ -1680,6 +1697,12 @@
78
    InitOBSCallbacks();
79
    InitHotkeys();
80
 
81
+   /* hack to prevent elgato from loading its own Qt5Network that it tries
82
+    * to ship with */
83
+#if defined(_WIN32) && !defined(_DEBUG)
84
+   LoadLibraryW(L"Qt5Network");
85
+#endif
86
+
87
    AddExtraModulePaths();
88
    blog(LOG_INFO, "---------------------------------");
89
    obs_load_all_modules();
90
@@ -1747,17 +1770,12 @@
91
        GetGlobalConfig(), "BasicWindow", "ShowSourceIcons");
92
    ui->toggleSourceIcons->setChecked(sourceIconsVisible);
93
 
94
-   if (config_has_user_value(App()->GlobalConfig(), "BasicWindow",
95
-                 "ShowContextToolbars")) {
96
-       bool visible = config_get_bool(App()->GlobalConfig(),
97
-                          "BasicWindow",
98
-                          "ShowContextToolbars");
99
-       ui->toggleContextBar->setChecked(visible);
100
-       ui->contextContainer->setVisible(visible);
101
-   } else {
102
-       ui->toggleContextBar->setChecked(true);
103
-       ui->contextContainer->setVisible(true);
104
-   }
105
+   bool contextVisible = config_get_bool(
106
+       App()->GlobalConfig(), "BasicWindow", "ShowContextToolbars");
107
+   ui->toggleContextBar->setChecked(contextVisible);
108
+   ui->contextContainer->setVisible(contextVisible);
109
+   if (contextVisible)
110
+       UpdateContextBar(true);
111
 
112
    {
113
        ProfileScope("OBSBasic::Load");
114
@@ -2434,7 +2452,9 @@
115
    obs_hotkey_pair_unregister(recordingHotkeys);
116
    obs_hotkey_pair_unregister(pauseHotkeys);
117
    obs_hotkey_pair_unregister(replayBufHotkeys);
118
+   obs_hotkey_pair_unregister(vcamHotkeys);
119
    obs_hotkey_pair_unregister(togglePreviewHotkeys);
120
+   obs_hotkey_pair_unregister(contextBarHotkeys);
121
    obs_hotkey_unregister(forceStreamingStopHotkey);
122
    obs_hotkey_unregister(togglePreviewProgramHotkey);
123
    obs_hotkey_unregister(transitionHotkey);
124
@@ -2928,8 +2948,17 @@
125
    return !is_local_file;
126
 }
127
 
128
-void OBSBasic::UpdateContextBar()
129
+void OBSBasic::UpdateContextBarDeferred(bool force)
130
+{
131
+   QMetaObject::invokeMethod(this, "UpdateContextBar",
132
+                 Qt::QueuedConnection, Q_ARG(bool, force));
133
+}
134
+
135
+void OBSBasic::UpdateContextBar(bool force)
136
 {
137
+   if (!ui->contextContainer->isVisible() && !force)
138
+       return;
139
+
140
    OBSSceneItem item = GetCurrentSceneItem();
141
 
142
    ClearContextBar();
143
@@ -5003,9 +5032,8 @@
144
 
145
        ui->actionCopyFilters->setEnabled(true);
146
        ui->actionCopySource->setEnabled(true);
147
-   } else {
148
-       ui->actionPasteFilters->setEnabled(false);
149
    }
150
+   ui->actionPasteFilters->setEnabled(copyFiltersString && idx != -1);
151
 
152
    popup.exec(QCursor::pos());
153
 }
154
@@ -5597,10 +5625,19 @@
155
        App()->IncrementSleepInhibition();
156
        UpdateProcessPriority();
157
 
158
-       if (trayIcon && trayIcon->isVisible())
159
+       if (trayIcon && trayIcon->isVisible()) {
160
+#ifdef __APPLE__
161
+           QIcon trayMask =
162
+               QIcon(":/res/images/tray_active_macos.png");
163
+           trayMask.setIsMask(true);
164
+           trayIcon->setIcon(
165
+               QIcon::fromTheme("obs-tray", trayMask));
166
+#else
167
            trayIcon->setIcon(QIcon::fromTheme(
168
                "obs-tray-active",
169
                QIcon(":/res/images/tray_active.png")));
170
+#endif
171
+       }
172
    }
173
 }
174
 
175
@@ -5615,19 +5652,42 @@
176
        App()->DecrementSleepInhibition();
177
        ClearProcessPriority();
178
 
179
-       if (trayIcon && trayIcon->isVisible())
180
-           trayIcon->setIcon(QIcon::fromTheme(
181
-               "obs-tray", QIcon(":/res/images/obs.png")));
182
+       if (trayIcon && trayIcon->isVisible()) {
183
+#ifdef __APPLE__
184
+           QIcon trayIconFile =
185
+               QIcon(":/res/images/obs_macos.png");
186
+           trayIconFile.setIsMask(true);
187
+#else
188
+           QIcon trayIconFile = QIcon(":/res/images/obs.png");
189
+#endif
190
+           trayIcon->setIcon(
191
+               QIcon::fromTheme("obs-tray", trayIconFile));
192
+       }
193
    } else if (outputHandler->Active() && trayIcon &&
194
           trayIcon->isVisible()) {
195
-       if (os_atomic_load_bool(&recording_paused))
196
-           trayIcon->setIcon(QIcon::fromTheme(
197
-               "obs-tray-paused",
198
-               QIcon(":/res/images/obs_paused.png")));
199
-       else
200
-           trayIcon->setIcon(QIcon::fromTheme(
201
-               "obs-tray-active",
202
-               QIcon(":/res/images/tray_active.png")));
203
+       if (os_atomic_load_bool(&recording_paused)) {
204
+#ifdef __APPLE__
205
+           QIcon trayIconFile =
206
+               QIcon(":/res/images/obs_paused_macos.png");
207
+           trayIconFile.setIsMask(true);
208
+#else
209
+           QIcon trayIconFile =
210
+               QIcon(":/res/images/obs_paused.png");
211
+#endif
212
+           trayIcon->setIcon(QIcon::fromTheme("obs-tray-paused",
213
+                              trayIconFile));
214
+       } else {
215
+#ifdef __APPLE__
216
+           QIcon trayIconFile =
217
+               QIcon(":/res/images/tray_active_macos.png");
218
+           trayIconFile.setIsMask(true);
219
+#else
220
+           QIcon trayIconFile =
221
+               QIcon(":/res/images/tray_active.png");
222
+#endif
223
+           trayIcon->setIcon(QIcon::fromTheme("obs-tray-active",
224
+                              trayIconFile));
225
+       }
226
    }
227
 }
228
 
229
@@ -6143,6 +6203,12 @@
230
    calldata_free(&cd);
231
 }
232
 
233
+void OBSBasic::ReplayBufferSaved()
234
+{
235
+   if (api)
236
+       api->on_event(OBS_FRONTEND_EVENT_REPLAY_BUFFER_SAVED);
237
+}
238
+
239
 void OBSBasic::ReplayBufferStop(int code)
240
 {
241
    if (!outputHandler || !outputHandler->replayBuffer)
242
@@ -7355,6 +7421,7 @@
243
    config_set_bool(App()->GlobalConfig(), "BasicWindow",
244
            "ShowContextToolbars", visible);
245
    this->ui->contextContainer->setVisible(visible);
246
+   UpdateContextBar(true);
247
 }
248
 
249
 void OBSBasic::on_toggleStatusBar_toggled(bool visible)
250
@@ -7507,9 +7574,14 @@
251
 
252
 void OBSBasic::SystemTrayInit()
253
 {
254
+#ifdef __APPLE__
255
+   QIcon trayIconFile = QIcon(":/res/images/obs_macos.png");
256
+   trayIconFile.setIsMask(true);
257
+#else
258
+   QIcon trayIconFile = QIcon(":/res/images/obs.png");
259
+#endif
260
    trayIcon.reset(new QSystemTrayIcon(
261
-       QIcon::fromTheme("obs-tray", QIcon(":/res/images/obs.png")),
262
-       this));
263
+       QIcon::fromTheme("obs-tray", trayIconFile), this));
264
    trayIcon->setToolTip("OBS Studio");
265
 
266
    showHide = new QAction(QTStr("Basic.SystemTray.Show"), trayIcon.data());
267
@@ -7564,10 +7636,12 @@
268
    AddProjectorMenuMonitors(studioProgramProjector, this,
269
                 SLOT(OpenStudioProgramProjector()));
270
 
271
+#ifndef __APPLE__
272
    if (reason == QSystemTrayIcon::Trigger) {
273
        EnablePreviewDisplay(previewEnabled && !isVisible());
274
        ToggleShowHide();
275
    }
276
+#endif
277
 }
278
 
279
 void OBSBasic::SysTrayNotify(const QString &text,
280
@@ -8085,10 +8159,18 @@
281
 
282
        ui->statusbar->RecordingPaused();
283
 
284
-       if (trayIcon && trayIcon->isVisible())
285
-           trayIcon->setIcon(QIcon::fromTheme(
286
-               "obs-tray-paused",
287
-               QIcon(":/res/images/obs_paused.png")));
288
+       if (trayIcon && trayIcon->isVisible()) {
289
+#ifdef __APPLE__
290
+           QIcon trayIconFile =
291
+               QIcon(":/res/images/obs_paused_macos.png");
292
+           trayIconFile.setIsMask(true);
293
+#else
294
+           QIcon trayIconFile =
295
+               QIcon(":/res/images/obs_paused.png");
296
+#endif
297
+           trayIcon->setIcon(QIcon::fromTheme("obs-tray-paused",
298
+                              trayIconFile));
299
+       }
300
 
301
        os_atomic_set_bool(&recording_paused, true);
302
 
303
@@ -8116,10 +8198,18 @@
304
 
305
        ui->statusbar->RecordingUnpaused();
306
 
307
-       if (trayIcon && trayIcon->isVisible())
308
-           trayIcon->setIcon(QIcon::fromTheme(
309
-               "obs-tray-active",
310
-               QIcon(":/res/images/tray_active.png")));
311
+       if (trayIcon && trayIcon->isVisible()) {
312
+#ifdef __APPLE__
313
+           QIcon trayIconFile =
314
+               QIcon(":/res/images/tray_active_macos.png");
315
+           trayIconFile.setIsMask(true);
316
+#else
317
+           QIcon trayIconFile =
318
+               QIcon(":/res/images/tray_active.png");
319
+#endif
320
+           trayIcon->setIcon(QIcon::fromTheme("obs-tray-active",
321
+                              trayIconFile));
322
+       }
323
 
324
        os_atomic_set_bool(&recording_paused, false);
325
 
326
@@ -8203,7 +8293,6 @@
327
    replay.reset(new QPushButton());
328
    replay->setAccessibleName(QTStr("Basic.Main.SaveReplay"));
329
    replay->setToolTip(QTStr("Basic.Main.SaveReplay"));
330
-   replay->setCheckable(true);
331
    replay->setChecked(false);
332
    replay->setProperty("themeID",
333
                QVariant(QStringLiteral("replayIconSmall")));
334
obs-studio-26.0.2.tar.xz/UI/window-basic-main.hpp -> obs-studio-26.1.0.tar.xz/UI/window-basic-main.hpp Changed
28
 
1
@@ -573,6 +573,7 @@
2
 
3
    void ReplayBufferStart();
4
    void ReplayBufferSave();
5
+   void ReplayBufferSaved();
6
    void ReplayBufferStopping();
7
    void ReplayBufferStop(int code);
8
 
9
@@ -839,6 +840,8 @@
10
    QIcon GetGroupIcon() const;
11
    QIcon GetSceneIcon() const;
12
 
13
+   OBSWeakSource copyFilter = nullptr;
14
+
15
 protected:
16
    virtual void closeEvent(QCloseEvent *event) override;
17
    virtual void changeEvent(QEvent *event) override;
18
@@ -1020,7 +1023,8 @@
19
    bool ReplayBufferActive();
20
 
21
    void ClearContextBar();
22
-   void UpdateContextBar();
23
+   void UpdateContextBar(bool force = false);
24
+   void UpdateContextBarDeferred(bool force = false);
25
 
26
 public:
27
    explicit OBSBasic(QWidget *parent = 0);
28
obs-studio-26.0.2.tar.xz/UI/window-basic-settings-stream.cpp -> obs-studio-26.1.0.tar.xz/UI/window-basic-settings-stream.cpp Changed
547
 
1
@@ -71,14 +71,29 @@
2
        SLOT(UpdateServerList()));
3
    connect(ui->service, SIGNAL(currentIndexChanged(int)), this,
4
        SLOT(UpdateKeyLink()));
5
+   connect(ui->service, SIGNAL(currentIndexChanged(int)), this,
6
+       SLOT(UpdateVodTrackSetting()));
7
+   connect(ui->service, SIGNAL(currentIndexChanged(int)), this,
8
+       SLOT(UpdateServiceRecommendations()));
9
+   connect(ui->service, SIGNAL(currentIndexChanged(int)), this,
10
+       SLOT(UpdateResFPSLimits()));
11
    connect(ui->customServer, SIGNAL(textChanged(const QString &)), this,
12
        SLOT(UpdateKeyLink()));
13
+   connect(ui->ignoreRecommended, SIGNAL(clicked(bool)), this,
14
+       SLOT(DisplayEnforceWarning(bool)));
15
+   connect(ui->ignoreRecommended, SIGNAL(toggled(bool)), this,
16
+       SLOT(UpdateResFPSLimits()));
17
    connect(ui->customServer, SIGNAL(editingFinished(const QString &)),
18
        this, SLOT(UpdateKeyLink()));
19
+   connect(ui->service, SIGNAL(currentIndexChanged(int)), this,
20
+       SLOT(UpdateMoreInfoLink()));
21
 }
22
 
23
 void OBSBasicSettings::LoadStream1Settings()
24
 {
25
+   bool ignoreRecommended =
26
+       config_get_bool(main->Config(), "Stream1", "IgnoreRecommended");
27
+
28
    obs_service_t *service_obj = main->GetService();
29
    const char *type = obs_service_get_type(service_obj);
30
 
31
@@ -138,11 +153,19 @@
32
    obs_data_release(settings);
33
 
34
    UpdateKeyLink();
35
+   UpdateMoreInfoLink();
36
+   UpdateVodTrackSetting();
37
+   UpdateServiceRecommendations();
38
 
39
    bool streamActive = obs_frontend_streaming_active();
40
    ui->streamPage->setEnabled(!streamActive);
41
 
42
+   ui->ignoreRecommended->setChecked(ignoreRecommended);
43
+
44
    loading = false;
45
+
46
+   QMetaObject::invokeMethod(this, "UpdateResFPSLimits",
47
+                 Qt::QueuedConnection);
48
 }
49
 
50
 void OBSBasicSettings::SaveStream1Settings()
51
@@ -210,6 +233,37 @@
52
    main->auth = auth;
53
    if (!!main->auth)
54
        main->auth->LoadUI();
55
+
56
+   SaveCheckBox(ui->ignoreRecommended, "Stream1", "IgnoreRecommended");
57
+}
58
+
59
+void OBSBasicSettings::UpdateMoreInfoLink()
60
+{
61
+   if (IsCustomService()) {
62
+       ui->moreInfoButton->hide();
63
+       return;
64
+   }
65
+
66
+   QString serviceName = ui->service->currentText();
67
+   obs_properties_t *props = obs_get_service_properties("rtmp_common");
68
+   obs_property_t *services = obs_properties_get(props, "service");
69
+
70
+   OBSData settings = obs_data_create();
71
+   obs_data_release(settings);
72
+
73
+   obs_data_set_string(settings, "service", QT_TO_UTF8(serviceName));
74
+   obs_property_modified(services, settings);
75
+
76
+   const char *more_info_link =
77
+       obs_data_get_string(settings, "more_info_link");
78
+
79
+   if (!more_info_link || (*more_info_link == '\0')) {
80
+       ui->moreInfoButton->hide();
81
+   } else {
82
+       ui->moreInfoButton->setTargetUrl(QUrl(more_info_link));
83
+       ui->moreInfoButton->show();
84
+   }
85
+   obs_properties_destroy(props);
86
 }
87
 
88
 void OBSBasicSettings::UpdateKeyLink()
89
@@ -218,9 +272,8 @@
90
    QString customServer = ui->customServer->text();
91
    QString streamKeyLink;
92
    if (serviceName == "Twitch") {
93
-       streamKeyLink =
94
-           "https://www.twitch.tv/broadcast/dashboard/streamkey";
95
-   } else if (serviceName == "YouTube / YouTube Gaming") {
96
+       streamKeyLink = "https://dashboard.twitch.tv/settings/stream";
97
+   } else if (serviceName.startsWith("YouTube")) {
98
        streamKeyLink = "https://www.youtube.com/live_dashboard";
99
    } else if (serviceName.startsWith("Restream.io")) {
100
        streamKeyLink =
101
@@ -563,3 +616,445 @@
102
    ui->authPwLabel->setVisible(use_auth);
103
    ui->authPwWidget->setVisible(use_auth);
104
 }
105
+
106
+void OBSBasicSettings::UpdateVodTrackSetting()
107
+{
108
+   bool enableForCustomServer = config_get_bool(
109
+       GetGlobalConfig(), "General", "EnableCustomServerVodTrack");
110
+   bool enableVodTrack = ui->service->currentText() == "Twitch";
111
+   bool wasEnabled = !!vodTrackCheckbox;
112
+
113
+   if (enableForCustomServer && IsCustomService())
114
+       enableVodTrack = true;
115
+
116
+   if (enableVodTrack == wasEnabled)
117
+       return;
118
+
119
+   if (!enableVodTrack) {
120
+       delete vodTrackCheckbox;
121
+       delete vodTrackContainer;
122
+       delete simpleVodTrack;
123
+       return;
124
+   }
125
+
126
+   /* -------------------------------------- */
127
+   /* simple output mode vod track widgets   */
128
+
129
+   bool simpleAdv = ui->simpleOutAdvanced->isChecked();
130
+   bool vodTrackEnabled = config_get_bool(main->Config(), "SimpleOutput",
131
+                          "VodTrackEnabled");
132
+
133
+   simpleVodTrack = new QCheckBox(this);
134
+   simpleVodTrack->setText(
135
+       QTStr("Basic.Settings.Output.Simple.TwitchVodTrack"));
136
+   simpleVodTrack->setVisible(simpleAdv);
137
+   simpleVodTrack->setChecked(vodTrackEnabled);
138
+
139
+   int pos;
140
+   ui->simpleStreamingLayout->getWidgetPosition(ui->simpleOutAdvanced,
141
+                            &pos, nullptr);
142
+   ui->simpleStreamingLayout->insertRow(pos + 1, nullptr, simpleVodTrack);
143
+
144
+   HookWidget(simpleVodTrack, SIGNAL(clicked(bool)),
145
+          SLOT(OutputsChanged()));
146
+   connect(ui->simpleOutAdvanced, SIGNAL(toggled(bool)),
147
+       simpleVodTrack.data(), SLOT(setVisible(bool)));
148
+
149
+   /* -------------------------------------- */
150
+   /* advanced output mode vod track widgets */
151
+
152
+   vodTrackCheckbox = new QCheckBox(this);
153
+   vodTrackCheckbox->setText(
154
+       QTStr("Basic.Settings.Output.Adv.TwitchVodTrack"));
155
+   vodTrackCheckbox->setLayoutDirection(Qt::RightToLeft);
156
+
157
+   vodTrackContainer = new QWidget(this);
158
+   QHBoxLayout *vodTrackLayout = new QHBoxLayout();
159
+   for (int i = 0; i < MAX_AUDIO_MIXES; i++) {
160
+       vodTrack[i] = new QRadioButton(QString::number(i + 1));
161
+       vodTrackLayout->addWidget(vodTrack[i]);
162
+
163
+       HookWidget(vodTrack[i], SIGNAL(clicked(bool)),
164
+              SLOT(OutputsChanged()));
165
+   }
166
+
167
+   HookWidget(vodTrackCheckbox, SIGNAL(clicked(bool)),
168
+          SLOT(OutputsChanged()));
169
+
170
+   vodTrackLayout->addStretch();
171
+   vodTrackLayout->setContentsMargins(0, 0, 0, 0);
172
+
173
+   vodTrackContainer->setLayout(vodTrackLayout);
174
+
175
+   ui->advOutTopLayout->insertRow(2, vodTrackCheckbox, vodTrackContainer);
176
+
177
+   vodTrackEnabled =
178
+       config_get_bool(main->Config(), "AdvOut", "VodTrackEnabled");
179
+   vodTrackCheckbox->setChecked(vodTrackEnabled);
180
+   vodTrackContainer->setEnabled(vodTrackEnabled);
181
+
182
+   connect(vodTrackCheckbox, SIGNAL(clicked(bool)), vodTrackContainer,
183
+       SLOT(setEnabled(bool)));
184
+
185
+   int trackIndex =
186
+       config_get_int(main->Config(), "AdvOut", "VodTrackIndex");
187
+   for (int i = 0; i < MAX_AUDIO_MIXES; i++) {
188
+       vodTrack[i]->setChecked((i + 1) == trackIndex);
189
+   }
190
+}
191
+
192
+OBSService OBSBasicSettings::GetStream1Service()
193
+{
194
+   return stream1Changed ? SpawnTempService()
195
+                 : OBSService(main->GetService());
196
+}
197
+
198
+void OBSBasicSettings::UpdateServiceRecommendations()
199
+{
200
+   bool customServer = IsCustomService();
201
+   ui->ignoreRecommended->setVisible(!customServer);
202
+   ui->enforceSettingsLabel->setVisible(!customServer);
203
+
204
+   OBSService service = GetStream1Service();
205
+
206
+   int vbitrate, abitrate;
207
+   BPtr<obs_service_resolution> res_list;
208
+   size_t res_count;
209
+   int fps;
210
+
211
+   obs_service_get_max_bitrate(service, &vbitrate, &abitrate);
212
+   obs_service_get_supported_resolutions(service, &res_list, &res_count);
213
+   obs_service_get_max_fps(service, &fps);
214
+
215
+   QString text;
216
+
217
+#define ENFORCE_TEXT(x) QTStr("Basic.Settings.Stream.Recommended." x)
218
+   if (vbitrate)
219
+       text += ENFORCE_TEXT("MaxVideoBitrate")
220
+               .arg(QString::number(vbitrate));
221
+   if (abitrate) {
222
+       if (!text.isEmpty())
223
+           text += "\n";
224
+       text += ENFORCE_TEXT("MaxAudioBitrate")
225
+               .arg(QString::number(abitrate));
226
+   }
227
+   if (res_count) {
228
+       if (!text.isEmpty())
229
+           text += "\n";
230
+
231
+       obs_service_resolution best_res = {};
232
+       int best_res_pixels = 0;
233
+
234
+       for (size_t i = 0; i < res_count; i++) {
235
+           obs_service_resolution res = res_list[i];
236
+           int res_pixels = res.cx + res.cy;
237
+           if (res_pixels > best_res_pixels) {
238
+               best_res = res;
239
+               best_res_pixels = res_pixels;
240
+           }
241
+       }
242
+
243
+       QString res_str =
244
+           QString("%1x%2").arg(QString::number(best_res.cx),
245
+                        QString::number(best_res.cy));
246
+       text += ENFORCE_TEXT("MaxResolution").arg(res_str);
247
+   }
248
+   if (fps) {
249
+       if (!text.isEmpty())
250
+           text += "\n";
251
+
252
+       text += ENFORCE_TEXT("MaxFPS").arg(QString::number(fps));
253
+   }
254
+#undef ENFORCE_TEXT
255
+
256
+   ui->enforceSettingsLabel->setText(text);
257
+}
258
+
259
+void OBSBasicSettings::DisplayEnforceWarning(bool checked)
260
+{
261
+   if (IsCustomService())
262
+       return;
263
+
264
+   if (!checked) {
265
+       SimpleRecordingEncoderChanged();
266
+       return;
267
+   }
268
+
269
+   QMessageBox::StandardButton button;
270
+
271
+#define ENFORCE_WARNING(x) \
272
+   QTStr("Basic.Settings.Stream.IgnoreRecommended.Warn." x)
273
+
274
+   button = OBSMessageBox::question(this, ENFORCE_WARNING("Title"),
275
+                    ENFORCE_WARNING("Text"));
276
+#undef ENFORCE_WARNING
277
+
278
+   if (button == QMessageBox::No) {
279
+       QMetaObject::invokeMethod(ui->ignoreRecommended, "setChecked",
280
+                     Qt::QueuedConnection,
281
+                     Q_ARG(bool, false));
282
+       return;
283
+   }
284
+
285
+   SimpleRecordingEncoderChanged();
286
+}
287
+
288
+bool OBSBasicSettings::ResFPSValid(obs_service_resolution *res_list,
289
+                  size_t res_count, int max_fps)
290
+{
291
+   if (!res_count && !max_fps)
292
+       return true;
293
+
294
+   if (res_count) {
295
+       QString res = ui->outputResolution->currentText();
296
+       bool found_res = false;
297
+
298
+       int cx, cy;
299
+       if (sscanf(QT_TO_UTF8(res), "%dx%d", &cx, &cy) != 2)
300
+           return false;
301
+
302
+       for (size_t i = 0; i < res_count; i++) {
303
+           if (res_list[i].cx == cx && res_list[i].cy == cy) {
304
+               found_res = true;
305
+               break;
306
+           }
307
+       }
308
+
309
+       if (!found_res)
310
+           return false;
311
+   }
312
+
313
+   if (max_fps) {
314
+       int fpsType = ui->fpsType->currentIndex();
315
+       if (fpsType != 0)
316
+           return false;
317
+
318
+       std::string fps_str = QT_TO_UTF8(ui->fpsCommon->currentText());
319
+       float fps;
320
+       sscanf(fps_str.c_str(), "%f", &fps);
321
+       if (fps > (float)max_fps)
322
+           return false;
323
+   }
324
+
325
+   return true;
326
+}
327
+
328
+extern void set_closest_res(int &cx, int &cy,
329
+               struct obs_service_resolution *res_list,
330
+               size_t count);
331
+
332
+/* Checks for and updates the resolution and FPS limits of a service, if any.
333
+ *
334
+ * If the service has a resolution and/or FPS limit, this will enforce those
335
+ * limitations in the UI itself, preventing the user from selecting a
336
+ * resolution or FPS that's not supported.
337
+ *
338
+ * This is an unpleasant thing to have to do to users, but there is no other
339
+ * way to ensure that a service's restricted resolution/framerate values are
340
+ * properly enforced, otherwise users will just be confused when things aren't
341
+ * working correctly. The user can turn it off if they're partner (or if they
342
+ * want to risk getting in trouble with their service) by selecting the "Ignore
343
+ * recommended settings" option in the stream section of settings.
344
+ *
345
+ * This only affects services that have a resolution and/or framerate limit, of
346
+ * which as of this writing, and hopefully for the foreseeable future, there is
347
+ * only one.
348
+ */
349
+void OBSBasicSettings::UpdateResFPSLimits()
350
+{
351
+   if (loading)
352
+       return;
353
+
354
+   int idx = ui->service->currentIndex();
355
+   if (idx == -1)
356
+       return;
357
+
358
+   bool ignoreRecommended = ui->ignoreRecommended->isChecked();
359
+   BPtr<obs_service_resolution> res_list;
360
+   size_t res_count = 0;
361
+   int max_fps = 0;
362
+
363
+   if (!IsCustomService() && !ignoreRecommended) {
364
+       OBSService service = GetStream1Service();
365
+       obs_service_get_supported_resolutions(service, &res_list,
366
+                             &res_count);
367
+       obs_service_get_max_fps(service, &max_fps);
368
+   }
369
+
370
+   /* ------------------------------------ */
371
+   /* Check for enforced res/FPS           */
372
+
373
+   QString res = ui->outputResolution->currentText();
374
+   QString fps_str;
375
+   int cx = 0, cy = 0;
376
+   double max_fpsd = (double)max_fps;
377
+   int closest_fps_index = -1;
378
+   double fpsd;
379
+
380
+   sscanf(QT_TO_UTF8(res), "%dx%d", &cx, &cy);
381
+
382
+   if (res_count)
383
+       set_closest_res(cx, cy, res_list, res_count);
384
+
385
+   if (max_fps) {
386
+       int fpsType = ui->fpsType->currentIndex();
387
+
388
+       if (fpsType == 1) { //Integer
389
+           fpsd = (double)ui->fpsInteger->value();
390
+       } else if (fpsType == 2) { //Fractional
391
+           fpsd = (double)ui->fpsNumerator->value() /
392
+                  (double)ui->fpsDenominator->value();
393
+       } else { //Common
394
+           sscanf(QT_TO_UTF8(ui->fpsCommon->currentText()), "%lf",
395
+                  &fpsd);
396
+       }
397
+
398
+       double closest_diff = 1000000000000.0;
399
+
400
+       for (int i = 0; i < ui->fpsCommon->count(); i++) {
401
+           double com_fpsd;
402
+           sscanf(QT_TO_UTF8(ui->fpsCommon->itemText(i)), "%lf",
403
+                  &com_fpsd);
404
+
405
+           if (com_fpsd > max_fpsd) {
406
+               continue;
407
+           }
408
+
409
+           double diff = fabs(com_fpsd - fpsd);
410
+           if (diff < closest_diff) {
411
+               closest_diff = diff;
412
+               closest_fps_index = i;
413
+               fps_str = ui->fpsCommon->itemText(i);
414
+           }
415
+       }
416
+   }
417
+
418
+   QString res_str =
419
+       QString("%1x%2").arg(QString::number(cx), QString::number(cy));
420
+
421
+   /* ------------------------------------ */
422
+   /* Display message box if res/FPS bad   */
423
+
424
+   bool valid = ResFPSValid(res_list, res_count, max_fps);
425
+
426
+   if (!valid) {
427
+       /* if the user was already on facebook with an incompatible
428
+        * resolution, assume it's an upgrade */
429
+       if (lastServiceIdx == -1 && lastIgnoreRecommended == -1) {
430
+           ui->ignoreRecommended->setChecked(true);
431
+           ui->ignoreRecommended->setProperty("changed", true);
432
+           stream1Changed = true;
433
+           EnableApplyButton(true);
434
+           UpdateResFPSLimits();
435
+           return;
436
+       }
437
+
438
+       QMessageBox::StandardButton button;
439
+
440
+#define WARNING_VAL(x) \
441
+   QTStr("Basic.Settings.Output.Warn.EnforceResolutionFPS." x)
442
+
443
+       QString str;
444
+       if (res_count)
445
+           str += WARNING_VAL("Resolution").arg(res_str);
446
+       if (max_fps) {
447
+           if (!str.isEmpty())
448
+               str += "\n";
449
+           str += WARNING_VAL("FPS").arg(fps_str);
450
+       }
451
+
452
+       button = OBSMessageBox::question(this, WARNING_VAL("Title"),
453
+                        WARNING_VAL("Msg").arg(str));
454
+#undef WARNING_VAL
455
+
456
+       if (button == QMessageBox::No) {
457
+           if (idx != lastServiceIdx)
458
+               QMetaObject::invokeMethod(
459
+                   ui->service, "setCurrentIndex",
460
+                   Qt::QueuedConnection,
461
+                   Q_ARG(int, lastServiceIdx));
462
+           else
463
+               QMetaObject::invokeMethod(ui->ignoreRecommended,
464
+                             "setChecked",
465
+                             Qt::QueuedConnection,
466
+                             Q_ARG(bool, true));
467
+           return;
468
+       }
469
+   }
470
+
471
+   /* ------------------------------------ */
472
+   /* Update widgets/values if switching   */
473
+   /* to/from enforced resolution/FPS      */
474
+
475
+   ui->outputResolution->blockSignals(true);
476
+   if (res_count) {
477
+       ui->outputResolution->clear();
478
+       ui->outputResolution->setEditable(false);
479
+
480
+       int new_res_index = -1;
481
+
482
+       for (size_t i = 0; i < res_count; i++) {
483
+           obs_service_resolution val = res_list[i];
484
+           QString str =
485
+               QString("%1x%2").arg(QString::number(val.cx),
486
+                            QString::number(val.cy));
487
+           ui->outputResolution->addItem(str);
488
+
489
+           if (val.cx == cx && val.cy == cy)
490
+               new_res_index = (int)i;
491
+       }
492
+
493
+       ui->outputResolution->setCurrentIndex(new_res_index);
494
+       if (!valid) {
495
+           ui->outputResolution->setProperty("changed", true);
496
+           videoChanged = true;
497
+           EnableApplyButton(true);
498
+       }
499
+   } else {
500
+       QString baseRes = ui->baseResolution->currentText();
501
+       int baseCX, baseCY;
502
+       sscanf(QT_TO_UTF8(baseRes), "%dx%d", &baseCX, &baseCY);
503
+
504
+       if (!ui->outputResolution->isEditable()) {
505
+           RecreateOutputResolutionWidget();
506
+           ui->outputResolution->blockSignals(true);
507
+           ResetDownscales((uint32_t)baseCX, (uint32_t)baseCY,
508
+                   true);
509
+           ui->outputResolution->setCurrentText(res);
510
+       }
511
+   }
512
+   ui->outputResolution->blockSignals(false);
513
+
514
+   if (max_fps) {
515
+       for (int i = 0; i < ui->fpsCommon->count(); i++) {
516
+           double com_fpsd;
517
+           sscanf(QT_TO_UTF8(ui->fpsCommon->itemText(i)), "%lf",
518
+                  &com_fpsd);
519
+
520
+           if (com_fpsd > max_fpsd) {
521
+               SetComboItemEnabled(ui->fpsCommon, i, false);
522
+               continue;
523
+           }
524
+       }
525
+
526
+       ui->fpsType->setCurrentIndex(0);
527
+       ui->fpsCommon->setCurrentIndex(closest_fps_index);
528
+       if (!valid) {
529
+           ui->fpsType->setProperty("changed", true);
530
+           ui->fpsCommon->setProperty("changed", true);
531
+           videoChanged = true;
532
+           EnableApplyButton(true);
533
+       }
534
+   } else {
535
+       for (int i = 0; i < ui->fpsCommon->count(); i++)
536
+           SetComboItemEnabled(ui->fpsCommon, i, true);
537
+   }
538
+
539
+   SetComboItemEnabled(ui->fpsType, 1, !max_fps);
540
+   SetComboItemEnabled(ui->fpsType, 2, !max_fps);
541
+
542
+   /* ------------------------------------ */
543
+
544
+   lastIgnoreRecommended = (int)ignoreRecommended;
545
+   lastServiceIdx = idx;
546
+}
547
obs-studio-26.0.2.tar.xz/UI/window-basic-settings.cpp -> obs-studio-26.1.0.tar.xz/UI/window-basic-settings.cpp Changed
349
 
1
@@ -425,6 +425,7 @@
2
    HookWidget(ui->useAuth,              CHECK_CHANGED,  STREAM1_CHANGED);
3
    HookWidget(ui->authUsername,         EDIT_CHANGED,   STREAM1_CHANGED);
4
    HookWidget(ui->authPw,               EDIT_CHANGED,   STREAM1_CHANGED);
5
+   HookWidget(ui->ignoreRecommended,    CHECK_CHANGED,  STREAM1_CHANGED);
6
    HookWidget(ui->outputMode,           COMBO_CHANGED,  OUTPUTS_CHANGED);
7
    HookWidget(ui->simpleOutputPath,     EDIT_CHANGED,   OUTPUTS_CHANGED);
8
    HookWidget(ui->simpleNoSpace,        CHECK_CHANGED,  OUTPUTS_CHANGED);
9
@@ -433,7 +434,6 @@
10
    HookWidget(ui->simpleOutStrEncoder,  COMBO_CHANGED,  OUTPUTS_CHANGED);
11
    HookWidget(ui->simpleOutputABitrate, COMBO_CHANGED,  OUTPUTS_CHANGED);
12
    HookWidget(ui->simpleOutAdvanced,    CHECK_CHANGED,  OUTPUTS_CHANGED);
13
-   HookWidget(ui->simpleOutEnforce,     CHECK_CHANGED,  OUTPUTS_CHANGED);
14
    HookWidget(ui->simpleOutPreset,      COMBO_CHANGED,  OUTPUTS_CHANGED);
15
    HookWidget(ui->simpleOutCustom,      EDIT_CHANGED,   OUTPUTS_CHANGED);
16
    HookWidget(ui->simpleOutRecQuality,  COMBO_CHANGED,  OUTPUTS_CHANGED);
17
@@ -451,7 +451,6 @@
18
    HookWidget(ui->advOutTrack4,         CHECK_CHANGED,  OUTPUTS_CHANGED);
19
    HookWidget(ui->advOutTrack5,         CHECK_CHANGED,  OUTPUTS_CHANGED);
20
    HookWidget(ui->advOutTrack6,         CHECK_CHANGED,  OUTPUTS_CHANGED);
21
-   HookWidget(ui->advOutApplyService,   CHECK_CHANGED,  OUTPUTS_CHANGED);
22
    HookWidget(ui->advOutRecType,        COMBO_CHANGED,  OUTPUTS_CHANGED);
23
    HookWidget(ui->advOutRecPath,        EDIT_CHANGED,   OUTPUTS_CHANGED);
24
    HookWidget(ui->advOutNoSpace,        CHECK_CHANGED,  OUTPUTS_CHANGED);
25
@@ -755,7 +754,7 @@
26
        this, SLOT(SimpleRecordingEncoderChanged()));
27
    connect(ui->simpleOutAdvanced, SIGNAL(toggled(bool)), this,
28
        SLOT(SimpleRecordingEncoderChanged()));
29
-   connect(ui->simpleOutEnforce, SIGNAL(toggled(bool)), this,
30
+   connect(ui->ignoreRecommended, SIGNAL(toggled(bool)), this,
31
        SLOT(SimpleRecordingEncoderChanged()));
32
    connect(ui->simpleReplayBuf, SIGNAL(toggled(bool)), this,
33
        SLOT(SimpleReplayBufferChanged()));
34
@@ -817,6 +816,56 @@
35
    InitStreamPage();
36
    LoadSettings(false);
37
 
38
+   ui->advOutTrack1->setAccessibleName(
39
+       QTStr("Basic.Settings.Output.Adv.Audio.Track1"));
40
+   ui->advOutTrack2->setAccessibleName(
41
+       QTStr("Basic.Settings.Output.Adv.Audio.Track2"));
42
+   ui->advOutTrack3->setAccessibleName(
43
+       QTStr("Basic.Settings.Output.Adv.Audio.Track3"));
44
+   ui->advOutTrack4->setAccessibleName(
45
+       QTStr("Basic.Settings.Output.Adv.Audio.Track4"));
46
+   ui->advOutTrack5->setAccessibleName(
47
+       QTStr("Basic.Settings.Output.Adv.Audio.Track5"));
48
+   ui->advOutTrack6->setAccessibleName(
49
+       QTStr("Basic.Settings.Output.Adv.Audio.Track6"));
50
+
51
+   ui->advOutRecTrack1->setAccessibleName(
52
+       QTStr("Basic.Settings.Output.Adv.Audio.Track1"));
53
+   ui->advOutRecTrack2->setAccessibleName(
54
+       QTStr("Basic.Settings.Output.Adv.Audio.Track2"));
55
+   ui->advOutRecTrack3->setAccessibleName(
56
+       QTStr("Basic.Settings.Output.Adv.Audio.Track3"));
57
+   ui->advOutRecTrack4->setAccessibleName(
58
+       QTStr("Basic.Settings.Output.Adv.Audio.Track4"));
59
+   ui->advOutRecTrack5->setAccessibleName(
60
+       QTStr("Basic.Settings.Output.Adv.Audio.Track5"));
61
+   ui->advOutRecTrack6->setAccessibleName(
62
+       QTStr("Basic.Settings.Output.Adv.Audio.Track6"));
63
+
64
+   ui->advOutFFTrack1->setAccessibleName(
65
+       QTStr("Basic.Settings.Output.Adv.Audio.Track1"));
66
+   ui->advOutFFTrack2->setAccessibleName(
67
+       QTStr("Basic.Settings.Output.Adv.Audio.Track2"));
68
+   ui->advOutFFTrack3->setAccessibleName(
69
+       QTStr("Basic.Settings.Output.Adv.Audio.Track3"));
70
+   ui->advOutFFTrack4->setAccessibleName(
71
+       QTStr("Basic.Settings.Output.Adv.Audio.Track4"));
72
+   ui->advOutFFTrack5->setAccessibleName(
73
+       QTStr("Basic.Settings.Output.Adv.Audio.Track5"));
74
+   ui->advOutFFTrack6->setAccessibleName(
75
+       QTStr("Basic.Settings.Output.Adv.Audio.Track6"));
76
+
77
+   ui->snappingEnabled->setAccessibleName(
78
+       QTStr("Basic.Settings.General.Snapping"));
79
+   ui->systemTrayEnabled->setAccessibleName(
80
+       QTStr("Basic.Settings.General.SysTray"));
81
+   ui->label_31->setAccessibleName(
82
+       QTStr("Basic.Settings.Output.Adv.Recording.RecType"));
83
+   ui->streamDelayEnable->setAccessibleName(
84
+       QTStr("Basic.Settings.Advanced.StreamDelay"));
85
+   ui->reconnectEnable->setAccessibleName(
86
+       QTStr("Basic.Settings.Output.Reconnect"));
87
+
88
    // Add warning checks to advanced output recording section controls
89
    connect(ui->advOutRecTrack1, SIGNAL(clicked()), this,
90
        SLOT(AdvOutRecCheckWarnings()));
91
@@ -1349,7 +1398,8 @@
92
 
93
 static const size_t numVals = sizeof(vals) / sizeof(double);
94
 
95
-void OBSBasicSettings::ResetDownscales(uint32_t cx, uint32_t cy)
96
+void OBSBasicSettings::ResetDownscales(uint32_t cx, uint32_t cy,
97
+                      bool ignoreAllSignals)
98
 {
99
    QString advRescale;
100
    QString advRecRescale;
101
@@ -1364,9 +1414,17 @@
102
    advRecRescale = ui->advOutRecRescale->lineEdit()->text();
103
    advFFRescale = ui->advOutFFRescale->lineEdit()->text();
104
 
105
-   ui->outputResolution->blockSignals(true);
106
+   bool lockedOutputRes = !ui->outputResolution->isEditable();
107
 
108
-   ui->outputResolution->clear();
109
+   if (!lockedOutputRes) {
110
+       ui->outputResolution->blockSignals(true);
111
+       ui->outputResolution->clear();
112
+   }
113
+   if (ignoreAllSignals) {
114
+       ui->advOutRescale->blockSignals(true);
115
+       ui->advOutRecRescale->blockSignals(true);
116
+       ui->advOutFFRescale->blockSignals(true);
117
+   }
118
    ui->advOutRescale->clear();
119
    ui->advOutRecRescale->clear();
120
    ui->advOutFFRescale->clear();
121
@@ -1393,7 +1451,8 @@
122
 
123
        string res = ResString(downscaleCX, downscaleCY);
124
        string outRes = ResString(outDownscaleCX, outDownscaleCY);
125
-       ui->outputResolution->addItem(res.c_str());
126
+       if (!lockedOutputRes)
127
+           ui->outputResolution->addItem(res.c_str());
128
        ui->advOutRescale->addItem(outRes.c_str());
129
        ui->advOutRecRescale->addItem(outRes.c_str());
130
        ui->advOutFFRescale->addItem(outRes.c_str());
131
@@ -1412,23 +1471,27 @@
132
 
133
    string res = ResString(cx, cy);
134
 
135
-   float baseAspect = float(cx) / float(cy);
136
-   float outputAspect = float(out_cx) / float(out_cy);
137
-
138
-   bool closeAspect = close_float(baseAspect, outputAspect, 0.01f);
139
-   if (closeAspect) {
140
-       ui->outputResolution->lineEdit()->setText(oldOutputRes);
141
-       on_outputResolution_editTextChanged(oldOutputRes);
142
-   } else {
143
-       ui->outputResolution->lineEdit()->setText(bestScale.c_str());
144
-       on_outputResolution_editTextChanged(bestScale.c_str());
145
-   }
146
+   if (!lockedOutputRes) {
147
+       float baseAspect = float(cx) / float(cy);
148
+       float outputAspect = float(out_cx) / float(out_cy);
149
+       bool closeAspect = close_float(baseAspect, outputAspect, 0.01f);
150
+
151
+       if (closeAspect) {
152
+           ui->outputResolution->lineEdit()->setText(oldOutputRes);
153
+           on_outputResolution_editTextChanged(oldOutputRes);
154
+       } else {
155
+           ui->outputResolution->lineEdit()->setText(
156
+               bestScale.c_str());
157
+           on_outputResolution_editTextChanged(bestScale.c_str());
158
+       }
159
 
160
-   ui->outputResolution->blockSignals(false);
161
+       ui->outputResolution->blockSignals(false);
162
 
163
-   if (!closeAspect) {
164
-       ui->outputResolution->setProperty("changed", QVariant(true));
165
-       videoChanged = true;
166
+       if (!closeAspect) {
167
+           ui->outputResolution->setProperty("changed",
168
+                             QVariant(true));
169
+           videoChanged = true;
170
+       }
171
    }
172
 
173
    if (advRescale.isEmpty())
174
@@ -1441,6 +1504,12 @@
175
    ui->advOutRescale->lineEdit()->setText(advRescale);
176
    ui->advOutRecRescale->lineEdit()->setText(advRecRescale);
177
    ui->advOutFFRescale->lineEdit()->setText(advFFRescale);
178
+
179
+   if (ignoreAllSignals) {
180
+       ui->advOutRescale->blockSignals(false);
181
+       ui->advOutRecRescale->blockSignals(false);
182
+       ui->advOutFFRescale->blockSignals(false);
183
+   }
184
 }
185
 
186
 void OBSBasicSettings::LoadDownscaleFilters()
187
@@ -1612,8 +1681,6 @@
188
        config_get_uint(main->Config(), "SimpleOutput", "ABitrate");
189
    bool advanced =
190
        config_get_bool(main->Config(), "SimpleOutput", "UseAdvanced");
191
-   bool enforceBitrate = config_get_bool(main->Config(), "SimpleOutput",
192
-                         "EnforceBitrate");
193
    const char *preset =
194
        config_get_string(main->Config(), "SimpleOutput", "Preset");
195
    const char *qsvPreset =
196
@@ -1662,7 +1729,6 @@
197
               std::to_string(audioBitrate).c_str());
198
 
199
    ui->simpleOutAdvanced->setChecked(advanced);
200
-   ui->simpleOutEnforce->setChecked(enforceBitrate);
201
    ui->simpleOutCustom->setText(custom);
202
 
203
    idx = ui->simpleOutRecQuality->findData(QString(recQual));
204
@@ -1695,10 +1761,7 @@
205
    const char *rescaleRes =
206
        config_get_string(main->Config(), "AdvOut", "RescaleRes");
207
    int trackIndex = config_get_int(main->Config(), "AdvOut", "TrackIndex");
208
-   bool applyServiceSettings = config_get_bool(main->Config(), "AdvOut",
209
-                           "ApplyServiceSettings");
210
 
211
-   ui->advOutApplyService->setChecked(applyServiceSettings);
212
    ui->advOutUseRescale->setChecked(rescale);
213
    ui->advOutRescale->setEnabled(rescale);
214
    ui->advOutRescale->setCurrentText(rescaleRes);
215
@@ -2064,6 +2127,8 @@
216
    if (obs_video_active()) {
217
        ui->outputMode->setEnabled(false);
218
        ui->outputModeLabel->setEnabled(false);
219
+       ui->simpleOutStrEncoderLabel->setEnabled(false);
220
+       ui->simpleOutStrEncoder->setEnabled(false);
221
        ui->simpleRecordingGroupBox->setEnabled(false);
222
        ui->replayBufferGroupBox->setEnabled(false);
223
        ui->advOutTopContainer->setEnabled(false);
224
@@ -3302,7 +3367,6 @@
225
    SaveCheckBox(ui->simpleNoSpace, "SimpleOutput", "FileNameWithoutSpace");
226
    SaveCombo(ui->simpleOutRecFormat, "SimpleOutput", "RecFormat");
227
    SaveCheckBox(ui->simpleOutAdvanced, "SimpleOutput", "UseAdvanced");
228
-   SaveCheckBox(ui->simpleOutEnforce, "SimpleOutput", "EnforceBitrate");
229
    SaveComboData(ui->simpleOutPreset, "SimpleOutput", presetType);
230
    SaveEdit(ui->simpleOutCustom, "SimpleOutput", "x264Settings");
231
    SaveComboData(ui->simpleOutRecQuality, "SimpleOutput", "RecQuality");
232
@@ -3314,7 +3378,6 @@
233
 
234
    curAdvStreamEncoder = GetComboData(ui->advOutEncoder);
235
 
236
-   SaveCheckBox(ui->advOutApplyService, "AdvOut", "ApplyServiceSettings");
237
    SaveComboData(ui->advOutEncoder, "AdvOut", "Encoder");
238
    SaveCheckBox(ui->advOutUseRescale, "AdvOut", "Rescale");
239
    SaveCombo(ui->advOutRescale, "AdvOut", "RescaleRes");
240
@@ -3384,6 +3447,14 @@
241
    SaveEdit(ui->advOutTrack5Name, "AdvOut", "Track5Name");
242
    SaveEdit(ui->advOutTrack6Name, "AdvOut", "Track6Name");
243
 
244
+   if (vodTrackCheckbox) {
245
+       SaveCheckBox(simpleVodTrack, "SimpleOutput", "VodTrackEnabled");
246
+       SaveCheckBox(vodTrackCheckbox, "AdvOut", "VodTrackEnabled");
247
+       SaveTrackIndex(main->Config(), "AdvOut", "VodTrackIndex",
248
+                  vodTrack[0], vodTrack[1], vodTrack[2],
249
+                  vodTrack[3], vodTrack[4], vodTrack[5]);
250
+   }
251
+
252
    SaveCheckBox(ui->advReplayBuf, "AdvOut", "RecRB");
253
    SaveSpinBox(ui->advRBSecMax, "AdvOut", "RecRBTime");
254
    SaveSpinBox(ui->advRBMegsMax, "AdvOut", "RecRBSize");
255
@@ -3867,16 +3938,22 @@
256
 static bool ValidResolutions(Ui::OBSBasicSettings *ui)
257
 {
258
    QString baseRes = ui->baseResolution->lineEdit()->text();
259
-   QString outputRes = ui->outputResolution->lineEdit()->text();
260
    uint32_t cx, cy;
261
 
262
-   if (!ConvertResText(QT_TO_UTF8(baseRes), cx, cy) ||
263
-       !ConvertResText(QT_TO_UTF8(outputRes), cx, cy)) {
264
-
265
+   if (!ConvertResText(QT_TO_UTF8(baseRes), cx, cy)) {
266
        ui->videoMsg->setText(QTStr(INVALID_RES_STR));
267
        return false;
268
    }
269
 
270
+   bool lockedOutRes = !ui->outputResolution->isEditable();
271
+   if (!lockedOutRes) {
272
+       QString outRes = ui->outputResolution->lineEdit()->text();
273
+       if (!ConvertResText(QT_TO_UTF8(outRes), cx, cy)) {
274
+           ui->videoMsg->setText(QTStr(INVALID_RES_STR));
275
+           return false;
276
+       }
277
+   }
278
+
279
    ui->videoMsg->setText("");
280
    return true;
281
 }
282
@@ -4458,9 +4535,13 @@
283
    switch (ui->outputMode->currentIndex()) {
284
    case 0:
285
        state = ui->simpleReplayBuf->isChecked();
286
+       ui->simpleReplayBuf->setEnabled(
287
+           !obs_frontend_replay_buffer_active());
288
        break;
289
    case 1:
290
        state = ui->advReplayBuf->isChecked();
291
+       ui->advReplayBuf->setEnabled(
292
+           !obs_frontend_replay_buffer_active());
293
        break;
294
    }
295
    ui->replayWhileStreaming->setEnabled(state);
296
@@ -4589,15 +4670,8 @@
297
 {
298
    QString qual = ui->simpleOutRecQuality->currentData().toString();
299
    QString warning;
300
-   bool advanced = ui->simpleOutAdvanced->isChecked();
301
-   bool enforceBitrate = ui->simpleOutEnforce->isChecked() || !advanced;
302
-   OBSService service;
303
-
304
-   if (stream1Changed) {
305
-       service = SpawnTempService();
306
-   } else {
307
-       service = main->GetService();
308
-   }
309
+   bool enforceBitrate = !ui->ignoreRecommended->isChecked();
310
+   OBSService service = GetStream1Service();
311
 
312
    delete simpleOutRecWarning;
313
 
314
@@ -4851,3 +4925,34 @@
315
 
316
    return 0;
317
 }
318
+
319
+/* Using setEditable(true) on a QComboBox when there's a custom style in use
320
+ * does not work properly, so instead completely recreate the widget, which
321
+ * seems to work fine. */
322
+void OBSBasicSettings::RecreateOutputResolutionWidget()
323
+{
324
+   QSizePolicy sizePolicy = ui->outputResolution->sizePolicy();
325
+   bool changed = WidgetChanged(ui->outputResolution);
326
+
327
+   delete ui->outputResolution;
328
+   ui->outputResolution = new QComboBox(ui->videoPage);
329
+   ui->outputResolution->setObjectName(
330
+       QString::fromUtf8("outputResolution"));
331
+   ui->outputResolution->setSizePolicy(sizePolicy);
332
+   ui->outputResolution->setEditable(true);
333
+   ui->outputResolution->setProperty("changed", changed);
334
+   ui->outputResLabel->setBuddy(ui->outputResolution);
335
+
336
+   ui->outputResLayout->insertWidget(0, ui->outputResolution);
337
+
338
+   QWidget::setTabOrder(ui->baseResolution, ui->outputResolution);
339
+   QWidget::setTabOrder(ui->outputResolution, ui->downscaleFilter);
340
+
341
+   HookWidget(ui->outputResolution, CBEDIT_CHANGED, VIDEO_RES);
342
+
343
+   connect(ui->outputResolution, &QComboBox::editTextChanged, this,
344
+       &OBSBasicSettings::on_outputResolution_editTextChanged);
345
+
346
+   ui->outputResolution->lineEdit()->setValidator(
347
+       ui->baseResolution->lineEdit()->validator());
348
+}
349
obs-studio-26.0.2.tar.xz/UI/window-basic-settings.hpp -> obs-studio-26.1.0.tar.xz/UI/window-basic-settings.hpp Changed
75
 
1
@@ -32,6 +32,7 @@
2
 
3
 class OBSBasic;
4
 class QAbstractButton;
5
+class QRadioButton;
6
 class QComboBox;
7
 class QCheckBox;
8
 class QLabel;
9
@@ -121,6 +122,8 @@
10
    int channelIndex = 0;
11
 
12
    int lastSimpleRecQualityIdx = 0;
13
+   int lastServiceIdx = -1;
14
+   int lastIgnoreRecommended = -1;
15
    int lastChannelSetupIdx = 0;
16
 
17
    OBSFFFormatDesc formats;
18
@@ -156,6 +159,12 @@
19
    uint32_t outputCX = 0;
20
    uint32_t outputCY = 0;
21
 
22
+   QPointer<QCheckBox> simpleVodTrack;
23
+
24
+   QPointer<QCheckBox> vodTrackCheckbox;
25
+   QPointer<QWidget> vodTrackContainer;
26
+   QPointer<QRadioButton> vodTrack[MAX_AUDIO_MIXES];
27
+
28
    void SaveCombo(QComboBox *widget, const char *section,
29
               const char *value);
30
    void SaveComboData(QComboBox *widget, const char *section,
31
@@ -170,6 +179,11 @@
32
    void SaveEncoder(QComboBox *combo, const char *section,
33
             const char *value);
34
 
35
+   bool ResFPSValid(obs_service_resolution *res_list, size_t res_count,
36
+            int max_fps);
37
+   void ClosestResFPS(obs_service_resolution *res_list, size_t res_count,
38
+              int max_fps, int &new_cx, int &new_cy, int &new_fps);
39
+
40
    inline bool Changed() const
41
    {
42
        return generalChanged || outputsChanged || stream1Changed ||
43
@@ -239,6 +253,12 @@
44
 private slots:
45
    void UpdateServerList();
46
    void UpdateKeyLink();
47
+   void UpdateVodTrackSetting();
48
+   void UpdateServiceRecommendations();
49
+   void RecreateOutputResolutionWidget();
50
+   void UpdateResFPSLimits();
51
+   void UpdateMoreInfoLink();
52
+   void DisplayEnforceWarning(bool checked);
53
    void on_show_clicked();
54
    void on_authPwShow_clicked();
55
    void on_connectAccount_clicked();
56
@@ -266,7 +286,8 @@
57
 
58
    /* video */
59
    void LoadRendererList();
60
-   void ResetDownscales(uint32_t cx, uint32_t cy);
61
+   void ResetDownscales(uint32_t cx, uint32_t cy,
62
+                bool ignoreAllSignals = false);
63
    void LoadDownscaleFilters();
64
    void LoadResolutionLists();
65
    void LoadFPSData();
66
@@ -309,6 +330,8 @@
67
 
68
    int CurrentFLVTrack();
69
 
70
+   OBSService GetStream1Service();
71
+
72
 private slots:
73
    void on_theme_activated(int idx);
74
 
75
obs-studio-26.0.2.tar.xz/UI/window-basic-stats.cpp -> obs-studio-26.1.0.tar.xz/UI/window-basic-stats.cpp Changed
83
 
1
@@ -32,6 +32,22 @@
2
    }
3
 }
4
 
5
+static QString MakeTimeLeftText(int hours, int minutes)
6
+{
7
+   return QString::asprintf("%d %s, %d %s", hours,
8
+                QT_TO_UTF8(QTStr("Hours")), minutes,
9
+                QT_TO_UTF8(QTStr("Minutes")));
10
+}
11
+
12
+static QString MakeMissedFramesText(uint32_t total_lagged,
13
+                   uint32_t total_rendered, long double num)
14
+{
15
+   return QString("%1 / %2 (%3%)")
16
+       .arg(QString::number(total_lagged),
17
+            QString::number(total_rendered),
18
+            QString::number(num, 'f', 1));
19
+}
20
+
21
 OBSBasicStats::OBSBasicStats(QWidget *parent, bool closeable)
22
    : QWidget(parent),
23
      cpu_info(os_cpu_usage_info_start()),
24
@@ -65,6 +81,10 @@
25
    recordTimeLeft = new QLabel(this);
26
    memUsage = new QLabel(this);
27
 
28
+   QString str = MakeTimeLeftText(99999, 59);
29
+   int textWidth = recordTimeLeft->fontMetrics().boundingRect(str).width();
30
+   recordTimeLeft->setMinimumWidth(textWidth);
31
+
32
    newStat("CPUUsage", cpuUsage, 0);
33
    newStat("HDDSpaceAvailable", hddSpace, 0);
34
    newStat("DiskFullIn", recordTimeLeft, 0);
35
@@ -74,6 +94,11 @@
36
    renderTime = new QLabel(this);
37
    skippedFrames = new QLabel(this);
38
    missedFrames = new QLabel(this);
39
+
40
+   str = MakeMissedFramesText(999999, 999999, 99.99);
41
+   textWidth = missedFrames->fontMetrics().boundingRect(str).width();
42
+   missedFrames->setMinimumWidth(textWidth);
43
+
44
    row = 0;
45
 
46
    newStatBare("FPS", fps, 2);
47
@@ -145,7 +170,12 @@
48
    resize(800, 280);
49
 
50
    setWindowTitle(QTStr("Basic.Stats"));
51
+#ifdef __APPLE__
52
+   setWindowIcon(
53
+       QIcon::fromTheme("obs", QIcon(":/res/images/obs_256x256.png")));
54
+#else
55
    setWindowIcon(QIcon::fromTheme("obs", QIcon(":/res/images/obs.png")));
56
+#endif
57
 
58
    setWindowModality(Qt::NonModal);
59
    setAttribute(Qt::WA_DeleteOnClose, true);
60
@@ -388,10 +418,7 @@
61
              : 0.0l;
62
    num *= 100.0l;
63
 
64
-   str = QString("%1 / %2 (%3%)")
65
-             .arg(QString::number(total_lagged),
66
-              QString::number(total_rendered),
67
-              QString::number(num, 'f', 1));
68
+   str = MakeMissedFramesText(total_lagged, total_rendered, num);
69
    missedFrames->setText(str);
70
 
71
    if (num > 5.0l)
72
@@ -445,9 +472,7 @@
73
    int minutes = totalMinutes % 60;
74
    int hours = totalMinutes / 60;
75
 
76
-   QString text = QString::asprintf("%d %s, %d %s", hours,
77
-                    QT_TO_UTF8(QTStr("Hours")), minutes,
78
-                    QT_TO_UTF8(QTStr("Minutes")));
79
+   QString text = MakeTimeLeftText(hours, minutes);
80
    recordTimeLeft->setText(text);
81
    recordTimeLeft->setMinimumWidth(recordTimeLeft->width());
82
 }
83
obs-studio-26.0.2.tar.xz/UI/window-basic-status-bar.cpp -> obs-studio-26.1.0.tar.xz/UI/window-basic-status-bar.cpp Changed
12
 
1
@@ -521,9 +521,8 @@
2
 
3
 void OBSBasicStatusBar::RecordingPaused()
4
 {
5
-   QString text = QStringLiteral("REC: PAUSED");
6
+   QString text = recordTime->text() + QStringLiteral(" (PAUSED)");
7
    recordTime->setText(text);
8
-   recordTime->setMinimumWidth(recordTime->width());
9
 
10
    if (recordOutput) {
11
        recordIcon->setPixmap(recordingPausePixmap);
12
obs-studio-26.0.2.tar.xz/UI/window-importer.cpp -> obs-studio-26.1.0.tar.xz/UI/window-importer.cpp Changed
40
 
1
@@ -577,11 +577,13 @@
2
            json11::Json::object out = res.object_items();
3
            QString file = res["name"].string_value().c_str();
4
 
5
+           file.replace(" ", "_");
6
+           file.replace("/", "_");
7
            bool safe = !CheckConfigExists(dst, file);
8
            int x = 1;
9
            while (!safe) {
10
                file = name;
11
-               file += " (";
12
+               file += "_(";
13
                file += QString::number(x);
14
                file += ")";
15
 
16
@@ -593,13 +595,20 @@
17
 
18
            std::string save = dst;
19
            save += "/";
20
-           save += file.replace(" ", "_").toStdString();
21
+           save += file.toStdString();
22
            save += ".json";
23
 
24
            std::string out_str = json11::Json(out).dump();
25
 
26
-           os_quick_write_utf8_file(save.c_str(), out_str.c_str(),
27
-                        out_str.size(), false);
28
+           bool success = os_quick_write_utf8_file(save.c_str(),
29
+                               out_str.c_str(),
30
+                               out_str.size(),
31
+                               false);
32
+
33
+           blog(LOG_INFO, "Import Scene Collection: %s (%s) - %s",
34
+                name.toStdString().c_str(),
35
+                file.toStdString().c_str(),
36
+                success ? "SUCCESS" : "FAILURE");
37
        }
38
    }
39
 
40
obs-studio-26.0.2.tar.xz/UI/window-namedialog.cpp -> obs-studio-26.1.0.tar.xz/UI/window-namedialog.cpp Changed
123
 
1
@@ -17,17 +17,37 @@
2
 
3
 #include "window-namedialog.hpp"
4
 #include "qt-wrappers.hpp"
5
-#include "ui_NameDialog.h"
6
 #include "obs-app.hpp"
7
 
8
-using namespace std;
9
+#include <QVBoxLayout>
10
 
11
-NameDialog::NameDialog(QWidget *parent)
12
-   : QDialog(parent), ui(new Ui::NameDialog)
13
+NameDialog::NameDialog(QWidget *parent) : QDialog(parent)
14
 {
15
-   ui->setupUi(this);
16
-
17
    installEventFilter(CreateShortcutFilter());
18
+   setModal(true);
19
+   setWindowModality(Qt::WindowModality::WindowModal);
20
+   setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
21
+   setFixedWidth(555);
22
+   setMinimumHeight(100);
23
+   QVBoxLayout *layout = new QVBoxLayout;
24
+   setLayout(layout);
25
+
26
+   label = new QLabel(this);
27
+   layout->addWidget(label);
28
+   label->setText("Set Text");
29
+
30
+   userText = new QLineEdit(this);
31
+   layout->addWidget(userText);
32
+
33
+   checkbox = new QCheckBox(this);
34
+   layout->addWidget(checkbox);
35
+
36
+   QDialogButtonBox *buttonbox = new QDialogButtonBox(
37
+       QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
38
+   layout->addWidget(buttonbox);
39
+   buttonbox->setCenterButtons(true);
40
+   connect(buttonbox, &QDialogButtonBox::accepted, this, &QDialog::accept);
41
+   connect(buttonbox, &QDialogButtonBox::rejected, this, &QDialog::reject);
42
 }
43
 
44
 static bool IsWhitespace(char ch)
45
@@ -35,8 +55,16 @@
46
    return ch == ' ' || ch == '\t';
47
 }
48
 
49
+static void CleanWhitespace(std::string &str)
50
+{
51
+   while (str.size() && IsWhitespace(str.back()))
52
+       str.erase(str.end() - 1);
53
+   while (str.size() && IsWhitespace(str.front()))
54
+       str.erase(str.begin());
55
+}
56
+
57
 bool NameDialog::AskForName(QWidget *parent, const QString &title,
58
-               const QString &text, string &str,
59
+               const QString &text, std::string &userTextInput,
60
                const QString &placeHolder, int maxSize)
61
 {
62
    if (maxSize <= 0 || maxSize > 32767)
63
@@ -44,22 +72,43 @@
64
 
65
    NameDialog dialog(parent);
66
    dialog.setWindowTitle(title);
67
-   dialog.setWindowFlags(dialog.windowFlags() &
68
-                 ~Qt::WindowContextHelpButtonHint);
69
-   dialog.ui->label->setText(text);
70
-   dialog.ui->userText->setMaxLength(maxSize);
71
-   dialog.ui->userText->setText(placeHolder);
72
-   dialog.ui->userText->selectAll();
73
-
74
-   bool accepted = (dialog.exec() == DialogCode::Accepted);
75
-   if (accepted) {
76
-       str = QT_TO_UTF8(dialog.ui->userText->text());
77
-
78
-       while (str.size() && IsWhitespace(str.back()))
79
-           str.erase(str.end() - 1);
80
-       while (str.size() && IsWhitespace(str.front()))
81
-           str.erase(str.begin());
82
+
83
+   dialog.checkbox->setHidden(true);
84
+   dialog.label->setText(text);
85
+   dialog.userText->setMaxLength(maxSize);
86
+   dialog.userText->setText(placeHolder);
87
+   dialog.userText->selectAll();
88
+
89
+   if (dialog.exec() != DialogCode::Accepted) {
90
+       return false;
91
+   }
92
+   userTextInput = dialog.userText->text().toUtf8().constData();
93
+   CleanWhitespace(userTextInput);
94
+   return true;
95
+}
96
+
97
+bool NameDialog::AskForNameWithOption(QWidget *parent, const QString &title,
98
+                     const QString &text,
99
+                     std::string &userTextInput,
100
+                     const QString &optionLabel,
101
+                     bool &optionChecked,
102
+                     const QString &placeHolder)
103
+{
104
+   NameDialog dialog(parent);
105
+   dialog.setWindowTitle(title);
106
+
107
+   dialog.label->setText(text);
108
+   dialog.userText->setMaxLength(170);
109
+   dialog.userText->setText(placeHolder);
110
+   dialog.checkbox->setText(optionLabel);
111
+   dialog.checkbox->setChecked(optionChecked);
112
+
113
+   if (dialog.exec() != DialogCode::Accepted) {
114
+       return false;
115
    }
116
 
117
-   return accepted;
118
+   userTextInput = dialog.userText->text().toUtf8().constData();
119
+   CleanWhitespace(userTextInput);
120
+   optionChecked = dialog.checkbox->isChecked();
121
+   return true;
122
 }
123
obs-studio-26.0.2.tar.xz/UI/window-namedialog.hpp -> obs-studio-26.1.0.tar.xz/UI/window-namedialog.hpp Changed
45
 
1
@@ -18,22 +18,37 @@
2
 #pragma once
3
 
4
 #include <QDialog>
5
+#include <QLabel>
6
+#include <QLineEdit>
7
+#include <QCheckBox>
8
+#include <QDialogButtonBox>
9
 #include <string>
10
 #include <memory>
11
 
12
-#include "ui_NameDialog.h"
13
-
14
 class NameDialog : public QDialog {
15
    Q_OBJECT
16
 
17
-private:
18
-   std::unique_ptr<Ui::NameDialog> ui;
19
-
20
 public:
21
    NameDialog(QWidget *parent);
22
 
23
+   // Returns true if user clicks OK, false otherwise
24
+   // userTextInput returns string that user typed into dialog
25
    static bool AskForName(QWidget *parent, const QString &title,
26
-                  const QString &text, std::string &str,
27
+                  const QString &text, std::string &userTextInput,
28
                   const QString &placeHolder = QString(""),
29
                   int maxSize = 170);
30
+
31
+   // Returns true if user clicks OK, false otherwise
32
+   // userTextInput returns string that user typed into dialog
33
+   // userOptionReturn the checkbox was ticked user accepted
34
+   static bool
35
+   AskForNameWithOption(QWidget *parent, const QString &title,
36
+                const QString &text, std::string &userTextInput,
37
+                const QString &optionLabel, bool &optionChecked,
38
+                const QString &placeHolder = QString(""));
39
+
40
+private:
41
+   QLabel *label;
42
+   QLineEdit *userText;
43
+   QCheckBox *checkbox;
44
 };
45
obs-studio-26.0.2.tar.xz/UI/window-projector.cpp -> obs-studio-26.1.0.tar.xz/UI/window-projector.cpp Changed
15
 
1
@@ -31,8 +31,12 @@
2
        setWindowFlags(Qt::WindowStaysOnTopHint);
3
 
4
    type = type_;
5
-
6
+#ifdef __APPLE__
7
+   setWindowIcon(
8
+       QIcon::fromTheme("obs", QIcon(":/res/images/obs_256x256.png")));
9
+#else
10
    setWindowIcon(QIcon::fromTheme("obs", QIcon(":/res/images/obs.png")));
11
+#endif
12
 
13
    if (monitor == -1)
14
        resize(480, 270);
15
obs-studio-26.0.2.tar.xz/cmake/Modules/CopyMSVCBins.cmake -> obs-studio-26.1.0.tar.xz/cmake/Modules/CopyMSVCBins.cmake Changed
28
 
1
@@ -70,6 +70,10 @@
2
 
3
    "${FFMPEG_avcodec_INCLUDE_DIR}/../bin/libmbedcrypto*.dll"
4
    "${FFMPEG_avcodec_INCLUDE_DIR}/bin/libmbedcrypto*.dll"
5
+   "${FFMPEG_avcodec_INCLUDE_DIR}/../bin/libmbedtls*.dll"
6
+   "${FFMPEG_avcodec_INCLUDE_DIR}/bin/libmbedtls*.dll"
7
+   "${FFMPEG_avcodec_INCLUDE_DIR}/../bin/libmbedx509*.dll"
8
+   "${FFMPEG_avcodec_INCLUDE_DIR}/bin/libmbedx509*.dll"
9
 
10
    "${FFMPEG_avcodec_INCLUDE_DIR}/../bin${_bin_suffix}/libopus*.dll"
11
    "${FFMPEG_avcodec_INCLUDE_DIR}/../bin${_bin_suffix}/opus*.dll"
12
@@ -159,6 +163,7 @@
13
    "${Qt5Core_DIR}/../../../bin/Qt5Widgetsd.dll"
14
    "${Qt5Core_DIR}/../../../bin/Qt5Svgd.dll"
15
    "${Qt5Core_DIR}/../../../bin/Qt5Xmld.dll"
16
+   "${Qt5Core_DIR}/../../../bin/Qt5Networkd.dll"
17
    "${Qt5Core_DIR}/../../../bin/libGLESv2d.dll"
18
    "${Qt5Core_DIR}/../../../bin/libEGLd.dll")
19
 file(GLOB QT_DEBUG_PLAT_BIN_FILES
20
@@ -177,6 +182,7 @@
21
    "${Qt5Core_DIR}/../../../bin/Qt5Widgets.dll"
22
    "${Qt5Core_DIR}/../../../bin/Qt5Svg.dll"
23
    "${Qt5Core_DIR}/../../../bin/Qt5Xml.dll"
24
+   "${Qt5Core_DIR}/../../../bin/Qt5Network.dll"
25
    "${Qt5Core_DIR}/../../../bin/libGLESv2.dll"
26
    "${Qt5Core_DIR}/../../../bin/libEGL.dll")
27
 file(GLOB QT_PLAT_BIN_FILES
28
obs-studio-26.1.0.tar.xz/cmake/Modules/FindSndio.cmake Added
73
 
1
@@ -0,0 +1,71 @@
2
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
3
+# file Copyright.txt or https://cmake.org/licensing for details.
4
+
5
+#[=======================================================================[.rst:
6
+FindSndio
7
+-------
8
+
9
+Finds the Sndio library.
10
+
11
+Imported Targets
12
+^^^^^^^^^^^^^^^^
13
+
14
+This module provides the following imported targets, if found:
15
+
16
+``Sndio::Sndio``
17
+  The Sndio library
18
+
19
+Result Variables
20
+^^^^^^^^^^^^^^^^
21
+
22
+This will define the following variables:
23
+
24
+``Sndio_FOUND``
25
+  True if the system has the Sndio library.
26
+``Sndio_VERSION``
27
+  The version of the Sndio library which was found.
28
+``Sndio_INCLUDE_DIRS``
29
+  Include directories needed to use Sndio.
30
+``Sndio_LIBRARIES``
31
+  Libraries needed to link to Sndio.
32
+
33
+Cache Variables
34
+^^^^^^^^^^^^^^^
35
+
36
+The following cache variables may also be set:
37
+
38
+``Sndio_INCLUDE_DIR``
39
+  The directory containing ``sndio.h``.
40
+``Sndio_LIBRARY``
41
+  The path to the Sndio library.
42
+
43
+#]=======================================================================]
44
+
45
+find_path(Sndio_INCLUDE_DIR sndio.h)
46
+find_library(Sndio_LIBRARY sndio)
47
+
48
+include(FindPackageHandleStandardArgs)
49
+find_package_handle_standard_args(Sndio
50
+  FOUND_VAR Sndio_FOUND
51
+  REQUIRED_VARS
52
+    Sndio_LIBRARY
53
+    Sndio_INCLUDE_DIR
54
+)
55
+
56
+if(Sndio_FOUND)
57
+  set(Sndio_LIBRARIES ${Sndio_LIBRARY})
58
+  set(Sndio_INCLUDE_DIRS ${Sndio_INCLUDE_DIR})
59
+endif()
60
+
61
+if(Sndio_FOUND AND NOT TARGET Sndio::Sndio)
62
+  add_library(Sndio::Sndio UNKNOWN IMPORTED)
63
+  set_target_properties(Sndio::Sndio PROPERTIES
64
+    IMPORTED_LOCATION "${Sndio_LIBRARY}"
65
+    INTERFACE_INCLUDE_DIRECTORIES "${Sndio_INCLUDE_DIR}"
66
+  )
67
+endif()
68
+
69
+mark_as_advanced(
70
+  Sndio_INCLUDE_DIR
71
+  Sndio_LIBRARY
72
+)
73
obs-studio-26.0.2.tar.xz/deps/CMakeLists.txt -> obs-studio-26.1.0.tar.xz/deps/CMakeLists.txt Changed
12
 
1
@@ -19,9 +19,7 @@
2
    add_subdirectory(lzma)
3
 endif()
4
 
5
-if(BUILD_CAPTIONS)
6
-   add_subdirectory(libcaption)
7
-endif()
8
+add_subdirectory(libcaption)
9
 
10
 find_package(Jansson 2.5 QUIET)
11
 
12
obs-studio-26.0.2.tar.xz/deps/json11/json11.cpp -> obs-studio-26.1.0.tar.xz/deps/json11/json11.cpp Changed
25
 
1
@@ -441,9 +441,9 @@
2
      */
3
     char get_next_token() {
4
         consume_garbage();
5
-        if (failed) return (char)0;
6
+        if (failed) return static_cast<char>(0);
7
         if (i == str.size())
8
-            return fail("unexpected end of input", (char)0);
9
+            return fail("unexpected end of input", static_cast<char>(0));
10
 
11
         return str[i++];
12
     }
13
@@ -775,8 +775,10 @@
14
         return false;
15
     }
16
 
17
+    const auto& obj_items = object_items();
18
     for (auto & item : types) {
19
-        if ((*this)[item.first].type() != item.second) {
20
+        const auto it = obj_items.find(item.first);
21
+        if (it == obj_items.cend() || it->second.type() != item.second) {
22
             err = "bad type for " + item.first + " in " + dump();
23
             return false;
24
         }
25
obs-studio-26.0.2.tar.xz/deps/media-playback/media-playback/decode.c -> obs-studio-26.1.0.tar.xz/deps/media-playback/media-playback/decode.c Changed
19
 
1
@@ -246,14 +246,14 @@
2
 static inline int64_t get_estimated_duration(struct mp_decode *d,
3
                         int64_t last_pts)
4
 {
5
-   if (last_pts)
6
-       return d->frame_pts - last_pts;
7
-
8
    if (d->audio) {
9
        return av_rescale_q(d->in_frame->nb_samples,
10
                    (AVRational){1, d->in_frame->sample_rate},
11
                    (AVRational){1, 1000000000});
12
    } else {
13
+       if (last_pts)
14
+           return d->frame_pts - last_pts;
15
+
16
        if (d->last_duration)
17
            return d->last_duration;
18
 
19
obs-studio-26.0.2.tar.xz/deps/obs-scripting/CMakeLists.txt -> obs-studio-26.1.0.tar.xz/deps/obs-scripting/CMakeLists.txt Changed
12
 
1
@@ -87,10 +87,6 @@
2
    include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/UI/obs-frontend-api")
3
 endif()
4
 
5
-IF(BUILD_CAPTIONS)
6
-   string(TOUPPER "${BUILD_CAPTIONS}" BUILD_CAPTIONS)
7
-endif()
8
-
9
 configure_file(
10
    "${CMAKE_CURRENT_SOURCE_DIR}/obs-scripting-config.h.in"
11
    "${CMAKE_CURRENT_BINARY_DIR}/obs-scripting-config.h")
12
obs-studio-26.0.2.tar.xz/deps/obs-scripting/obs-scripting-config.h.in -> obs-studio-26.1.0.tar.xz/deps/obs-scripting/obs-scripting-config.h.in Changed
6
 
1
@@ -21,4 +21,3 @@
2
 #define COMPILE_LUA    @LUAJIT_FOUND@
3
 #define COMPILE_PYTHON @PYTHON_FOUND@
4
 #define UI_ENABLED     @UI_ENABLED@
5
-#define BUILD_CAPTIONS @BUILD_CAPTIONS@
6
obs-studio-26.0.2.tar.xz/deps/obs-scripting/obs-scripting-lua.c -> obs-studio-26.1.0.tar.xz/deps/obs-scripting/obs-scripting-lua.c Changed
10
 
1
@@ -456,7 +456,7 @@
2
        const char *cb_signal =
3
            calldata_string(&cb->base.extra, "signal");
4
 
5
-       if (cb_signal && strcmp(signal, cb_signal) != 0 &&
6
+       if (cb_signal && strcmp(signal, cb_signal) == 0 &&
7
            handler == cb_handler)
8
            break;
9
 
10
obs-studio-26.0.2.tar.xz/docs/sphinx/reference-frontend-api.rst -> obs-studio-26.1.0.tar.xz/docs/sphinx/reference-frontend-api.rst Changed
21
 
1
@@ -105,6 +105,10 @@
2
 
3
      Triggered when the replay buffer has fully stopped.
4
 
5
+   - **OBS_FRONTEND_EVENT_REPLAY_BUFFER_SAVED**
6
+
7
+     Triggered when the replay buffer has been saved.
8
+
9
    - **OBS_FRONTEND_EVENT_STUDIO_MODE_ENABLED**
10
 
11
      Triggered when the user has turned on studio mode.
12
@@ -124,7 +128,7 @@
13
      the program is either about to load a new scene collection, or the
14
      program is about to exit.
15
 
16
-   - **OBS_FRONTEND_FINISHED_LOADING**
17
+   - **OBS_FRONTEND_EVENT_FINISHED_LOADING**
18
 
19
      Triggered when the program has finished loading.
20
 
21
obs-studio-26.0.2.tar.xz/docs/sphinx/reference-scenes.rst -> obs-studio-26.1.0.tar.xz/docs/sphinx/reference-scenes.rst Changed
12
 
1
@@ -101,8 +101,8 @@
2
    Bottom crop value.
3
 
4
 
5
-Scene Item Order Info Structure (*obs_sceneitem_order_info)
6
-----------------------------------------------
7
+Scene Item Order Info Structure (\*obs_sceneitem_order_info)
8
+------------------------------------------------------------
9
 
10
 .. type:: struct obs_sceneitem_order_info
11
 
12
obs-studio-26.0.2.tar.xz/libobs-d3d11/d3d11-subsystem.cpp -> obs-studio-26.1.0.tar.xz/libobs-d3d11/d3d11-subsystem.cpp Changed
25
 
1
@@ -2670,6 +2670,23 @@
2
    return tex2d->isShared ? tex2d->sharedHandle : GS_INVALID_HANDLE;
3
 }
4
 
5
+extern "C" EXPORT gs_texture_t *device_texture_wrap_obj(gs_device_t *device,
6
+                           void *obj)
7
+{
8
+   gs_texture *texture = nullptr;
9
+   try {
10
+       texture = new gs_texture_2d(device, (ID3D11Texture2D *)obj);
11
+   } catch (const HRError &error) {
12
+       blog(LOG_ERROR, "gs_texture_wrap_obj (D3D11): %s (%08lX)",
13
+            error.str, error.hr);
14
+       LogD3D11ErrorDetails(error, device);
15
+   } catch (const char *error) {
16
+       blog(LOG_ERROR, "gs_texture_wrap_obj (D3D11): %s", error);
17
+   }
18
+
19
+   return texture;
20
+}
21
+
22
 int device_texture_acquire_sync(gs_texture_t *tex, uint64_t key, uint32_t ms)
23
 {
24
    gs_texture_2d *tex2d = reinterpret_cast<gs_texture_2d *>(tex);
25
obs-studio-26.0.2.tar.xz/libobs-d3d11/d3d11-subsystem.hpp -> obs-studio-26.1.0.tar.xz/libobs-d3d11/d3d11-subsystem.hpp Changed
9
 
1
@@ -490,6 +490,7 @@
2
    gs_texture_2d(gs_device_t *device, ID3D11Texture2D *nv12,
3
              uint32_t flags);
4
    gs_texture_2d(gs_device_t *device, uint32_t handle);
5
+   gs_texture_2d(gs_device_t *device, ID3D11Texture2D *obj);
6
 };
7
 
8
 struct gs_texture_3d : gs_texture {
9
obs-studio-26.0.2.tar.xz/libobs-d3d11/d3d11-texture2d.cpp -> obs-studio-26.1.0.tar.xz/libobs-d3d11/d3d11-texture2d.cpp Changed
32
 
1
@@ -311,3 +311,30 @@
2
    if (FAILED(hr))
3
        throw HRError("Failed to create shader resource view", hr);
4
 }
5
+
6
+gs_texture_2d::gs_texture_2d(gs_device_t *device, ID3D11Texture2D *obj)
7
+   : gs_texture(device, gs_type::gs_texture_2d, GS_TEXTURE_2D)
8
+{
9
+   texture = obj;
10
+
11
+   texture->GetDesc(&td);
12
+
13
+   this->type = GS_TEXTURE_2D;
14
+   this->format = ConvertDXGITextureFormat(td.Format);
15
+   this->levels = 1;
16
+   this->device = device;
17
+
18
+   this->width = td.Width;
19
+   this->height = td.Height;
20
+   this->dxgiFormat = td.Format;
21
+
22
+   memset(&resourceDesc, 0, sizeof(resourceDesc));
23
+   resourceDesc.Format = td.Format;
24
+   resourceDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
25
+   resourceDesc.Texture2D.MipLevels = 1;
26
+
27
+   HRESULT hr = device->device->CreateShaderResourceView(
28
+       texture, &resourceDesc, shaderRes.Assign());
29
+   if (FAILED(hr))
30
+       throw HRError("Failed to create shader resource view", hr);
31
+}
32
obs-studio-26.0.2.tar.xz/libobs-opengl/CMakeLists.txt -> obs-studio-26.1.0.tar.xz/libobs-opengl/CMakeLists.txt Changed
12
 
1
@@ -16,10 +16,6 @@
2
    set(libobs-opengl_PLATFORM_SOURCES
3
        gl-cocoa.m)
4
 
5
-   set_source_files_properties(${libobs-opengl_PLATFORM_SOURCES}
6
-       PROPERTIES
7
-           LANGUAGE C)
8
-
9
    find_library(COCOA Cocoa)
10
    include_directories(${COCOA})
11
    mark_as_advanced(COCOA)
12
obs-studio-26.0.2.tar.xz/libobs-winrt/winrt-capture.cpp -> obs-studio-26.1.0.tar.xz/libobs-winrt/winrt-capture.cpp Changed
10
 
1
@@ -112,7 +112,7 @@
2
    bool client_area;
3
 
4
    bool capture_cursor;
5
-   bool cursor_visible;
6
+   BOOL cursor_visible;
7
 
8
    gs_texture_t *texture;
9
    bool texture_written;
10
obs-studio-26.0.2.tar.xz/libobs-winrt/winrt-capture.h -> obs-studio-26.1.0.tar.xz/libobs-winrt/winrt-capture.h Changed
10
 
1
@@ -15,7 +15,7 @@
2
                        BOOL client_area);
3
 EXPORT void winrt_capture_free(struct winrt_capture *capture);
4
 
5
-EXPORT BOOL winrt_capture_supported(const struct winrt_capture *capture);
6
+EXPORT BOOL winrt_capture_active(const struct winrt_capture *capture);
7
 EXPORT void winrt_capture_show_cursor(struct winrt_capture *capture,
8
                      BOOL visible);
9
 EXPORT void winrt_capture_render(struct winrt_capture *capture,
10
obs-studio-26.0.2.tar.xz/libobs/CMakeLists.txt -> obs-studio-26.1.0.tar.xz/libobs/CMakeLists.txt Changed
57
 
1
@@ -11,6 +11,10 @@
2
    list(REMOVE_ITEM FFMPEG_LIBRARIES ${FFMPEG_AVCODEC_LIBRARIES})
3
 endif()
4
 
5
+if(DEBUG_FFMPEG_MUX)
6
+   add_definitions(-DSHOW_SUBPROCESSES)
7
+endif()
8
+
9
 if(UNIX)
10
    if (NOT APPLE)
11
        find_package(X11 REQUIRED)
12
@@ -139,7 +143,6 @@
13
 
14
    set_source_files_properties(${libobs_PLATFORM_SOURCES}
15
        PROPERTIES
16
-           LANGUAGE C
17
            COMPILE_FLAGS "-fobjc-arc")
18
 
19
    find_library(COCOA Cocoa)
20
@@ -361,7 +364,8 @@
21
    util/crc32.c
22
    util/text-lookup.c
23
    util/cf-parser.c
24
-   util/profiler.c)
25
+   util/profiler.c
26
+   util/bitstream.c)
27
 set(libobs_util_HEADERS
28
    util/curl/curl-helper.h
29
    util/sse-intrin.h
30
@@ -388,7 +392,8 @@
31
    util/lexer.h
32
    util/platform.h
33
    util/profiler.h
34
-   util/profiler.hpp)
35
+   util/profiler.hpp
36
+   util/bitstream.h)
37
 
38
 set(libobs_libobs_SOURCES
39
    ${libobs_PLATFORM_SOURCES}
40
@@ -467,12 +472,10 @@
41
 source_group("audio-monitoring\\Source Files" FILES ${libobs_audio_monitoring_SOURCES})
42
 source_group("audio-monitoring\\Header Files" FILES ${libobs_audio_monitoring_HEADERS})
43
 
44
-if(BUILD_CAPTIONS)
45
-   include_directories(${CMAKE_SOURCE_DIR}/deps/libcaption)
46
-   set(libobs_PLATFORM_DEPS
47
-       ${libobs_PLATFORM_DEPS}
48
-       caption)
49
-endif()
50
+include_directories(${CMAKE_SOURCE_DIR}/deps/libcaption)
51
+set(libobs_PLATFORM_DEPS
52
+   ${libobs_PLATFORM_DEPS}
53
+   caption)
54
 
55
 add_library(libobs SHARED ${libobs_SOURCES} ${libobs_HEADERS})
56
 if(UNIX AND NOT APPLE)
57
obs-studio-26.0.2.tar.xz/libobs/audio-monitoring/pulse/pulseaudio-output.c -> obs-studio-26.1.0.tar.xz/libobs/audio-monitoring/pulse/pulseaudio-output.c Changed
33
 
1
@@ -183,8 +183,10 @@
2
        if (bytesToFill > data->bytesRemaining)
3
            bytesToFill = data->bytesRemaining;
4
 
5
+       pulseaudio_lock();
6
        pa_stream_begin_write(data->stream, (void **)&buffer,
7
                      &bytesToFill);
8
+       pulseaudio_unlock();
9
 
10
        circlebuf_pop_front(&data->new_data, buffer, bytesToFill);
11
 
12
@@ -331,8 +333,20 @@
13
 static void pulseaudio_stop_playback(struct audio_monitor *monitor)
14
 {
15
    if (monitor->stream) {
16
+       /* Stop the stream */
17
+       pulseaudio_lock();
18
        pa_stream_disconnect(monitor->stream);
19
+       pulseaudio_unlock();
20
+
21
+       /* Remove the callbacks, to ensure we no longer try to do anything
22
+        * with this stream object */
23
+       pulseaudio_write_callback(monitor->stream, NULL, NULL);
24
+       pulseaudio_set_underflow_callback(monitor->stream, NULL, NULL);
25
+
26
+       /* Unreference the stream and drop it. PA will free it when it can. */
27
+       pulseaudio_lock();
28
        pa_stream_unref(monitor->stream);
29
+       pulseaudio_unlock();
30
        monitor->stream = NULL;
31
    }
32
 
33
obs-studio-26.0.2.tar.xz/libobs/graphics/graphics-imports.c -> obs-studio-26.1.0.tar.xz/libobs/graphics/graphics-imports.c Changed
9
 
1
@@ -210,6 +210,7 @@
2
    GRAPHICS_IMPORT_OPTIONAL(gs_texture_release_dc);
3
    GRAPHICS_IMPORT_OPTIONAL(device_texture_open_shared);
4
    GRAPHICS_IMPORT_OPTIONAL(device_texture_get_shared_handle);
5
+   GRAPHICS_IMPORT_OPTIONAL(device_texture_wrap_obj);
6
    GRAPHICS_IMPORT_OPTIONAL(device_texture_acquire_sync);
7
    GRAPHICS_IMPORT_OPTIONAL(device_texture_release_sync);
8
    GRAPHICS_IMPORT_OPTIONAL(device_texture_create_nv12);
9
obs-studio-26.0.2.tar.xz/libobs/graphics/graphics-internal.h -> obs-studio-26.1.0.tar.xz/libobs/graphics/graphics-internal.h Changed
10
 
1
@@ -299,6 +299,8 @@
2
    gs_texture_t *(*device_texture_open_shared)(gs_device_t *device,
3
                            uint32_t handle);
4
    uint32_t (*device_texture_get_shared_handle)(gs_texture_t *tex);
5
+   gs_texture_t *(*device_texture_wrap_obj)(gs_device_t *device,
6
+                        void *obj);
7
    int (*device_texture_acquire_sync)(gs_texture_t *tex, uint64_t key,
8
                       uint32_t ms);
9
    int (*device_texture_release_sync)(gs_texture_t *tex, uint64_t key);
10
obs-studio-26.0.2.tar.xz/libobs/graphics/graphics.c -> obs-studio-26.1.0.tar.xz/libobs/graphics/graphics.c Changed
20
 
1
@@ -2885,6 +2885,18 @@
2
    return GS_INVALID_HANDLE;
3
 }
4
 
5
+gs_texture_t *gs_texture_wrap_obj(void *obj)
6
+{
7
+   graphics_t *graphics = thread_graphics;
8
+   if (!gs_valid("gs_texture_wrap_obj"))
9
+       return NULL;
10
+
11
+   if (graphics->exports.device_texture_wrap_obj)
12
+       return graphics->exports.device_texture_wrap_obj(
13
+           graphics->device, obj);
14
+   return NULL;
15
+}
16
+
17
 int gs_texture_acquire_sync(gs_texture_t *tex, uint64_t key, uint32_t ms)
18
 {
19
    graphics_t *graphics = thread_graphics;
20
obs-studio-26.0.2.tar.xz/libobs/graphics/graphics.h -> obs-studio-26.1.0.tar.xz/libobs/graphics/graphics.h Changed
10
 
1
@@ -867,6 +867,8 @@
2
 #define GS_INVALID_HANDLE (uint32_t) - 1
3
 EXPORT uint32_t gs_texture_get_shared_handle(gs_texture_t *tex);
4
 
5
+EXPORT gs_texture_t *gs_texture_wrap_obj(void *obj);
6
+
7
 #define GS_WAIT_INFINITE (uint32_t) - 1
8
 
9
 /**
10
obs-studio-26.0.2.tar.xz/libobs/media-io/media-remux.c -> obs-studio-26.1.0.tar.xz/libobs/media-io/media-remux.c Changed
14
 
1
@@ -224,6 +224,12 @@
2
        if (ret < 0) {
3
            blog(LOG_ERROR, "media_remux: Error muxing packet: %s",
4
                 av_err2str(ret));
5
+
6
+           /* Treat "Invalid data found when processing input" and
7
+            * "Invalid argument" as non-fatal */
8
+           if (ret == AVERROR_INVALIDDATA || ret == EINVAL)
9
+               continue;
10
+
11
            break;
12
        }
13
    }
14
obs-studio-26.0.2.tar.xz/libobs/obs-audio.c -> obs-studio-26.1.0.tar.xz/libobs/obs-audio.c Changed
10
 
1
@@ -116,7 +116,7 @@
2
            blog(LOG_DEBUG, "doing pending stop trick: '%s'",
3
                 source->context.name);
4
 #endif
5
-           return true;
6
+           return false;
7
        }
8
 
9
        for (size_t ch = 0; ch < channels; ch++)
10
obs-studio-26.0.2.tar.xz/libobs/obs-config.h -> obs-studio-26.1.0.tar.xz/libobs/obs-config.h Changed
18
 
1
@@ -34,14 +34,14 @@
2
  *
3
  * Reset to zero each major version
4
  */
5
-#define LIBOBS_API_MINOR_VER 0
6
+#define LIBOBS_API_MINOR_VER 1
7
 
8
 /*
9
  * Increment if backward-compatible bug fix
10
  *
11
  * Reset to zero each major or minor version
12
  */
13
-#define LIBOBS_API_PATCH_VER 2
14
+#define LIBOBS_API_PATCH_VER 0
15
 
16
 #define MAKE_SEMANTIC_VERSION(major, minor, patch) \
17
    ((major << 24) | (minor << 16) | patch)
18
obs-studio-26.0.2.tar.xz/libobs/obs-data.c -> obs-studio-26.1.0.tar.xz/libobs/obs-data.c Changed
16
 
1
@@ -1762,12 +1762,12 @@
2
 
3
 obs_data_t *obs_data_item_get_default_obj(obs_data_item_t *item)
4
 {
5
-   return data_item_get_obj(item, get_item_obj);
6
+   return data_item_get_obj(item, get_item_default_obj);
7
 }
8
 
9
 obs_data_array_t *obs_data_item_get_default_array(obs_data_item_t *item)
10
 {
11
-   return data_item_get_array(item, get_item_array);
12
+   return data_item_get_array(item, get_item_default_array);
13
 }
14
 
15
 const char *obs_data_item_get_autoselect_string(obs_data_item_t *item)
16
obs-studio-26.0.2.tar.xz/libobs/obs-internal.h -> obs-studio-26.1.0.tar.xz/libobs/obs-internal.h Changed
41
 
1
@@ -36,6 +36,8 @@
2
 
3
 #include "obs.h"
4
 
5
+#include <caption/caption.h>
6
+
7
 #define NUM_TEXTURES 2
8
 #define NUM_CHANNELS 3
9
 #define MICROSECOND_DEN 1000000
10
@@ -587,6 +589,11 @@
11
    void *param;
12
 };
13
 
14
+struct caption_cb_info {
15
+   obs_source_caption_t callback;
16
+   void *param;
17
+};
18
+
19
 struct obs_source {
20
    struct obs_context_data context;
21
    struct obs_source_info info;
22
@@ -690,6 +697,9 @@
23
    uint32_t async_convert_width[MAX_AV_PLANES];
24
    uint32_t async_convert_height[MAX_AV_PLANES];
25
 
26
+   pthread_mutex_t caption_cb_mutex;
27
+   DARRAY(struct caption_cb_info) caption_cb_list;
28
+
29
    /* async video deinterlacing */
30
    uint64_t deinterlace_offset;
31
    uint64_t deinterlace_frame_ts;
32
@@ -977,6 +987,8 @@
33
    struct caption_text *caption_head;
34
    struct caption_text *caption_tail;
35
 
36
+   struct circlebuf caption_data;
37
+
38
    bool valid;
39
 
40
    uint64_t active_delay_ns;
41
obs-studio-26.0.2.tar.xz/libobs/obs-nix.c -> obs-studio-26.1.0.tar.xz/libobs/obs-nix.c Changed
86
 
1
@@ -23,10 +23,12 @@
2
 #include <stdlib.h>
3
 #include <stdio.h>
4
 #include <unistd.h>
5
-#if defined(__FreeBSD__)
6
+#if defined(__FreeBSD__) || defined(__OpenBSD__)
7
 #include <sys/sysctl.h>
8
 #endif
9
+#if !defined(__OpenBSD__)
10
 #include <sys/sysinfo.h>
11
+#endif
12
 #include <sys/utsname.h>
13
 #include <xcb/xcb.h>
14
 #if USE_XINPUT
15
@@ -155,9 +157,10 @@
16
    dstr_free(&proc_speed);
17
    free(line);
18
 }
19
-#elif defined(__FreeBSD__)
20
+#elif defined(__FreeBSD__) || defined(__OpenBSD__)
21
 static void log_processor_speed(void)
22
 {
23
+#ifndef __OpenBSD__
24
    char *line = NULL;
25
    size_t linecap = 0;
26
    FILE *fp;
27
@@ -187,6 +190,7 @@
28
    fclose(fp);
29
    dstr_free(&proc_speed);
30
    free(line);
31
+#endif
32
 }
33
 
34
 static void log_processor_name(void)
35
@@ -218,6 +222,19 @@
36
 
37
 static void log_memory_info(void)
38
 {
39
+#if defined(__OpenBSD__)
40
+   int mib[2];
41
+   size_t len;
42
+   int64_t mem;
43
+
44
+   mib[0] = CTL_HW;
45
+   mib[1] = HW_PHYSMEM64;
46
+   len = sizeof(mem);
47
+
48
+   if (sysctl(mib, 2, &mem, &len, NULL, 0) >= 0)
49
+       blog(LOG_INFO, "Physical Memory: %" PRIi64 "MB Total",
50
+            mem / 1024 / 1024);
51
+#else
52
    struct sysinfo info;
53
    if (sysinfo(&info) < 0)
54
        return;
55
@@ -227,6 +244,7 @@
56
         (uint64_t)info.totalram * info.mem_unit / 1024 / 1024,
57
         ((uint64_t)info.freeram + (uint64_t)info.bufferram) *
58
             info.mem_unit / 1024 / 1024);
59
+#endif
60
 }
61
 
62
 static void log_kernel_version(void)
63
@@ -312,6 +330,14 @@
64
    dstr_free(&distro);
65
    free(line);
66
 }
67
+
68
+static void log_desktop_session_info(void)
69
+{
70
+   char *session_ptr = getenv("XDG_SESSION_TYPE");
71
+   if (session_ptr) {
72
+       blog(LOG_INFO, "Session Type: %s", session_ptr);
73
+   }
74
+}
75
 #endif
76
 
77
 void log_system_info(void)
78
@@ -324,6 +350,7 @@
79
    log_kernel_version();
80
 #if defined(__linux__)
81
    log_distribution_info();
82
+   log_desktop_session_info();
83
 #endif
84
    log_x_info();
85
 }
86
obs-studio-26.0.2.tar.xz/libobs/obs-output.c -> obs-studio-26.1.0.tar.xz/libobs/obs-output.c Changed
178
 
1
@@ -21,10 +21,8 @@
2
 #include "obs.h"
3
 #include "obs-internal.h"
4
 
5
-#if BUILD_CAPTIONS
6
 #include <caption/caption.h>
7
 #include <caption/mpeg.h>
8
-#endif
9
 
10
 static inline bool active(const struct obs_output *output)
11
 {
12
@@ -227,6 +225,7 @@
13
        os_event_destroy(output->reconnect_stop_event);
14
        obs_context_data_free(&output->context);
15
        circlebuf_free(&output->delay_data);
16
+       circlebuf_free(&output->caption_data);
17
        if (output->owns_info_id)
18
            bfree((void *)output->info.id);
19
        if (output->last_error_message)
20
@@ -267,6 +266,10 @@
21
        os_atomic_dec_long(&output->delay_restart_refs);
22
 
23
    output->caption_timestamp = 0;
24
+
25
+   circlebuf_free(&output->caption_data);
26
+   circlebuf_init(&output->caption_data);
27
+
28
    return success;
29
 }
30
 
31
@@ -1201,13 +1204,11 @@
32
        return output->highest_video_ts > packet->dts_usec;
33
 }
34
 
35
-#if BUILD_CAPTIONS
36
 static const uint8_t nal_start[4] = {0, 0, 0, 1};
37
 
38
 static bool add_caption(struct obs_output *output, struct encoder_packet *out)
39
 {
40
    struct encoder_packet backup = *out;
41
-   caption_frame_t cf;
42
    sei_t sei;
43
    uint8_t *data;
44
    size_t size;
45
@@ -1224,10 +1225,62 @@
46
    da_push_back_array(out_data, &ref, sizeof(ref));
47
    da_push_back_array(out_data, out->data, out->size);
48
 
49
-   caption_frame_init(&cf);
50
-   caption_frame_from_text(&cf, &output->caption_head->text[0]);
51
+   if (output->caption_data.size > 0) {
52
+
53
+       cea708_t cea708;
54
+       cea708_init(&cea708, 0); // set up a new popon frame
55
+       void *caption_buf = bzalloc(3 * sizeof(uint8_t));
56
+
57
+       while (output->caption_data.size > 0) {
58
+           circlebuf_pop_front(&output->caption_data, caption_buf,
59
+                       3 * sizeof(uint8_t));
60
+
61
+           if ((((uint8_t *)caption_buf)[0] & 0x3) != 0) {
62
+               // only send cea 608
63
+               continue;
64
+           }
65
+
66
+           uint16_t captionData = ((uint8_t *)caption_buf)[1];
67
+           captionData = captionData << 8;
68
+           captionData += ((uint8_t *)caption_buf)[2];
69
+
70
+           // padding
71
+           if (captionData == 0x8080) {
72
+               continue;
73
+           }
74
+
75
+           if (captionData == 0) {
76
+               continue;
77
+           }
78
+
79
+           if (!eia608_parity_varify(captionData)) {
80
+               continue;
81
+           }
82
+
83
+           cea708_add_cc_data(&cea708, 1,
84
+                      ((uint8_t *)caption_buf)[0] & 0x3,
85
+                      captionData);
86
+       }
87
+
88
+       bfree(caption_buf);
89
+
90
+       sei_message_t *msg =
91
+           sei_message_new(sei_type_user_data_registered_itu_t_t35,
92
+                   0, CEA608_MAX_SIZE);
93
+       msg->size = cea708_render(&cea708, sei_message_data(msg),
94
+                     sei_message_size(msg));
95
+       sei_message_append(&sei, msg);
96
+   } else if (output->caption_head) {
97
+       caption_frame_t cf;
98
+       caption_frame_init(&cf);
99
+       caption_frame_from_text(&cf, &output->caption_head->text[0]);
100
 
101
-   sei_from_caption_frame(&sei, &cf);
102
+       sei_from_caption_frame(&sei, &cf);
103
+
104
+       struct caption_text *next = output->caption_head->next;
105
+       bfree(output->caption_head);
106
+       output->caption_head = next;
107
+   }
108
 
109
    data = malloc(sei_render_size(&sei));
110
    size = sei_render(&sei, data);
111
@@ -1244,12 +1297,10 @@
112
 
113
    sei_free(&sei);
114
 
115
-   struct caption_text *next = output->caption_head->next;
116
-   bfree(output->caption_head);
117
-   output->caption_head = next;
118
    return true;
119
 }
120
-#endif
121
+
122
+double last_caption_timestamp = 0;
123
 
124
 static inline void send_interleaved(struct obs_output *output)
125
 {
126
@@ -1266,7 +1317,6 @@
127
    if (out.type == OBS_ENCODER_VIDEO) {
128
        output->total_frames++;
129
 
130
-#if BUILD_CAPTIONS
131
        pthread_mutex_lock(&output->caption_mutex);
132
 
133
        double frame_timestamp =
134
@@ -1286,8 +1336,14 @@
135
            }
136
        }
137
 
138
+       if (output->caption_data.size > 0) {
139
+           if (last_caption_timestamp < frame_timestamp) {
140
+               last_caption_timestamp = frame_timestamp;
141
+               add_caption(output, &out);
142
+           }
143
+       }
144
+
145
        pthread_mutex_unlock(&output->caption_mutex);
146
-#endif
147
    }
148
 
149
    output->info.encoded_packet(output->context.data, &out);
150
@@ -2471,7 +2527,18 @@
151
                                 : NULL;
152
 }
153
 
154
-#if BUILD_CAPTIONS
155
+void obs_output_caption(obs_output_t *output,
156
+           const struct obs_source_cea_708 *captions)
157
+{
158
+   pthread_mutex_lock(&output->caption_mutex);
159
+   for (size_t i = 0; i < captions->packets; i++) {
160
+       circlebuf_push_back(&output->caption_data,
161
+                   captions->data + (i * 3),
162
+                   3 * sizeof(uint8_t));
163
+   }
164
+   pthread_mutex_unlock(&output->caption_mutex);
165
+}
166
+
167
 static struct caption_text *caption_text_new(const char *text, size_t bytes,
168
                         struct caption_text *tail,
169
                         struct caption_text **head,
170
@@ -2518,7 +2585,6 @@
171
 
172
    pthread_mutex_unlock(&output->caption_mutex);
173
 }
174
-#endif
175
 
176
 float obs_output_get_congestion(obs_output_t *output)
177
 {
178
obs-studio-26.0.2.tar.xz/libobs/obs-service.c -> obs-studio-26.1.0.tar.xz/libobs/obs-service.c Changed
53
 
1
@@ -418,3 +418,51 @@
2
        return service->info.get_output_type(service->context.data);
3
    return NULL;
4
 }
5
+
6
+void obs_service_get_supported_resolutions(
7
+   const obs_service_t *service,
8
+   struct obs_service_resolution **resolutions, size_t *count)
9
+{
10
+   if (!obs_service_valid(service, "obs_service_supported_resolutions"))
11
+       return;
12
+   if (!obs_ptr_valid(resolutions, "obs_service_supported_resolutions"))
13
+       return;
14
+   if (!obs_ptr_valid(count, "obs_service_supported_resolutions"))
15
+       return;
16
+
17
+   *resolutions = NULL;
18
+   *count = 0;
19
+
20
+   if (service->info.get_supported_resolutions)
21
+       service->info.get_supported_resolutions(service->context.data,
22
+                           resolutions, count);
23
+}
24
+
25
+void obs_service_get_max_fps(const obs_service_t *service, int *fps)
26
+{
27
+   if (!obs_service_valid(service, "obs_service_get_max_fps"))
28
+       return;
29
+   if (!obs_ptr_valid(fps, "obs_service_get_max_fps"))
30
+       return;
31
+
32
+   *fps = 0;
33
+
34
+   if (service->info.get_max_fps)
35
+       service->info.get_max_fps(service->context.data, fps);
36
+}
37
+
38
+void obs_service_get_max_bitrate(const obs_service_t *service,
39
+                int *video_bitrate, int *audio_bitrate)
40
+{
41
+   if (video_bitrate)
42
+       *video_bitrate = 0;
43
+   if (audio_bitrate)
44
+       *audio_bitrate = 0;
45
+
46
+   if (!obs_service_valid(service, "obs_service_get_max_bitrate"))
47
+       return;
48
+
49
+   if (service->info.get_max_bitrate)
50
+       service->info.get_max_bitrate(service->context.data,
51
+                         video_bitrate, audio_bitrate);
52
+}
53
obs-studio-26.0.2.tar.xz/libobs/obs-service.h -> obs-studio-26.1.0.tar.xz/libobs/obs-service.h Changed
28
 
1
@@ -28,6 +28,11 @@
2
 extern "C" {
3
 #endif
4
 
5
+struct obs_service_resolution {
6
+   int cx;
7
+   int cy;
8
+};
9
+
10
 struct obs_service_info {
11
    /* required */
12
    const char *id;
13
@@ -74,7 +79,13 @@
14
 
15
    const char *(*get_output_type)(void *data);
16
 
17
-   /* TODO: more stuff later */
18
+   void (*get_supported_resolutions)(
19
+       void *data, struct obs_service_resolution **resolutions,
20
+       size_t *count);
21
+   void (*get_max_fps)(void *data, int *fps);
22
+
23
+   void (*get_max_bitrate)(void *data, int *video_bitrate,
24
+               int *audio_bitrate);
25
 };
26
 
27
 EXPORT void obs_register_service_s(const struct obs_service_info *info,
28
obs-studio-26.0.2.tar.xz/libobs/obs-source.c -> obs-studio-26.1.0.tar.xz/libobs/obs-source.c Changed
128
 
1
@@ -31,6 +31,8 @@
2
 #include "obs.h"
3
 #include "obs-internal.h"
4
 
5
+static bool filter_compatible(obs_source_t *source, obs_source_t *filter);
6
+
7
 static inline bool data_valid(const struct obs_source *source, const char *f)
8
 {
9
    return obs_source_valid(source, f) && source->context.data;
10
@@ -182,6 +184,7 @@
11
    pthread_mutex_init_value(&source->audio_mutex);
12
    pthread_mutex_init_value(&source->audio_buf_mutex);
13
    pthread_mutex_init_value(&source->audio_cb_mutex);
14
+   pthread_mutex_init_value(&source->caption_cb_mutex);
15
 
16
    if (pthread_mutexattr_init(&attr) != 0)
17
        return false;
18
@@ -199,6 +202,8 @@
19
        return false;
20
    if (pthread_mutex_init(&source->async_mutex, NULL) != 0)
21
        return false;
22
+   if (pthread_mutex_init(&source->caption_cb_mutex, NULL) != 0)
23
+       return false;
24
 
25
    if (is_audio_source(source) || is_composite_source(source))
26
        allocate_audio_output_buffer(source);
27
@@ -493,6 +498,32 @@
28
    duplicate_filters(dst, src, dst->context.private);
29
 }
30
 
31
+static void duplicate_filter(obs_source_t *dst, obs_source_t *filter)
32
+{
33
+   if (!filter_compatible(dst, filter))
34
+       return;
35
+
36
+   char *new_name = get_new_filter_name(dst, filter->context.name);
37
+   bool enabled = obs_source_enabled(filter);
38
+
39
+   obs_source_t *dst_filter = obs_source_duplicate(filter, new_name, true);
40
+   obs_source_set_enabled(dst_filter, enabled);
41
+
42
+   bfree(new_name);
43
+   obs_source_filter_add(dst, dst_filter);
44
+   obs_source_release(dst_filter);
45
+}
46
+
47
+void obs_source_copy_single_filter(obs_source_t *dst, obs_source_t *filter)
48
+{
49
+   if (!obs_source_valid(dst, "obs_source_copy_single_filter"))
50
+       return;
51
+   if (!obs_source_valid(filter, "obs_source_copy_single_filter"))
52
+       return;
53
+
54
+   duplicate_filter(dst, filter);
55
+}
56
+
57
 obs_source_t *obs_source_duplicate(obs_source_t *source, const char *new_name,
58
                   bool create_private)
59
 {
60
@@ -655,6 +686,7 @@
61
 
62
    da_free(source->audio_actions);
63
    da_free(source->audio_cb_list);
64
+   da_free(source->caption_cb_list);
65
    da_free(source->async_cache);
66
    da_free(source->async_frames);
67
    da_free(source->filters);
68
@@ -663,6 +695,7 @@
69
    pthread_mutex_destroy(&source->audio_buf_mutex);
70
    pthread_mutex_destroy(&source->audio_cb_mutex);
71
    pthread_mutex_destroy(&source->audio_mutex);
72
+   pthread_mutex_destroy(&source->caption_cb_mutex);
73
    pthread_mutex_destroy(&source->async_mutex);
74
    obs_data_release(source->private_settings);
75
    obs_context_data_free(&source->context);
76
@@ -2870,6 +2903,51 @@
77
        source->async_rotation = rotation;
78
 }
79
 
80
+void obs_source_output_cea708(obs_source_t *source,
81
+                 const struct obs_source_cea_708 *captions)
82
+{
83
+   if (!captions) {
84
+       return;
85
+   }
86
+
87
+   pthread_mutex_lock(&source->caption_cb_mutex);
88
+
89
+   for (size_t i = source->caption_cb_list.num; i > 0; i--) {
90
+       struct caption_cb_info info =
91
+           source->caption_cb_list.array[i - 1];
92
+       info.callback(info.param, source, captions);
93
+   }
94
+
95
+   pthread_mutex_unlock(&source->caption_cb_mutex);
96
+}
97
+
98
+void obs_source_add_caption_callback(obs_source_t *source,
99
+                    obs_source_caption_t callback, void *param)
100
+{
101
+   struct caption_cb_info info = {callback, param};
102
+
103
+   if (!obs_source_valid(source, "obs_source_add_caption_callback"))
104
+       return;
105
+
106
+   pthread_mutex_lock(&source->caption_cb_mutex);
107
+   da_push_back(source->caption_cb_list, &info);
108
+   pthread_mutex_unlock(&source->caption_cb_mutex);
109
+}
110
+
111
+void obs_source_remove_caption_callback(obs_source_t *source,
112
+                   obs_source_caption_t callback,
113
+                   void *param)
114
+{
115
+   struct caption_cb_info info = {callback, param};
116
+
117
+   if (!obs_source_valid(source, "obs_source_remove_caption_callback"))
118
+       return;
119
+
120
+   pthread_mutex_lock(&source->caption_cb_mutex);
121
+   da_erase_item(source->caption_cb_list, &info);
122
+   pthread_mutex_unlock(&source->caption_cb_mutex);
123
+}
124
+
125
 static inline bool preload_frame_changed(obs_source_t *source,
126
                     const struct obs_source_frame *in)
127
 {
128
obs-studio-26.0.2.tar.xz/libobs/obs-source.h -> obs-studio-26.1.0.tar.xz/libobs/obs-source.h Changed
13
 
1
@@ -186,6 +186,11 @@
2
  */
3
 #define OBS_SOURCE_CONTROLLABLE_MEDIA (1 << 13)
4
 
5
+/**
6
+ * Source type provides cea708 data
7
+ */
8
+#define OBS_SOURCE_CEA_708 (1 << 14)
9
+
10
 /** @} */
11
 
12
 typedef void (*obs_source_enum_proc_t)(obs_source_t *parent,
13
obs-studio-26.0.2.tar.xz/libobs/obs.h -> obs-studio-26.1.0.tar.xz/libobs/obs.h Changed
82
 
1
@@ -212,6 +212,12 @@
2
    uint64_t timestamp;
3
 };
4
 
5
+struct obs_source_cea_708 {
6
+   const uint8_t *data;
7
+   uint32_t packets;
8
+   uint64_t timestamp;
9
+};
10
+
11
 /**
12
  * Source asynchronous video output structure.  Used with
13
  * obs_source_output_video to output asynchronous video.  Video is buffered as
14
@@ -1085,6 +1091,8 @@
15
                           const char *name);
16
 
17
 EXPORT void obs_source_copy_filters(obs_source_t *dst, obs_source_t *src);
18
+EXPORT void obs_source_copy_single_filter(obs_source_t *dst,
19
+                     obs_source_t *filter);
20
 
21
 EXPORT bool obs_source_enabled(const obs_source_t *source);
22
 EXPORT void obs_source_set_enabled(obs_source_t *source, bool enabled);
23
@@ -1115,6 +1123,16 @@
24
 EXPORT void obs_source_remove_audio_capture_callback(
25
    obs_source_t *source, obs_source_audio_capture_t callback, void *param);
26
 
27
+typedef void (*obs_source_caption_t)(void *param, obs_source_t *source,
28
+                    const struct obs_source_cea_708 *captions);
29
+
30
+EXPORT void obs_source_add_caption_callback(obs_source_t *source,
31
+                       obs_source_caption_t callback,
32
+                       void *param);
33
+EXPORT void obs_source_remove_caption_callback(obs_source_t *source,
34
+                          obs_source_caption_t callback,
35
+                          void *param);
36
+
37
 enum obs_deinterlace_mode {
38
    OBS_DEINTERLACE_MODE_DISABLE,
39
    OBS_DEINTERLACE_MODE_DISCARD,
40
@@ -1206,6 +1224,9 @@
41
 
42
 EXPORT void obs_source_set_async_rotation(obs_source_t *source, long rotation);
43
 
44
+EXPORT void obs_source_output_cea708(obs_source_t *source,
45
+                    const struct obs_source_cea_708 *captions);
46
+
47
 /**
48
  * Preloads asynchronous video data to allow instantaneous playback
49
  *
50
@@ -1882,13 +1903,14 @@
51
 
52
 EXPORT const char *obs_output_get_id(const obs_output_t *output);
53
 
54
-#if BUILD_CAPTIONS
55
+EXPORT void obs_output_caption(obs_output_t *output,
56
+                  const struct obs_source_cea_708 *captions);
57
+
58
 EXPORT void obs_output_output_caption_text1(obs_output_t *output,
59
                        const char *text);
60
 EXPORT void obs_output_output_caption_text2(obs_output_t *output,
61
                        const char *text,
62
                        double display_duration);
63
-#endif
64
 
65
 EXPORT float obs_output_get_congestion(obs_output_t *output);
66
 EXPORT int obs_output_get_connect_time_ms(obs_output_t *output);
67
@@ -2209,6 +2231,14 @@
68
 
69
 EXPORT const char *obs_service_get_id(const obs_service_t *service);
70
 
71
+EXPORT void obs_service_get_supported_resolutions(
72
+   const obs_service_t *service,
73
+   struct obs_service_resolution **resolutions, size_t *count);
74
+EXPORT void obs_service_get_max_fps(const obs_service_t *service, int *fps);
75
+
76
+EXPORT void obs_service_get_max_bitrate(const obs_service_t *service,
77
+                   int *video_bitrate, int *audio_bitrate);
78
+
79
 /* NOTE: This function is temporary and should be removed/replaced at a later
80
  * date. */
81
 EXPORT const char *obs_service_get_output_type(const obs_service_t *service);
82
obs-studio-26.0.2.tar.xz/libobs/obsconfig.h.in -> obs-studio-26.1.0.tar.xz/libobs/obsconfig.h.in Changed
9
 
1
@@ -15,7 +15,6 @@
2
 #define OBS_PLUGIN_DESTINATION "@OBS_PLUGIN_DESTINATION@"
3
 #define OBS_RELATIVE_PREFIX "@OBS_RELATIVE_PREFIX@"
4
 #define OBS_UNIX_STRUCTURE @OBS_UNIX_STRUCTURE@
5
-#define BUILD_CAPTIONS @BUILD_CAPTIONS@
6
 #define HAVE_DBUS @HAVE_DBUS@
7
 #define HAVE_PULSEAUDIO @HAVE_PULSEAUDIO@
8
 #define USE_XINPUT @USE_XINPUT@
9
obs-studio-26.1.0.tar.xz/libobs/util/bitstream.c Added
54
 
1
@@ -0,0 +1,52 @@
2
+#include "bitstream.h"
3
+
4
+#include <stdlib.h>
5
+#include <string.h>
6
+
7
+void bitstream_reader_init(struct bitstream_reader *r, uint8_t *data,
8
+              size_t len)
9
+{
10
+   memset(r, 0, sizeof(struct bitstream_reader));
11
+   r->buf = data;
12
+   r->subPos = 0x80;
13
+   r->len = len;
14
+}
15
+
16
+uint8_t bitstream_reader_read_bit(struct bitstream_reader *r)
17
+{
18
+   if (r->pos >= r->len)
19
+       return 0;
20
+
21
+   uint8_t bit = (*(r->buf + r->pos) & r->subPos) == r->subPos ? 1 : 0;
22
+
23
+   r->subPos >>= 0x1;
24
+   if (r->subPos == 0) {
25
+       r->subPos = 0x80;
26
+       r->pos++;
27
+   }
28
+
29
+   return bit;
30
+}
31
+
32
+uint8_t bitstream_reader_read_bits(struct bitstream_reader *r, int bits)
33
+{
34
+   uint8_t res = 0;
35
+
36
+   for (int i = 1; i <= bits; i++) {
37
+       res <<= 1;
38
+       res |= bitstream_reader_read_bit(r);
39
+   }
40
+
41
+   return res;
42
+}
43
+
44
+uint8_t bitstream_reader_r8(struct bitstream_reader *r)
45
+{
46
+   return bitstream_reader_read_bits(r, 8);
47
+}
48
+
49
+uint16_t bitstream_reader_r16(struct bitstream_reader *r)
50
+{
51
+   uint8_t b = bitstream_reader_read_bits(r, 8);
52
+   return ((uint16_t)b << 8) | bitstream_reader_read_bits(r, 8);
53
+}
54
obs-studio-26.1.0.tar.xz/libobs/util/bitstream.h Added
31
 
1
@@ -0,0 +1,29 @@
2
+#pragma once
3
+
4
+#include "c99defs.h"
5
+
6
+/*
7
+ *   General programmable serialization functions.  (A shared interface to
8
+ * various reading/writing to/from different inputs/outputs)
9
+ */
10
+
11
+#ifdef __cplusplus
12
+extern "C" {
13
+#endif
14
+
15
+struct bitstream_reader {
16
+   uint8_t pos;
17
+   uint8_t subPos;
18
+   uint8_t *buf;
19
+   size_t len;
20
+};
21
+
22
+EXPORT void bitstream_reader_init(struct bitstream_reader *r, uint8_t *data,
23
+                 size_t len);
24
+EXPORT uint8_t bitstream_reader_read_bits(struct bitstream_reader *r, int bits);
25
+EXPORT uint8_t bitstream_reader_r8(struct bitstream_reader *r);
26
+EXPORT uint16_t bitstream_reader_r16(struct bitstream_reader *r);
27
+
28
+#ifdef __cplusplus
29
+}
30
+#endif
31
obs-studio-26.0.2.tar.xz/libobs/util/pipe-windows.c -> obs-studio-26.1.0.tar.xz/libobs/util/pipe-windows.c Changed
19
 
1
@@ -57,11 +57,15 @@
2
    si.hStdOutput = stdout_handle;
3
    si.hStdError = stderr_handle;
4
 
5
+   DWORD flags = 0;
6
+#ifndef SHOW_SUBPROCESSES
7
+   flags = CREATE_NO_WINDOW;
8
+#endif
9
+
10
    os_utf8_to_wcs_ptr(cmd_line, 0, &cmd_line_w);
11
    if (cmd_line_w) {
12
        success = !!CreateProcessW(NULL, cmd_line_w, NULL, NULL, true,
13
-                      CREATE_NO_WINDOW, NULL, NULL, &si,
14
-                      &pi);
15
+                      flags, NULL, NULL, &si, &pi);
16
 
17
        if (success) {
18
            *process = pi.hProcess;
19
obs-studio-26.0.2.tar.xz/libobs/util/platform-nix.c -> obs-studio-26.1.0.tar.xz/libobs/util/platform-nix.c Changed
91
 
1
@@ -34,14 +34,16 @@
2
 #include <sys/times.h>
3
 #include <sys/wait.h>
4
 #include <libgen.h>
5
-#ifdef __FreeBSD__
6
+#if defined(__FreeBSD__) || defined(__OpenBSD__)
7
 #include <sys/param.h>
8
 #include <sys/queue.h>
9
 #include <sys/socket.h>
10
 #include <sys/sysctl.h>
11
 #include <sys/user.h>
12
 #include <unistd.h>
13
+#if defined(__FreeBSD__)
14
 #include <libprocstat.h>
15
+#endif
16
 #else
17
 #include <sys/resource.h>
18
 #endif
19
@@ -272,6 +274,62 @@
20
    return str;
21
 }
22
 
23
+#if defined(__OpenBSD__)
24
+// a bit modified version of https://stackoverflow.com/a/31495527
25
+ssize_t os_openbsd_get_executable_path(char *epath)
26
+{
27
+   int mib[4];
28
+   char **argv;
29
+   size_t len;
30
+   const char *comm;
31
+   int ok = 0;
32
+
33
+   mib[0] = CTL_KERN;
34
+   mib[1] = KERN_PROC_ARGS;
35
+   mib[2] = getpid();
36
+   mib[3] = KERN_PROC_ARGV;
37
+
38
+   if (sysctl(mib, 4, NULL, &len, NULL, 0) < 0)
39
+       abort();
40
+
41
+   if (!(argv = malloc(len)))
42
+       abort();
43
+
44
+   if (sysctl(mib, 4, argv, &len, NULL, 0) < 0)
45
+       abort();
46
+
47
+   comm = argv[0];
48
+
49
+   if (*comm == '/' || *comm == '.') {
50
+       if (realpath(comm, epath))
51
+           ok = 1;
52
+   } else {
53
+       char *sp;
54
+       char *xpath = strdup(getenv("PATH"));
55
+       char *path = strtok_r(xpath, ":", &sp);
56
+       struct stat st;
57
+
58
+       if (!xpath)
59
+           abort();
60
+
61
+       while (path) {
62
+           snprintf(epath, PATH_MAX, "%s/%s", path, comm);
63
+
64
+           if (!stat(epath, &st) && (st.st_mode & S_IXUSR)) {
65
+               ok = 1;
66
+               break;
67
+           }
68
+           path = strtok_r(NULL, ":", &sp);
69
+       }
70
+
71
+       free(xpath);
72
+   }
73
+
74
+   free(argv);
75
+   return ok ? (ssize_t)strlen(epath) : -1;
76
+}
77
+#endif
78
+
79
 char *os_get_executable_path_ptr(const char *name)
80
 {
81
    char exe[PATH_MAX];
82
@@ -286,6 +344,8 @@
83
        return NULL;
84
    }
85
    count = pathlen;
86
+#elif defined(__OpenBSD__)
87
+   ssize_t count = os_openbsd_get_executable_path(exe);
88
 #else
89
    ssize_t count = readlink("/proc/self/exe", exe, PATH_MAX - 1);
90
    if (count >= 0) {
91
obs-studio-26.0.2.tar.xz/libobs/util/profiler.c -> obs-studio-26.1.0.tar.xz/libobs/util/profiler.c Changed
13
 
1
@@ -1058,7 +1058,11 @@
2
 
3
    profiler_snapshot_dump(snap, dump_csv_gzwrite, gz);
4
 
5
+#ifdef _WIN32
6
    gzclose_w(gz);
7
+#else
8
+   gzclose(gz);
9
+#endif
10
    return true;
11
 }
12
 
13
obs-studio-26.0.2.tar.xz/plugins/CMakeLists.txt -> obs-studio-26.1.0.tar.xz/plugins/CMakeLists.txt Changed
28
 
1
@@ -30,6 +30,7 @@
2
    add_subdirectory(mac-capture)
3
    add_subdirectory(mac-vth264)
4
    add_subdirectory(mac-syphon)
5
+   add_subdirectory(mac-virtualcam)
6
    add_subdirectory(decklink/mac)
7
    add_subdirectory(vlc-video)
8
    add_subdirectory(linux-jack)
9
@@ -41,6 +42,7 @@
10
    add_subdirectory(linux-alsa)
11
    add_subdirectory(decklink/linux)
12
    add_subdirectory(vlc-video)
13
+   add_subdirectory(sndio)
14
 elseif("${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD")
15
    add_subdirectory(linux-capture)
16
    add_subdirectory(linux-pulseaudio)
17
@@ -49,6 +51,10 @@
18
    add_subdirectory(linux-alsa)
19
    add_subdirectory(vlc-video)
20
    add_subdirectory(oss-audio)
21
+   add_subdirectory(sndio)
22
+elseif("${CMAKE_SYSTEM_NAME}" MATCHES "OpenBSD")
23
+   add_subdirectory(linux-capture)
24
+   add_subdirectory(sndio)
25
 endif()
26
 
27
 option(BUILD_BROWSER "Build browser plugin" OFF)
28
obs-studio-26.1.0.tar.xz/plugins/coreaudio-encoder/data/locale/az-AZ.ini Added
8
 
1
@@ -0,0 +1,6 @@
2
+CoreAudioAAC="CoreAudio AAC kodlayıcı"
3
+Bitrate="Bit sürəti"
4
+AllowHEAAC="HE-AAC-yə icazə ver"
5
+OutputSamplerate="Çıxış nümunə sürəti"
6
+UseInputSampleRate="Giriş (OBS) nümunə sürətini istifadə et (dəstəklənməyən bit sürətlər siyahılana bilər)"
7
+
8
obs-studio-26.0.2.tar.xz/plugins/coreaudio-encoder/data/locale/de-DE.ini -> obs-studio-26.1.0.tar.xz/plugins/coreaudio-encoder/data/locale/de-DE.ini Changed
12
 
1
@@ -1,6 +1,6 @@
2
-CoreAudioAAC="CoreAudio‐AAC‐Encoder"
3
+CoreAudioAAC="CoreAudio-AAC-Encoder"
4
 Bitrate="Bitrate"
5
-AllowHEAAC="HE‐AAC erlauben"
6
-OutputSamplerate="Ausgabe‐Sample‐Rate"
7
-UseInputSampleRate="Eingabe‐Sample‐Rate (OBS) verwenden (listet möglicherweise nicht unterstützte Bitraten auf)"
8
+AllowHEAAC="HE-AAC erlauben"
9
+OutputSamplerate="Ausgabe-Sample-Rate"
10
+UseInputSampleRate="Eingabe-Sample-Rate (OBS) verwenden (listet möglicherweise nicht unterstützte Bitraten auf)"
11
 
12
obs-studio-26.1.0.tar.xz/plugins/coreaudio-encoder/data/locale/eo-UY.ini Added
8
 
1
@@ -0,0 +1,6 @@
2
+CoreAudioAAC="Kodilo de AAC de CoreAudio"
3
+Bitrate="Bitrapido"
4
+AllowHEAAC="Permesi HE-AAC"
5
+OutputSamplerate="Eliga pecrapico"
6
+UseInputSampleRate="Uzi enigan (de OBS) pecrapidon (eble listigos nesubtenatajn bitrapidojn)"
7
+
8
obs-studio-26.0.2.tar.xz/plugins/coreaudio-encoder/data/locale/fa-IR.ini -> obs-studio-26.1.0.tar.xz/plugins/coreaudio-encoder/data/locale/fa-IR.ini Changed
7
 
1
@@ -2,4 +2,5 @@
2
 Bitrate="نرخ بیت"
3
 AllowHEAAC="اجازه AAC با راندمان بالا"
4
 OutputSamplerate="نرخ نمونه خروجی"
5
+UseInputSampleRate="از نرخ نمونه ورودی (OBS) استفاده کنید (ممکن است بیت های پشتیبانی نشده را لیست کند)"
6
 
7
obs-studio-26.0.2.tar.xz/plugins/coreaudio-encoder/data/locale/ka-GE.ini -> obs-studio-26.1.0.tar.xz/plugins/coreaudio-encoder/data/locale/ka-GE.ini Changed
8
 
1
@@ -2,5 +2,5 @@
2
 Bitrate="ბიტური სიხშირე"
3
 AllowHEAAC="HE-AAC დაშვება"
4
 OutputSamplerate="გამომავალი სიგნალის სიხშირე"
5
-UseInputSampleRate="შემავალი (OBS) სიგნალის სიხშირის გამოყენება (შესაძლოა მოიცავდეს მხარდაუჭერელ სიხშირეებსაც)"
6
+UseInputSampleRate="შემავალი (OBS) სიგნალის დაყოფის სიხშირე (შესაძლოა მოიცავდეს მხარდაუჭერელ სიხშირეებსაც)"
7
 
8
obs-studio-26.1.0.tar.xz/plugins/coreaudio-encoder/data/locale/kab-KAB.ini Added
8
 
1
@@ -0,0 +1,6 @@
2
+CoreAudioAAC="Asettengal CoreAudio AAC"
3
+Bitrate="Aktum"
4
+AllowHEAAC="Sireg HE-AAC"
5
+OutputSamplerate="Asnagar n ulemmec n tuffɣa"
6
+UseInputSampleRate="Seqdec asnagar n ulemmec n unekcum (OBS) (yezmer ad ibeqeḍ iktumen ur nettwadhel ara)"
7
+
8
obs-studio-26.0.2.tar.xz/plugins/coreaudio-encoder/data/locale/ro-RO.ini -> obs-studio-26.1.0.tar.xz/plugins/coreaudio-encoder/data/locale/ro-RO.ini Changed
8
 
1
@@ -2,5 +2,5 @@
2
 Bitrate="Rată de biți"
3
 AllowHEAAC="Permite HE-AAC"
4
 OutputSamplerate="Rată de eșantionare a outpului"
5
-UseInputSampleRate="Folosește rata de eșantionare a intrării OBS (poate lista rate de biți nesuportate)"
6
+UseInputSampleRate="Folosește rata de eșantionare a inputului OBS (poate lista rate de biți nesuportate)"
7
 
8
obs-studio-26.1.0.tar.xz/plugins/decklink/OBSVideoFrame.cpp Added
85
 
1
@@ -0,0 +1,83 @@
2
+#include "OBSVideoFrame.h"
3
+
4
+OBSVideoFrame::OBSVideoFrame(long width, long height)
5
+{
6
+   this->width = width;
7
+   this->height = height;
8
+   this->rowBytes = width * 2;
9
+   this->data = new unsigned char[width * height * 2 + 1];
10
+}
11
+
12
+HRESULT OBSVideoFrame::SetFlags(BMDFrameFlags newFlags)
13
+{
14
+   flags = newFlags;
15
+   return S_OK;
16
+}
17
+
18
+HRESULT OBSVideoFrame::SetTimecode(BMDTimecodeFormat format,
19
+                  IDeckLinkTimecode *timecode)
20
+{
21
+   UNUSED_PARAMETER(format);
22
+   UNUSED_PARAMETER(timecode);
23
+   return 0;
24
+}
25
+
26
+HRESULT
27
+OBSVideoFrame::SetTimecodeFromComponents(BMDTimecodeFormat format,
28
+                    uint8_t hours, uint8_t minutes,
29
+                    uint8_t seconds, uint8_t frames,
30
+                    BMDTimecodeFlags flags)
31
+{
32
+   UNUSED_PARAMETER(format);
33
+   UNUSED_PARAMETER(hours);
34
+   UNUSED_PARAMETER(minutes);
35
+   UNUSED_PARAMETER(seconds);
36
+   UNUSED_PARAMETER(frames);
37
+   UNUSED_PARAMETER(flags);
38
+   return 0;
39
+}
40
+
41
+HRESULT OBSVideoFrame::SetAncillaryData(IDeckLinkVideoFrameAncillary *ancillary)
42
+{
43
+   UNUSED_PARAMETER(ancillary);
44
+   return 0;
45
+}
46
+
47
+HRESULT OBSVideoFrame::SetTimecodeUserBits(BMDTimecodeFormat format,
48
+                      BMDTimecodeUserBits userBits)
49
+{
50
+   UNUSED_PARAMETER(format);
51
+   UNUSED_PARAMETER(userBits);
52
+   return 0;
53
+}
54
+
55
+long OBSVideoFrame::GetWidth()
56
+{
57
+   return width;
58
+}
59
+
60
+long OBSVideoFrame::GetHeight()
61
+{
62
+   return height;
63
+}
64
+
65
+long OBSVideoFrame::GetRowBytes()
66
+{
67
+   return rowBytes;
68
+}
69
+
70
+BMDPixelFormat OBSVideoFrame::GetPixelFormat()
71
+{
72
+   return pixelFormat;
73
+}
74
+
75
+BMDFrameFlags OBSVideoFrame::GetFlags()
76
+{
77
+   return flags;
78
+}
79
+
80
+HRESULT OBSVideoFrame::GetBytes(void **buffer)
81
+{
82
+   *buffer = this->data;
83
+   return S_OK;
84
+}
85
obs-studio-26.1.0.tar.xz/plugins/decklink/OBSVideoFrame.h Added
78
 
1
@@ -0,0 +1,76 @@
2
+#pragma once
3
+
4
+#include "platform.hpp"
5
+#include "obs.hpp"
6
+
7
+class OBSVideoFrame : public IDeckLinkMutableVideoFrame {
8
+private:
9
+   BMDFrameFlags flags;
10
+   BMDPixelFormat pixelFormat = bmdFormat8BitYUV;
11
+
12
+   long width;
13
+   long height;
14
+   long rowBytes;
15
+
16
+   unsigned char *data;
17
+
18
+public:
19
+   OBSVideoFrame(long width, long height);
20
+
21
+   HRESULT STDMETHODCALLTYPE SetFlags(BMDFrameFlags newFlags) override;
22
+
23
+   HRESULT STDMETHODCALLTYPE SetTimecode(
24
+       BMDTimecodeFormat format, IDeckLinkTimecode *timecode) override;
25
+
26
+   HRESULT STDMETHODCALLTYPE SetTimecodeFromComponents(
27
+       BMDTimecodeFormat format, uint8_t hours, uint8_t minutes,
28
+       uint8_t seconds, uint8_t frames,
29
+       BMDTimecodeFlags flags) override;
30
+
31
+   HRESULT
32
+   STDMETHODCALLTYPE
33
+   SetAncillaryData(IDeckLinkVideoFrameAncillary *ancillary) override;
34
+
35
+   HRESULT STDMETHODCALLTYPE
36
+   SetTimecodeUserBits(BMDTimecodeFormat format,
37
+               BMDTimecodeUserBits userBits) override;
38
+
39
+   long STDMETHODCALLTYPE GetWidth() override;
40
+
41
+   long STDMETHODCALLTYPE GetHeight() override;
42
+
43
+   long STDMETHODCALLTYPE GetRowBytes() override;
44
+
45
+   BMDPixelFormat STDMETHODCALLTYPE GetPixelFormat() override;
46
+
47
+   BMDFrameFlags STDMETHODCALLTYPE GetFlags() override;
48
+
49
+   HRESULT STDMETHODCALLTYPE GetBytes(void **buffer) override;
50
+
51
+   //Dummy implementations of remaining virtual methods
52
+   virtual HRESULT STDMETHODCALLTYPE
53
+   GetTimecode(/* in */ BMDTimecodeFormat format,
54
+           /* out */ IDeckLinkTimecode **timecode) override
55
+   {
56
+       UNUSED_PARAMETER(format);
57
+       UNUSED_PARAMETER(timecode);
58
+       return E_NOINTERFACE;
59
+   };
60
+   virtual HRESULT STDMETHODCALLTYPE GetAncillaryData(
61
+       /* out */ IDeckLinkVideoFrameAncillary **ancillary) override
62
+   {
63
+       UNUSED_PARAMETER(ancillary);
64
+       return E_NOINTERFACE;
65
+   };
66
+
67
+   // IUnknown interface (dummy implementation)
68
+   virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid,
69
+                            LPVOID *ppv) override
70
+   {
71
+       UNUSED_PARAMETER(iid);
72
+       UNUSED_PARAMETER(ppv);
73
+       return E_NOINTERFACE;
74
+   }
75
+   virtual ULONG STDMETHODCALLTYPE AddRef() override { return 1; }
76
+   virtual ULONG STDMETHODCALLTYPE Release() override { return 1; }
77
+};
78
obs-studio-26.0.2.tar.xz/plugins/decklink/data/locale/az-AZ.ini -> obs-studio-26.1.0.tar.xz/plugins/decklink/data/locale/az-AZ.ini Changed
28
 
1
@@ -1,2 +1,26 @@
2
+BlackmagicDevice="Blackmagic Cihazı"
3
+Device="Cihaz"
4
+Mode="Rejim"
5
+Buffering="Bufferləməni istifadə et"
6
+PixelFormat="Piksel formatı"
7
+ColorSpace="Rəng boşluğu"
8
+ColorSpace.Default="İlkin"
9
+ColorRange="Rəng aralığı"
10
+ColorRange.Default="İlkin"
11
+ColorRange.Partial="Hissəli"
12
+ColorRange.Full="Tam"
13
+ChannelFormat="Kanal"
14
 ChannelFormat.None="Heç biri"
15
+ChannelFormat.2_0ch="Stereo"
16
+ChannelFormat.2_1ch="2.1 kanal"
17
+ChannelFormat.4_0ch="4 kanal"
18
+ChannelFormat.4_1ch="4.1 kanal"
19
+ChannelFormat.5_1ch="5.1 kanal"
20
+ChannelFormat.7_1ch="7.1 kanal"
21
+DeactivateWhenNotShowing="Göstərilməyəndə deaktiv et"
22
+AutoStart="Açılanda avtomatik başlat"
23
+SwapFC-LFE="FC və LFE-ni dəyişdir"
24
+SwapFC-LFE.Tooltip="Ön Mərkəz Kanalını və LFE Kanalını dəyişdir"
25
+VideoConnection="Video Bağlantı"
26
+AudioConnection="Səs Bağlantısı"
27
 
28
obs-studio-26.0.2.tar.xz/plugins/decklink/data/locale/de-DE.ini -> obs-studio-26.1.0.tar.xz/plugins/decklink/data/locale/de-DE.ini Changed
31
 
1
@@ -1,4 +1,4 @@
2
-BlackmagicDevice="Blackmagic‐Gerät"
3
+BlackmagicDevice="Blackmagic-Gerät"
4
 Device="Gerät"
5
 Mode="Modus"
6
 Buffering="Pufferung benutzen"
7
@@ -11,16 +11,16 @@
8
 ColorRange.Full="Voll"
9
 ChannelFormat="Kanal"
10
 ChannelFormat.None="Keins"
11
-ChannelFormat.2_0ch="2‐Kanal"
12
-ChannelFormat.2_1ch="2.1‐Kanal"
13
-ChannelFormat.4_0ch="4‐Kanal"
14
-ChannelFormat.4_1ch="4.1‐Kanal"
15
-ChannelFormat.5_1ch="5.1‐Kanal"
16
-ChannelFormat.7_1ch="7.1‐Kanal"
17
+ChannelFormat.2_0ch="2-Kanal"
18
+ChannelFormat.2_1ch="2.1-Kanal"
19
+ChannelFormat.4_0ch="4-Kanal"
20
+ChannelFormat.4_1ch="4.1-Kanal"
21
+ChannelFormat.5_1ch="5.1-Kanal"
22
+ChannelFormat.7_1ch="7.1-Kanal"
23
 DeactivateWhenNotShowing="Deaktivieren, wenn Quelle nicht gezeigt"
24
 AutoStart="Automatisch beim Öffnen starten"
25
 SwapFC-LFE="FC und LFE tauschen"
26
-SwapFC-LFE.Tooltip="Vorderen Front‐Center‐Kanal und LFE‐Kanal tauschen"
27
+SwapFC-LFE.Tooltip="Vorderen Front-Center-Kanal und LFE-Kanal tauschen"
28
 VideoConnection="Videoverbindung"
29
 AudioConnection="Audioverbindung"
30
 
31
obs-studio-26.0.2.tar.xz/plugins/decklink/data/locale/el-GR.ini -> obs-studio-26.1.0.tar.xz/plugins/decklink/data/locale/el-GR.ini Changed
18
 
1
@@ -3,7 +3,9 @@
2
 Mode="Λειτουργία"
3
 Buffering="Χρήση ενδιάμεσης μνήμης"
4
 PixelFormat="Μορφή pixel"
5
+ColorSpace="Χώρος Χρωμάτων"
6
 ColorSpace.Default="Προεπιλογή"
7
+ColorRange="Εύρος Χρωμάτων"
8
 ColorRange.Default="Προεπιλογή"
9
 ColorRange.Partial="Μερική"
10
 ColorRange.Full="Πλήρης"
11
@@ -17,4 +19,6 @@
12
 ChannelFormat.7_1ch="7.1ch"
13
 DeactivateWhenNotShowing="Απενεργοποίηση όταν δεν εμφανίζεται"
14
 AutoStart="Αυτόματη εκκίνηση"
15
+VideoConnection="Σύνδεση Βίντεο"
16
+AudioConnection="Σύνδεση Ήχου"
17
 
18
obs-studio-26.1.0.tar.xz/plugins/decklink/data/locale/eo-UY.ini Added
28
 
1
@@ -0,0 +1,26 @@
2
+BlackmagicDevice="Aparato de Blackmagic"
3
+Device="Aparato"
4
+Mode="Reĝimo"
5
+Buffering="Uzi bufradon"
6
+PixelFormat="Bildera formo"
7
+ColorSpace="Kolorspaco"
8
+ColorSpace.Default="Defaŭlta"
9
+ColorRange="Kolorvasteco"
10
+ColorRange.Default="Defaŭlta"
11
+ColorRange.Partial="Parta"
12
+ColorRange.Full="Plena"
13
+ChannelFormat="Kanalo"
14
+ChannelFormat.None="Neniu"
15
+ChannelFormat.2_0ch="2 kanaloj"
16
+ChannelFormat.2_1ch="2.1 kanaloj"
17
+ChannelFormat.4_0ch="4 kanaloj"
18
+ChannelFormat.4_1ch="4.1 kanaloj"
19
+ChannelFormat.5_1ch="5.1 kanaloj"
20
+ChannelFormat.7_1ch="7.1 kanaloj"
21
+DeactivateWhenNotShowing="Malaktivigi dum nemontro"
22
+AutoStart="Aŭtomate startigi je lanĉo"
23
+SwapFC-LFE="Interŝanĝi FC kaj LFE"
24
+SwapFC-LFE.Tooltip="Interŝanĝi front-centran kanalon kaj LFE-kanalon"
25
+VideoConnection="Video-konekto"
26
+AudioConnection="Son-konekto"
27
+
28
obs-studio-26.0.2.tar.xz/plugins/decklink/data/locale/et-EE.ini -> obs-studio-26.1.0.tar.xz/plugins/decklink/data/locale/et-EE.ini Changed
26
 
1
@@ -3,4 +3,24 @@
2
 Mode="Režiim"
3
 Buffering="Kasutada puhverdamist"
4
 PixelFormat="Piksli formaat"
5
+ColorSpace="Värviruum"
6
+ColorSpace.Default="Vaikimisi"
7
+ColorRange="Värviruumi vahemik"
8
+ColorRange.Default="Vaikeseade"
9
+ColorRange.Partial="Osaline"
10
+ColorRange.Full="Täielik"
11
+ChannelFormat="Kanal"
12
+ChannelFormat.None="Määramata"
13
+ChannelFormat.2_0ch="2-kanaline"
14
+ChannelFormat.2_1ch="2.1-kanaline"
15
+ChannelFormat.4_0ch="4-kanaline"
16
+ChannelFormat.4_1ch="4.1-kanaline"
17
+ChannelFormat.5_1ch="5.1-kanaline"
18
+ChannelFormat.7_1ch="7.1-kanaline"
19
+DeactivateWhenNotShowing="Laadi maha kui ei ole nähtav"
20
+AutoStart="Automaatne startimine käivitamisel"
21
+SwapFC-LFE="Vahetage FC ja LFE"
22
+SwapFC-LFE.Tooltip="Vahetage eesmine keskkanal ja LFE kanal"
23
+VideoConnection="Videoühendus"
24
+AudioConnection="Audioühendus"
25
 
26
obs-studio-26.0.2.tar.xz/plugins/decklink/data/locale/eu-ES.ini -> obs-studio-26.1.0.tar.xz/plugins/decklink/data/locale/eu-ES.ini Changed
9
 
1
@@ -19,7 +19,6 @@
2
 ChannelFormat.7_1ch="7.1 kanala"
3
 DeactivateWhenNotShowing="Desaktibatu ikusten ez denean"
4
 AutoStart="Hasi automatikoki abiatzean"
5
-SwapFC-LFE="Aldatu FC <-> LFE"
6
 SwapFC-LFE.Tooltip="Aldatu Aurreko Kanal Zentrala eta LFE kanala (subwooferra)"
7
 VideoConnection="Bideo-konexioa"
8
 AudioConnection="Audio-konexioa"
9
obs-studio-26.0.2.tar.xz/plugins/decklink/data/locale/fa-IR.ini -> obs-studio-26.1.0.tar.xz/plugins/decklink/data/locale/fa-IR.ini Changed
20
 
1
@@ -3,7 +3,9 @@
2
 Mode="نوع"
3
 Buffering="استفاده از بافرینگ"
4
 PixelFormat="فرمت پیکسل"
5
+ColorSpace="فضای رنگی"
6
 ColorSpace.Default="پیش فرض"
7
+ColorRange="محدوده رنگ"
8
 ColorRange.Default="پیش فرض"
9
 ColorRange.Partial="جزئی"
10
 ColorRange.Full="کامل"
11
@@ -17,6 +19,8 @@
12
 ChannelFormat.7_1ch="7.1ch"
13
 DeactivateWhenNotShowing="غیر فعال کردن زمانی که نمایش داده نشود"
14
 AutoStart="شروع خودکار در راه اندازی"
15
+SwapFC-LFE="تعویض م ج و ج ف پ"
16
+SwapFC-LFE.Tooltip="مبادله کانال مرکز جلو و کانال ج ف پ"
17
 VideoConnection="اتصال صوتی"
18
 AudioConnection="اتصال صوتی"
19
 
20
obs-studio-26.0.2.tar.xz/plugins/decklink/data/locale/he-IL.ini -> obs-studio-26.1.0.tar.xz/plugins/decklink/data/locale/he-IL.ini Changed
17
 
1
@@ -11,6 +11,15 @@
2
 ColorRange.Full="מלא"
3
 ChannelFormat="ערוץ"
4
 ChannelFormat.None="ללא"
5
+ChannelFormat.2_0ch="2ch"
6
+ChannelFormat.2_1ch="2.1ch"
7
+ChannelFormat.4_0ch="4ch"
8
+ChannelFormat.4_1ch="4.1ch"
9
+ChannelFormat.5_1ch="5.1ch"
10
+ChannelFormat.7_1ch="7.1ch"
11
+DeactivateWhenNotShowing="השבת כאשר לא נראה"
12
+AutoStart="הפעלה אוטומטית בפתיחה"
13
+SwapFC-LFE="החלפת FC וLFE"
14
 VideoConnection="חיבור וידאו"
15
 AudioConnection="חיבור שמע"
16
 
17
obs-studio-26.1.0.tar.xz/plugins/decklink/data/locale/kab-KAB.ini Added
28
 
1
@@ -0,0 +1,26 @@
2
+BlackmagicDevice="Ibenk Blackmagic"
3
+Device="Ibenk"
4
+Mode="Askar"
5
+Buffering="Seqdec ajmaɛ di tkatut n weḥraz"
6
+PixelFormat="Amasal n upiksel"
7
+ColorSpace="Tallunt n yini"
8
+ColorSpace.Default="Amezwar"
9
+ColorRange="Tagrumma n yini"
10
+ColorRange.Default="Amezwar"
11
+ColorRange.Partial="Abruyan"
12
+ColorRange.Full="Ummid"
13
+ChannelFormat="Abadu"
14
+ChannelFormat.None="Ulac"
15
+ChannelFormat.2_0ch="2 n yibuda"
16
+ChannelFormat.2_1ch="2.1 n yibuda"
17
+ChannelFormat.4_0ch="4 n yibuda"
18
+ChannelFormat.4_1ch="4.1 n yibuda"
19
+ChannelFormat.5_1ch="5.1 n yibuda"
20
+ChannelFormat.7_1ch="7.1 n yibuda"
21
+DeactivateWhenNotShowing="Sens ma ur yettwabeqqeḍ ara"
22
+AutoStart="Sekker s wudem awurman di tnekkra"
23
+SwapFC-LFE="Semselsi gar FC akked LFE"
24
+SwapFC-LFE.Tooltip="Semselsi gar ubadu alemmas n sdat akked ubadu LEF"
25
+VideoConnection="Tuqqna n uvidyu"
26
+AudioConnection="Tuqqna n umeslaw"
27
+
28
obs-studio-26.0.2.tar.xz/plugins/decklink/data/locale/ro-RO.ini -> obs-studio-26.1.0.tar.xz/plugins/decklink/data/locale/ro-RO.ini Changed
12
 
1
@@ -19,8 +19,8 @@
2
 ChannelFormat.7_1ch="7.1ch"
3
 DeactivateWhenNotShowing="Dezactivează când nu se afișează"
4
 AutoStart="Pornire automată la lansare"
5
-SwapFC-LFE="Schimbă FC și LFE"
6
-SwapFC-LFE.Tooltip="Schimbă canalul din Front Center și canalul LFE"
7
+SwapFC-LFE="Comută între FC și LFE"
8
+SwapFC-LFE.Tooltip="Comută între canalul centru frontal (FC) și canalul cu efecte de frecvență joasă (LFE)"
9
 VideoConnection="Conexiune video"
10
 AudioConnection="Conexiune audio"
11
 
12
obs-studio-26.0.2.tar.xz/plugins/decklink/data/locale/ru-RU.ini -> obs-studio-26.1.0.tar.xz/plugins/decklink/data/locale/ru-RU.ini Changed
10
 
1
@@ -18,7 +18,7 @@
2
 ChannelFormat.5_1ch="5.1-канальный"
3
 ChannelFormat.7_1ch="7.1-канальный"
4
 DeactivateWhenNotShowing="Выключать, когда не показывается"
5
-AutoStart="Авто-старт при запуске"
6
+AutoStart="Автозапуск при запуске"
7
 SwapFC-LFE="Обменять ПЦ и LFE"
8
 SwapFC-LFE.Tooltip="Обменять передний центральный канал и LFE канал"
9
 VideoConnection="Видео соединение"
10
obs-studio-26.0.2.tar.xz/plugins/decklink/decklink-device-instance.cpp -> obs-studio-26.1.0.tar.xz/plugins/decklink/decklink-device-instance.cpp Changed
271
 
1
@@ -9,8 +9,14 @@
2
 #include <util/util_uint64.h>
3
 
4
 #include <sstream>
5
+#include <iomanip>
6
 #include <algorithm>
7
 
8
+#include "OBSVideoFrame.h"
9
+
10
+#include <caption/caption.h>
11
+#include <util/bitstream.h>
12
+
13
 static inline enum video_format ConvertPixelFormat(BMDPixelFormat format)
14
 {
15
    switch (format) {
16
@@ -62,14 +68,23 @@
17
 
18
 DeckLinkDeviceInstance::DeckLinkDeviceInstance(DecklinkBase *decklink_,
19
                           DeckLinkDevice *device_)
20
-   : currentFrame(), currentPacket(), decklink(decklink_), device(device_)
21
+   : currentFrame(),
22
+     currentPacket(),
23
+     currentCaptions(),
24
+     decklink(decklink_),
25
+     device(device_)
26
 {
27
    currentPacket.samples_per_sec = 48000;
28
    currentPacket.speakers = SPEAKERS_STEREO;
29
    currentPacket.format = AUDIO_FORMAT_16BIT;
30
 }
31
 
32
-DeckLinkDeviceInstance::~DeckLinkDeviceInstance() {}
33
+DeckLinkDeviceInstance::~DeckLinkDeviceInstance()
34
+{
35
+   if (convertFrame) {
36
+       delete convertFrame;
37
+   }
38
+}
39
 
40
 void DeckLinkDeviceInstance::HandleAudioPacket(
41
    IDeckLinkAudioInputPacket *audioPacket, const uint64_t timestamp)
42
@@ -127,16 +142,47 @@
43
    if (videoFrame == nullptr)
44
        return;
45
 
46
+   IDeckLinkVideoFrameAncillaryPackets *packets;
47
+
48
+   if (videoFrame->QueryInterface(IID_IDeckLinkVideoFrameAncillaryPackets,
49
+                      (void **)&packets) == S_OK) {
50
+       IDeckLinkAncillaryPacketIterator *iterator;
51
+       packets->GetPacketIterator(&iterator);
52
+
53
+       IDeckLinkAncillaryPacket *packet;
54
+       iterator->Next(&packet);
55
+
56
+       if (packet) {
57
+           auto did = packet->GetDID();
58
+           auto sdid = packet->GetSDID();
59
+
60
+           // Caption data
61
+           if (did == 0x61 && sdid == 0x01) {
62
+               this->HandleCaptionPacket(packet, timestamp);
63
+           }
64
+
65
+           packet->Release();
66
+       }
67
+
68
+       iterator->Release();
69
+       packets->Release();
70
+   }
71
+
72
+   IDeckLinkVideoConversion *frameConverter =
73
+       CreateVideoConversionInstance();
74
+
75
+   frameConverter->ConvertFrame(videoFrame, convertFrame);
76
+
77
    void *bytes;
78
-   if (videoFrame->GetBytes(&bytes) != S_OK) {
79
+   if (convertFrame->GetBytes(&bytes) != S_OK) {
80
        LOG(LOG_WARNING, "Failed to get video frame data");
81
        return;
82
    }
83
 
84
    currentFrame.data[0] = (uint8_t *)bytes;
85
-   currentFrame.linesize[0] = (uint32_t)videoFrame->GetRowBytes();
86
-   currentFrame.width = (uint32_t)videoFrame->GetWidth();
87
-   currentFrame.height = (uint32_t)videoFrame->GetHeight();
88
+   currentFrame.linesize[0] = (uint32_t)convertFrame->GetRowBytes();
89
+   currentFrame.width = (uint32_t)convertFrame->GetWidth();
90
+   currentFrame.height = (uint32_t)convertFrame->GetHeight();
91
    currentFrame.timestamp = timestamp;
92
 
93
    obs_source_output_video2(
94
@@ -144,6 +190,97 @@
95
        &currentFrame);
96
 }
97
 
98
+void DeckLinkDeviceInstance::HandleCaptionPacket(
99
+   IDeckLinkAncillaryPacket *packet, const uint64_t timestamp)
100
+{
101
+   const void *data;
102
+   uint32_t size;
103
+   packet->GetBytes(bmdAncillaryPacketFormatUInt8, &data, &size);
104
+
105
+   auto anc = (uint8_t *)data;
106
+   struct bitstream_reader reader;
107
+   bitstream_reader_init(&reader, anc, size);
108
+
109
+   // header1
110
+   bitstream_reader_r8(&reader);
111
+   // header2
112
+   bitstream_reader_r8(&reader);
113
+
114
+   // length
115
+   bitstream_reader_r8(&reader);
116
+   // frameRate
117
+   bitstream_reader_read_bits(&reader, 4);
118
+   //reserved
119
+   bitstream_reader_read_bits(&reader, 4);
120
+
121
+   auto cdp_timecode_added = bitstream_reader_read_bits(&reader, 1);
122
+   // cdp_data_block_added
123
+   bitstream_reader_read_bits(&reader, 1);
124
+   // cdp_service_info_added
125
+   bitstream_reader_read_bits(&reader, 1);
126
+   // cdp_service_info_start
127
+   bitstream_reader_read_bits(&reader, 1);
128
+   // cdp_service_info_changed
129
+   bitstream_reader_read_bits(&reader, 1);
130
+   // cdp_service_info_end
131
+   bitstream_reader_read_bits(&reader, 1);
132
+   auto cdp_contains_captions = bitstream_reader_read_bits(&reader, 1);
133
+   //reserved
134
+   bitstream_reader_read_bits(&reader, 1);
135
+
136
+   // cdp_counter
137
+   bitstream_reader_r8(&reader);
138
+   // cdp_counter2
139
+   bitstream_reader_r8(&reader);
140
+
141
+   if (cdp_timecode_added) {
142
+       // timecodeSectionID
143
+       bitstream_reader_r8(&reader);
144
+       //reserved
145
+       bitstream_reader_read_bits(&reader, 2);
146
+       bitstream_reader_read_bits(&reader, 2);
147
+       bitstream_reader_read_bits(&reader, 4);
148
+       // reserved
149
+       bitstream_reader_read_bits(&reader, 1);
150
+       bitstream_reader_read_bits(&reader, 3);
151
+       bitstream_reader_read_bits(&reader, 4);
152
+       bitstream_reader_read_bits(&reader, 1);
153
+       bitstream_reader_read_bits(&reader, 3);
154
+       bitstream_reader_read_bits(&reader, 4);
155
+       bitstream_reader_read_bits(&reader, 1);
156
+       bitstream_reader_read_bits(&reader, 1);
157
+       bitstream_reader_read_bits(&reader, 3);
158
+       bitstream_reader_read_bits(&reader, 4);
159
+   }
160
+
161
+   if (cdp_contains_captions) {
162
+       // cdp_data_section
163
+       bitstream_reader_r8(&reader);
164
+
165
+       //process_em_data_flag
166
+       bitstream_reader_read_bits(&reader, 1);
167
+       // process_cc_data_flag
168
+       bitstream_reader_read_bits(&reader, 1);
169
+       //additional_data_flag
170
+       bitstream_reader_read_bits(&reader, 1);
171
+
172
+       auto cc_count = bitstream_reader_read_bits(&reader, 5);
173
+
174
+       auto *outData =
175
+           (uint8_t *)bzalloc(sizeof(uint8_t) * cc_count * 3);
176
+       memcpy(outData, anc + reader.pos, cc_count * 3);
177
+
178
+       currentCaptions.data = outData;
179
+       currentCaptions.timestamp = timestamp;
180
+       currentCaptions.packets = cc_count;
181
+
182
+       obs_source_output_cea708(
183
+           static_cast<DeckLinkInput *>(decklink)->GetSource(),
184
+           &currentCaptions);
185
+       bfree(outData);
186
+   }
187
+}
188
+
189
 void DeckLinkDeviceInstance::FinalizeStream()
190
 {
191
    input->SetCallback(nullptr);
192
@@ -189,6 +326,11 @@
193
                    currentFrame.color_range_min,
194
                    currentFrame.color_range_max);
195
 
196
+   if (convertFrame) {
197
+       delete convertFrame;
198
+   }
199
+   convertFrame = new OBSVideoFrame(mode_->GetWidth(), mode_->GetHeight());
200
+
201
 #ifdef LOG_SETUP_VIDEO_FORMAT
202
    LOG(LOG_INFO, "Setup video format: %s, %s, %s",
203
        pixelFormat == bmdFormat8BitYUV ? "YUV" : "RGB",
204
@@ -250,7 +392,7 @@
205
    bool isauto = mode_->GetName() == "Auto";
206
    if (isauto) {
207
        displayMode = bmdModeNTSC;
208
-       pixelFormat = bmdFormat8BitYUV;
209
+       pixelFormat = bmdFormat10BitYUV;
210
        flags = bmdVideoInputEnableFormatDetection;
211
    } else {
212
        displayMode = mode_->GetDisplayMode();
213
@@ -487,13 +629,6 @@
214
    BMDVideoInputFormatChangedEvents events, IDeckLinkDisplayMode *newMode,
215
    BMDDetectedVideoInputFormatFlags detectedSignalFlags)
216
 {
217
-   input->PauseStreams();
218
-
219
-   mode->SetMode(newMode);
220
-
221
-   if (events & bmdVideoInputDisplayModeChanged) {
222
-       displayMode = mode->GetDisplayMode();
223
-   }
224
 
225
    if (events & bmdVideoInputColorspaceChanged) {
226
        switch (detectedSignalFlags) {
227
@@ -503,25 +638,30 @@
228
 
229
        default:
230
        case bmdDetectedVideoInputYCbCr422:
231
-           pixelFormat = bmdFormat8BitYUV;
232
+           pixelFormat = bmdFormat10BitYUV;
233
            break;
234
        }
235
    }
236
 
237
-   const HRESULT videoResult = input->EnableVideoInput(
238
-       displayMode, pixelFormat, bmdVideoInputEnableFormatDetection);
239
-   if (videoResult != S_OK) {
240
-       LOG(LOG_ERROR, "Failed to enable video input");
241
-       input->StopStreams();
242
-       FinalizeStream();
243
-
244
-       return E_FAIL;
245
-   }
246
+   if (events & bmdVideoInputDisplayModeChanged) {
247
+       input->PauseStreams();
248
+       mode->SetMode(newMode);
249
+       displayMode = mode->GetDisplayMode();
250
 
251
-   SetupVideoFormat(mode);
252
+       const HRESULT videoResult = input->EnableVideoInput(
253
+           displayMode, pixelFormat,
254
+           bmdVideoInputEnableFormatDetection);
255
+       if (videoResult != S_OK) {
256
+           LOG(LOG_ERROR, "Failed to enable video input");
257
+           input->StopStreams();
258
+           FinalizeStream();
259
 
260
-   input->FlushStreams();
261
-   input->StartStreams();
262
+           return E_FAIL;
263
+       }
264
+       SetupVideoFormat(mode);
265
+       input->FlushStreams();
266
+       input->StartStreams();
267
+   }
268
 
269
    return S_OK;
270
 }
271
obs-studio-26.0.2.tar.xz/plugins/decklink/decklink-device-instance.hpp -> obs-studio-26.1.0.tar.xz/plugins/decklink/decklink-device-instance.hpp Changed
32
 
1
@@ -6,6 +6,7 @@
2
 #include <obs-module.h>
3
 #include "decklink-device.hpp"
4
 #include "../../libobs/media-io/video-scaler.h"
5
+#include "OBSVideoFrame.h"
6
 
7
 class AudioRepacker;
8
 class DecklinkBase;
9
@@ -14,6 +15,7 @@
10
 protected:
11
    struct obs_source_frame2 currentFrame;
12
    struct obs_source_audio currentPacket;
13
+   struct obs_source_cea_708 currentCaptions;
14
    DecklinkBase *decklink = nullptr;
15
    DeckLinkDevice *device = nullptr;
16
    DeckLinkDeviceMode *mode = nullptr;
17
@@ -34,6 +36,7 @@
18
    speaker_layout channelFormat = SPEAKERS_STEREO;
19
    bool swap;
20
 
21
+   OBSVideoFrame *convertFrame = nullptr;
22
    IDeckLinkMutableVideoFrame *decklinkOutputFrame = nullptr;
23
 
24
    void FinalizeStream();
25
@@ -104,4 +107,6 @@
26
 
27
    void DisplayVideoFrame(video_data *frame);
28
    void WriteAudio(audio_data *frames);
29
+   void HandleCaptionPacket(IDeckLinkAncillaryPacket *packet,
30
+                const uint64_t timestamp);
31
 };
32
obs-studio-26.0.2.tar.xz/plugins/decklink/decklink-device.cpp -> obs-studio-26.1.0.tar.xz/plugins/decklink/decklink-device.cpp Changed
15
 
1
@@ -30,10 +30,9 @@
2
 
3
 bool DeckLinkDevice::Init()
4
 {
5
-   ComPtr<IDeckLinkAttributes> attributes;
6
-   const HRESULT result = device->QueryInterface(IID_IDeckLinkAttributes,
7
-                             (void **)&attributes);
8
-
9
+   ComPtr<IDeckLinkProfileAttributes> attributes;
10
+   const HRESULT result = device->QueryInterface(
11
+       IID_IDeckLinkProfileAttributes, (void **)&attributes);
12
    if (result == S_OK) {
13
        decklink_bool_t detectable = false;
14
        if (attributes->GetFlag(BMDDeckLinkSupportsInputFormatDetection,
15
obs-studio-26.0.2.tar.xz/plugins/decklink/decklink-source.cpp -> obs-studio-26.1.0.tar.xz/plugins/decklink/decklink-source.cpp Changed
14
 
1
@@ -331,9 +331,9 @@
2
    struct obs_source_info decklink_source_info = {};
3
    decklink_source_info.id = "decklink-input";
4
    decklink_source_info.type = OBS_SOURCE_TYPE_INPUT;
5
-   decklink_source_info.output_flags = OBS_SOURCE_ASYNC_VIDEO |
6
-                       OBS_SOURCE_AUDIO |
7
-                       OBS_SOURCE_DO_NOT_DUPLICATE;
8
+   decklink_source_info.output_flags =
9
+       OBS_SOURCE_ASYNC_VIDEO | OBS_SOURCE_AUDIO |
10
+       OBS_SOURCE_DO_NOT_DUPLICATE | OBS_SOURCE_CEA_708;
11
    decklink_source_info.create = decklink_create;
12
    decklink_source_info.destroy = decklink_destroy;
13
    decklink_source_info.get_defaults = decklink_get_defaults;
14
obs-studio-26.0.2.tar.xz/plugins/decklink/linux/CMakeLists.txt -> obs-studio-26.1.0.tar.xz/plugins/decklink/linux/CMakeLists.txt Changed
36
 
1
@@ -5,6 +5,8 @@
2
    return()
3
 endif()
4
 
5
+include_directories(${CMAKE_SOURCE_DIR}/deps/libcaption)
6
+
7
 set(linux-decklink-sdk_HEADERS
8
    decklink-sdk/DeckLinkAPI.h
9
    decklink-sdk/DeckLinkAPIConfiguration.h
10
@@ -34,6 +36,7 @@
11
    ../audio-repack.h
12
    ../audio-repack.hpp
13
    ../util.hpp
14
+   ../OBSVideoFrame.h
15
    )
16
 
17
 set(linux-decklink_SOURCES
18
@@ -51,6 +54,7 @@
19
    ../audio-repack.c
20
    platform.cpp
21
    ../util.cpp
22
+   ../OBSVideoFrame.cpp
23
    )
24
 
25
 add_library(linux-decklink MODULE
26
@@ -62,7 +66,7 @@
27
 
28
 target_link_libraries(linux-decklink
29
    libobs
30
-   )
31
-set_target_properties(linux-decklink PROPERTIES FOLDER "plugins")
32
+   caption)
33
+set_target_properties(linux-decklink PROPERTIES FOLDER "plugins/decklink")
34
 
35
 install_obs_plugin_with_data(linux-decklink ../data)
36
obs-studio-26.0.2.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI.h Changed
1023
 
1
@@ -1,5 +1,5 @@
2
 /* -LICENSE-START-
3
-** Copyright (c) 2018 Blackmagic Design
4
+** Copyright (c) 2020 Blackmagic Design
5
 **
6
 ** Permission is hereby granted, free of charge, to any person or organization
7
 ** obtaining a copy of the software and accompanying documentation covered by
8
@@ -7,14 +7,14 @@
9
 ** execute, and transmit the Software, and to prepare derivative works of the
10
 ** Software, and to permit third-parties to whom the Software is furnished to
11
 ** do so, all subject to the following:
12
-** 
13
+**
14
 ** The copyright notices in the Software and this entire statement, including
15
 ** the above license grant, this restriction and the following disclaimer,
16
 ** must be included in all copies of the Software, in whole or in part, and
17
 ** all derivative works of the Software, unless such copies or derivative
18
 ** works are solely in the form of machine-executable object code generated by
19
 ** a source language processor.
20
-** 
21
+**
22
 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
 ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
 ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
25
@@ -59,41 +59,45 @@
26
 
27
 // Interface ID Declarations
28
 
29
-BMD_CONST REFIID IID_IDeckLinkVideoOutputCallback                 = /* 20AA5225-1958-47CB-820B-80A8D521A6EE */ {0x20,0xAA,0x52,0x25,0x19,0x58,0x47,0xCB,0x82,0x0B,0x80,0xA8,0xD5,0x21,0xA6,0xEE};
30
-BMD_CONST REFIID IID_IDeckLinkInputCallback                       = /* DD04E5EC-7415-42AB-AE4A-E80C4DFC044A */ {0xDD,0x04,0xE5,0xEC,0x74,0x15,0x42,0xAB,0xAE,0x4A,0xE8,0x0C,0x4D,0xFC,0x04,0x4A};
31
-BMD_CONST REFIID IID_IDeckLinkEncoderInputCallback                = /* ACF13E61-F4A0-4974-A6A7-59AFF6268B31 */ {0xAC,0xF1,0x3E,0x61,0xF4,0xA0,0x49,0x74,0xA6,0xA7,0x59,0xAF,0xF6,0x26,0x8B,0x31};
32
-BMD_CONST REFIID IID_IDeckLinkMemoryAllocator                     = /* B36EB6E7-9D29-4AA8-92EF-843B87A289E8 */ {0xB3,0x6E,0xB6,0xE7,0x9D,0x29,0x4A,0xA8,0x92,0xEF,0x84,0x3B,0x87,0xA2,0x89,0xE8};
33
-BMD_CONST REFIID IID_IDeckLinkAudioOutputCallback                 = /* 403C681B-7F46-4A12-B993-2BB127084EE6 */ {0x40,0x3C,0x68,0x1B,0x7F,0x46,0x4A,0x12,0xB9,0x93,0x2B,0xB1,0x27,0x08,0x4E,0xE6};
34
-BMD_CONST REFIID IID_IDeckLinkIterator                            = /* 50FB36CD-3063-4B73-BDBB-958087F2D8BA */ {0x50,0xFB,0x36,0xCD,0x30,0x63,0x4B,0x73,0xBD,0xBB,0x95,0x80,0x87,0xF2,0xD8,0xBA};
35
-BMD_CONST REFIID IID_IDeckLinkAPIInformation                      = /* 7BEA3C68-730D-4322-AF34-8A7152B532A4 */ {0x7B,0xEA,0x3C,0x68,0x73,0x0D,0x43,0x22,0xAF,0x34,0x8A,0x71,0x52,0xB5,0x32,0xA4};
36
-BMD_CONST REFIID IID_IDeckLinkOutput                              = /* CC5C8A6E-3F2F-4B3A-87EA-FD78AF300564 */ {0xCC,0x5C,0x8A,0x6E,0x3F,0x2F,0x4B,0x3A,0x87,0xEA,0xFD,0x78,0xAF,0x30,0x05,0x64};
37
-BMD_CONST REFIID IID_IDeckLinkInput                               = /* AF22762B-DFAC-4846-AA79-FA8883560995 */ {0xAF,0x22,0x76,0x2B,0xDF,0xAC,0x48,0x46,0xAA,0x79,0xFA,0x88,0x83,0x56,0x09,0x95};
38
-BMD_CONST REFIID IID_IDeckLinkHDMIInputEDID                       = /* ABBBACBC-45BC-4665-9D92-ACE6E5A97902 */ {0xAB,0xBB,0xAC,0xBC,0x45,0xBC,0x46,0x65,0x9D,0x92,0xAC,0xE6,0xE5,0xA9,0x79,0x02};
39
-BMD_CONST REFIID IID_IDeckLinkEncoderInput                        = /* 270587DA-6B7D-42E7-A1F0-6D853F581185 */ {0x27,0x05,0x87,0xDA,0x6B,0x7D,0x42,0xE7,0xA1,0xF0,0x6D,0x85,0x3F,0x58,0x11,0x85};
40
-BMD_CONST REFIID IID_IDeckLinkVideoFrame                          = /* 3F716FE0-F023-4111-BE5D-EF4414C05B17 */ {0x3F,0x71,0x6F,0xE0,0xF0,0x23,0x41,0x11,0xBE,0x5D,0xEF,0x44,0x14,0xC0,0x5B,0x17};
41
-BMD_CONST REFIID IID_IDeckLinkMutableVideoFrame                   = /* 69E2639F-40DA-4E19-B6F2-20ACE815C390 */ {0x69,0xE2,0x63,0x9F,0x40,0xDA,0x4E,0x19,0xB6,0xF2,0x20,0xAC,0xE8,0x15,0xC3,0x90};
42
-BMD_CONST REFIID IID_IDeckLinkVideoFrame3DExtensions              = /* DA0F7E4A-EDC7-48A8-9CDD-2DB51C729CD7 */ {0xDA,0x0F,0x7E,0x4A,0xED,0xC7,0x48,0xA8,0x9C,0xDD,0x2D,0xB5,0x1C,0x72,0x9C,0xD7};
43
-BMD_CONST REFIID IID_IDeckLinkVideoFrameMetadataExtensions        = /* D5973DC9-6432-46D0-8F0B-2496F8A1238F */ {0xD5,0x97,0x3D,0xC9,0x64,0x32,0x46,0xD0,0x8F,0x0B,0x24,0x96,0xF8,0xA1,0x23,0x8F};
44
-BMD_CONST REFIID IID_IDeckLinkVideoInputFrame                     = /* 05CFE374-537C-4094-9A57-680525118F44 */ {0x05,0xCF,0xE3,0x74,0x53,0x7C,0x40,0x94,0x9A,0x57,0x68,0x05,0x25,0x11,0x8F,0x44};
45
-BMD_CONST REFIID IID_IDeckLinkAncillaryPacket                     = /* CC5BBF7E-029C-4D3B-9158-6000EF5E3670 */ {0xCC,0x5B,0xBF,0x7E,0x02,0x9C,0x4D,0x3B,0x91,0x58,0x60,0x00,0xEF,0x5E,0x36,0x70};
46
-BMD_CONST REFIID IID_IDeckLinkAncillaryPacketIterator             = /* 3FC8994B-88FB-4C17-968F-9AAB69D964A7 */ {0x3F,0xC8,0x99,0x4B,0x88,0xFB,0x4C,0x17,0x96,0x8F,0x9A,0xAB,0x69,0xD9,0x64,0xA7};
47
-BMD_CONST REFIID IID_IDeckLinkVideoFrameAncillaryPackets          = /* 6C186C0F-459E-41D8-AEE2-4812D81AEE68 */ {0x6C,0x18,0x6C,0x0F,0x45,0x9E,0x41,0xD8,0xAE,0xE2,0x48,0x12,0xD8,0x1A,0xEE,0x68};
48
-BMD_CONST REFIID IID_IDeckLinkVideoFrameAncillary                 = /* 732E723C-D1A4-4E29-9E8E-4A88797A0004 */ {0x73,0x2E,0x72,0x3C,0xD1,0xA4,0x4E,0x29,0x9E,0x8E,0x4A,0x88,0x79,0x7A,0x00,0x04};
49
-BMD_CONST REFIID IID_IDeckLinkEncoderPacket                       = /* B693F36C-316E-4AF1-B6C2-F389A4BCA620 */ {0xB6,0x93,0xF3,0x6C,0x31,0x6E,0x4A,0xF1,0xB6,0xC2,0xF3,0x89,0xA4,0xBC,0xA6,0x20};
50
-BMD_CONST REFIID IID_IDeckLinkEncoderVideoPacket                  = /* 4E7FD944-E8C7-4EAC-B8C0-7B77F80F5AE0 */ {0x4E,0x7F,0xD9,0x44,0xE8,0xC7,0x4E,0xAC,0xB8,0xC0,0x7B,0x77,0xF8,0x0F,0x5A,0xE0};
51
-BMD_CONST REFIID IID_IDeckLinkEncoderAudioPacket                  = /* 49E8EDC8-693B-4E14-8EF6-12C658F5A07A */ {0x49,0xE8,0xED,0xC8,0x69,0x3B,0x4E,0x14,0x8E,0xF6,0x12,0xC6,0x58,0xF5,0xA0,0x7A};
52
-BMD_CONST REFIID IID_IDeckLinkH265NALPacket                       = /* 639C8E0B-68D5-4BDE-A6D4-95F3AEAFF2E7 */ {0x63,0x9C,0x8E,0x0B,0x68,0xD5,0x4B,0xDE,0xA6,0xD4,0x95,0xF3,0xAE,0xAF,0xF2,0xE7};
53
-BMD_CONST REFIID IID_IDeckLinkAudioInputPacket                    = /* E43D5870-2894-11DE-8C30-0800200C9A66 */ {0xE4,0x3D,0x58,0x70,0x28,0x94,0x11,0xDE,0x8C,0x30,0x08,0x00,0x20,0x0C,0x9A,0x66};
54
-BMD_CONST REFIID IID_IDeckLinkScreenPreviewCallback               = /* B1D3F49A-85FE-4C5D-95C8-0B5D5DCCD438 */ {0xB1,0xD3,0xF4,0x9A,0x85,0xFE,0x4C,0x5D,0x95,0xC8,0x0B,0x5D,0x5D,0xCC,0xD4,0x38};
55
-BMD_CONST REFIID IID_IDeckLinkGLScreenPreviewHelper               = /* 504E2209-CAC7-4C1A-9FB4-C5BB6274D22F */ {0x50,0x4E,0x22,0x09,0xCA,0xC7,0x4C,0x1A,0x9F,0xB4,0xC5,0xBB,0x62,0x74,0xD2,0x2F};
56
-BMD_CONST REFIID IID_IDeckLinkNotificationCallback                = /* B002A1EC-070D-4288-8289-BD5D36E5FF0D */ {0xB0,0x02,0xA1,0xEC,0x07,0x0D,0x42,0x88,0x82,0x89,0xBD,0x5D,0x36,0xE5,0xFF,0x0D};
57
-BMD_CONST REFIID IID_IDeckLinkNotification                        = /* 0A1FB207-E215-441B-9B19-6FA1575946C5 */ {0x0A,0x1F,0xB2,0x07,0xE2,0x15,0x44,0x1B,0x9B,0x19,0x6F,0xA1,0x57,0x59,0x46,0xC5};
58
-BMD_CONST REFIID IID_IDeckLinkAttributes                          = /* ABC11843-D966-44CB-96E2-A1CB5D3135C4 */ {0xAB,0xC1,0x18,0x43,0xD9,0x66,0x44,0xCB,0x96,0xE2,0xA1,0xCB,0x5D,0x31,0x35,0xC4};
59
-BMD_CONST REFIID IID_IDeckLinkStatus                              = /* 5F558200-4028-49BC-BEAC-DB3FA4A96E46 */ {0x5F,0x55,0x82,0x00,0x40,0x28,0x49,0xBC,0xBE,0xAC,0xDB,0x3F,0xA4,0xA9,0x6E,0x46};
60
-BMD_CONST REFIID IID_IDeckLinkKeyer                               = /* 89AFCAF5-65F8-421E-98F7-96FE5F5BFBA3 */ {0x89,0xAF,0xCA,0xF5,0x65,0xF8,0x42,0x1E,0x98,0xF7,0x96,0xFE,0x5F,0x5B,0xFB,0xA3};
61
-BMD_CONST REFIID IID_IDeckLinkVideoConversion                     = /* 3BBCB8A2-DA2C-42D9-B5D8-88083644E99A */ {0x3B,0xBC,0xB8,0xA2,0xDA,0x2C,0x42,0xD9,0xB5,0xD8,0x88,0x08,0x36,0x44,0xE9,0x9A};
62
-BMD_CONST REFIID IID_IDeckLinkDeviceNotificationCallback          = /* 4997053B-0ADF-4CC8-AC70-7A50C4BE728F */ {0x49,0x97,0x05,0x3B,0x0A,0xDF,0x4C,0xC8,0xAC,0x70,0x7A,0x50,0xC4,0xBE,0x72,0x8F};
63
-BMD_CONST REFIID IID_IDeckLinkDiscovery                           = /* CDBF631C-BC76-45FA-B44D-C55059BC6101 */ {0xCD,0xBF,0x63,0x1C,0xBC,0x76,0x45,0xFA,0xB4,0x4D,0xC5,0x50,0x59,0xBC,0x61,0x01};
64
+BMD_CONST REFIID IID_IDeckLinkVideoOutputCallback                 = /* 20AA5225-1958-47CB-820B-80A8D521A6EE */ { 0x20,0xAA,0x52,0x25,0x19,0x58,0x47,0xCB,0x82,0x0B,0x80,0xA8,0xD5,0x21,0xA6,0xEE };
65
+BMD_CONST REFIID IID_IDeckLinkInputCallback                       = /* C6FCE4C9-C4E4-4047-82FB-5D238232A902 */ { 0xC6,0xFC,0xE4,0xC9,0xC4,0xE4,0x40,0x47,0x82,0xFB,0x5D,0x23,0x82,0x32,0xA9,0x02 };
66
+BMD_CONST REFIID IID_IDeckLinkEncoderInputCallback                = /* ACF13E61-F4A0-4974-A6A7-59AFF6268B31 */ { 0xAC,0xF1,0x3E,0x61,0xF4,0xA0,0x49,0x74,0xA6,0xA7,0x59,0xAF,0xF6,0x26,0x8B,0x31 };
67
+BMD_CONST REFIID IID_IDeckLinkMemoryAllocator                     = /* B36EB6E7-9D29-4AA8-92EF-843B87A289E8 */ { 0xB3,0x6E,0xB6,0xE7,0x9D,0x29,0x4A,0xA8,0x92,0xEF,0x84,0x3B,0x87,0xA2,0x89,0xE8 };
68
+BMD_CONST REFIID IID_IDeckLinkAudioOutputCallback                 = /* 403C681B-7F46-4A12-B993-2BB127084EE6 */ { 0x40,0x3C,0x68,0x1B,0x7F,0x46,0x4A,0x12,0xB9,0x93,0x2B,0xB1,0x27,0x08,0x4E,0xE6 };
69
+BMD_CONST REFIID IID_IDeckLinkIterator                            = /* 50FB36CD-3063-4B73-BDBB-958087F2D8BA */ { 0x50,0xFB,0x36,0xCD,0x30,0x63,0x4B,0x73,0xBD,0xBB,0x95,0x80,0x87,0xF2,0xD8,0xBA };
70
+BMD_CONST REFIID IID_IDeckLinkAPIInformation                      = /* 7BEA3C68-730D-4322-AF34-8A7152B532A4 */ { 0x7B,0xEA,0x3C,0x68,0x73,0x0D,0x43,0x22,0xAF,0x34,0x8A,0x71,0x52,0xB5,0x32,0xA4 };
71
+BMD_CONST REFIID IID_IDeckLinkOutput                              = /* BE2D9020-461E-442F-84B7-E949CB953B9D */ { 0xBE,0x2D,0x90,0x20,0x46,0x1E,0x44,0x2F,0x84,0xB7,0xE9,0x49,0xCB,0x95,0x3B,0x9D };
72
+BMD_CONST REFIID IID_IDeckLinkInput                               = /* C21CDB6E-F414-46E4-A636-80A566E0ED37 */ { 0xC2,0x1C,0xDB,0x6E,0xF4,0x14,0x46,0xE4,0xA6,0x36,0x80,0xA5,0x66,0xE0,0xED,0x37 };
73
+BMD_CONST REFIID IID_IDeckLinkHDMIInputEDID                       = /* ABBBACBC-45BC-4665-9D92-ACE6E5A97902 */ { 0xAB,0xBB,0xAC,0xBC,0x45,0xBC,0x46,0x65,0x9D,0x92,0xAC,0xE6,0xE5,0xA9,0x79,0x02 };
74
+BMD_CONST REFIID IID_IDeckLinkEncoderInput                        = /* F222551D-13DF-4FD8-B587-9D4F19EC12C9 */ { 0xF2,0x22,0x55,0x1D,0x13,0xDF,0x4F,0xD8,0xB5,0x87,0x9D,0x4F,0x19,0xEC,0x12,0xC9 };
75
+BMD_CONST REFIID IID_IDeckLinkVideoFrame                          = /* 3F716FE0-F023-4111-BE5D-EF4414C05B17 */ { 0x3F,0x71,0x6F,0xE0,0xF0,0x23,0x41,0x11,0xBE,0x5D,0xEF,0x44,0x14,0xC0,0x5B,0x17 };
76
+BMD_CONST REFIID IID_IDeckLinkMutableVideoFrame                   = /* 69E2639F-40DA-4E19-B6F2-20ACE815C390 */ { 0x69,0xE2,0x63,0x9F,0x40,0xDA,0x4E,0x19,0xB6,0xF2,0x20,0xAC,0xE8,0x15,0xC3,0x90 };
77
+BMD_CONST REFIID IID_IDeckLinkVideoFrame3DExtensions              = /* DA0F7E4A-EDC7-48A8-9CDD-2DB51C729CD7 */ { 0xDA,0x0F,0x7E,0x4A,0xED,0xC7,0x48,0xA8,0x9C,0xDD,0x2D,0xB5,0x1C,0x72,0x9C,0xD7 };
78
+BMD_CONST REFIID IID_IDeckLinkVideoFrameMetadataExtensions        = /* E232A5B7-4DB4-44C9-9152-F47C12E5F051 */ { 0xE2,0x32,0xA5,0xB7,0x4D,0xB4,0x44,0xC9,0x91,0x52,0xF4,0x7C,0x12,0xE5,0xF0,0x51 };
79
+BMD_CONST REFIID IID_IDeckLinkVideoInputFrame                     = /* 05CFE374-537C-4094-9A57-680525118F44 */ { 0x05,0xCF,0xE3,0x74,0x53,0x7C,0x40,0x94,0x9A,0x57,0x68,0x05,0x25,0x11,0x8F,0x44 };
80
+BMD_CONST REFIID IID_IDeckLinkAncillaryPacket                     = /* CC5BBF7E-029C-4D3B-9158-6000EF5E3670 */ { 0xCC,0x5B,0xBF,0x7E,0x02,0x9C,0x4D,0x3B,0x91,0x58,0x60,0x00,0xEF,0x5E,0x36,0x70 };
81
+BMD_CONST REFIID IID_IDeckLinkAncillaryPacketIterator             = /* 3FC8994B-88FB-4C17-968F-9AAB69D964A7 */ { 0x3F,0xC8,0x99,0x4B,0x88,0xFB,0x4C,0x17,0x96,0x8F,0x9A,0xAB,0x69,0xD9,0x64,0xA7 };
82
+BMD_CONST REFIID IID_IDeckLinkVideoFrameAncillaryPackets          = /* 6C186C0F-459E-41D8-AEE2-4812D81AEE68 */ { 0x6C,0x18,0x6C,0x0F,0x45,0x9E,0x41,0xD8,0xAE,0xE2,0x48,0x12,0xD8,0x1A,0xEE,0x68 };
83
+BMD_CONST REFIID IID_IDeckLinkVideoFrameAncillary                 = /* 732E723C-D1A4-4E29-9E8E-4A88797A0004 */ { 0x73,0x2E,0x72,0x3C,0xD1,0xA4,0x4E,0x29,0x9E,0x8E,0x4A,0x88,0x79,0x7A,0x00,0x04 };
84
+BMD_CONST REFIID IID_IDeckLinkEncoderPacket                       = /* B693F36C-316E-4AF1-B6C2-F389A4BCA620 */ { 0xB6,0x93,0xF3,0x6C,0x31,0x6E,0x4A,0xF1,0xB6,0xC2,0xF3,0x89,0xA4,0xBC,0xA6,0x20 };
85
+BMD_CONST REFIID IID_IDeckLinkEncoderVideoPacket                  = /* 4E7FD944-E8C7-4EAC-B8C0-7B77F80F5AE0 */ { 0x4E,0x7F,0xD9,0x44,0xE8,0xC7,0x4E,0xAC,0xB8,0xC0,0x7B,0x77,0xF8,0x0F,0x5A,0xE0 };
86
+BMD_CONST REFIID IID_IDeckLinkEncoderAudioPacket                  = /* 49E8EDC8-693B-4E14-8EF6-12C658F5A07A */ { 0x49,0xE8,0xED,0xC8,0x69,0x3B,0x4E,0x14,0x8E,0xF6,0x12,0xC6,0x58,0xF5,0xA0,0x7A };
87
+BMD_CONST REFIID IID_IDeckLinkH265NALPacket                       = /* 639C8E0B-68D5-4BDE-A6D4-95F3AEAFF2E7 */ { 0x63,0x9C,0x8E,0x0B,0x68,0xD5,0x4B,0xDE,0xA6,0xD4,0x95,0xF3,0xAE,0xAF,0xF2,0xE7 };
88
+BMD_CONST REFIID IID_IDeckLinkAudioInputPacket                    = /* E43D5870-2894-11DE-8C30-0800200C9A66 */ { 0xE4,0x3D,0x58,0x70,0x28,0x94,0x11,0xDE,0x8C,0x30,0x08,0x00,0x20,0x0C,0x9A,0x66 };
89
+BMD_CONST REFIID IID_IDeckLinkScreenPreviewCallback               = /* B1D3F49A-85FE-4C5D-95C8-0B5D5DCCD438 */ { 0xB1,0xD3,0xF4,0x9A,0x85,0xFE,0x4C,0x5D,0x95,0xC8,0x0B,0x5D,0x5D,0xCC,0xD4,0x38 };
90
+BMD_CONST REFIID IID_IDeckLinkGLScreenPreviewHelper               = /* 504E2209-CAC7-4C1A-9FB4-C5BB6274D22F */ { 0x50,0x4E,0x22,0x09,0xCA,0xC7,0x4C,0x1A,0x9F,0xB4,0xC5,0xBB,0x62,0x74,0xD2,0x2F };
91
+BMD_CONST REFIID IID_IDeckLinkNotificationCallback                = /* B002A1EC-070D-4288-8289-BD5D36E5FF0D */ { 0xB0,0x02,0xA1,0xEC,0x07,0x0D,0x42,0x88,0x82,0x89,0xBD,0x5D,0x36,0xE5,0xFF,0x0D };
92
+BMD_CONST REFIID IID_IDeckLinkNotification                        = /* B85DF4C8-BDF5-47C1-8064-28162EBDD4EB */ { 0xB8,0x5D,0xF4,0xC8,0xBD,0xF5,0x47,0xC1,0x80,0x64,0x28,0x16,0x2E,0xBD,0xD4,0xEB };
93
+BMD_CONST REFIID IID_IDeckLinkProfileAttributes                   = /* 17D4BF8E-4911-473A-80A0-731CF6FF345B */ { 0x17,0xD4,0xBF,0x8E,0x49,0x11,0x47,0x3A,0x80,0xA0,0x73,0x1C,0xF6,0xFF,0x34,0x5B };
94
+BMD_CONST REFIID IID_IDeckLinkProfileIterator                     = /* 29E5A8C0-8BE4-46EB-93AC-31DAAB5B7BF2 */ { 0x29,0xE5,0xA8,0xC0,0x8B,0xE4,0x46,0xEB,0x93,0xAC,0x31,0xDA,0xAB,0x5B,0x7B,0xF2 };
95
+BMD_CONST REFIID IID_IDeckLinkProfile                             = /* 16093466-674A-432B-9DA0-1AC2C5A8241C */ { 0x16,0x09,0x34,0x66,0x67,0x4A,0x43,0x2B,0x9D,0xA0,0x1A,0xC2,0xC5,0xA8,0x24,0x1C };
96
+BMD_CONST REFIID IID_IDeckLinkProfileCallback                     = /* A4F9341E-97AA-4E04-8935-15F809898CEA */ { 0xA4,0xF9,0x34,0x1E,0x97,0xAA,0x4E,0x04,0x89,0x35,0x15,0xF8,0x09,0x89,0x8C,0xEA };
97
+BMD_CONST REFIID IID_IDeckLinkProfileManager                      = /* 30D41429-3998-4B6D-84F8-78C94A797C6E */ { 0x30,0xD4,0x14,0x29,0x39,0x98,0x4B,0x6D,0x84,0xF8,0x78,0xC9,0x4A,0x79,0x7C,0x6E };
98
+BMD_CONST REFIID IID_IDeckLinkStatus                              = /* 5F558200-4028-49BC-BEAC-DB3FA4A96E46 */ { 0x5F,0x55,0x82,0x00,0x40,0x28,0x49,0xBC,0xBE,0xAC,0xDB,0x3F,0xA4,0xA9,0x6E,0x46 };
99
+BMD_CONST REFIID IID_IDeckLinkKeyer                               = /* 89AFCAF5-65F8-421E-98F7-96FE5F5BFBA3 */ { 0x89,0xAF,0xCA,0xF5,0x65,0xF8,0x42,0x1E,0x98,0xF7,0x96,0xFE,0x5F,0x5B,0xFB,0xA3 };
100
+BMD_CONST REFIID IID_IDeckLinkVideoConversion                     = /* 3BBCB8A2-DA2C-42D9-B5D8-88083644E99A */ { 0x3B,0xBC,0xB8,0xA2,0xDA,0x2C,0x42,0xD9,0xB5,0xD8,0x88,0x08,0x36,0x44,0xE9,0x9A };
101
+BMD_CONST REFIID IID_IDeckLinkDeviceNotificationCallback          = /* 4997053B-0ADF-4CC8-AC70-7A50C4BE728F */ { 0x49,0x97,0x05,0x3B,0x0A,0xDF,0x4C,0xC8,0xAC,0x70,0x7A,0x50,0xC4,0xBE,0x72,0x8F };
102
+BMD_CONST REFIID IID_IDeckLinkDiscovery                           = /* CDBF631C-BC76-45FA-B44D-C55059BC6101 */ { 0xCD,0xBF,0x63,0x1C,0xBC,0x76,0x45,0xFA,0xB4,0x4D,0xC5,0x50,0x59,0xBC,0x61,0x01 };
103
 
104
 /* Enum BMDVideoOutputFlags - Flags to control the output of ancillary data along with video. */
105
 
106
@@ -103,7 +107,21 @@
107
     bmdVideoOutputVANC                                           = 1 << 0,
108
     bmdVideoOutputVITC                                           = 1 << 1,
109
     bmdVideoOutputRP188                                          = 1 << 2,
110
-    bmdVideoOutputDualStream3D                                   = 1 << 4
111
+    bmdVideoOutputDualStream3D                                   = 1 << 4,
112
+    bmdVideoOutputSynchronizeToPlaybackGroup                     = 1 << 6
113
+};
114
+
115
+/* Enum BMDSupportedVideoModeFlags - Flags to describe supported video modes */
116
+
117
+typedef uint32_t BMDSupportedVideoModeFlags;
118
+enum _BMDSupportedVideoModeFlags {
119
+    bmdSupportedVideoModeDefault                                 = 0,
120
+    bmdSupportedVideoModeKeying                                  = 1 << 0,
121
+    bmdSupportedVideoModeDualStream3D                            = 1 << 1,
122
+    bmdSupportedVideoModeSDISingleLink                           = 1 << 2,
123
+    bmdSupportedVideoModeSDIDualLink                             = 1 << 3,
124
+    bmdSupportedVideoModeSDIQuadLink                             = 1 << 4,
125
+    bmdSupportedVideoModeInAnyProfile                            = 1 << 5
126
 };
127
 
128
 /* Enum BMDPacketType - Type of packet */
129
@@ -121,7 +139,6 @@
130
     bmdFrameFlagDefault                                          = 0,
131
     bmdFrameFlagFlipVertical                                     = 1 << 0,
132
     bmdFrameContainsHDRMetadata                                  = 1 << 1,
133
-    bmdFrameContainsCintelMetadata                               = 1 << 2,
134
 
135
     /* Flags that are applicable only to instances of IDeckLinkVideoInputFrame */
136
 
137
@@ -135,7 +152,8 @@
138
 enum _BMDVideoInputFlags {
139
     bmdVideoInputFlagDefault                                     = 0,
140
     bmdVideoInputEnableFormatDetection                           = 1 << 0,
141
-    bmdVideoInputDualStream3D                                    = 1 << 1
142
+    bmdVideoInputDualStream3D                                    = 1 << 1,
143
+    bmdVideoInputSynchronizeToCaptureGroup                       = 1 << 2
144
 };
145
 
146
 /* Enum BMDVideoInputFormatChangedEvents - Bitmask passed to the VideoInputFormatChanged notification to identify the properties of the input signal that have changed */
147
@@ -153,7 +171,10 @@
148
 enum _BMDDetectedVideoInputFormatFlags {
149
     bmdDetectedVideoInputYCbCr422                                = 1 << 0,
150
     bmdDetectedVideoInputRGB444                                  = 1 << 1,
151
-    bmdDetectedVideoInputDualStream3D                            = 1 << 2
152
+    bmdDetectedVideoInputDualStream3D                            = 1 << 2,
153
+    bmdDetectedVideoInput12BitDepth                              = 1 << 3,
154
+    bmdDetectedVideoInput10BitDepth                              = 1 << 4,
155
+    bmdDetectedVideoInput8BitDepth                               = 1 << 5
156
 };
157
 
158
 /* Enum BMDDeckLinkCapturePassthroughMode - Enumerates whether the video output is electrically connected to the video input or if the clean switching mode is enabled */
159
@@ -169,10 +190,10 @@
160
 
161
 typedef uint32_t BMDOutputFrameCompletionResult;
162
 enum _BMDOutputFrameCompletionResult {
163
-    bmdOutputFrameCompleted,                                    
164
-    bmdOutputFrameDisplayedLate,                                
165
-    bmdOutputFrameDropped,                                      
166
-    bmdOutputFrameFlushed                                       
167
+    bmdOutputFrameCompleted,
168
+    bmdOutputFrameDisplayedLate,
169
+    bmdOutputFrameDropped,
170
+    bmdOutputFrameFlushed
171
 };
172
 
173
 /* Enum BMDReferenceStatus - GenLock input status */
174
@@ -209,18 +230,9 @@
175
 
176
 typedef uint32_t BMDAudioOutputStreamType;
177
 enum _BMDAudioOutputStreamType {
178
-    bmdAudioOutputStreamContinuous,                             
179
-    bmdAudioOutputStreamContinuousDontResample,                 
180
-    bmdAudioOutputStreamTimestamped                             
181
-};
182
-
183
-/* Enum BMDDisplayModeSupport - Output mode supported flags */
184
-
185
-typedef uint32_t BMDDisplayModeSupport;
186
-enum _BMDDisplayModeSupport {
187
-    bmdDisplayModeNotSupported                                   = 0,
188
-    bmdDisplayModeSupported,                                    
189
-    bmdDisplayModeSupportedWithConversion                       
190
+    bmdAudioOutputStreamContinuous,
191
+    bmdAudioOutputStreamContinuousDontResample,
192
+    bmdAudioOutputStreamTimestamped
193
 };
194
 
195
 /* Enum BMDAncillaryPacketFormat - Ancillary packet format */
196
@@ -239,7 +251,8 @@
197
     bmdTimecodeRP188VITC1                                        = /* 'rpv1' */ 0x72707631,    // RP188 timecode where DBB1 equals VITC1 (line 9)
198
     bmdTimecodeRP188VITC2                                        = /* 'rp12' */ 0x72703132,    // RP188 timecode where DBB1 equals VITC2 (line 9 for progressive or line 571 for interlaced/PsF)
199
     bmdTimecodeRP188LTC                                          = /* 'rplt' */ 0x72706C74,    // RP188 timecode where DBB1 equals LTC (line 10)
200
-    bmdTimecodeRP188Any                                          = /* 'rp18' */ 0x72703138,    // For capture: return the first valid timecode in {VITC1, LTC ,VITC2} - For playback: set the timecode as VITC1
201
+    bmdTimecodeRP188HighFrameRate                                = /* 'rphr' */ 0x72706872,    // RP188 timecode where DBB1 is an HFRTC (SMPTE ST 12-3), the only timecode allowing the frame value to go above 30
202
+    bmdTimecodeRP188Any                                          = /* 'rp18' */ 0x72703138,    // Convenience for capture, returning the first valid timecode in {HFRTC (if supported), VITC1, LTC, VITC2}
203
     bmdTimecodeVITC                                              = /* 'vitc' */ 0x76697463,
204
     bmdTimecodeVITCField2                                        = /* 'vit2' */ 0x76697432,
205
     bmdTimecodeSerial                                            = /* 'seri' */ 0x73657269
206
@@ -364,15 +377,18 @@
207
 
208
 typedef uint32_t BMDDynamicRange;
209
 enum _BMDDynamicRange {
210
-    bmdDynamicRangeSDR                                           = 0,
211
-    bmdDynamicRangeHDRStaticPQ                                   = 1 << 29,    // SMPTE ST 2084
212
-    bmdDynamicRangeHDRStaticHLG                                  = 1 << 30 // ITU-R BT.2100-0
213
+    bmdDynamicRangeSDR                                           = 0,  // Standard Dynamic Range in accordance with SMPTE ST 2036-1
214
+    bmdDynamicRangeHDRStaticPQ                                   = 1 << 29,    // High Dynamic Range PQ in accordance with SMPTE ST 2084
215
+    bmdDynamicRangeHDRStaticHLG                                  = 1 << 30 // High Dynamic Range HLG in accordance with ITU-R BT.2100-0
216
 };
217
 
218
 /* Enum BMDDeckLinkHDMIInputEDIDID - DeckLink HDMI Input EDID ID */
219
 
220
 typedef uint32_t BMDDeckLinkHDMIInputEDIDID;
221
 enum _BMDDeckLinkHDMIInputEDIDID {
222
+
223
+    /* Integers */
224
+
225
     bmdDeckLinkHDMIInputEDIDDynamicRange                         = /* 'HIDy' */ 0x48494479 // Parameter is of type BMDDynamicRange. Default is (bmdDynamicRangeSDR|bmdDynamicRangeHDRStaticPQ)
226
 };
227
 
228
@@ -380,39 +396,17 @@
229
 
230
 typedef uint32_t BMDDeckLinkFrameMetadataID;
231
 enum _BMDDeckLinkFrameMetadataID {
232
+
233
+    /* Colorspace Metadata - Integers */
234
+
235
     bmdDeckLinkFrameMetadataColorspace                           = /* 'cspc' */ 0x63737063,    // Colorspace of video frame (see BMDColorspace)
236
+
237
+    /* HDR Metadata - Integers */
238
+
239
     bmdDeckLinkFrameMetadataHDRElectroOpticalTransferFunc        = /* 'eotf' */ 0x656F7466,    // EOTF in range 0-7 as per CEA 861.3
240
-    bmdDeckLinkFrameMetadataCintelFilmType                       = /* 'cfty' */ 0x63667479,    // Current film type
241
-    bmdDeckLinkFrameMetadataCintelFilmGauge                      = /* 'cfga' */ 0x63666761,    // Current film gauge
242
-    bmdDeckLinkFrameMetadataCintelOffsetDetectedHorizontal       = /* 'odfh' */ 0x6F646668,    // Horizontal offset (pixels) detected in image
243
-    bmdDeckLinkFrameMetadataCintelOffsetDetectedVertical         = /* 'odfv' */ 0x6F646676,    // Vertical offset (pixels) detected in image
244
-    bmdDeckLinkFrameMetadataCintelKeykodeLow                     = /* 'ckkl' */ 0x636B6B6C,    // Raw keykode value - low 64 bits
245
-    bmdDeckLinkFrameMetadataCintelKeykodeHigh                    = /* 'ckkh' */ 0x636B6B68,    // Raw keykode value - high 64 bits
246
-    bmdDeckLinkFrameMetadataCintelTile1Size                      = /* 'ct1s' */ 0x63743173,    // Size in bytes of compressed raw tile 1
247
-    bmdDeckLinkFrameMetadataCintelTile2Size                      = /* 'ct2s' */ 0x63743273,    // Size in bytes of compressed raw tile 2
248
-    bmdDeckLinkFrameMetadataCintelTile3Size                      = /* 'ct3s' */ 0x63743373,    // Size in bytes of compressed raw tile 3
249
-    bmdDeckLinkFrameMetadataCintelTile4Size                      = /* 'ct4s' */ 0x63743473,    // Size in bytes of compressed raw tile 4
250
-    bmdDeckLinkFrameMetadataCintelImageWidth                     = /* 'IWPx' */ 0x49575078,    // Width in pixels of image
251
-    bmdDeckLinkFrameMetadataCintelImageHeight                    = /* 'IHPx' */ 0x49485078,    // Height in pixels of image
252
-    bmdDeckLinkFrameMetadataCintelLinearMaskingRedInRed          = /* 'mrir' */ 0x6D726972,    // Red in red linear masking parameter
253
-    bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInRed        = /* 'mgir' */ 0x6D676972,    // Green in red linear masking parameter
254
-    bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInRed         = /* 'mbir' */ 0x6D626972,    // Blue in red linear masking parameter
255
-    bmdDeckLinkFrameMetadataCintelLinearMaskingRedInGreen        = /* 'mrig' */ 0x6D726967,    // Red in green linear masking parameter
256
-    bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInGreen      = /* 'mgig' */ 0x6D676967,    // Green in green linear masking parameter
257
-    bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInGreen       = /* 'mbig' */ 0x6D626967,    // Blue in green linear masking parameter
258
-    bmdDeckLinkFrameMetadataCintelLinearMaskingRedInBlue         = /* 'mrib' */ 0x6D726962,    // Red in blue linear masking parameter
259
-    bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInBlue       = /* 'mgib' */ 0x6D676962,    // Green in blue linear masking parameter
260
-    bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInBlue        = /* 'mbib' */ 0x6D626962,    // Blue in blue linear masking parameter
261
-    bmdDeckLinkFrameMetadataCintelLogMaskingRedInRed             = /* 'mlrr' */ 0x6D6C7272,    // Red in red log masking parameter
262
-    bmdDeckLinkFrameMetadataCintelLogMaskingGreenInRed           = /* 'mlgr' */ 0x6D6C6772,    // Green in red log masking parameter
263
-    bmdDeckLinkFrameMetadataCintelLogMaskingBlueInRed            = /* 'mlbr' */ 0x6D6C6272,    // Blue in red log masking parameter
264
-    bmdDeckLinkFrameMetadataCintelLogMaskingRedInGreen           = /* 'mlrg' */ 0x6D6C7267,    // Red in green log masking parameter
265
-    bmdDeckLinkFrameMetadataCintelLogMaskingGreenInGreen         = /* 'mlgg' */ 0x6D6C6767,    // Green in green log masking parameter
266
-    bmdDeckLinkFrameMetadataCintelLogMaskingBlueInGreen          = /* 'mlbg' */ 0x6D6C6267,    // Blue in green log masking parameter
267
-    bmdDeckLinkFrameMetadataCintelLogMaskingRedInBlue            = /* 'mlrb' */ 0x6D6C7262,    // Red in blue log masking parameter
268
-    bmdDeckLinkFrameMetadataCintelLogMaskingGreenInBlue          = /* 'mlgb' */ 0x6D6C6762,    // Green in blue log masking parameter
269
-    bmdDeckLinkFrameMetadataCintelLogMaskingBlueInBlue           = /* 'mlbb' */ 0x6D6C6262,    // Blue in blue log masking parameter
270
-    bmdDeckLinkFrameMetadataCintelFilmFrameRate                  = /* 'cffr' */ 0x63666672,    // Film frame rate
271
+
272
+    /* HDR Metadata - Floats */
273
+
274
     bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedX              = /* 'hdrx' */ 0x68647278,    // Red display primaries in range 0.0 - 1.0
275
     bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedY              = /* 'hdry' */ 0x68647279,    // Red display primaries in range 0.0 - 1.0
276
     bmdDeckLinkFrameMetadataHDRDisplayPrimariesGreenX            = /* 'hdgx' */ 0x68646778,    // Green display primaries in range 0.0 - 1.0
277
@@ -424,23 +418,35 @@
278
     bmdDeckLinkFrameMetadataHDRMaxDisplayMasteringLuminance      = /* 'hdml' */ 0x68646D6C,    // Max display mastering luminance in range 1 cd/m2 - 65535 cd/m2
279
     bmdDeckLinkFrameMetadataHDRMinDisplayMasteringLuminance      = /* 'hmil' */ 0x686D696C,    // Min display mastering luminance in range 0.0001 cd/m2 - 6.5535 cd/m2
280
     bmdDeckLinkFrameMetadataHDRMaximumContentLightLevel          = /* 'mcll' */ 0x6D636C6C,    // Maximum Content Light Level in range 1 cd/m2 - 65535 cd/m2
281
-    bmdDeckLinkFrameMetadataHDRMaximumFrameAverageLightLevel     = /* 'fall' */ 0x66616C6C,    // Maximum Frame Average Light Level in range 1 cd/m2 - 65535 cd/m2
282
-    bmdDeckLinkFrameMetadataCintelOffsetToApplyHorizontal        = /* 'otah' */ 0x6F746168,    // Horizontal offset (pixels) to be applied to image
283
-    bmdDeckLinkFrameMetadataCintelOffsetToApplyVertical          = /* 'otav' */ 0x6F746176,    // Vertical offset (pixels) to be applied to image
284
-    bmdDeckLinkFrameMetadataCintelGainRed                        = /* 'LfRd' */ 0x4C665264,    // Red gain parameter to apply after log
285
-    bmdDeckLinkFrameMetadataCintelGainGreen                      = /* 'LfGr' */ 0x4C664772,    // Green gain parameter to apply after log
286
-    bmdDeckLinkFrameMetadataCintelGainBlue                       = /* 'LfBl' */ 0x4C66426C,    // Blue gain parameter to apply after log
287
-    bmdDeckLinkFrameMetadataCintelLiftRed                        = /* 'GnRd' */ 0x476E5264,    // Red lift parameter to apply after log and gain
288
-    bmdDeckLinkFrameMetadataCintelLiftGreen                      = /* 'GnGr' */ 0x476E4772,    // Green lift parameter to apply after log and gain
289
-    bmdDeckLinkFrameMetadataCintelLiftBlue                       = /* 'GnBl' */ 0x476E426C // Blue lift parameter to apply after log and gain
290
+    bmdDeckLinkFrameMetadataHDRMaximumFrameAverageLightLevel     = /* 'fall' */ 0x66616C6C // Maximum Frame Average Light Level in range 1 cd/m2 - 65535 cd/m2
291
 };
292
 
293
-/* Enum BMDDuplexMode - Duplex for configurable ports */
294
+/* Enum BMDProfileID - Identifies a profile */
295
 
296
-typedef uint32_t BMDDuplexMode;
297
-enum _BMDDuplexMode {
298
-    bmdDuplexModeFull                                            = /* 'fdup' */ 0x66647570,
299
-    bmdDuplexModeHalf                                            = /* 'hdup' */ 0x68647570
300
+typedef uint32_t BMDProfileID;
301
+enum _BMDProfileID {
302
+    bmdProfileOneSubDeviceFullDuplex                             = /* '1dfd' */ 0x31646664,
303
+    bmdProfileOneSubDeviceHalfDuplex                             = /* '1dhd' */ 0x31646864,
304
+    bmdProfileTwoSubDevicesFullDuplex                            = /* '2dfd' */ 0x32646664,
305
+    bmdProfileTwoSubDevicesHalfDuplex                            = /* '2dhd' */ 0x32646864,
306
+    bmdProfileFourSubDevicesHalfDuplex                           = /* '4dhd' */ 0x34646864
307
+};
308
+
309
+/* Enum BMDHDMITimecodePacking - Packing form of timecode on HDMI */
310
+
311
+typedef uint32_t BMDHDMITimecodePacking;
312
+enum _BMDHDMITimecodePacking {
313
+    bmdHDMITimecodePackingIEEEOUI000085                          = 0x00008500,
314
+    bmdHDMITimecodePackingIEEEOUI080046                          = 0x08004601,
315
+    bmdHDMITimecodePackingIEEEOUI5CF9F0                          = 0x5CF9F003
316
+};
317
+
318
+/* Enum BMDInternalKeyingAncillaryDataSource - Source for VANC and timecode data when performing internal keying */
319
+
320
+typedef uint32_t BMDInternalKeyingAncillaryDataSource;
321
+enum _BMDInternalKeyingAncillaryDataSource {
322
+    bmdInternalKeyingUsesAncillaryDataFromInputSignal            = /* 'ikai' */ 0x696B6169,
323
+    bmdInternalKeyingUsesAncillaryDataFromKeyFrame               = /* 'ikak' */ 0x696B616B
324
 };
325
 
326
 /* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
327
@@ -452,7 +458,6 @@
328
 
329
     BMDDeckLinkSupportsInternalKeying                            = /* 'keyi' */ 0x6B657969,
330
     BMDDeckLinkSupportsExternalKeying                            = /* 'keye' */ 0x6B657965,
331
-    BMDDeckLinkSupportsHDKeying                                  = /* 'keyh' */ 0x6B657968,
332
     BMDDeckLinkSupportsInputFormatDetection                      = /* 'infd' */ 0x696E6664,
333
     BMDDeckLinkHasReferenceInput                                 = /* 'hrin' */ 0x6872696E,
334
     BMDDeckLinkHasSerialPort                                     = /* 'hspt' */ 0x68737074,
335
@@ -461,16 +466,20 @@
336
     BMDDeckLinkHasVideoInputAntiAliasingFilter                   = /* 'aafl' */ 0x6161666C,
337
     BMDDeckLinkHasBypass                                         = /* 'byps' */ 0x62797073,
338
     BMDDeckLinkSupportsClockTimingAdjustment                     = /* 'ctad' */ 0x63746164,
339
-    BMDDeckLinkSupportsFullDuplex                                = /* 'fdup' */ 0x66647570,
340
     BMDDeckLinkSupportsFullFrameReferenceInputTimingOffset       = /* 'frin' */ 0x6672696E,
341
     BMDDeckLinkSupportsSMPTELevelAOutput                         = /* 'lvla' */ 0x6C766C61,
342
+    BMDDeckLinkSupportsAutoSwitchingPPsFOnInput                  = /* 'apsf' */ 0x61707366,
343
     BMDDeckLinkSupportsDualLinkSDI                               = /* 'sdls' */ 0x73646C73,
344
     BMDDeckLinkSupportsQuadLinkSDI                               = /* 'sqls' */ 0x73716C73,
345
     BMDDeckLinkSupportsIdleOutput                                = /* 'idou' */ 0x69646F75,
346
+    BMDDeckLinkVANCRequires10BitYUVVideoFrames                   = /* 'vioY' */ 0x76696F59,    // Legacy product requires v210 active picture for IDeckLinkVideoFrameAncillaryPackets or 10-bit VANC
347
     BMDDeckLinkHasLTCTimecodeInput                               = /* 'hltc' */ 0x686C7463,
348
-    BMDDeckLinkSupportsDuplexModeConfiguration                   = /* 'dupx' */ 0x64757078,
349
     BMDDeckLinkSupportsHDRMetadata                               = /* 'hdrm' */ 0x6864726D,
350
     BMDDeckLinkSupportsColorspaceMetadata                        = /* 'cmet' */ 0x636D6574,
351
+    BMDDeckLinkSupportsHDMITimecode                              = /* 'htim' */ 0x6874696D,
352
+    BMDDeckLinkSupportsHighFrameRateTimecode                     = /* 'HFRT' */ 0x48465254,
353
+    BMDDeckLinkSupportsSynchronizeToCaptureGroup                 = /* 'stcg' */ 0x73746367,
354
+    BMDDeckLinkSupportsSynchronizeToPlaybackGroup                = /* 'stpg' */ 0x73747067,
355
 
356
     /* Integers */
357
 
358
@@ -493,7 +502,10 @@
359
     BMDDeckLinkAudioInputXLRChannelCount                         = /* 'aixc' */ 0x61697863,
360
     BMDDeckLinkAudioOutputRCAChannelCount                        = /* 'aorc' */ 0x616F7263,
361
     BMDDeckLinkAudioOutputXLRChannelCount                        = /* 'aoxc' */ 0x616F7863,
362
-    BMDDeckLinkPairedDevicePersistentID                          = /* 'ppid' */ 0x70706964,
363
+    BMDDeckLinkProfileID                                         = /* 'prid' */ 0x70726964,    // Returns a BMDProfileID
364
+    BMDDeckLinkDuplex                                            = /* 'dupx' */ 0x64757078,
365
+    BMDDeckLinkMinimumPrerollFrames                              = /* 'mprf' */ 0x6D707266,
366
+    BMDDeckLinkSupportedDynamicRange                             = /* 'sudr' */ 0x73756472,
367
 
368
     /* Floats */
369
 
370
@@ -517,6 +529,9 @@
371
 
372
 typedef uint32_t BMDDeckLinkAPIInformationID;
373
 enum _BMDDeckLinkAPIInformationID {
374
+
375
+    /* Integer or String */
376
+
377
     BMDDeckLinkAPIVersion                                        = /* 'vers' */ 0x76657273
378
 };
379
 
380
@@ -528,7 +543,11 @@
381
     /* Integers */
382
 
383
     bmdDeckLinkStatusDetectedVideoInputMode                      = /* 'dvim' */ 0x6476696D,
384
-    bmdDeckLinkStatusDetectedVideoInputFlags                     = /* 'dvif' */ 0x64766966,
385
+    bmdDeckLinkStatusDetectedVideoInputFormatFlags               = /* 'dvff' */ 0x64766666,
386
+    bmdDeckLinkStatusDetectedVideoInputFieldDominance            = /* 'dvfd' */ 0x64766664,
387
+    bmdDeckLinkStatusDetectedVideoInputColorspace                = /* 'dscl' */ 0x6473636C,
388
+    bmdDeckLinkStatusDetectedVideoInputDynamicRange              = /* 'dsdr' */ 0x64736472,
389
+    bmdDeckLinkStatusDetectedSDILinkConfiguration                = /* 'dslc' */ 0x64736C63,
390
     bmdDeckLinkStatusCurrentVideoInputMode                       = /* 'cvim' */ 0x6376696D,
391
     bmdDeckLinkStatusCurrentVideoInputPixelFormat                = /* 'cvip' */ 0x63766970,
392
     bmdDeckLinkStatusCurrentVideoInputFlags                      = /* 'cvif' */ 0x63766966,
393
@@ -539,7 +558,6 @@
394
     bmdDeckLinkStatusLastVideoOutputPixelFormat                  = /* 'opix' */ 0x6F706978,
395
     bmdDeckLinkStatusReferenceSignalMode                         = /* 'refm' */ 0x7265666D,
396
     bmdDeckLinkStatusReferenceSignalFlags                        = /* 'reff' */ 0x72656666,
397
-    bmdDeckLinkStatusDuplexMode                                  = /* 'dupx' */ 0x64757078,
398
     bmdDeckLinkStatusBusy                                        = /* 'busy' */ 0x62757379,
399
     bmdDeckLinkStatusInterchangeablePanelType                    = /* 'icpt' */ 0x69637074,
400
     bmdDeckLinkStatusDeviceTemperature                           = /* 'dtmp' */ 0x64746D70,
401
@@ -548,6 +566,9 @@
402
 
403
     bmdDeckLinkStatusVideoInputSignalLocked                      = /* 'visl' */ 0x7669736C,
404
     bmdDeckLinkStatusReferenceSignalLocked                       = /* 'refl' */ 0x7265666C,
405
+
406
+    /* Bytes */
407
+
408
     bmdDeckLinkStatusReceivedEDID                                = /* 'edid' */ 0x65646964
409
 };
410
 
411
@@ -559,14 +580,14 @@
412
     bmdDeckLinkVideoStatusDualStream3D                           = 1 << 1
413
 };
414
 
415
-/* Enum BMDDuplexStatus - Duplex status of the device */
416
+/* Enum BMDDuplexMode - Duplex of the device */
417
 
418
-typedef uint32_t BMDDuplexStatus;
419
-enum _BMDDuplexStatus {
420
-    bmdDuplexStatusFullDuplex                                    = /* 'fdup' */ 0x66647570,
421
-    bmdDuplexStatusHalfDuplex                                    = /* 'hdup' */ 0x68647570,
422
-    bmdDuplexStatusSimplex                                       = /* 'splx' */ 0x73706C78,
423
-    bmdDuplexStatusInactive                                      = /* 'inac' */ 0x696E6163
424
+typedef uint32_t BMDDuplexMode;
425
+enum _BMDDuplexMode {
426
+    bmdDuplexFull                                                = /* 'dxfu' */ 0x64786675,
427
+    bmdDuplexHalf                                                = /* 'dxha' */ 0x64786861,
428
+    bmdDuplexSimplex                                             = /* 'dxsp' */ 0x64787370,
429
+    bmdDuplexInactive                                            = /* 'dxin' */ 0x6478696E
430
 };
431
 
432
 /* Enum BMDPanelType - The type of interchangeable panel */
433
@@ -646,7 +667,11 @@
434
 class IDeckLinkGLScreenPreviewHelper;
435
 class IDeckLinkNotificationCallback;
436
 class IDeckLinkNotification;
437
-class IDeckLinkAttributes;
438
+class IDeckLinkProfileAttributes;
439
+class IDeckLinkProfileIterator;
440
+class IDeckLinkProfile;
441
+class IDeckLinkProfileCallback;
442
+class IDeckLinkProfileManager;
443
 class IDeckLinkStatus;
444
 class IDeckLinkKeyer;
445
 class IDeckLinkVideoConversion;
446
@@ -658,7 +683,7 @@
447
 class BMD_PUBLIC IDeckLinkVideoOutputCallback : public IUnknown
448
 {
449
 public:
450
-    virtual HRESULT ScheduledFrameCompleted (/* in */ IDeckLinkVideoFrame *completedFrame, /* in */ BMDOutputFrameCompletionResult result) = 0;
451
+    virtual HRESULT ScheduledFrameCompleted (/* in */ IDeckLinkVideoFrame* completedFrame, /* in */ BMDOutputFrameCompletionResult result) = 0;
452
     virtual HRESULT ScheduledPlaybackHasStopped (void) = 0;
453
 
454
 protected:
455
@@ -670,7 +695,7 @@
456
 class BMD_PUBLIC IDeckLinkInputCallback : public IUnknown
457
 {
458
 public:
459
-    virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode *newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
460
+    virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode* newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
461
     virtual HRESULT VideoInputFrameArrived (/* in */ IDeckLinkVideoInputFrame* videoFrame, /* in */ IDeckLinkAudioInputPacket* audioPacket) = 0;
462
 
463
 protected:
464
@@ -682,7 +707,7 @@
465
 class BMD_PUBLIC IDeckLinkEncoderInputCallback : public IUnknown
466
 {
467
 public:
468
-    virtual HRESULT VideoInputSignalChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode *newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
469
+    virtual HRESULT VideoInputSignalChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode* newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
470
     virtual HRESULT VideoPacketArrived (/* in */ IDeckLinkEncoderVideoPacket* videoPacket) = 0;
471
     virtual HRESULT AudioPacketArrived (/* in */ IDeckLinkEncoderAudioPacket* audioPacket) = 0;
472
 
473
@@ -695,9 +720,8 @@
474
 class BMD_PUBLIC IDeckLinkMemoryAllocator : public IUnknown
475
 {
476
 public:
477
-    virtual HRESULT AllocateBuffer (/* in */ uint32_t bufferSize, /* out */ void **allocatedBuffer) = 0;
478
-    virtual HRESULT ReleaseBuffer (/* in */ void *buffer) = 0;
479
-
480
+    virtual HRESULT AllocateBuffer (/* in */ uint32_t bufferSize, /* out */ void** allocatedBuffer) = 0;
481
+    virtual HRESULT ReleaseBuffer (/* in */ void* buffer) = 0;
482
     virtual HRESULT Commit (void) = 0;
483
     virtual HRESULT Decommit (void) = 0;
484
 };
485
@@ -710,12 +734,12 @@
486
     virtual HRESULT RenderAudioSamples (/* in */ bool preroll) = 0;
487
 };
488
 
489
-/* Interface IDeckLinkIterator - enumerates installed DeckLink hardware */
490
+/* Interface IDeckLinkIterator - Enumerates installed DeckLink hardware */
491
 
492
 class BMD_PUBLIC IDeckLinkIterator : public IUnknown
493
 {
494
 public:
495
-    virtual HRESULT Next (/* out */ IDeckLink **deckLinkInstance) = 0;
496
+    virtual HRESULT Next (/* out */ IDeckLink** deckLinkInstance) = 0;
497
 };
498
 
499
 /* Interface IDeckLinkAPIInformation - DeckLinkAPI attribute interface */
500
@@ -723,10 +747,10 @@
501
 class BMD_PUBLIC IDeckLinkAPIInformation : public IUnknown
502
 {
503
 public:
504
-    virtual HRESULT GetFlag (/* in */ BMDDeckLinkAPIInformationID cfgID, /* out */ bool *value) = 0;
505
-    virtual HRESULT GetInt (/* in */ BMDDeckLinkAPIInformationID cfgID, /* out */ int64_t *value) = 0;
506
-    virtual HRESULT GetFloat (/* in */ BMDDeckLinkAPIInformationID cfgID, /* out */ double *value) = 0;
507
-    virtual HRESULT GetString (/* in */ BMDDeckLinkAPIInformationID cfgID, /* out */ const char **value) = 0;
508
+    virtual HRESULT GetFlag (/* in */ BMDDeckLinkAPIInformationID cfgID, /* out */ bool* value) = 0;
509
+    virtual HRESULT GetInt (/* in */ BMDDeckLinkAPIInformationID cfgID, /* out */ int64_t* value) = 0;
510
+    virtual HRESULT GetFloat (/* in */ BMDDeckLinkAPIInformationID cfgID, /* out */ double* value) = 0;
511
+    virtual HRESULT GetString (/* in */ BMDDeckLinkAPIInformationID cfgID, /* out */ const char** value) = 0;
512
 
513
 protected:
514
     virtual ~IDeckLinkAPIInformation () {} // call Release method to drop reference count
515
@@ -737,53 +761,47 @@
516
 class BMD_PUBLIC IDeckLinkOutput : public IUnknown
517
 {
518
 public:
519
-    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoOutputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
520
-    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
521
-
522
-    virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
523
+    virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of bmdVideoConnectionUnspecified is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedPixelFormat, /* in */ BMDVideoOutputConversionMode conversionMode, /* in */ BMDSupportedVideoModeFlags flags, /* out */ BMDDisplayMode* actualMode, /* out */ bool* supported) = 0;
524
+    virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
525
+    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
526
+    virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback* previewCallback) = 0;
527
 
528
     /* Video Output */
529
 
530
     virtual HRESULT EnableVideoOutput (/* in */ BMDDisplayMode displayMode, /* in */ BMDVideoOutputFlags flags) = 0;
531
     virtual HRESULT DisableVideoOutput (void) = 0;
532
-
533
-    virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
534
-    virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame **outFrame) = 0;
535
-    virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary **outBuffer) = 0; // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
536
-
537
-    virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame *theFrame) = 0;
538
-    virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame *theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
539
-    virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback *theCallback) = 0;
540
-    virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t *bufferedFrameCount) = 0;
541
+    virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator* theAllocator) = 0;
542
+    virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame** outFrame) = 0;
543
+    virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary** outBuffer) = 0; // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
544
+    virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame* theFrame) = 0;
545
+    virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame* theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
546
+    virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback* theCallback) = 0;
547
+    virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t* bufferedFrameCount) = 0;
548
 
549
     /* Audio Output */
550
 
551
     virtual HRESULT EnableAudioOutput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount, /* in */ BMDAudioOutputStreamType streamType) = 0;
552
     virtual HRESULT DisableAudioOutput (void) = 0;
553
-
554
-    virtual HRESULT WriteAudioSamplesSync (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* out */ uint32_t *sampleFramesWritten) = 0;
555
-
556
+    virtual HRESULT WriteAudioSamplesSync (/* in */ void* buffer, /* in */ uint32_t sampleFrameCount, /* out */ uint32_t* sampleFramesWritten) = 0;
557
     virtual HRESULT BeginAudioPreroll (void) = 0;
558
     virtual HRESULT EndAudioPreroll (void) = 0;
559
-    virtual HRESULT ScheduleAudioSamples (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* in */ BMDTimeValue streamTime, /* in */ BMDTimeScale timeScale, /* out */ uint32_t *sampleFramesWritten) = 0;
560
-
561
-    virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t *bufferedSampleFrameCount) = 0;
562
+    virtual HRESULT ScheduleAudioSamples (/* in */ void* buffer, /* in */ uint32_t sampleFrameCount, /* in */ BMDTimeValue streamTime, /* in */ BMDTimeScale timeScale, /* out */ uint32_t* sampleFramesWritten) = 0;
563
+    virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t* bufferedSampleFrameCount) = 0;
564
     virtual HRESULT FlushBufferedAudioSamples (void) = 0;
565
-
566
-    virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback *theCallback) = 0;
567
+    virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback* theCallback) = 0;
568
 
569
     /* Output Control */
570
 
571
     virtual HRESULT StartScheduledPlayback (/* in */ BMDTimeValue playbackStartTime, /* in */ BMDTimeScale timeScale, /* in */ double playbackSpeed) = 0;
572
-    virtual HRESULT StopScheduledPlayback (/* in */ BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue *actualStopTime, /* in */ BMDTimeScale timeScale) = 0;
573
-    virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool *active) = 0;
574
-    virtual HRESULT GetScheduledStreamTime (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *streamTime, /* out */ double *playbackSpeed) = 0;
575
-    virtual HRESULT GetReferenceStatus (/* out */ BMDReferenceStatus *referenceStatus) = 0;
576
+    virtual HRESULT StopScheduledPlayback (/* in */ BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue* actualStopTime, /* in */ BMDTimeScale timeScale) = 0;
577
+    virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool* active) = 0;
578
+    virtual HRESULT GetScheduledStreamTime (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* streamTime, /* out */ double* playbackSpeed) = 0;
579
+    virtual HRESULT GetReferenceStatus (/* out */ BMDReferenceStatus* referenceStatus) = 0;
580
 
581
     /* Hardware Timing */
582
 
583
-    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
584
-    virtual HRESULT GetFrameCompletionReferenceTimestamp (/* in */ IDeckLinkVideoFrame *theFrame, /* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *frameCompletionTimestamp) = 0;
585
+    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
586
+    virtual HRESULT GetFrameCompletionReferenceTimestamp (/* in */ IDeckLinkVideoFrame* theFrame, /* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* frameCompletionTimestamp) = 0;
587
 
588
 protected:
589
     virtual ~IDeckLinkOutput () {} // call Release method to drop reference count
590
@@ -794,23 +812,23 @@
591
 class BMD_PUBLIC IDeckLinkInput : public IUnknown
592
 {
593
 public:
594
-    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
595
-    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
596
-
597
-    virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
598
+    virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of bmdVideoConnectionUnspecified is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedPixelFormat, /* in */ BMDVideoInputConversionMode conversionMode, /* in */ BMDSupportedVideoModeFlags flags, /* out */ BMDDisplayMode* actualMode, /* out */ bool* supported) = 0;
599
+    virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
600
+    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
601
+    virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback* previewCallback) = 0;
602
 
603
     /* Video Input */
604
 
605
     virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
606
     virtual HRESULT DisableVideoInput (void) = 0;
607
-    virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t *availableFrameCount) = 0;
608
-    virtual HRESULT SetVideoInputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
609
+    virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t* availableFrameCount) = 0;
610
+    virtual HRESULT SetVideoInputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator* theAllocator) = 0;
611
 
612
     /* Audio Input */
613
 
614
     virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
615
     virtual HRESULT DisableAudioInput (void) = 0;
616
-    virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
617
+    virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t* availableSampleFrameCount) = 0;
618
 
619
     /* Input Control */
620
 
621
@@ -818,11 +836,11 @@
622
     virtual HRESULT StopStreams (void) = 0;
623
     virtual HRESULT PauseStreams (void) = 0;
624
     virtual HRESULT FlushStreams (void) = 0;
625
-    virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback *theCallback) = 0;
626
+    virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback* theCallback) = 0;
627
 
628
     /* Hardware Timing */
629
 
630
-    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
631
+    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
632
 
633
 protected:
634
     virtual ~IDeckLinkInput () {} // call Release method to drop reference count
635
@@ -834,7 +852,7 @@
636
 {
637
 public:
638
     virtual HRESULT SetInt (/* in */ BMDDeckLinkHDMIInputEDIDID cfgID, /* in */ int64_t value) = 0;
639
-    virtual HRESULT GetInt (/* in */ BMDDeckLinkHDMIInputEDIDID cfgID, /* out */ int64_t *value) = 0;
640
+    virtual HRESULT GetInt (/* in */ BMDDeckLinkHDMIInputEDIDID cfgID, /* out */ int64_t* value) = 0;
641
     virtual HRESULT WriteToEDID (void) = 0;
642
 
643
 protected:
644
@@ -846,21 +864,22 @@
645
 class BMD_PUBLIC IDeckLinkEncoderInput : public IUnknown
646
 {
647
 public:
648
-    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
649
-    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
650
+    virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of bmdVideoConnectionUnspecified is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedCodec, /* in */ uint32_t requestedCodecProfile, /* in */ BMDSupportedVideoModeFlags flags, /* out */ bool* supported) = 0;
651
+    virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
652
+    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
653
 
654
     /* Video Input */
655
 
656
     virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
657
     virtual HRESULT DisableVideoInput (void) = 0;
658
-    virtual HRESULT GetAvailablePacketsCount (/* out */ uint32_t *availablePacketsCount) = 0;
659
-    virtual HRESULT SetMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
660
+    virtual HRESULT GetAvailablePacketsCount (/* out */ uint32_t* availablePacketsCount) = 0;
661
+    virtual HRESULT SetMemoryAllocator (/* in */ IDeckLinkMemoryAllocator* theAllocator) = 0;
662
 
663
     /* Audio Input */
664
 
665
     virtual HRESULT EnableAudioInput (/* in */ BMDAudioFormat audioFormat, /* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
666
     virtual HRESULT DisableAudioInput (void) = 0;
667
-    virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
668
+    virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t* availableSampleFrameCount) = 0;
669
 
670
     /* Input Control */
671
 
672
@@ -868,11 +887,11 @@
673
     virtual HRESULT StopStreams (void) = 0;
674
     virtual HRESULT PauseStreams (void) = 0;
675
     virtual HRESULT FlushStreams (void) = 0;
676
-    virtual HRESULT SetCallback (/* in */ IDeckLinkEncoderInputCallback *theCallback) = 0;
677
+    virtual HRESULT SetCallback (/* in */ IDeckLinkEncoderInputCallback* theCallback) = 0;
678
 
679
     /* Hardware Timing */
680
 
681
-    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
682
+    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
683
 
684
 protected:
685
     virtual ~IDeckLinkEncoderInput () {} // call Release method to drop reference count
686
@@ -888,10 +907,9 @@
687
     virtual long GetRowBytes (void) = 0;
688
     virtual BMDPixelFormat GetPixelFormat (void) = 0;
689
     virtual BMDFrameFlags GetFlags (void) = 0;
690
-    virtual HRESULT GetBytes (/* out */ void **buffer) = 0;
691
-
692
-    virtual HRESULT GetTimecode (/* in */ BMDTimecodeFormat format, /* out */ IDeckLinkTimecode **timecode) = 0;
693
-    virtual HRESULT GetAncillaryData (/* out */ IDeckLinkVideoFrameAncillary **ancillary) = 0; // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
694
+    virtual HRESULT GetBytes (/* out */ void** buffer) = 0;
695
+    virtual HRESULT GetTimecode (/* in */ BMDTimecodeFormat format, /* out */ IDeckLinkTimecode** timecode) = 0;
696
+    virtual HRESULT GetAncillaryData (/* out */ IDeckLinkVideoFrameAncillary** ancillary) = 0; // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
697
 
698
 protected:
699
     virtual ~IDeckLinkVideoFrame () {} // call Release method to drop reference count
700
@@ -903,10 +921,9 @@
701
 {
702
 public:
703
     virtual HRESULT SetFlags (/* in */ BMDFrameFlags newFlags) = 0;
704
-
705
-    virtual HRESULT SetTimecode (/* in */ BMDTimecodeFormat format, /* in */ IDeckLinkTimecode *timecode) = 0;
706
+    virtual HRESULT SetTimecode (/* in */ BMDTimecodeFormat format, /* in */ IDeckLinkTimecode* timecode) = 0;
707
     virtual HRESULT SetTimecodeFromComponents (/* in */ BMDTimecodeFormat format, /* in */ uint8_t hours, /* in */ uint8_t minutes, /* in */ uint8_t seconds, /* in */ uint8_t frames, /* in */ BMDTimecodeFlags flags) = 0;
708
-    virtual HRESULT SetAncillaryData (/* in */ IDeckLinkVideoFrameAncillary *ancillary) = 0;
709
+    virtual HRESULT SetAncillaryData (/* in */ IDeckLinkVideoFrameAncillary* ancillary) = 0;
710
     virtual HRESULT SetTimecodeUserBits (/* in */ BMDTimecodeFormat format, /* in */ BMDTimecodeUserBits userBits) = 0;
711
 
712
 protected:
713
@@ -919,21 +936,22 @@
714
 {
715
 public:
716
     virtual BMDVideo3DPackingFormat Get3DPackingFormat (void) = 0;
717
-    virtual HRESULT GetFrameForRightEye (/* out */ IDeckLinkVideoFrame* *rightEyeFrame) = 0;
718
+    virtual HRESULT GetFrameForRightEye (/* out */ IDeckLinkVideoFrame** rightEyeFrame) = 0;
719
 
720
 protected:
721
     virtual ~IDeckLinkVideoFrame3DExtensions () {} // call Release method to drop reference count
722
 };
723
 
724
-/* Interface IDeckLinkVideoFrameMetadataExtensions - Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDMI HDR information */
725
+/* Interface IDeckLinkVideoFrameMetadataExtensions - Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDR information */
726
 
727
 class BMD_PUBLIC IDeckLinkVideoFrameMetadataExtensions : public IUnknown
728
 {
729
 public:
730
-    virtual HRESULT GetInt (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ int64_t *value) = 0;
731
-    virtual HRESULT GetFloat (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ double *value) = 0;
732
+    virtual HRESULT GetInt (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ int64_t* value) = 0;
733
+    virtual HRESULT GetFloat (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ double* value) = 0;
734
     virtual HRESULT GetFlag (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ bool* value) = 0;
735
-    virtual HRESULT GetString (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ const char **value) = 0;
736
+    virtual HRESULT GetString (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ const char** value) = 0;
737
+    virtual HRESULT GetBytes (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ void* buffer /* optional */, /* in, out */ uint32_t* bufferSize) = 0;
738
 
739
 protected:
740
     virtual ~IDeckLinkVideoFrameMetadataExtensions () {} // call Release method to drop reference count
741
@@ -944,8 +962,8 @@
742
 class BMD_PUBLIC IDeckLinkVideoInputFrame : public IDeckLinkVideoFrame
743
 {
744
 public:
745
-    virtual HRESULT GetStreamTime (/* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration, /* in */ BMDTimeScale timeScale) = 0;
746
-    virtual HRESULT GetHardwareReferenceTimestamp (/* in */ BMDTimeScale timeScale, /* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration) = 0;
747
+    virtual HRESULT GetStreamTime (/* out */ BMDTimeValue* frameTime, /* out */ BMDTimeValue* frameDuration, /* in */ BMDTimeScale timeScale) = 0;
748
+    virtual HRESULT GetHardwareReferenceTimestamp (/* in */ BMDTimeScale timeScale, /* out */ BMDTimeValue* frameTime, /* out */ BMDTimeValue* frameDuration) = 0;
749
 
750
 protected:
751
     virtual ~IDeckLinkVideoInputFrame () {} // call Release method to drop reference count
752
@@ -956,12 +974,11 @@
753
 class BMD_PUBLIC IDeckLinkAncillaryPacket : public IUnknown
754
 {
755
 public:
756
-
757
-    virtual HRESULT GetBytes (/* in */ BMDAncillaryPacketFormat format /* For output, only one format need be offered */, /* out */ const void **data /* Optional */, /* out */ uint32_t *size /* Optional */) = 0;
758
+    virtual HRESULT GetBytes (/* in */ BMDAncillaryPacketFormat format /* For output, only one format need be offered */, /* out */ const void** data /* Optional */, /* out */ uint32_t* size /* Optional */) = 0;
759
     virtual uint8_t GetDID (void) = 0;
760
     virtual uint8_t GetSDID (void) = 0;
761
-    virtual uint32_t GetLineNumber (void) = 0; // On output, zero is auto
762
-    virtual uint8_t GetDataStreamIndex (void) = 0; // Usually zero. Can only be 1 if non-SD and the first data stream is completely full
763
+    virtual uint32_t GetLineNumber (void) = 0; // On output, zero is auto
764
+    virtual uint8_t GetDataStreamIndex (void) = 0; // Usually zero. Can only be 1 if non-SD and the first data stream is completely full
765
 
766
 protected:
767
     virtual ~IDeckLinkAncillaryPacket () {} // call Release method to drop reference count
768
@@ -972,35 +989,33 @@
769
 class BMD_PUBLIC IDeckLinkAncillaryPacketIterator : public IUnknown
770
 {
771
 public:
772
-    virtual HRESULT Next (/* out */ IDeckLinkAncillaryPacket **packet) = 0;
773
+    virtual HRESULT Next (/* out */ IDeckLinkAncillaryPacket** packet) = 0;
774
 
775
 protected:
776
     virtual ~IDeckLinkAncillaryPacketIterator () {} // call Release method to drop reference count
777
 };
778
 
779
-/* Interface IDeckLinkVideoFrameAncillaryPackets - Obtained through QueryInterface() on an IDeckLinkVideoFrame object. */
780
+/* Interface IDeckLinkVideoFrameAncillaryPackets - Obtained through QueryInterface on an IDeckLinkVideoFrame object. */
781
 
782
 class BMD_PUBLIC IDeckLinkVideoFrameAncillaryPackets : public IUnknown
783
 {
784
 public:
785
-
786
-    virtual HRESULT GetPacketIterator (/* out */ IDeckLinkAncillaryPacketIterator **iterator) = 0;
787
-    virtual HRESULT GetFirstPacketByID (/* in */ uint8_t DID, /* in */ uint8_t SDID, /* out */ IDeckLinkAncillaryPacket **packet) = 0;
788
-    virtual HRESULT AttachPacket (/* in */ IDeckLinkAncillaryPacket *packet) = 0; // Implement IDeckLinkAncillaryPacket to output your own
789
-    virtual HRESULT DetachPacket (/* in */ IDeckLinkAncillaryPacket *packet) = 0;
790
+    virtual HRESULT GetPacketIterator (/* out */ IDeckLinkAncillaryPacketIterator** iterator) = 0;
791
+    virtual HRESULT GetFirstPacketByID (/* in */ uint8_t DID, /* in */ uint8_t SDID, /* out */ IDeckLinkAncillaryPacket** packet) = 0;
792
+    virtual HRESULT AttachPacket (/* in */ IDeckLinkAncillaryPacket* packet) = 0;  // Implement IDeckLinkAncillaryPacket to output your own
793
+    virtual HRESULT DetachPacket (/* in */ IDeckLinkAncillaryPacket* packet) = 0;
794
     virtual HRESULT DetachAllPackets (void) = 0;
795
 
796
 protected:
797
     virtual ~IDeckLinkVideoFrameAncillaryPackets () {} // call Release method to drop reference count
798
 };
799
 
800
-/* Interface IDeckLinkVideoFrameAncillary - Use of IDeckLinkVideoFrameAncillaryPackets is preferred. Obtained through QueryInterface() on an IDeckLinkVideoFrame object. */
801
+/* Interface IDeckLinkVideoFrameAncillary - Use of IDeckLinkVideoFrameAncillaryPackets is preferred. Obtained through QueryInterface on an IDeckLinkVideoFrame object. */
802
 
803
 class BMD_PUBLIC IDeckLinkVideoFrameAncillary : public IUnknown
804
 {
805
 public:
806
-
807
-    virtual HRESULT GetBufferForVerticalBlankingLine (/* in */ uint32_t lineNumber, /* out */ void **buffer) = 0; // Pixels/rowbytes is same as display mode, except for above HD where it's 1920 pixels for UHD modes and 2048 pixels for DCI modes
808
+    virtual HRESULT GetBufferForVerticalBlankingLine (/* in */ uint32_t lineNumber, /* out */ void** buffer) = 0;  // Pixels/rowbytes is same as display mode, except for above HD where it's 1920 pixels for UHD modes and 2048 pixels for DCI modes
809
     virtual BMDPixelFormat GetPixelFormat (void) = 0;
810
     virtual BMDDisplayMode GetDisplayMode (void) = 0;
811
 
812
@@ -1013,9 +1028,9 @@
813
 class BMD_PUBLIC IDeckLinkEncoderPacket : public IUnknown
814
 {
815
 public:
816
-    virtual HRESULT GetBytes (/* out */ void **buffer) = 0;
817
+    virtual HRESULT GetBytes (/* out */ void** buffer) = 0;
818
     virtual long GetSize (void) = 0;
819
-    virtual HRESULT GetStreamTime (/* out */ BMDTimeValue *frameTime, /* in */ BMDTimeScale timeScale) = 0;
820
+    virtual HRESULT GetStreamTime (/* out */ BMDTimeValue* frameTime, /* in */ BMDTimeScale timeScale) = 0;
821
     virtual BMDPacketType GetPacketType (void) = 0;
822
 
823
 protected:
824
@@ -1028,9 +1043,8 @@
825
 {
826
 public:
827
     virtual BMDPixelFormat GetPixelFormat (void) = 0;
828
-    virtual HRESULT GetHardwareReferenceTimestamp (/* in */ BMDTimeScale timeScale, /* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration) = 0;
829
-
830
-    virtual HRESULT GetTimecode (/* in */ BMDTimecodeFormat format, /* out */ IDeckLinkTimecode **timecode) = 0;
831
+    virtual HRESULT GetHardwareReferenceTimestamp (/* in */ BMDTimeScale timeScale, /* out */ BMDTimeValue* frameTime, /* out */ BMDTimeValue* frameDuration) = 0;
832
+    virtual HRESULT GetTimecode (/* in */ BMDTimecodeFormat format, /* out */ IDeckLinkTimecode** timecode) = 0;
833
 
834
 protected:
835
     virtual ~IDeckLinkEncoderVideoPacket () {} // call Release method to drop reference count
836
@@ -1047,13 +1061,13 @@
837
     virtual ~IDeckLinkEncoderAudioPacket () {} // call Release method to drop reference count
838
 };
839
 
840
-/* Interface IDeckLinkH265NALPacket - Obtained through QueryInterface() on an IDeckLinkEncoderVideoPacket object */
841
+/* Interface IDeckLinkH265NALPacket - Obtained through QueryInterface on an IDeckLinkEncoderVideoPacket object */
842
 
843
 class BMD_PUBLIC IDeckLinkH265NALPacket : public IDeckLinkEncoderVideoPacket
844
 {
845
 public:
846
-    virtual HRESULT GetUnitType (/* out */ uint8_t *unitType) = 0;
847
-    virtual HRESULT GetBytesNoPrefix (/* out */ void **buffer) = 0;
848
+    virtual HRESULT GetUnitType (/* out */ uint8_t* unitType) = 0;
849
+    virtual HRESULT GetBytesNoPrefix (/* out */ void** buffer) = 0;
850
     virtual long GetSizeNoPrefix (void) = 0;
851
 
852
 protected:
853
@@ -1066,8 +1080,8 @@
854
 {
855
 public:
856
     virtual long GetSampleFrameCount (void) = 0;
857
-    virtual HRESULT GetBytes (/* out */ void **buffer) = 0;
858
-    virtual HRESULT GetPacketTime (/* out */ BMDTimeValue *packetTime, /* in */ BMDTimeScale timeScale) = 0;
859
+    virtual HRESULT GetBytes (/* out */ void** buffer) = 0;
860
+    virtual HRESULT GetPacketTime (/* out */ BMDTimeValue* packetTime, /* in */ BMDTimeScale timeScale) = 0;
861
 
862
 protected:
863
     virtual ~IDeckLinkAudioInputPacket () {} // call Release method to drop reference count
864
@@ -1078,13 +1092,13 @@
865
 class BMD_PUBLIC IDeckLinkScreenPreviewCallback : public IUnknown
866
 {
867
 public:
868
-    virtual HRESULT DrawFrame (/* in */ IDeckLinkVideoFrame *theFrame) = 0;
869
+    virtual HRESULT DrawFrame (/* in */ IDeckLinkVideoFrame* theFrame) = 0;
870
 
871
 protected:
872
     virtual ~IDeckLinkScreenPreviewCallback () {} // call Release method to drop reference count
873
 };
874
 
875
-/* Interface IDeckLinkGLScreenPreviewHelper - Created with CoCreateInstance(). */
876
+/* Interface IDeckLinkGLScreenPreviewHelper - Created with CoCreateInstance on platforms with native COM support or from CreateOpenGLScreenPreviewHelper on other platforms. */
877
 
878
 class BMD_PUBLIC IDeckLinkGLScreenPreviewHelper : public IUnknown
879
 {
880
@@ -1094,7 +1108,7 @@
881
 
882
     virtual HRESULT InitializeGL (void) = 0;
883
     virtual HRESULT PaintGL (void) = 0;
884
-    virtual HRESULT SetFrame (/* in */ IDeckLinkVideoFrame *theFrame) = 0;
885
+    virtual HRESULT SetFrame (/* in */ IDeckLinkVideoFrame* theFrame) = 0;
886
     virtual HRESULT Set3DPreviewFormat (/* in */ BMD3DPreviewFormat previewFormat) = 0;
887
 
888
 protected:
889
@@ -1114,22 +1128,75 @@
890
 class BMD_PUBLIC IDeckLinkNotification : public IUnknown
891
 {
892
 public:
893
-    virtual HRESULT Subscribe (/* in */ BMDNotifications topic, /* in */ IDeckLinkNotificationCallback *theCallback) = 0;
894
-    virtual HRESULT Unsubscribe (/* in */ BMDNotifications topic, /* in */ IDeckLinkNotificationCallback *theCallback) = 0;
895
+    virtual HRESULT Subscribe (/* in */ BMDNotifications topic, /* in */ IDeckLinkNotificationCallback* theCallback) = 0;
896
+    virtual HRESULT Unsubscribe (/* in */ BMDNotifications topic, /* in */ IDeckLinkNotificationCallback* theCallback) = 0;
897
+
898
+protected:
899
+    virtual ~IDeckLinkNotification () {} // call Release method to drop reference count
900
+};
901
+
902
+/* Interface IDeckLinkProfileAttributes - Created by QueryInterface from an IDeckLinkProfile, or from IDeckLink. When queried from IDeckLink, interrogates the active profile */
903
+
904
+class BMD_PUBLIC IDeckLinkProfileAttributes : public IUnknown
905
+{
906
+public:
907
+    virtual HRESULT GetFlag (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ bool* value) = 0;
908
+    virtual HRESULT GetInt (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ int64_t* value) = 0;
909
+    virtual HRESULT GetFloat (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ double* value) = 0;
910
+    virtual HRESULT GetString (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ const char** value) = 0;
911
+
912
+protected:
913
+    virtual ~IDeckLinkProfileAttributes () {} // call Release method to drop reference count
914
+};
915
+
916
+/* Interface IDeckLinkProfileIterator - Enumerates IDeckLinkProfile interfaces */
917
+
918
+class BMD_PUBLIC IDeckLinkProfileIterator : public IUnknown
919
+{
920
+public:
921
+    virtual HRESULT Next (/* out */ IDeckLinkProfile** profile) = 0;
922
+
923
+protected:
924
+    virtual ~IDeckLinkProfileIterator () {} // call Release method to drop reference count
925
 };
926
 
927
-/* Interface IDeckLinkAttributes - DeckLink Attribute interface */
928
+/* Interface IDeckLinkProfile - Represents the active profile when queried from IDeckLink */
929
 
930
-class BMD_PUBLIC IDeckLinkAttributes : public IUnknown
931
+class BMD_PUBLIC IDeckLinkProfile : public IUnknown
932
 {
933
 public:
934
-    virtual HRESULT GetFlag (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ bool *value) = 0;
935
-    virtual HRESULT GetInt (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ int64_t *value) = 0;
936
-    virtual HRESULT GetFloat (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ double *value) = 0;
937
-    virtual HRESULT GetString (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ const char **value) = 0;
938
+    virtual HRESULT GetDevice (/* out */ IDeckLink** device) = 0;  // Device affected when this profile becomes active
939
+    virtual HRESULT IsActive (/* out */ bool* isActive) = 0;
940
+    virtual HRESULT SetActive (void) = 0;  // Activating a profile will also change the profile on all devices enumerated by GetPeers. Activation is not complete until IDeckLinkProfileCallback::ProfileActivated is called
941
+    virtual HRESULT GetPeers (/* out */ IDeckLinkProfileIterator** profileIterator) = 0;   // Profiles of other devices activated with this profile
942
 
943
 protected:
944
-    virtual ~IDeckLinkAttributes () {} // call Release method to drop reference count
945
+    virtual ~IDeckLinkProfile () {} // call Release method to drop reference count
946
+};
947
+
948
+/* Interface IDeckLinkProfileCallback - Receive notifications about profiles related to this device */
949
+
950
+class BMD_PUBLIC IDeckLinkProfileCallback : public IUnknown
951
+{
952
+public:
953
+    virtual HRESULT ProfileChanging (/* in */ IDeckLinkProfile* profileToBeActivated, /* in */ bool streamsWillBeForcedToStop) = 0;    // Called before this device changes profile. User has an opportunity for teardown if streamsWillBeForcedToStop
954
+    virtual HRESULT ProfileActivated (/* in */ IDeckLinkProfile* activatedProfile) = 0;    // Called after this device has been activated with a new profile
955
+
956
+protected:
957
+    virtual ~IDeckLinkProfileCallback () {} // call Release method to drop reference count
958
+};
959
+
960
+/* Interface IDeckLinkProfileManager - Created by QueryInterface from IDeckLink when a device has multiple optional profiles */
961
+
962
+class BMD_PUBLIC IDeckLinkProfileManager : public IUnknown
963
+{
964
+public:
965
+    virtual HRESULT GetProfiles (/* out */ IDeckLinkProfileIterator** profileIterator) = 0;    // All available profiles for this device
966
+    virtual HRESULT GetProfile (/* in */ BMDProfileID profileID, /* out */ IDeckLinkProfile** profile) = 0;
967
+    virtual HRESULT SetCallback (/* in */ IDeckLinkProfileCallback* callback) = 0;
968
+
969
+protected:
970
+    virtual ~IDeckLinkProfileManager () {} // call Release method to drop reference count
971
 };
972
 
973
 /* Interface IDeckLinkStatus - DeckLink Status interface */
974
@@ -1137,11 +1204,11 @@
975
 class BMD_PUBLIC IDeckLinkStatus : public IUnknown
976
 {
977
 public:
978
-    virtual HRESULT GetFlag (/* in */ BMDDeckLinkStatusID statusID, /* out */ bool *value) = 0;
979
-    virtual HRESULT GetInt (/* in */ BMDDeckLinkStatusID statusID, /* out */ int64_t *value) = 0;
980
-    virtual HRESULT GetFloat (/* in */ BMDDeckLinkStatusID statusID, /* out */ double *value) = 0;
981
-    virtual HRESULT GetString (/* in */ BMDDeckLinkStatusID statusID, /* out */ const char **value) = 0;
982
-    virtual HRESULT GetBytes (/* in */ BMDDeckLinkStatusID statusID, /* out */ void *buffer, /* in, out */ uint32_t *bufferSize) = 0;
983
+    virtual HRESULT GetFlag (/* in */ BMDDeckLinkStatusID statusID, /* out */ bool* value) = 0;
984
+    virtual HRESULT GetInt (/* in */ BMDDeckLinkStatusID statusID, /* out */ int64_t* value) = 0;
985
+    virtual HRESULT GetFloat (/* in */ BMDDeckLinkStatusID statusID, /* out */ double* value) = 0;
986
+    virtual HRESULT GetString (/* in */ BMDDeckLinkStatusID statusID, /* out */ const char** value) = 0;
987
+    virtual HRESULT GetBytes (/* in */ BMDDeckLinkStatusID statusID, /* out */ void* buffer, /* in, out */ uint32_t* bufferSize) = 0;
988
 
989
 protected:
990
     virtual ~IDeckLinkStatus () {} // call Release method to drop reference count
991
@@ -1162,7 +1229,7 @@
992
     virtual ~IDeckLinkKeyer () {} // call Release method to drop reference count
993
 };
994
 
995
-/* Interface IDeckLinkVideoConversion - Created with CoCreateInstance(). */
996
+/* Interface IDeckLinkVideoConversion - Created with CoCreateInstance. */
997
 
998
 class BMD_PUBLIC IDeckLinkVideoConversion : public IUnknown
999
 {
1000
@@ -1201,15 +1268,14 @@
1001
 
1002
 extern "C" {
1003
 
1004
-    IDeckLinkIterator* BMD_PUBLIC CreateDeckLinkIteratorInstance (void);
1005
-    IDeckLinkDiscovery* BMD_PUBLIC CreateDeckLinkDiscoveryInstance (void);
1006
-    IDeckLinkAPIInformation* BMD_PUBLIC CreateDeckLinkAPIInformationInstance (void);
1007
-    IDeckLinkGLScreenPreviewHelper* BMD_PUBLIC CreateOpenGLScreenPreviewHelper (void);
1008
-    IDeckLinkVideoConversion* BMD_PUBLIC CreateVideoConversionInstance (void);
1009
-    IDeckLinkVideoFrameAncillaryPackets* BMD_PUBLIC CreateVideoFrameAncillaryPacketsInstance (void); // For use when creating a custom IDeckLinkVideoFrame without wrapping IDeckLinkOutput::CreateVideoFrame
1010
+    IDeckLinkIterator* BMD_PUBLIC CreateDeckLinkIteratorInstance(void);
1011
+    IDeckLinkDiscovery* BMD_PUBLIC CreateDeckLinkDiscoveryInstance(void);
1012
+    IDeckLinkAPIInformation* BMD_PUBLIC CreateDeckLinkAPIInformationInstance(void);
1013
+    IDeckLinkGLScreenPreviewHelper* BMD_PUBLIC CreateOpenGLScreenPreviewHelper(void);
1014
+    IDeckLinkVideoConversion* BMD_PUBLIC CreateVideoConversionInstance(void);
1015
+    IDeckLinkVideoFrameAncillaryPackets* BMD_PUBLIC CreateVideoFrameAncillaryPacketsInstance(void);    // For use when creating a custom IDeckLinkVideoFrame without wrapping IDeckLinkOutput::CreateVideoFrame
1016
 
1017
 }
1018
 
1019
-
1020
-#endif      // defined(__cplusplus)
1021
+#endif /* defined(__cplusplus) */
1022
 #endif /* defined(BMD_DECKLINKAPI_H) */
1023
obs-studio-26.0.2.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIConfiguration.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIConfiguration.h Changed
157
 
1
@@ -1,5 +1,5 @@
2
 /* -LICENSE-START-
3
-** Copyright (c) 2018 Blackmagic Design
4
+** Copyright (c) 2020 Blackmagic Design
5
 **
6
 ** Permission is hereby granted, free of charge, to any person or organization
7
 ** obtaining a copy of the software and accompanying documentation covered by
8
@@ -7,14 +7,14 @@
9
 ** execute, and transmit the Software, and to prepare derivative works of the
10
 ** Software, and to permit third-parties to whom the Software is furnished to
11
 ** do so, all subject to the following:
12
-** 
13
+**
14
 ** The copyright notices in the Software and this entire statement, including
15
 ** the above license grant, this restriction and the following disclaimer,
16
 ** must be included in all copies of the Software, in whole or in part, and
17
 ** all derivative works of the Software, unless such copies or derivative
18
 ** works are solely in the form of machine-executable object code generated by
19
 ** a source language processor.
20
-** 
21
+**
22
 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
 ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
 ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
25
@@ -46,8 +46,8 @@
26
 
27
 // Interface ID Declarations
28
 
29
-BMD_CONST REFIID IID_IDeckLinkConfiguration                       = /* EF90380B-4AE5-4346-9077-E288E149F129 */ {0xEF,0x90,0x38,0x0B,0x4A,0xE5,0x43,0x46,0x90,0x77,0xE2,0x88,0xE1,0x49,0xF1,0x29};
30
-BMD_CONST REFIID IID_IDeckLinkEncoderConfiguration                = /* 138050E5-C60A-4552-BF3F-0F358049327E */ {0x13,0x80,0x50,0xE5,0xC6,0x0A,0x45,0x52,0xBF,0x3F,0x0F,0x35,0x80,0x49,0x32,0x7E};
31
+BMD_CONST REFIID IID_IDeckLinkConfiguration                       = /* 912F634B-2D4E-40A4-8AAB-8D80B73F1289 */ { 0x91,0x2F,0x63,0x4B,0x2D,0x4E,0x40,0xA4,0x8A,0xAB,0x8D,0x80,0xB7,0x3F,0x12,0x89 };
32
+BMD_CONST REFIID IID_IDeckLinkEncoderConfiguration                = /* 138050E5-C60A-4552-BF3F-0F358049327E */ { 0x13,0x80,0x50,0xE5,0xC6,0x0A,0x45,0x52,0xBF,0x3F,0x0F,0x35,0x80,0x49,0x32,0x7E };
33
 
34
 /* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */
35
 
36
@@ -63,13 +63,14 @@
37
     bmdDeckLinkConfigHDMI3DPackingFormat                         = /* '3dpf' */ 0x33647066,
38
     bmdDeckLinkConfigBypass                                      = /* 'byps' */ 0x62797073,
39
     bmdDeckLinkConfigClockTimingAdjustment                       = /* 'ctad' */ 0x63746164,
40
-    bmdDeckLinkConfigDuplexMode                                  = /* 'dupx' */ 0x64757078,
41
 
42
     /* Audio Input/Output Flags */
43
 
44
     bmdDeckLinkConfigAnalogAudioConsumerLevels                   = /* 'aacl' */ 0x6161636C,
45
+    bmdDeckLinkConfigSwapHDMICh3AndCh4OnInput                    = /* 'hi34' */ 0x68693334,
46
+    bmdDeckLinkConfigSwapHDMICh3AndCh4OnOutput                   = /* 'ho34' */ 0x686F3334,
47
 
48
-    /* Video output flags */
49
+    /* Video Output Flags */
50
 
51
     bmdDeckLinkConfigFieldFlickerRemoval                         = /* 'fdfr' */ 0x66646672,
52
     bmdDeckLinkConfigHD1080p24ToHD1080i5994Conversion            = /* 'to59' */ 0x746F3539,
53
@@ -80,9 +81,6 @@
54
     bmdDeckLinkConfigSMPTELevelAOutput                           = /* 'smta' */ 0x736D7461,
55
     bmdDeckLinkConfigRec2020Output                               = /* 'rec2' */ 0x72656332,    // Ensure output is Rec.2020 colorspace
56
     bmdDeckLinkConfigQuadLinkSDIVideoOutputSquareDivisionSplit   = /* 'SDQS' */ 0x53445153,
57
-
58
-    /* Video Output Flags */
59
-
60
     bmdDeckLinkConfigOutput1080pAsPsF                            = /* 'pfpr' */ 0x70667072,
61
 
62
     /* Video Output Integers */
63
@@ -95,6 +93,8 @@
64
     bmdDeckLinkConfigDefaultVideoOutputMode                      = /* 'dvom' */ 0x64766F6D,
65
     bmdDeckLinkConfigDefaultVideoOutputModeFlags                 = /* 'dvof' */ 0x64766F66,
66
     bmdDeckLinkConfigSDIOutputLinkConfiguration                  = /* 'solc' */ 0x736F6C63,
67
+    bmdDeckLinkConfigHDMITimecodePacking                         = /* 'htpk' */ 0x6874706B,
68
+    bmdDeckLinkConfigPlaybackGroup                               = /* 'plgr' */ 0x706C6772,
69
 
70
     /* Video Output Floats */
71
 
72
@@ -111,9 +111,6 @@
73
     bmdDeckLinkConfigVideoInputScanning                          = /* 'visc' */ 0x76697363,    // Applicable to H264 Pro Recorder only
74
     bmdDeckLinkConfigUseDedicatedLTCInput                        = /* 'dltc' */ 0x646C7463,    // Use timecode from LTC input instead of SDI stream
75
     bmdDeckLinkConfigSDIInput3DPayloadOverride                   = /* '3dds' */ 0x33646473,
76
-
77
-    /* Video Input Flags */
78
-
79
     bmdDeckLinkConfigCapture1080pAsPsF                           = /* 'cfpr' */ 0x63667072,
80
 
81
     /* Video Input Integers */
82
@@ -126,6 +123,7 @@
83
     bmdDeckLinkConfigVANCSourceLine2Mapping                      = /* 'vsl2' */ 0x76736C32,
84
     bmdDeckLinkConfigVANCSourceLine3Mapping                      = /* 'vsl3' */ 0x76736C33,
85
     bmdDeckLinkConfigCapturePassThroughMode                      = /* 'cptm' */ 0x6370746D,
86
+    bmdDeckLinkConfigCaptureGroup                                = /* 'cpgr' */ 0x63706772,
87
 
88
     /* Video Input Floats */
89
 
90
@@ -137,6 +135,10 @@
91
     bmdDeckLinkConfigVideoInputSVideoLumaGain                    = /* 'islg' */ 0x69736C67,
92
     bmdDeckLinkConfigVideoInputSVideoChromaGain                  = /* 'iscg' */ 0x69736367,
93
 
94
+    /* Keying Integers */
95
+
96
+    bmdDeckLinkConfigInternalKeyingAncillaryDataSource           = /* 'ikas' */ 0x696B6173,
97
+
98
     /* Audio Input Flags */
99
 
100
     bmdDeckLinkConfigMicrophonePhantomPower                      = /* 'mphp' */ 0x6D706870,
101
@@ -209,6 +211,8 @@
102
     bmdDeckLinkEncoderConfigMPEG4CodecSpecificDesc               = /* 'esds' */ 0x65736473 // Sample description extensions only (atom stream, each with size and fourCC header). Useful for AVFoundation, VideoToolbox, MKV and more
103
 };
104
 
105
+#if defined(__cplusplus)
106
+
107
 // Forward Declarations
108
 
109
 class IDeckLinkConfiguration;
110
@@ -220,13 +224,13 @@
111
 {
112
 public:
113
     virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
114
-    virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool *value) = 0;
115
+    virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool* value) = 0;
116
     virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
117
-    virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t *value) = 0;
118
+    virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t* value) = 0;
119
     virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
120
-    virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double *value) = 0;
121
-    virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ const char *value) = 0;
122
-    virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ const char **value) = 0;
123
+    virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double* value) = 0;
124
+    virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ const char* value) = 0;
125
+    virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ const char** value) = 0;
126
     virtual HRESULT WriteConfigurationToPreferences (void) = 0;
127
 
128
 protected:
129
@@ -239,14 +243,14 @@
130
 {
131
 public:
132
     virtual HRESULT SetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ bool value) = 0;
133
-    virtual HRESULT GetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ bool *value) = 0;
134
+    virtual HRESULT GetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ bool* value) = 0;
135
     virtual HRESULT SetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ int64_t value) = 0;
136
-    virtual HRESULT GetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ int64_t *value) = 0;
137
+    virtual HRESULT GetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ int64_t* value) = 0;
138
     virtual HRESULT SetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ double value) = 0;
139
-    virtual HRESULT GetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ double *value) = 0;
140
-    virtual HRESULT SetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ const char *value) = 0;
141
-    virtual HRESULT GetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ const char **value) = 0;
142
-    virtual HRESULT GetBytes (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ void *buffer /* optional */, /* in, out */ uint32_t *bufferSize) = 0;
143
+    virtual HRESULT GetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ double* value) = 0;
144
+    virtual HRESULT SetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ const char* value) = 0;
145
+    virtual HRESULT GetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ const char** value) = 0;
146
+    virtual HRESULT GetBytes (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ void* buffer /* optional */, /* in, out */ uint32_t* bufferSize) = 0;
147
 
148
 protected:
149
     virtual ~IDeckLinkEncoderConfiguration () {} // call Release method to drop reference count
150
@@ -259,5 +263,5 @@
151
 
152
 }
153
 
154
-
155
+#endif /* defined(__cplusplus) */
156
 #endif /* defined(BMD_DECKLINKAPICONFIGURATION_H) */
157
obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIConfiguration_v10_11.h Added
73
 
1
@@ -0,0 +1,71 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2017 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPICONFIGURATION_v10_11_H
30
+#define BMD_DECKLINKAPICONFIGURATION_v10_11_H
31
+
32
+#include "DeckLinkAPIConfiguration.h"
33
+
34
+// Interface ID Declarations
35
+
36
+BMD_CONST REFIID IID_IDeckLinkConfiguration_v10_11                       = /* EF90380B-4AE5-4346-9077-E288E149F129 */ {0xEF,0x90,0x38,0x0B,0x4A,0xE5,0x43,0x46,0x90,0x77,0xE2,0x88,0xE1,0x49,0xF1,0x29};
37
+
38
+/* Enum BMDDeckLinkConfigurationID_v10_11 - DeckLink Configuration ID */
39
+
40
+typedef uint32_t BMDDeckLinkConfigurationID_v10_11;
41
+enum _BMDDeckLinkConfigurationID_v10_11 {
42
+
43
+    /* Video Input/Output Integers */
44
+
45
+    bmdDeckLinkConfigDuplexMode_v10_11                              = /* 'dupx' */ 0x64757078,
46
+};
47
+
48
+// Forward Declarations
49
+
50
+class IDeckLinkConfiguration_v10_11;
51
+
52
+/* Interface IDeckLinkConfiguration_v10_11 - DeckLink Configuration interface */
53
+
54
+class BMD_PUBLIC IDeckLinkConfiguration_v10_11 : public IUnknown
55
+{
56
+public:
57
+    virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
58
+    virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool *value) = 0;
59
+    virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
60
+    virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t *value) = 0;
61
+    virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
62
+    virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double *value) = 0;
63
+    virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ const char *value) = 0;
64
+    virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ const char **value) = 0;
65
+    virtual HRESULT WriteConfigurationToPreferences (void) = 0;
66
+
67
+protected:
68
+    virtual ~IDeckLinkConfiguration_v10_11 () {} // call Release method to drop reference count
69
+};
70
+
71
+
72
+#endif /* defined(BMD_DECKLINKAPICONFIGURATION_v10_11_H) */
73
obs-studio-26.0.2.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIDeckControl.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIDeckControl.h Changed
136
 
1
@@ -1,5 +1,5 @@
2
 /* -LICENSE-START-
3
-** Copyright (c) 2018 Blackmagic Design
4
+** Copyright (c) 2020 Blackmagic Design
5
 **
6
 ** Permission is hereby granted, free of charge, to any person or organization
7
 ** obtaining a copy of the software and accompanying documentation covered by
8
@@ -7,14 +7,14 @@
9
 ** execute, and transmit the Software, and to prepare derivative works of the
10
 ** Software, and to permit third-parties to whom the Software is furnished to
11
 ** do so, all subject to the following:
12
-** 
13
+**
14
 ** The copyright notices in the Software and this entire statement, including
15
 ** the above license grant, this restriction and the following disclaimer,
16
 ** must be included in all copies of the Software, in whole or in part, and
17
 ** all derivative works of the Software, unless such copies or derivative
18
 ** works are solely in the form of machine-executable object code generated by
19
 ** a source language processor.
20
-** 
21
+**
22
 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
 ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
 ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
25
@@ -46,8 +46,8 @@
26
 
27
 // Interface ID Declarations
28
 
29
-BMD_CONST REFIID IID_IDeckLinkDeckControlStatusCallback           = /* 53436FFB-B434-4906-BADC-AE3060FFE8EF */ {0x53,0x43,0x6F,0xFB,0xB4,0x34,0x49,0x06,0xBA,0xDC,0xAE,0x30,0x60,0xFF,0xE8,0xEF};
30
-BMD_CONST REFIID IID_IDeckLinkDeckControl                         = /* 8E1C3ACE-19C7-4E00-8B92-D80431D958BE */ {0x8E,0x1C,0x3A,0xCE,0x19,0xC7,0x4E,0x00,0x8B,0x92,0xD8,0x04,0x31,0xD9,0x58,0xBE};
31
+BMD_CONST REFIID IID_IDeckLinkDeckControlStatusCallback           = /* 53436FFB-B434-4906-BADC-AE3060FFE8EF */ { 0x53,0x43,0x6F,0xFB,0xB4,0x34,0x49,0x06,0xBA,0xDC,0xAE,0x30,0x60,0xFF,0xE8,0xEF };
32
+BMD_CONST REFIID IID_IDeckLinkDeckControl                         = /* 8E1C3ACE-19C7-4E00-8B92-D80431D958BE */ { 0x8E,0x1C,0x3A,0xCE,0x19,0xC7,0x4E,0x00,0x8B,0x92,0xD8,0x04,0x31,0xD9,0x58,0xBE };
33
 
34
 /* Enum BMDDeckControlMode - DeckControl mode */
35
 
36
@@ -67,13 +67,13 @@
37
 
38
     /* Export-To-Tape events */
39
 
40
-    bmdDeckControlPrepareForExportEvent                          = /* 'pfee' */ 0x70666565,    // This event is triggered a few frames before reaching the in-point. IDeckLinkInput::StartScheduledPlayback() should be called at this point.
41
-    bmdDeckControlExportCompleteEvent                            = /* 'exce' */ 0x65786365,    // This event is triggered a few frames after reaching the out-point. At this point, it is safe to stop playback.
42
+    bmdDeckControlPrepareForExportEvent                          = /* 'pfee' */ 0x70666565,    // This event is triggered a few frames before reaching the in-point. IDeckLinkInput::StartScheduledPlayback should be called at this point.
43
+    bmdDeckControlExportCompleteEvent                            = /* 'exce' */ 0x65786365,    // This event is triggered a few frames after reaching the out-point. At this point, it is safe to stop playback. Upon reception of this event the deck's control mode is set back to bmdDeckControlVTRControlMode.
44
 
45
     /* Capture events */
46
 
47
     bmdDeckControlPrepareForCaptureEvent                         = /* 'pfce' */ 0x70666365,    // This event is triggered a few frames before reaching the in-point. The serial timecode attached to IDeckLinkVideoInputFrames is now valid.
48
-    bmdDeckControlCaptureCompleteEvent                           = /* 'ccev' */ 0x63636576 // This event is triggered a few frames after reaching the out-point.
49
+    bmdDeckControlCaptureCompleteEvent                           = /* 'ccev' */ 0x63636576 // This event is triggered a few frames after reaching the out-point. Upon reception of this event the deck's control mode is set back to bmdDeckControlVTRControlMode.
50
 };
51
 
52
 /* Enum BMDDeckControlVTRControlState - VTR Control state */
53
@@ -146,6 +146,8 @@
54
     bmdDeckControlUnknownError                                   = /* 'uner' */ 0x756E6572
55
 };
56
 
57
+#if defined(__cplusplus)
58
+
59
 // Forward Declarations
60
 
61
 class IDeckLinkDeckControlStatusCallback;
62
@@ -170,39 +172,39 @@
63
 class BMD_PUBLIC IDeckLinkDeckControl : public IUnknown
64
 {
65
 public:
66
-    virtual HRESULT Open (/* in */ BMDTimeScale timeScale, /* in */ BMDTimeValue timeValue, /* in */ bool timecodeIsDropFrame, /* out */ BMDDeckControlError *error) = 0;
67
+    virtual HRESULT Open (/* in */ BMDTimeScale timeScale, /* in */ BMDTimeValue timeValue, /* in */ bool timecodeIsDropFrame, /* out */ BMDDeckControlError* error) = 0;
68
     virtual HRESULT Close (/* in */ bool standbyOn) = 0;
69
-    virtual HRESULT GetCurrentState (/* out */ BMDDeckControlMode *mode, /* out */ BMDDeckControlVTRControlState *vtrControlState, /* out */ BMDDeckControlStatusFlags *flags) = 0;
70
+    virtual HRESULT GetCurrentState (/* out */ BMDDeckControlMode* mode, /* out */ BMDDeckControlVTRControlState* vtrControlState, /* out */ BMDDeckControlStatusFlags* flags) = 0;
71
     virtual HRESULT SetStandby (/* in */ bool standbyOn) = 0;
72
-    virtual HRESULT SendCommand (/* in */ uint8_t *inBuffer, /* in */ uint32_t inBufferSize, /* out */ uint8_t *outBuffer, /* out */ uint32_t *outDataSize, /* in */ uint32_t outBufferSize, /* out */ BMDDeckControlError *error) = 0;
73
-    virtual HRESULT Play (/* out */ BMDDeckControlError *error) = 0;
74
-    virtual HRESULT Stop (/* out */ BMDDeckControlError *error) = 0;
75
-    virtual HRESULT TogglePlayStop (/* out */ BMDDeckControlError *error) = 0;
76
-    virtual HRESULT Eject (/* out */ BMDDeckControlError *error) = 0;
77
-    virtual HRESULT GoToTimecode (/* in */ BMDTimecodeBCD timecode, /* out */ BMDDeckControlError *error) = 0;
78
-    virtual HRESULT FastForward (/* in */ bool viewTape, /* out */ BMDDeckControlError *error) = 0;
79
-    virtual HRESULT Rewind (/* in */ bool viewTape, /* out */ BMDDeckControlError *error) = 0;
80
-    virtual HRESULT StepForward (/* out */ BMDDeckControlError *error) = 0;
81
-    virtual HRESULT StepBack (/* out */ BMDDeckControlError *error) = 0;
82
-    virtual HRESULT Jog (/* in */ double rate, /* out */ BMDDeckControlError *error) = 0;
83
-    virtual HRESULT Shuttle (/* in */ double rate, /* out */ BMDDeckControlError *error) = 0;
84
-    virtual HRESULT GetTimecodeString (/* out */ const char **currentTimeCode, /* out */ BMDDeckControlError *error) = 0;
85
-    virtual HRESULT GetTimecode (/* out */ IDeckLinkTimecode **currentTimecode, /* out */ BMDDeckControlError *error) = 0;
86
-    virtual HRESULT GetTimecodeBCD (/* out */ BMDTimecodeBCD *currentTimecode, /* out */ BMDDeckControlError *error) = 0;
87
+    virtual HRESULT SendCommand (/* in */ uint8_t* inBuffer, /* in */ uint32_t inBufferSize, /* out */ uint8_t* outBuffer, /* out */ uint32_t* outDataSize, /* in */ uint32_t outBufferSize, /* out */ BMDDeckControlError* error) = 0;
88
+    virtual HRESULT Play (/* out */ BMDDeckControlError* error) = 0;
89
+    virtual HRESULT Stop (/* out */ BMDDeckControlError* error) = 0;
90
+    virtual HRESULT TogglePlayStop (/* out */ BMDDeckControlError* error) = 0;
91
+    virtual HRESULT Eject (/* out */ BMDDeckControlError* error) = 0;
92
+    virtual HRESULT GoToTimecode (/* in */ BMDTimecodeBCD timecode, /* out */ BMDDeckControlError* error) = 0;
93
+    virtual HRESULT FastForward (/* in */ bool viewTape, /* out */ BMDDeckControlError* error) = 0;
94
+    virtual HRESULT Rewind (/* in */ bool viewTape, /* out */ BMDDeckControlError* error) = 0;
95
+    virtual HRESULT StepForward (/* out */ BMDDeckControlError* error) = 0;
96
+    virtual HRESULT StepBack (/* out */ BMDDeckControlError* error) = 0;
97
+    virtual HRESULT Jog (/* in */ double rate, /* out */ BMDDeckControlError* error) = 0;
98
+    virtual HRESULT Shuttle (/* in */ double rate, /* out */ BMDDeckControlError* error) = 0;
99
+    virtual HRESULT GetTimecodeString (/* out */ const char** currentTimeCode, /* out */ BMDDeckControlError* error) = 0;
100
+    virtual HRESULT GetTimecode (/* out */ IDeckLinkTimecode** currentTimecode, /* out */ BMDDeckControlError* error) = 0;
101
+    virtual HRESULT GetTimecodeBCD (/* out */ BMDTimecodeBCD* currentTimecode, /* out */ BMDDeckControlError* error) = 0;
102
     virtual HRESULT SetPreroll (/* in */ uint32_t prerollSeconds) = 0;
103
-    virtual HRESULT GetPreroll (/* out */ uint32_t *prerollSeconds) = 0;
104
+    virtual HRESULT GetPreroll (/* out */ uint32_t* prerollSeconds) = 0;
105
     virtual HRESULT SetExportOffset (/* in */ int32_t exportOffsetFields) = 0;
106
-    virtual HRESULT GetExportOffset (/* out */ int32_t *exportOffsetFields) = 0;
107
-    virtual HRESULT GetManualExportOffset (/* out */ int32_t *deckManualExportOffsetFields) = 0;
108
+    virtual HRESULT GetExportOffset (/* out */ int32_t* exportOffsetFields) = 0;
109
+    virtual HRESULT GetManualExportOffset (/* out */ int32_t* deckManualExportOffsetFields) = 0;
110
     virtual HRESULT SetCaptureOffset (/* in */ int32_t captureOffsetFields) = 0;
111
-    virtual HRESULT GetCaptureOffset (/* out */ int32_t *captureOffsetFields) = 0;
112
-    virtual HRESULT StartExport (/* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* in */ BMDDeckControlExportModeOpsFlags exportModeOps, /* out */ BMDDeckControlError *error) = 0;
113
-    virtual HRESULT StartCapture (/* in */ bool useVITC, /* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* out */ BMDDeckControlError *error) = 0;
114
-    virtual HRESULT GetDeviceID (/* out */ uint16_t *deviceId, /* out */ BMDDeckControlError *error) = 0;
115
+    virtual HRESULT GetCaptureOffset (/* out */ int32_t* captureOffsetFields) = 0;
116
+    virtual HRESULT StartExport (/* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* in */ BMDDeckControlExportModeOpsFlags exportModeOps, /* out */ BMDDeckControlError* error) = 0;
117
+    virtual HRESULT StartCapture (/* in */ bool useVITC, /* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* out */ BMDDeckControlError* error) = 0;
118
+    virtual HRESULT GetDeviceID (/* out */ uint16_t* deviceId, /* out */ BMDDeckControlError* error) = 0;
119
     virtual HRESULT Abort (void) = 0;
120
-    virtual HRESULT CrashRecordStart (/* out */ BMDDeckControlError *error) = 0;
121
-    virtual HRESULT CrashRecordStop (/* out */ BMDDeckControlError *error) = 0;
122
-    virtual HRESULT SetCallback (/* in */ IDeckLinkDeckControlStatusCallback *callback) = 0;
123
+    virtual HRESULT CrashRecordStart (/* out */ BMDDeckControlError* error) = 0;
124
+    virtual HRESULT CrashRecordStop (/* out */ BMDDeckControlError* error) = 0;
125
+    virtual HRESULT SetCallback (/* in */ IDeckLinkDeckControlStatusCallback* callback) = 0;
126
 
127
 protected:
128
     virtual ~IDeckLinkDeckControl () {} // call Release method to drop reference count
129
@@ -215,5 +217,5 @@
130
 
131
 }
132
 
133
-
134
+#endif /* defined(__cplusplus) */
135
 #endif /* defined(BMD_DECKLINKAPIDECKCONTROL_H) */
136
obs-studio-26.0.2.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIDiscovery.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIDiscovery.h Changed
58
 
1
@@ -1,5 +1,5 @@
2
 /* -LICENSE-START-
3
-** Copyright (c) 2018 Blackmagic Design
4
+** Copyright (c) 2020 Blackmagic Design
5
 **
6
 ** Permission is hereby granted, free of charge, to any person or organization
7
 ** obtaining a copy of the software and accompanying documentation covered by
8
@@ -7,14 +7,14 @@
9
 ** execute, and transmit the Software, and to prepare derivative works of the
10
 ** Software, and to permit third-parties to whom the Software is furnished to
11
 ** do so, all subject to the following:
12
-** 
13
+**
14
 ** The copyright notices in the Software and this entire statement, including
15
 ** the above license grant, this restriction and the following disclaimer,
16
 ** must be included in all copies of the Software, in whole or in part, and
17
 ** all derivative works of the Software, unless such copies or derivative
18
 ** works are solely in the form of machine-executable object code generated by
19
 ** a source language processor.
20
-** 
21
+**
22
 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
 ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
 ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
25
@@ -46,19 +46,21 @@
26
 
27
 // Interface ID Declarations
28
 
29
-BMD_CONST REFIID IID_IDeckLink                                    = /* C418FBDD-0587-48ED-8FE5-640F0A14AF91 */ {0xC4,0x18,0xFB,0xDD,0x05,0x87,0x48,0xED,0x8F,0xE5,0x64,0x0F,0x0A,0x14,0xAF,0x91};
30
+BMD_CONST REFIID IID_IDeckLink                                    = /* C418FBDD-0587-48ED-8FE5-640F0A14AF91 */ { 0xC4,0x18,0xFB,0xDD,0x05,0x87,0x48,0xED,0x8F,0xE5,0x64,0x0F,0x0A,0x14,0xAF,0x91 };
31
+
32
+#if defined(__cplusplus)
33
 
34
 // Forward Declarations
35
 
36
 class IDeckLink;
37
 
38
-/* Interface IDeckLink - represents a DeckLink device */
39
+/* Interface IDeckLink - Represents a DeckLink device */
40
 
41
 class BMD_PUBLIC IDeckLink : public IUnknown
42
 {
43
 public:
44
-    virtual HRESULT GetModelName (/* out */ const char **modelName) = 0;
45
-    virtual HRESULT GetDisplayName (/* out */ const char **displayName) = 0;
46
+    virtual HRESULT GetModelName (/* out */ const char** modelName) = 0;
47
+    virtual HRESULT GetDisplayName (/* out */ const char** displayName) = 0;
48
 
49
 protected:
50
     virtual ~IDeckLink () {} // call Release method to drop reference count
51
@@ -71,5 +73,5 @@
52
 
53
 }
54
 
55
-
56
+#endif /* defined(__cplusplus) */
57
 #endif /* defined(BMD_DECKLINKAPIDISCOVERY_H) */
58
obs-studio-26.0.2.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIDispatch.cpp -> obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIDispatch.cpp Changed
19
 
1
@@ -66,7 +66,7 @@
2
    
3
    gLoadedDeckLinkAPI = true;
4
    
5
-   gCreateIteratorFunc = (CreateIteratorFunc)dlsym(libraryHandle, "CreateDeckLinkIteratorInstance_0003");
6
+   gCreateIteratorFunc = (CreateIteratorFunc)dlsym(libraryHandle, "CreateDeckLinkIteratorInstance_0004");
7
    if (!gCreateIteratorFunc)
8
        fprintf(stderr, "%s\n", dlerror());
9
    gCreateAPIInformationFunc = (CreateAPIInformationFunc)dlsym(libraryHandle, "CreateDeckLinkAPIInformationInstance_0001");
10
@@ -75,7 +75,7 @@
11
    gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc)dlsym(libraryHandle, "CreateVideoConversionInstance_0001");
12
    if (!gCreateVideoConversionFunc)
13
        fprintf(stderr, "%s\n", dlerror());
14
-   gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)dlsym(libraryHandle, "CreateDeckLinkDiscoveryInstance_0002");
15
+   gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)dlsym(libraryHandle, "CreateDeckLinkDiscoveryInstance_0003");
16
    if (!gCreateDeckLinkDiscoveryFunc)
17
        fprintf(stderr, "%s\n", dlerror());
18
    gCreateVideoFrameAncillaryPacketsFunc = (CreateVideoFrameAncillaryPacketsInstanceFunc)dlsym(libraryHandle, "CreateVideoFrameAncillaryPacketsInstance_0001");
19
obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIDispatch_v10_11.cpp Added
162
 
1
@@ -0,0 +1,160 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2019 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+** 
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+** 
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+**/
28
+
29
+#include <stdio.h>
30
+#include <pthread.h>
31
+#include <dlfcn.h>
32
+
33
+#include "DeckLinkAPI_v10_11.h"
34
+
35
+#define kDeckLinkAPI_Name "libDeckLinkAPI.so"
36
+#define KDeckLinkPreviewAPI_Name "libDeckLinkPreviewAPI.so"
37
+
38
+typedef IDeckLinkIterator* (*CreateIteratorFunc)(void);
39
+typedef IDeckLinkAPIInformation* (*CreateAPIInformationFunc)(void);
40
+typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGLScreenPreviewHelperFunc)(void);
41
+typedef IDeckLinkVideoConversion* (*CreateVideoConversionInstanceFunc)(void);
42
+typedef IDeckLinkDiscovery* (*CreateDeckLinkDiscoveryInstanceFunc)(void);
43
+typedef IDeckLinkVideoFrameAncillaryPackets* (*CreateVideoFrameAncillaryPacketsInstanceFunc)(void);
44
+
45
+static pthread_once_t                  gDeckLinkOnceControl = PTHREAD_ONCE_INIT;
46
+static pthread_once_t                  gPreviewOnceControl = PTHREAD_ONCE_INIT;
47
+
48
+static bool                                gLoadedDeckLinkAPI = false;
49
+
50
+static CreateIteratorFunc                  gCreateIteratorFunc = NULL;
51
+static CreateAPIInformationFunc                gCreateAPIInformationFunc = NULL;
52
+static CreateOpenGLScreenPreviewHelperFunc gCreateOpenGLPreviewFunc = NULL;
53
+static CreateVideoConversionInstanceFunc   gCreateVideoConversionFunc  = NULL;
54
+static CreateDeckLinkDiscoveryInstanceFunc gCreateDeckLinkDiscoveryFunc = NULL;
55
+static CreateVideoFrameAncillaryPacketsInstanceFunc    gCreateVideoFrameAncillaryPacketsFunc = NULL;
56
+
57
+static void    InitDeckLinkAPI (void)
58
+{
59
+   void *libraryHandle;
60
+   
61
+   libraryHandle = dlopen(kDeckLinkAPI_Name, RTLD_NOW|RTLD_GLOBAL);
62
+   if (!libraryHandle)
63
+   {
64
+       fprintf(stderr, "%s\n", dlerror());
65
+       return;
66
+   }
67
+   
68
+   gLoadedDeckLinkAPI = true;
69
+   
70
+   gCreateIteratorFunc = (CreateIteratorFunc)dlsym(libraryHandle, "CreateDeckLinkIteratorInstance_0003");
71
+   if (!gCreateIteratorFunc)
72
+       fprintf(stderr, "%s\n", dlerror());
73
+   gCreateAPIInformationFunc = (CreateAPIInformationFunc)dlsym(libraryHandle, "CreateDeckLinkAPIInformationInstance_0001");
74
+   if (!gCreateAPIInformationFunc)
75
+       fprintf(stderr, "%s\n", dlerror());
76
+   gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc)dlsym(libraryHandle, "CreateVideoConversionInstance_0001");
77
+   if (!gCreateVideoConversionFunc)
78
+       fprintf(stderr, "%s\n", dlerror());
79
+   gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)dlsym(libraryHandle, "CreateDeckLinkDiscoveryInstance_0002");
80
+   if (!gCreateDeckLinkDiscoveryFunc)
81
+       fprintf(stderr, "%s\n", dlerror());
82
+   gCreateVideoFrameAncillaryPacketsFunc = (CreateVideoFrameAncillaryPacketsInstanceFunc)dlsym(libraryHandle, "CreateVideoFrameAncillaryPacketsInstance_0001");
83
+   if (!gCreateVideoFrameAncillaryPacketsFunc)
84
+       fprintf(stderr, "%s\n", dlerror());
85
+}
86
+
87
+static void    InitDeckLinkPreviewAPI (void)
88
+{
89
+   void *libraryHandle;
90
+   
91
+   libraryHandle = dlopen(KDeckLinkPreviewAPI_Name, RTLD_NOW|RTLD_GLOBAL);
92
+   if (!libraryHandle)
93
+   {
94
+       fprintf(stderr, "%s\n", dlerror());
95
+       return;
96
+   }
97
+   gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc)dlsym(libraryHandle, "CreateOpenGLScreenPreviewHelper_0001");
98
+   if (!gCreateOpenGLPreviewFunc)
99
+       fprintf(stderr, "%s\n", dlerror());
100
+}
101
+
102
+bool       IsDeckLinkAPIPresent_v10_11 (void)
103
+{
104
+   // If the DeckLink API dynamic library was successfully loaded, return this knowledge to the caller
105
+   return gLoadedDeckLinkAPI;
106
+}
107
+
108
+IDeckLinkIterator*     CreateDeckLinkIteratorInstance_v10_11 (void)
109
+{
110
+   pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
111
+   
112
+   if (gCreateIteratorFunc == NULL)
113
+       return NULL;
114
+   return gCreateIteratorFunc();
115
+}
116
+
117
+IDeckLinkAPIInformation*   CreateDeckLinkAPIInformationInstance_v10_11 (void)
118
+{
119
+   pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
120
+   
121
+   if (gCreateAPIInformationFunc == NULL)
122
+       return NULL;
123
+   return gCreateAPIInformationFunc();
124
+}
125
+
126
+IDeckLinkGLScreenPreviewHelper*        CreateOpenGLScreenPreviewHelper_v10_11 (void)
127
+{
128
+   pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
129
+   pthread_once(&gPreviewOnceControl, InitDeckLinkPreviewAPI);
130
+   
131
+   if (gCreateOpenGLPreviewFunc == NULL)
132
+       return NULL;
133
+   return gCreateOpenGLPreviewFunc();
134
+}
135
+
136
+IDeckLinkVideoConversion* CreateVideoConversionInstance_v10_11 (void)
137
+{
138
+   pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
139
+   
140
+   if (gCreateVideoConversionFunc == NULL)
141
+       return NULL;
142
+   return gCreateVideoConversionFunc();
143
+}
144
+
145
+IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance_v10_11 (void)
146
+{
147
+   pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
148
+   
149
+   if (gCreateDeckLinkDiscoveryFunc == NULL)
150
+       return NULL;
151
+   return gCreateDeckLinkDiscoveryFunc();
152
+}
153
+
154
+IDeckLinkVideoFrameAncillaryPackets* CreateVideoFrameAncillaryPacketsInstance_v10_11 (void)
155
+{
156
+   pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
157
+   
158
+   if (gCreateVideoFrameAncillaryPacketsFunc == NULL)
159
+       return NULL;
160
+   return gCreateVideoFrameAncillaryPacketsFunc();
161
+}
162
obs-studio-26.0.2.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIModes.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIModes.h Changed
228
 
1
@@ -1,5 +1,5 @@
2
 /* -LICENSE-START-
3
-** Copyright (c) 2018 Blackmagic Design
4
+** Copyright (c) 2020 Blackmagic Design
5
 **
6
 ** Permission is hereby granted, free of charge, to any person or organization
7
 ** obtaining a copy of the software and accompanying documentation covered by
8
@@ -7,14 +7,14 @@
9
 ** execute, and transmit the Software, and to prepare derivative works of the
10
 ** Software, and to permit third-parties to whom the Software is furnished to
11
 ** do so, all subject to the following:
12
-** 
13
+**
14
 ** The copyright notices in the Software and this entire statement, including
15
 ** the above license grant, this restriction and the following disclaimer,
16
 ** must be included in all copies of the Software, in whole or in part, and
17
 ** all derivative works of the Software, unless such copies or derivative
18
 ** works are solely in the form of machine-executable object code generated by
19
 ** a source language processor.
20
-** 
21
+**
22
 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
 ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
 ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
25
@@ -46,10 +46,10 @@
26
 
27
 // Interface ID Declarations
28
 
29
-BMD_CONST REFIID IID_IDeckLinkDisplayModeIterator                 = /* 9C88499F-F601-4021-B80B-032E4EB41C35 */ {0x9C,0x88,0x49,0x9F,0xF6,0x01,0x40,0x21,0xB8,0x0B,0x03,0x2E,0x4E,0xB4,0x1C,0x35};
30
-BMD_CONST REFIID IID_IDeckLinkDisplayMode                         = /* 3EB2C1AB-0A3D-4523-A3AD-F40D7FB14E78 */ {0x3E,0xB2,0xC1,0xAB,0x0A,0x3D,0x45,0x23,0xA3,0xAD,0xF4,0x0D,0x7F,0xB1,0x4E,0x78};
31
+BMD_CONST REFIID IID_IDeckLinkDisplayModeIterator                 = /* 9C88499F-F601-4021-B80B-032E4EB41C35 */ { 0x9C,0x88,0x49,0x9F,0xF6,0x01,0x40,0x21,0xB8,0x0B,0x03,0x2E,0x4E,0xB4,0x1C,0x35 };
32
+BMD_CONST REFIID IID_IDeckLinkDisplayMode                         = /* 3EB2C1AB-0A3D-4523-A3AD-F40D7FB14E78 */ { 0x3E,0xB2,0xC1,0xAB,0x0A,0x3D,0x45,0x23,0xA3,0xAD,0xF4,0x0D,0x7F,0xB1,0x4E,0x78 };
33
 
34
-/* Enum BMDDisplayMode - Video display modes */
35
+/* Enum BMDDisplayMode - BMDDisplayMode enumerates the video modes supported. */
36
 
37
 typedef uint32_t BMDDisplayMode;
38
 enum _BMDDisplayMode {
39
@@ -69,9 +69,16 @@
40
     bmdModeHD1080p25                                             = /* 'Hp25' */ 0x48703235,
41
     bmdModeHD1080p2997                                           = /* 'Hp29' */ 0x48703239,
42
     bmdModeHD1080p30                                             = /* 'Hp30' */ 0x48703330,
43
+    bmdModeHD1080p4795                                           = /* 'Hp47' */ 0x48703437,
44
+    bmdModeHD1080p48                                             = /* 'Hp48' */ 0x48703438,
45
     bmdModeHD1080p50                                             = /* 'Hp50' */ 0x48703530,
46
     bmdModeHD1080p5994                                           = /* 'Hp59' */ 0x48703539,
47
     bmdModeHD1080p6000                                           = /* 'Hp60' */ 0x48703630,    // N.B. This _really_ is 60.00 Hz.
48
+    bmdModeHD1080p9590                                           = /* 'Hp95' */ 0x48703935,
49
+    bmdModeHD1080p96                                             = /* 'Hp96' */ 0x48703936,
50
+    bmdModeHD1080p100                                            = /* 'Hp10' */ 0x48703130,
51
+    bmdModeHD1080p11988                                          = /* 'Hp11' */ 0x48703131,
52
+    bmdModeHD1080p120                                            = /* 'Hp12' */ 0x48703132,
53
     bmdModeHD1080i50                                             = /* 'Hi50' */ 0x48693530,
54
     bmdModeHD1080i5994                                           = /* 'Hi59' */ 0x48693539,
55
     bmdModeHD1080i6000                                           = /* 'Hi60' */ 0x48693630,    // N.B. This _really_ is 60.00 Hz.
56
@@ -95,9 +102,16 @@
57
     bmdMode2kDCI25                                               = /* '2d25' */ 0x32643235,
58
     bmdMode2kDCI2997                                             = /* '2d29' */ 0x32643239,
59
     bmdMode2kDCI30                                               = /* '2d30' */ 0x32643330,
60
+    bmdMode2kDCI4795                                             = /* '2d47' */ 0x32643437,
61
+    bmdMode2kDCI48                                               = /* '2d48' */ 0x32643438,
62
     bmdMode2kDCI50                                               = /* '2d50' */ 0x32643530,
63
     bmdMode2kDCI5994                                             = /* '2d59' */ 0x32643539,
64
     bmdMode2kDCI60                                               = /* '2d60' */ 0x32643630,
65
+    bmdMode2kDCI9590                                             = /* '2d95' */ 0x32643935,
66
+    bmdMode2kDCI96                                               = /* '2d96' */ 0x32643936,
67
+    bmdMode2kDCI100                                              = /* '2d10' */ 0x32643130,
68
+    bmdMode2kDCI11988                                            = /* '2d11' */ 0x32643131,
69
+    bmdMode2kDCI120                                              = /* '2d12' */ 0x32643132,
70
 
71
     /* 4K UHD Modes */
72
 
73
@@ -106,9 +120,16 @@
74
     bmdMode4K2160p25                                             = /* '4k25' */ 0x346B3235,
75
     bmdMode4K2160p2997                                           = /* '4k29' */ 0x346B3239,
76
     bmdMode4K2160p30                                             = /* '4k30' */ 0x346B3330,
77
+    bmdMode4K2160p4795                                           = /* '4k47' */ 0x346B3437,
78
+    bmdMode4K2160p48                                             = /* '4k48' */ 0x346B3438,
79
     bmdMode4K2160p50                                             = /* '4k50' */ 0x346B3530,
80
     bmdMode4K2160p5994                                           = /* '4k59' */ 0x346B3539,
81
     bmdMode4K2160p60                                             = /* '4k60' */ 0x346B3630,
82
+    bmdMode4K2160p9590                                           = /* '4k95' */ 0x346B3935,
83
+    bmdMode4K2160p96                                             = /* '4k96' */ 0x346B3936,
84
+    bmdMode4K2160p100                                            = /* '4k10' */ 0x346B3130,
85
+    bmdMode4K2160p11988                                          = /* '4k11' */ 0x346B3131,
86
+    bmdMode4K2160p120                                            = /* '4k12' */ 0x346B3132,
87
 
88
     /* 4K DCI Modes */
89
 
90
@@ -117,9 +138,16 @@
91
     bmdMode4kDCI25                                               = /* '4d25' */ 0x34643235,
92
     bmdMode4kDCI2997                                             = /* '4d29' */ 0x34643239,
93
     bmdMode4kDCI30                                               = /* '4d30' */ 0x34643330,
94
+    bmdMode4kDCI4795                                             = /* '4d47' */ 0x34643437,
95
+    bmdMode4kDCI48                                               = /* '4d48' */ 0x34643438,
96
     bmdMode4kDCI50                                               = /* '4d50' */ 0x34643530,
97
     bmdMode4kDCI5994                                             = /* '4d59' */ 0x34643539,
98
     bmdMode4kDCI60                                               = /* '4d60' */ 0x34643630,
99
+    bmdMode4kDCI9590                                             = /* '4d95' */ 0x34643935,
100
+    bmdMode4kDCI96                                               = /* '4d96' */ 0x34643936,
101
+    bmdMode4kDCI100                                              = /* '4d10' */ 0x34643130,
102
+    bmdMode4kDCI11988                                            = /* '4d11' */ 0x34643131,
103
+    bmdMode4kDCI120                                              = /* '4d12' */ 0x34643132,
104
 
105
     /* 8K UHD Modes */
106
 
107
@@ -128,6 +156,8 @@
108
     bmdMode8K4320p25                                             = /* '8k25' */ 0x386B3235,
109
     bmdMode8K4320p2997                                           = /* '8k29' */ 0x386B3239,
110
     bmdMode8K4320p30                                             = /* '8k30' */ 0x386B3330,
111
+    bmdMode8K4320p4795                                           = /* '8k47' */ 0x386B3437,
112
+    bmdMode8K4320p48                                             = /* '8k48' */ 0x386B3438,
113
     bmdMode8K4320p50                                             = /* '8k50' */ 0x386B3530,
114
     bmdMode8K4320p5994                                           = /* '8k59' */ 0x386B3539,
115
     bmdMode8K4320p60                                             = /* '8k60' */ 0x386B3630,
116
@@ -139,21 +169,37 @@
117
     bmdMode8kDCI25                                               = /* '8d25' */ 0x38643235,
118
     bmdMode8kDCI2997                                             = /* '8d29' */ 0x38643239,
119
     bmdMode8kDCI30                                               = /* '8d30' */ 0x38643330,
120
+    bmdMode8kDCI4795                                             = /* '8d47' */ 0x38643437,
121
+    bmdMode8kDCI48                                               = /* '8d48' */ 0x38643438,
122
     bmdMode8kDCI50                                               = /* '8d50' */ 0x38643530,
123
     bmdMode8kDCI5994                                             = /* '8d59' */ 0x38643539,
124
     bmdMode8kDCI60                                               = /* '8d60' */ 0x38643630,
125
 
126
-    /* RAW Modes for Cintel (input only) */
127
-
128
-    bmdModeCintelRAW                                             = /* 'rwci' */ 0x72776369,    // Frame size up to 4096x3072, variable frame rate
129
-    bmdModeCintelCompressedRAW                                   = /* 'rwcc' */ 0x72776363,    // Frame size up to 4096x3072, variable frame rate
130
+    /* PC Modes */
131
+
132
+    bmdMode640x480p60                                            = /* 'vga6' */ 0x76676136,
133
+    bmdMode800x600p60                                            = /* 'svg6' */ 0x73766736,
134
+    bmdMode1440x900p50                                           = /* 'wxg5' */ 0x77786735,
135
+    bmdMode1440x900p60                                           = /* 'wxg6' */ 0x77786736,
136
+    bmdMode1440x1080p50                                          = /* 'sxg5' */ 0x73786735,
137
+    bmdMode1440x1080p60                                          = /* 'sxg6' */ 0x73786736,
138
+    bmdMode1600x1200p50                                          = /* 'uxg5' */ 0x75786735,
139
+    bmdMode1600x1200p60                                          = /* 'uxg6' */ 0x75786736,
140
+    bmdMode1920x1200p50                                          = /* 'wux5' */ 0x77757835,
141
+    bmdMode1920x1200p60                                          = /* 'wux6' */ 0x77757836,
142
+    bmdMode1920x1440p50                                          = /* '1945' */ 0x31393435,
143
+    bmdMode1920x1440p60                                          = /* '1946' */ 0x31393436,
144
+    bmdMode2560x1440p50                                          = /* 'wqh5' */ 0x77716835,
145
+    bmdMode2560x1440p60                                          = /* 'wqh6' */ 0x77716836,
146
+    bmdMode2560x1600p50                                          = /* 'wqx5' */ 0x77717835,
147
+    bmdMode2560x1600p60                                          = /* 'wqx6' */ 0x77717836,
148
 
149
     /* Special Modes */
150
 
151
     bmdModeUnknown                                               = /* 'iunk' */ 0x69756E6B
152
 };
153
 
154
-/* Enum BMDFieldDominance - Video field dominance */
155
+/* Enum BMDFieldDominance - BMDFieldDominance enumerates settings applicable to video fields. */
156
 
157
 typedef uint32_t BMDFieldDominance;
158
 enum _BMDFieldDominance {
159
@@ -168,6 +214,7 @@
160
 
161
 typedef uint32_t BMDPixelFormat;
162
 enum _BMDPixelFormat {
163
+    bmdFormatUnspecified                                         = 0,
164
     bmdFormat8BitYUV                                             = /* '2vuy' */ 0x32767579,
165
     bmdFormat10BitYUV                                            = /* 'v210' */ 0x76323130,
166
     bmdFormat8BitARGB                                            = 32,
167
@@ -181,12 +228,7 @@
168
 
169
     /* AVID DNxHR */
170
 
171
-    bmdFormatDNxHR                                               = /* 'AVdh' */ 0x41566468,
172
-
173
-    /* Cintel formats */
174
-
175
-    bmdFormat12BitRAWGRBG                                        = /* 'r12p' */ 0x72313270,    // 12-bit RAW data for bayer pattern GRBG
176
-    bmdFormat12BitRAWJPEG                                        = /* 'r16p' */ 0x72313670 // 12-bit RAW data arranged in tiles and JPEG compressed
177
+    bmdFormatDNxHR                                               = /* 'AVdh' */ 0x41566468
178
 };
179
 
180
 /* Enum BMDDisplayModeFlags - Flags to describe the characteristics of an IDeckLinkDisplayMode. */
181
@@ -199,32 +241,34 @@
182
     bmdDisplayModeColorspaceRec2020                              = 1 << 3
183
 };
184
 
185
+#if defined(__cplusplus)
186
+
187
 // Forward Declarations
188
 
189
 class IDeckLinkDisplayModeIterator;
190
 class IDeckLinkDisplayMode;
191
 
192
-/* Interface IDeckLinkDisplayModeIterator - enumerates over supported input/output display modes. */
193
+/* Interface IDeckLinkDisplayModeIterator - Enumerates over supported input/output display modes. */
194
 
195
 class BMD_PUBLIC IDeckLinkDisplayModeIterator : public IUnknown
196
 {
197
 public:
198
-    virtual HRESULT Next (/* out */ IDeckLinkDisplayMode **deckLinkDisplayMode) = 0;
199
+    virtual HRESULT Next (/* out */ IDeckLinkDisplayMode** deckLinkDisplayMode) = 0;
200
 
201
 protected:
202
     virtual ~IDeckLinkDisplayModeIterator () {} // call Release method to drop reference count
203
 };
204
 
205
-/* Interface IDeckLinkDisplayMode - represents a display mode */
206
+/* Interface IDeckLinkDisplayMode - Represents a display mode */
207
 
208
 class BMD_PUBLIC IDeckLinkDisplayMode : public IUnknown
209
 {
210
 public:
211
-    virtual HRESULT GetName (/* out */ const char **name) = 0;
212
+    virtual HRESULT GetName (/* out */ const char** name) = 0;
213
     virtual BMDDisplayMode GetDisplayMode (void) = 0;
214
     virtual long GetWidth (void) = 0;
215
     virtual long GetHeight (void) = 0;
216
-    virtual HRESULT GetFrameRate (/* out */ BMDTimeValue *frameDuration, /* out */ BMDTimeScale *timeScale) = 0;
217
+    virtual HRESULT GetFrameRate (/* out */ BMDTimeValue* frameDuration, /* out */ BMDTimeScale* timeScale) = 0;
218
     virtual BMDFieldDominance GetFieldDominance (void) = 0;
219
     virtual BMDDisplayModeFlags GetFlags (void) = 0;
220
 
221
@@ -239,5 +283,5 @@
222
 
223
 }
224
 
225
-
226
+#endif /* defined(__cplusplus) */
227
 #endif /* defined(BMD_DECKLINKAPIMODES_H) */
228
obs-studio-26.0.2.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPITypes.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPITypes.h Changed
82
 
1
@@ -1,5 +1,5 @@
2
 /* -LICENSE-START-
3
-** Copyright (c) 2018 Blackmagic Design
4
+** Copyright (c) 2020 Blackmagic Design
5
 **
6
 ** Permission is hereby granted, free of charge, to any person or organization
7
 ** obtaining a copy of the software and accompanying documentation covered by
8
@@ -7,14 +7,14 @@
9
 ** execute, and transmit the Software, and to prepare derivative works of the
10
 ** Software, and to permit third-parties to whom the Software is furnished to
11
 ** do so, all subject to the following:
12
-** 
13
+**
14
 ** The copyright notices in the Software and this entire statement, including
15
 ** the above license grant, this restriction and the following disclaimer,
16
 ** must be included in all copies of the Software, in whole or in part, and
17
 ** all derivative works of the Software, unless such copies or derivative
18
 ** works are solely in the form of machine-executable object code generated by
19
 ** a source language processor.
20
-** 
21
+**
22
 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
 ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
 ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
25
@@ -50,7 +50,7 @@
26
 
27
 // Interface ID Declarations
28
 
29
-BMD_CONST REFIID IID_IDeckLinkTimecode                            = /* BC6CFBD3-8317-4325-AC1C-1216391E9340 */ {0xBC,0x6C,0xFB,0xD3,0x83,0x17,0x43,0x25,0xAC,0x1C,0x12,0x16,0x39,0x1E,0x93,0x40};
30
+BMD_CONST REFIID IID_IDeckLinkTimecode                            = /* BC6CFBD3-8317-4325-AC1C-1216391E9340 */ { 0xBC,0x6C,0xFB,0xD3,0x83,0x17,0x43,0x25,0xAC,0x1C,0x12,0x16,0x39,0x1E,0x93,0x40 };
31
 
32
 /* Enum BMDTimecodeFlags - Timecode flags */
33
 
34
@@ -59,13 +59,16 @@
35
     bmdTimecodeFlagDefault                                       = 0,
36
     bmdTimecodeIsDropFrame                                       = 1 << 0,
37
     bmdTimecodeFieldMark                                         = 1 << 1,
38
-    bmdTimecodeColorFrame                                        = 1 << 2
39
+    bmdTimecodeColorFrame                                        = 1 << 2,
40
+    bmdTimecodeEmbedRecordingTrigger                             = 1 << 3, // On SDI recording trigger utilises a user-bit.
41
+    bmdTimecodeRecordingTriggered                                = 1 << 4
42
 };
43
 
44
 /* Enum BMDVideoConnection - Video connection types */
45
 
46
 typedef uint32_t BMDVideoConnection;
47
 enum _BMDVideoConnection {
48
+    bmdVideoConnectionUnspecified                                = 0,
49
     bmdVideoConnectionSDI                                        = 1 << 0,
50
     bmdVideoConnectionHDMI                                       = 1 << 1,
51
     bmdVideoConnectionOpticalSDI                                 = 1 << 2,
52
@@ -95,6 +98,8 @@
53
     bmdDeckControlConnectionRS422Remote2                         = 1 << 1
54
 };
55
 
56
+#if defined(__cplusplus)
57
+
58
 // Forward Declarations
59
 
60
 class IDeckLinkTimecode;
61
@@ -105,10 +110,10 @@
62
 {
63
 public:
64
     virtual BMDTimecodeBCD GetBCD (void) = 0;
65
-    virtual HRESULT GetComponents (/* out */ uint8_t *hours, /* out */ uint8_t *minutes, /* out */ uint8_t *seconds, /* out */ uint8_t *frames) = 0;
66
-    virtual HRESULT GetString (/* out */ const char **timecode) = 0;
67
+    virtual HRESULT GetComponents (/* out */ uint8_t* hours, /* out */ uint8_t* minutes, /* out */ uint8_t* seconds, /* out */ uint8_t* frames) = 0;
68
+    virtual HRESULT GetString (/* out */ const char** timecode) = 0;
69
     virtual BMDTimecodeFlags GetFlags (void) = 0;
70
-    virtual HRESULT GetTimecodeUserBits (/* out */ BMDTimecodeUserBits *userBits) = 0;
71
+    virtual HRESULT GetTimecodeUserBits (/* out */ BMDTimecodeUserBits* userBits) = 0;
72
 
73
 protected:
74
     virtual ~IDeckLinkTimecode () {} // call Release method to drop reference count
75
@@ -121,5 +126,5 @@
76
 
77
 }
78
 
79
-
80
+#endif /* defined(__cplusplus) */
81
 #endif /* defined(BMD_DECKLINKAPITYPES_H) */
82
obs-studio-26.0.2.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIVersion.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIVersion.h Changed
12
 
1
@@ -30,8 +30,8 @@
2
 #ifndef __DeckLink_API_Version_h__
3
 #define __DeckLink_API_Version_h__
4
 
5
-#define BLACKMAGIC_DECKLINK_API_VERSION                    0x0a0b0400
6
-#define BLACKMAGIC_DECKLINK_API_VERSION_STRING         "10.11.4"
7
+#define BLACKMAGIC_DECKLINK_API_VERSION                    0x0b060000
8
+#define BLACKMAGIC_DECKLINK_API_VERSION_STRING         "11.6"
9
 
10
 #endif // __DeckLink_API_Version_h__
11
 
12
obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIVideoEncoderInput_v10_11.h Added
76
 
1
@@ -0,0 +1,74 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2017 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPIVIDEOENCODERINPUT_v10_11_H
30
+#define BMD_DECKLINKAPIVIDEOENCODERINPUT_v10_11_H
31
+
32
+#include "DeckLinkAPI.h"
33
+#include "DeckLinkAPI_v10_11.h"
34
+
35
+// Type Declarations
36
+BMD_CONST REFIID IID_IDeckLinkEncoderInput_v10_11                        = /* 270587DA-6B7D-42E7-A1F0-6D853F581185 */ {0x27,0x05,0x87,0xDA,0x6B,0x7D,0x42,0xE7,0xA1,0xF0,0x6D,0x85,0x3F,0x58,0x11,0x85};
37
+
38
+/* Interface IDeckLinkEncoderInput_v10_11 - Created by QueryInterface from IDeckLink. */
39
+
40
+class IDeckLinkEncoderInput_v10_11 : public IUnknown
41
+{
42
+public:
43
+    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport_v10_11 *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
44
+    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
45
+
46
+    /* Video Input */
47
+
48
+    virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
49
+    virtual HRESULT DisableVideoInput (void) = 0;
50
+    virtual HRESULT GetAvailablePacketsCount (/* out */ uint32_t *availablePacketsCount) = 0;
51
+    virtual HRESULT SetMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
52
+
53
+    /* Audio Input */
54
+
55
+    virtual HRESULT EnableAudioInput (/* in */ BMDAudioFormat audioFormat, /* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
56
+    virtual HRESULT DisableAudioInput (void) = 0;
57
+    virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
58
+
59
+    /* Input Control */
60
+
61
+    virtual HRESULT StartStreams (void) = 0;
62
+    virtual HRESULT StopStreams (void) = 0;
63
+    virtual HRESULT PauseStreams (void) = 0;
64
+    virtual HRESULT FlushStreams (void) = 0;
65
+    virtual HRESULT SetCallback (/* in */ IDeckLinkEncoderInputCallback *theCallback) = 0;
66
+
67
+    /* Hardware Timing */
68
+
69
+    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
70
+
71
+protected:
72
+    virtual ~IDeckLinkEncoderInput_v10_11 () {} // call Release method to drop reference count
73
+};
74
+
75
+#endif /* defined(BMD_DECKLINKAPIVIDEOENCODERINPUT_v10_11_H) */
76
obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIVideoInput_v10_11.h Added
78
 
1
@@ -0,0 +1,76 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2017 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPIVIDEOINPUT_v10_11_H
30
+#define BMD_DECKLINKAPIVIDEOINPUT_v10_11_H
31
+
32
+#include "DeckLinkAPI.h"
33
+#include "DeckLinkAPI_v10_11.h"
34
+
35
+// Type Declarations
36
+BMD_CONST REFIID IID_IDeckLinkInput_v10_11                               = /* AF22762B-DFAC-4846-AA79-FA8883560995 */ {0xAF,0x22,0x76,0x2B,0xDF,0xAC,0x48,0x46,0xAA,0x79,0xFA,0x88,0x83,0x56,0x09,0x95};
37
+
38
+/* Interface IDeckLinkInput_v10_11 - DeckLink input interface. */
39
+
40
+class IDeckLinkInput_v10_11 : public IUnknown
41
+{
42
+public:
43
+    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport_v10_11 *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
44
+    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
45
+
46
+    virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
47
+
48
+    /* Video Input */
49
+
50
+    virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
51
+    virtual HRESULT DisableVideoInput (void) = 0;
52
+    virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t *availableFrameCount) = 0;
53
+    virtual HRESULT SetVideoInputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
54
+
55
+    /* Audio Input */
56
+
57
+    virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
58
+    virtual HRESULT DisableAudioInput (void) = 0;
59
+    virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
60
+
61
+    /* Input Control */
62
+
63
+    virtual HRESULT StartStreams (void) = 0;
64
+    virtual HRESULT StopStreams (void) = 0;
65
+    virtual HRESULT PauseStreams (void) = 0;
66
+    virtual HRESULT FlushStreams (void) = 0;
67
+    virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback *theCallback) = 0;
68
+
69
+    /* Hardware Timing */
70
+
71
+    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
72
+
73
+protected:
74
+    virtual ~IDeckLinkInput_v10_11 () {} // call Release method to drop reference count
75
+};
76
+
77
+#endif /* defined(BMD_DECKLINKAPIVIDEOINPUT_v10_11_H) */
78
obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIVideoInput_v11_4.h Added
77
 
1
@@ -0,0 +1,75 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2019 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPIVIDEOINPUT_v11_4_H
30
+#define BMD_DECKLINKAPIVIDEOINPUT_v11_4_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+// Type Declarations
35
+BMD_CONST REFIID IID_IDeckLinkInput_v11_4                               = /* 2A88CF76-F494-4216-A7EF-DC74EEB83882 */ { 0x2A,0x88,0xCF,0x76,0xF4,0x94,0x42,0x16,0xA7,0xEF,0xDC,0x74,0xEE,0xB8,0x38,0x82 };
36
+
37
+/* Interface IDeckLinkInput - Created by QueryInterface from IDeckLink. */
38
+
39
+class BMD_PUBLIC IDeckLinkInput_v11_4 : public IUnknown
40
+{
41
+public:
42
+    virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of 0 is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedPixelFormat, /* in */ BMDSupportedVideoModeFlags flags, /* out */ bool* supported) = 0;
43
+    virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
44
+    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
45
+    virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback* previewCallback) = 0;
46
+
47
+    /* Video Input */
48
+
49
+    virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
50
+    virtual HRESULT DisableVideoInput (void) = 0;
51
+    virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t* availableFrameCount) = 0;
52
+    virtual HRESULT SetVideoInputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator* theAllocator) = 0;
53
+
54
+    /* Audio Input */
55
+
56
+    virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
57
+    virtual HRESULT DisableAudioInput (void) = 0;
58
+    virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t* availableSampleFrameCount) = 0;
59
+
60
+    /* Input Control */
61
+
62
+    virtual HRESULT StartStreams (void) = 0;
63
+    virtual HRESULT StopStreams (void) = 0;
64
+    virtual HRESULT PauseStreams (void) = 0;
65
+    virtual HRESULT FlushStreams (void) = 0;
66
+    virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback* theCallback) = 0;
67
+
68
+    /* Hardware Timing */
69
+
70
+    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
71
+
72
+protected:
73
+    virtual ~IDeckLinkInput_v11_4 () {} // call Release method to drop reference count
74
+};
75
+
76
+#endif /* defined(BMD_DECKLINKAPIVIDEOINPUT_v11_4_H) */
77
obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIVideoInput_v11_5_1.h Added
91
 
1
@@ -0,0 +1,89 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2020 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+** 
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+** 
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPIVIDEOINPUT_v11_5_1_H
30
+#define BMD_DECKLINKAPIVIDEOINPUT_v11_5_1_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+// Type Declarations
35
+
36
+BMD_CONST REFIID IID_IDeckLinkInputCallback_v11_5_1                       = /* DD04E5EC-7415-42AB-AE4A-E80C4DFC044A */ { 0xDD, 0x04, 0xE5, 0xEC, 0x74, 0x15, 0x42, 0xAB, 0xAE, 0x4A, 0xE8, 0x0C, 0x4D, 0xFC, 0x04, 0x4A };
37
+BMD_CONST REFIID IID_IDeckLinkInput_v11_5_1                               = /* 9434C6E4-B15D-4B1C-979E-661E3DDCB4B9 */ { 0x94, 0x34, 0xC6, 0xE4, 0xB1, 0x5D, 0x4B, 0x1C, 0x97, 0x9E, 0x66, 0x1E, 0x3D, 0xDC, 0xB4, 0xB9 };
38
+
39
+/* Interface IDeckLinkInputCallback_v11_5_1 - Frame arrival callback. */
40
+
41
+class BMD_PUBLIC IDeckLinkInputCallback_v11_5_1 : public IUnknown
42
+{
43
+public:
44
+    virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode* newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
45
+    virtual HRESULT VideoInputFrameArrived (/* in */ IDeckLinkVideoInputFrame* videoFrame, /* in */ IDeckLinkAudioInputPacket* audioPacket) = 0;
46
+
47
+protected:
48
+    virtual ~IDeckLinkInputCallback_v11_5_1 () {} // call Release method to drop reference count
49
+};
50
+
51
+/* Interface IDeckLinkInput_v11_5_1 - Created by QueryInterface from IDeckLink. */
52
+
53
+class BMD_PUBLIC IDeckLinkInput_v11_5_1 : public IUnknown
54
+{
55
+public:
56
+    virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of bmdVideoConnectionUnspecified is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedPixelFormat, /* in */ BMDVideoInputConversionMode conversionMode, /* in */ BMDSupportedVideoModeFlags flags, /* out */ BMDDisplayMode* actualMode, /* out */ bool* supported) = 0;
57
+    virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
58
+    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
59
+    virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback* previewCallback) = 0;
60
+
61
+    /* Video Input */
62
+
63
+    virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
64
+    virtual HRESULT DisableVideoInput (void) = 0;
65
+    virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t* availableFrameCount) = 0;
66
+    virtual HRESULT SetVideoInputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator* theAllocator) = 0;
67
+
68
+    /* Audio Input */
69
+
70
+    virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
71
+    virtual HRESULT DisableAudioInput (void) = 0;
72
+    virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t* availableSampleFrameCount) = 0;
73
+
74
+    /* Input Control */
75
+
76
+    virtual HRESULT StartStreams (void) = 0;
77
+    virtual HRESULT StopStreams (void) = 0;
78
+    virtual HRESULT PauseStreams (void) = 0;
79
+    virtual HRESULT FlushStreams (void) = 0;
80
+    virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback_v11_5_1* theCallback) = 0;
81
+
82
+    /* Hardware Timing */
83
+
84
+    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
85
+
86
+protected:
87
+    virtual ~IDeckLinkInput_v11_5_1 () {} // call Release method to drop reference count
88
+};
89
+
90
+#endif /* defined(BMD_DECKLINKAPIVIDEOINPUT_v11_5_1_H) */
91
obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIVideoOutput_v10_11.h Added
96
 
1
@@ -0,0 +1,94 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2017 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPIVIDEOOUTPUT_v10_11_H
30
+#define BMD_DECKLINKAPIVIDEOOUTPUT_v10_11_H
31
+
32
+#include "DeckLinkAPI.h"
33
+#include "DeckLinkAPI_v10_11.h"
34
+
35
+// Type Declarations
36
+BMD_CONST REFIID IID_IDeckLinkOutput_v10_11                              = /* CC5C8A6E-3F2F-4B3A-87EA-FD78AF300564 */ {0xCC,0x5C,0x8A,0x6E,0x3F,0x2F,0x4B,0x3A,0x87,0xEA,0xFD,0x78,0xAF,0x30,0x05,0x64};
37
+
38
+/* Interface IDeckLinkOutput_v10_11 - DeckLink output interface. */
39
+
40
+class IDeckLinkOutput_v10_11 : public IUnknown
41
+{
42
+public:
43
+    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoOutputFlags flags, /* out */ BMDDisplayModeSupport_v10_11 *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
44
+    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
45
+
46
+    virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
47
+
48
+    /* Video Output */
49
+
50
+    virtual HRESULT EnableVideoOutput (/* in */ BMDDisplayMode displayMode, /* in */ BMDVideoOutputFlags flags) = 0;
51
+    virtual HRESULT DisableVideoOutput (void) = 0;
52
+
53
+    virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
54
+    virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame **outFrame) = 0;
55
+    virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary **outBuffer) = 0;
56
+
57
+    virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame *theFrame) = 0;
58
+    virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame *theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
59
+    virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback *theCallback) = 0;
60
+    virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t *bufferedFrameCount) = 0;
61
+
62
+    /* Audio Output */
63
+
64
+    virtual HRESULT EnableAudioOutput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount, /* in */ BMDAudioOutputStreamType streamType) = 0;
65
+    virtual HRESULT DisableAudioOutput (void) = 0;
66
+
67
+    virtual HRESULT WriteAudioSamplesSync (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* out */ uint32_t *sampleFramesWritten) = 0;
68
+
69
+    virtual HRESULT BeginAudioPreroll (void) = 0;
70
+    virtual HRESULT EndAudioPreroll (void) = 0;
71
+    virtual HRESULT ScheduleAudioSamples (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* in */ BMDTimeValue streamTime, /* in */ BMDTimeScale timeScale, /* out */ uint32_t *sampleFramesWritten) = 0;
72
+
73
+    virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t *bufferedSampleFrameCount) = 0;
74
+    virtual HRESULT FlushBufferedAudioSamples (void) = 0;
75
+
76
+    virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback *theCallback) = 0;
77
+
78
+    /* Output Control */
79
+
80
+    virtual HRESULT StartScheduledPlayback (/* in */ BMDTimeValue playbackStartTime, /* in */ BMDTimeScale timeScale, /* in */ double playbackSpeed) = 0;
81
+    virtual HRESULT StopScheduledPlayback (/* in */ BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue *actualStopTime, /* in */ BMDTimeScale timeScale) = 0;
82
+    virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool *active) = 0;
83
+    virtual HRESULT GetScheduledStreamTime (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *streamTime, /* out */ double *playbackSpeed) = 0;
84
+    virtual HRESULT GetReferenceStatus (/* out */ BMDReferenceStatus *referenceStatus) = 0;
85
+
86
+    /* Hardware Timing */
87
+
88
+    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
89
+    virtual HRESULT GetFrameCompletionReferenceTimestamp (/* in */ IDeckLinkVideoFrame *theFrame, /* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *frameCompletionTimestamp) = 0;
90
+
91
+protected:
92
+    virtual ~IDeckLinkOutput_v10_11 () {} // call Release method to drop reference count
93
+};
94
+
95
+#endif /* defined(BMD_DECKLINKAPIVIDEOOUTPUT_v10_11_H) */
96
obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIVideoOutput_v11_4.h Added
89
 
1
@@ -0,0 +1,87 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2019 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPIVIDEOOUTPUT_v11_4_H
30
+#define BMD_DECKLINKAPIVIDEOOUTPUT_v11_4_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+// Type Declarations
35
+BMD_CONST REFIID IID_IDeckLinkOutput_v11_4                              = /* 065A0F6C-C508-4D0D-B919-F5EB0EBFC96B */ { 0x06,0x5A,0x0F,0x6C,0xC5,0x08,0x4D,0x0D,0xB9,0x19,0xF5,0xEB,0x0E,0xBF,0xC9,0x6B };
36
+
37
+/* Interface IDeckLinkOutput_v11_4 - Created by QueryInterface from IDeckLink. */
38
+
39
+class BMD_PUBLIC IDeckLinkOutput_v11_4 : public IUnknown
40
+{
41
+public:
42
+    virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of 0 is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedPixelFormat, /* in */ BMDSupportedVideoModeFlags flags, /* out */ BMDDisplayMode* actualMode, /* out */ bool* supported) = 0;
43
+    virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
44
+    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
45
+    virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback* previewCallback) = 0;
46
+
47
+    /* Video Output */
48
+
49
+    virtual HRESULT EnableVideoOutput (/* in */ BMDDisplayMode displayMode, /* in */ BMDVideoOutputFlags flags) = 0;
50
+    virtual HRESULT DisableVideoOutput (void) = 0;
51
+    virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator* theAllocator) = 0;
52
+    virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame** outFrame) = 0;
53
+    virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary** outBuffer) = 0; // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
54
+    virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame* theFrame) = 0;
55
+    virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame* theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
56
+    virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback* theCallback) = 0;
57
+    virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t* bufferedFrameCount) = 0;
58
+
59
+    /* Audio Output */
60
+
61
+    virtual HRESULT EnableAudioOutput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount, /* in */ BMDAudioOutputStreamType streamType) = 0;
62
+    virtual HRESULT DisableAudioOutput (void) = 0;
63
+    virtual HRESULT WriteAudioSamplesSync (/* in */ void* buffer, /* in */ uint32_t sampleFrameCount, /* out */ uint32_t* sampleFramesWritten) = 0;
64
+    virtual HRESULT BeginAudioPreroll (void) = 0;
65
+    virtual HRESULT EndAudioPreroll (void) = 0;
66
+    virtual HRESULT ScheduleAudioSamples (/* in */ void* buffer, /* in */ uint32_t sampleFrameCount, /* in */ BMDTimeValue streamTime, /* in */ BMDTimeScale timeScale, /* out */ uint32_t* sampleFramesWritten) = 0;
67
+    virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t* bufferedSampleFrameCount) = 0;
68
+    virtual HRESULT FlushBufferedAudioSamples (void) = 0;
69
+    virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback* theCallback) = 0;
70
+
71
+    /* Output Control */
72
+
73
+    virtual HRESULT StartScheduledPlayback (/* in */ BMDTimeValue playbackStartTime, /* in */ BMDTimeScale timeScale, /* in */ double playbackSpeed) = 0;
74
+    virtual HRESULT StopScheduledPlayback (/* in */ BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue* actualStopTime, /* in */ BMDTimeScale timeScale) = 0;
75
+    virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool* active) = 0;
76
+    virtual HRESULT GetScheduledStreamTime (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* streamTime, /* out */ double* playbackSpeed) = 0;
77
+    virtual HRESULT GetReferenceStatus (/* out */ BMDReferenceStatus* referenceStatus) = 0;
78
+
79
+    /* Hardware Timing */
80
+
81
+    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
82
+    virtual HRESULT GetFrameCompletionReferenceTimestamp (/* in */ IDeckLinkVideoFrame* theFrame, /* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* frameCompletionTimestamp) = 0;
83
+
84
+protected:
85
+    virtual ~IDeckLinkOutput_v11_4 () {} // call Release method to drop reference count
86
+};
87
+
88
+#endif /* defined(BMD_DECKLINKAPIVIDEOOUTPUT_v11_4_H) */
89
obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v10_11.h Added
123
 
1
@@ -0,0 +1,121 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2018 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+** 
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+** 
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPI_v10_11_H
30
+#define BMD_DECKLINKAPI_v10_11_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+// Interface ID Declarations
35
+
36
+BMD_CONST REFIID IID_IDeckLinkAttributes_v10_11                     = /* ABC11843-D966-44CB-96E2-A1CB5D3135C4 */ {0xAB,0xC1,0x18,0x43,0xD9,0x66,0x44,0xCB,0x96,0xE2,0xA1,0xCB,0x5D,0x31,0x35,0xC4};
37
+BMD_CONST REFIID IID_IDeckLinkNotification_v10_11                   = /* 0A1FB207-E215-441B-9B19-6FA1575946C5 */ {0x0A,0x1F,0xB2,0x07,0xE2,0x15,0x44,0x1B,0x9B,0x19,0x6F,0xA1,0x57,0x59,0x46,0xC5};
38
+
39
+/* Enum BMDDisplayModeSupport_v10_11 - Output mode supported flags */
40
+
41
+typedef uint32_t BMDDisplayModeSupport_v10_11;
42
+enum _BMDDisplayModeSupport_v10_11 {
43
+   bmdDisplayModeNotSupported_v10_11                               = 0,
44
+   bmdDisplayModeSupported_v10_11,
45
+   bmdDisplayModeSupportedWithConversion_v10_11
46
+};
47
+
48
+/* Enum BMDDuplexMode_v10_11 - Duplex for configurable ports */
49
+
50
+typedef uint32_t BMDDuplexMode_v10_11;
51
+enum _BMDDuplexMode_v10_11 {
52
+    bmdDuplexModeFull_v10_11                                        = /* 'fdup' */ 0x66647570,
53
+    bmdDuplexModeHalf_v10_11                                        = /* 'hdup' */ 0x68647570
54
+};
55
+
56
+/* Enum BMDDeckLinkAttributeID_v10_11 - DeckLink Attribute ID */
57
+
58
+enum _BMDDeckLinkAttributeID_v10_11 {
59
+
60
+    /* Flags */
61
+
62
+    BMDDeckLinkSupportsDuplexModeConfiguration_v10_11               = 'dupx',
63
+    BMDDeckLinkSupportsHDKeying_v10_11                              = 'keyh',
64
+
65
+    /* Integers */
66
+
67
+    BMDDeckLinkPairedDevicePersistentID_v10_11                      = 'ppid',
68
+    BMDDeckLinkSupportsFullDuplex_v10_11                            = 'fdup',
69
+};
70
+
71
+enum  _BMDDeckLinkStatusID_v10_11 {
72
+    bmdDeckLinkStatusDuplexMode_v10_11                             = 'dupx',
73
+};
74
+
75
+typedef uint32_t BMDDuplexStatus_v10_11;
76
+enum _BMDDuplexStatus_v10_11 {
77
+    bmdDuplexFullDuplex_v10_11                                      = 'fdup',
78
+    bmdDuplexHalfDuplex_v10_11                                      = 'hdup',
79
+    bmdDuplexSimplex_v10_11                                         = 'splx',
80
+    bmdDuplexInactive_v10_11                                        = 'inac',
81
+};
82
+
83
+#if defined(__cplusplus)
84
+
85
+/* Interface IDeckLinkAttributes_v10_11 - DeckLink Attribute interface */
86
+
87
+class BMD_PUBLIC IDeckLinkAttributes_v10_11 : public IUnknown
88
+{
89
+public:
90
+    virtual HRESULT GetFlag (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ bool *value) = 0;
91
+    virtual HRESULT GetInt (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ int64_t *value) = 0;
92
+    virtual HRESULT GetFloat (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ double *value) = 0;
93
+    virtual HRESULT GetString (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ const char **value) = 0;
94
+
95
+protected:
96
+    virtual ~IDeckLinkAttributes_v10_11 () {} // call Release method to drop reference count
97
+};
98
+
99
+/* Interface IDeckLinkNotification_v10_11 - DeckLink Notification interface */
100
+
101
+class BMD_PUBLIC IDeckLinkNotification_v10_11 : public IUnknown
102
+{
103
+public:
104
+    virtual HRESULT Subscribe (/* in */ BMDNotifications topic, /* in */ IDeckLinkNotificationCallback *theCallback) = 0;
105
+    virtual HRESULT Unsubscribe (/* in */ BMDNotifications topic, /* in */ IDeckLinkNotificationCallback *theCallback) = 0;
106
+};
107
+
108
+/* Functions */
109
+
110
+extern "C" {
111
+
112
+    IDeckLinkIterator* BMD_PUBLIC CreateDeckLinkIteratorInstance_v10_11 (void);
113
+    IDeckLinkDiscovery* BMD_PUBLIC CreateDeckLinkDiscoveryInstance_v10_11 (void);
114
+    IDeckLinkAPIInformation* BMD_PUBLIC CreateDeckLinkAPIInformationInstance_v10_11 (void);
115
+    IDeckLinkGLScreenPreviewHelper* BMD_PUBLIC CreateOpenGLScreenPreviewHelper_v10_11 (void);
116
+    IDeckLinkVideoConversion* BMD_PUBLIC CreateVideoConversionInstance_v10_11 (void);
117
+    IDeckLinkVideoFrameAncillaryPackets* BMD_PUBLIC CreateVideoFrameAncillaryPacketsInstance_v10_11 (void); // For use when creating a custom IDeckLinkVideoFrame without wrapping IDeckLinkOutput::CreateVideoFrame
118
+
119
+}
120
+
121
+#endif      // defined(__cplusplus)
122
+#endif /* defined(BMD_DECKLINKAPI_v10_11_H) */
123
obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v11_5.h Added
102
 
1
@@ -0,0 +1,100 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2020 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+** 
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+** 
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPI_v11_5_H
30
+#define BMD_DECKLINKAPI_v11_5_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+BMD_CONST REFIID IID_IDeckLinkVideoFrameMetadataExtensions_v11_5   = /* D5973DC9-6432-46D0-8F0B-2496F8A1238F */ {0xD5,0x97,0x3D,0xC9,0x64,0x32,0x46,0xD0,0x8F,0x0B,0x24,0x96,0xF8,0xA1,0x23,0x8F};
35
+
36
+/* Enum BMDDeckLinkFrameMetadataID - DeckLink Frame Metadata ID */
37
+
38
+typedef uint32_t BMDDeckLinkFrameMetadataID_v11_5;
39
+enum _BMDDeckLinkFrameMetadataID_v11_5 {
40
+    bmdDeckLinkFrameMetadataCintelFilmType_v11_5                       = /* 'cfty' */ 0x63667479,  // Current film type
41
+    bmdDeckLinkFrameMetadataCintelFilmGauge_v11_5                      = /* 'cfga' */ 0x63666761,  // Current film gauge
42
+    bmdDeckLinkFrameMetadataCintelKeykodeLow_v11_5                     = /* 'ckkl' */ 0x636B6B6C,  // Raw keykode value - low 64 bits
43
+    bmdDeckLinkFrameMetadataCintelKeykodeHigh_v11_5                    = /* 'ckkh' */ 0x636B6B68,  // Raw keykode value - high 64 bits
44
+    bmdDeckLinkFrameMetadataCintelTile1Size_v11_5                      = /* 'ct1s' */ 0x63743173,  // Size in bytes of compressed raw tile 1
45
+    bmdDeckLinkFrameMetadataCintelTile2Size_v11_5                      = /* 'ct2s' */ 0x63743273,  // Size in bytes of compressed raw tile 2
46
+    bmdDeckLinkFrameMetadataCintelTile3Size_v11_5                      = /* 'ct3s' */ 0x63743373,  // Size in bytes of compressed raw tile 3
47
+    bmdDeckLinkFrameMetadataCintelTile4Size_v11_5                      = /* 'ct4s' */ 0x63743473,  // Size in bytes of compressed raw tile 4
48
+    bmdDeckLinkFrameMetadataCintelImageWidth_v11_5                     = /* 'IWPx' */ 0x49575078,  // Width in pixels of image
49
+    bmdDeckLinkFrameMetadataCintelImageHeight_v11_5                    = /* 'IHPx' */ 0x49485078,  // Height in pixels of image
50
+    bmdDeckLinkFrameMetadataCintelLinearMaskingRedInRed_v11_5          = /* 'mrir' */ 0x6D726972,  // Red in red linear masking parameter
51
+    bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInRed_v11_5        = /* 'mgir' */ 0x6D676972,  // Green in red linear masking parameter
52
+    bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInRed_v11_5         = /* 'mbir' */ 0x6D626972,  // Blue in red linear masking parameter
53
+    bmdDeckLinkFrameMetadataCintelLinearMaskingRedInGreen_v11_5        = /* 'mrig' */ 0x6D726967,  // Red in green linear masking parameter
54
+    bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInGreen_v11_5      = /* 'mgig' */ 0x6D676967,  // Green in green linear masking parameter
55
+    bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInGreen_v11_5       = /* 'mbig' */ 0x6D626967,  // Blue in green linear masking parameter
56
+    bmdDeckLinkFrameMetadataCintelLinearMaskingRedInBlue_v11_5         = /* 'mrib' */ 0x6D726962,  // Red in blue linear masking parameter
57
+    bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInBlue_v11_5       = /* 'mgib' */ 0x6D676962,  // Green in blue linear masking parameter
58
+    bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInBlue_v11_5        = /* 'mbib' */ 0x6D626962,  // Blue in blue linear masking parameter
59
+    bmdDeckLinkFrameMetadataCintelLogMaskingRedInRed_v11_5             = /* 'mlrr' */ 0x6D6C7272,  // Red in red log masking parameter
60
+    bmdDeckLinkFrameMetadataCintelLogMaskingGreenInRed_v11_5           = /* 'mlgr' */ 0x6D6C6772,  // Green in red log masking parameter
61
+    bmdDeckLinkFrameMetadataCintelLogMaskingBlueInRed_v11_5            = /* 'mlbr' */ 0x6D6C6272,  // Blue in red log masking parameter
62
+    bmdDeckLinkFrameMetadataCintelLogMaskingRedInGreen_v11_5           = /* 'mlrg' */ 0x6D6C7267,  // Red in green log masking parameter
63
+    bmdDeckLinkFrameMetadataCintelLogMaskingGreenInGreen_v11_5         = /* 'mlgg' */ 0x6D6C6767,  // Green in green log masking parameter
64
+    bmdDeckLinkFrameMetadataCintelLogMaskingBlueInGreen_v11_5          = /* 'mlbg' */ 0x6D6C6267,  // Blue in green log masking parameter
65
+    bmdDeckLinkFrameMetadataCintelLogMaskingRedInBlue_v11_5            = /* 'mlrb' */ 0x6D6C7262,  // Red in blue log masking parameter
66
+    bmdDeckLinkFrameMetadataCintelLogMaskingGreenInBlue_v11_5          = /* 'mlgb' */ 0x6D6C6762,  // Green in blue log masking parameter
67
+    bmdDeckLinkFrameMetadataCintelLogMaskingBlueInBlue_v11_5           = /* 'mlbb' */ 0x6D6C6262,  // Blue in blue log masking parameter
68
+    bmdDeckLinkFrameMetadataCintelFilmFrameRate_v11_5                  = /* 'cffr' */ 0x63666672,  // Film frame rate
69
+    bmdDeckLinkFrameMetadataCintelOffsetToApplyHorizontal_v11_5        = /* 'otah' */ 0x6F746168,  // Horizontal offset (pixels) to be applied to image
70
+    bmdDeckLinkFrameMetadataCintelOffsetToApplyVertical_v11_5          = /* 'otav' */ 0x6F746176,  // Vertical offset (pixels) to be applied to image
71
+    bmdDeckLinkFrameMetadataCintelGainRed_v11_5                        = /* 'LfRd' */ 0x4C665264,  // Red gain parameter to apply after log
72
+    bmdDeckLinkFrameMetadataCintelGainGreen_v11_5                      = /* 'LfGr' */ 0x4C664772,  // Green gain parameter to apply after log
73
+    bmdDeckLinkFrameMetadataCintelGainBlue_v11_5                       = /* 'LfBl' */ 0x4C66426C,  // Blue gain parameter to apply after log
74
+    bmdDeckLinkFrameMetadataCintelLiftRed_v11_5                        = /* 'GnRd' */ 0x476E5264,  // Red lift parameter to apply after log and gain
75
+    bmdDeckLinkFrameMetadataCintelLiftGreen_v11_5                      = /* 'GnGr' */ 0x476E4772,  // Green lift parameter to apply after log and gain
76
+    bmdDeckLinkFrameMetadataCintelLiftBlue_v11_5                       = /* 'GnBl' */ 0x476E426C,  // Blue lift parameter to apply after log and gain
77
+    bmdDeckLinkFrameMetadataCintelHDRGainRed_v11_5                     = /* 'HGRd' */ 0x48475264,  // Red gain parameter to apply to linear data for HDR Combination
78
+    bmdDeckLinkFrameMetadataCintelHDRGainGreen_v11_5                   = /* 'HGGr' */ 0x48474772,  // Green gain parameter to apply to linear data for HDR Combination
79
+    bmdDeckLinkFrameMetadataCintelHDRGainBlue_v11_5                    = /* 'HGBl' */ 0x4847426C,  // Blue gain parameter to apply to linear data for HDR Combination
80
+   bmdDeckLinkFrameMetadataCintel16mmCropRequired_v11_5               = /* 'c16c' */ 0x63313663,   // The image should be cropped to 16mm size
81
+    bmdDeckLinkFrameMetadataCintelInversionRequired_v11_5              = /* 'cinv' */ 0x63696E76,  // The image should be colour inverted
82
+    bmdDeckLinkFrameMetadataCintelFlipRequired_v11_5                   = /* 'cflr' */ 0x63666C72,  // The image should be flipped horizontally
83
+    bmdDeckLinkFrameMetadataCintelFocusAssistEnabled_v11_5             = /* 'cfae' */ 0x63666165,  // Focus Assist is currently enabled
84
+    bmdDeckLinkFrameMetadataCintelKeykodeIsInterpolated_v11_5          = /* 'kkii' */ 0x6B6B6969   // The keykode for this frame is interpolated from nearby keykodes
85
+};
86
+
87
+/* Interface IDeckLinkVideoFrameMetadataExtensions - Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDMI HDR information */
88
+
89
+class BMD_PUBLIC IDeckLinkVideoFrameMetadataExtensions_v11_5 : public IUnknown
90
+{
91
+public:
92
+    virtual HRESULT GetInt (/* in */ BMDDeckLinkFrameMetadataID_v11_5 metadataID, /* out */ int64_t *value) = 0;
93
+    virtual HRESULT GetFloat (/* in */ BMDDeckLinkFrameMetadataID_v11_5 metadataID, /* out */ double *value) = 0;
94
+    virtual HRESULT GetFlag (/* in */ BMDDeckLinkFrameMetadataID_v11_5 metadataID, /* out */ bool* value) = 0;
95
+    virtual HRESULT GetString (/* in */ BMDDeckLinkFrameMetadataID_v11_5 metadataID, /* out */ const char **value) = 0;
96
+
97
+protected:
98
+    virtual ~IDeckLinkVideoFrameMetadataExtensions_v11_5 () {} // call Release method to drop reference count
99
+};
100
+
101
+#endif /* defined(BMD_DECKLINKAPI_v11_5_H) */
102
obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v11_5_1.h Added
46
 
1
@@ -0,0 +1,44 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2020 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+** 
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+** 
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPI_v11_5_1_H
30
+#define BMD_DECKLINKAPI_v11_5_1_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+/* Enum BMDDeckLinkStatusID - DeckLink Status ID */
35
+
36
+typedef uint32_t BMDDeckLinkStatusID_v11_5_1;
37
+enum _BMDDeckLinkStatusID_v11_5_1 {
38
+
39
+    /* Video output flags */
40
+
41
+   bmdDeckLinkStatusDetectedVideoInputFlags_v11_5_1                     = /* 'dvif' */ 0x64766966,
42
+
43
+};
44
+
45
+#endif /* defined(BMD_DECKLINKAPI_v11_5_1_H) */
46
obs-studio-26.0.2.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v7_1.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v7_1.h Changed
27
 
1
@@ -30,6 +30,7 @@
2
 #define __DeckLink_API_v7_1_h__
3
 
4
 #include "DeckLinkAPI.h"
5
+#include "DeckLinkAPI_v10_11.h"
6
 
7
 // "B28131B6-59AC-4857-B5AC-CD75D5883E2F"
8
 #define IID_IDeckLinkDisplayModeIterator_v7_1  (REFIID){0xB2,0x81,0x31,0xB6,0x59,0xAC,0x48,0x57,0xB5,0xAC,0xCD,0x75,0xD5,0x88,0x3E,0x2F}
9
@@ -100,7 +101,7 @@
10
 {
11
 public:
12
    // Display mode predicates
13
-   virtual HRESULT STDMETHODCALLTYPE   DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDDisplayModeSupport *result) = 0;
14
+   virtual HRESULT STDMETHODCALLTYPE   DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDDisplayModeSupport_v10_11 *result) = 0;
15
    virtual HRESULT STDMETHODCALLTYPE   GetDisplayModeIterator (IDeckLinkDisplayModeIterator_v7_1* *iterator) = 0;
16
    
17
    
18
@@ -143,7 +144,7 @@
19
 class BMD_PUBLIC IDeckLinkInput_v7_1 : public IUnknown
20
 {
21
 public:
22
-   virtual HRESULT STDMETHODCALLTYPE   DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDDisplayModeSupport *result) = 0;
23
+   virtual HRESULT STDMETHODCALLTYPE   DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDDisplayModeSupport_v10_11 *result) = 0;
24
    virtual HRESULT STDMETHODCALLTYPE   GetDisplayModeIterator (IDeckLinkDisplayModeIterator_v7_1 **iterator) = 0;
25
    
26
    // Video input
27
obs-studio-26.0.2.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v7_3.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v7_3.h Changed
27
 
1
@@ -32,6 +32,7 @@
2
 
3
 #include "DeckLinkAPI.h"
4
 #include "DeckLinkAPI_v7_6.h"
5
+#include "DeckLinkAPI_v10_11.h"
6
 
7
 /* Interface ID Declarations */
8
 
9
@@ -56,7 +57,7 @@
10
 class BMD_PUBLIC IDeckLinkOutput_v7_3 : public IUnknown
11
 {
12
 public:
13
-    virtual HRESULT DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport *result) = 0;
14
+   virtual HRESULT DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport_v10_11 *result) = 0;
15
     virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
16
 
17
     virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
18
@@ -125,7 +126,7 @@
19
 class BMD_PUBLIC IDeckLinkInput_v7_3 : public IUnknown
20
 {
21
 public:
22
-    virtual HRESULT DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport *result) = 0;
23
+   virtual HRESULT DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport_v10_11 *result) = 0;
24
     virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
25
 
26
     virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
27
obs-studio-26.0.2.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v7_6.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v7_6.h Changed
27
 
1
@@ -31,6 +31,7 @@
2
 #define __DeckLink_API_v7_6_h__
3
 
4
 #include "DeckLinkAPI.h"
5
+#include "DeckLinkAPI_v10_11.h"
6
 
7
 // Interface ID Declarations
8
 
9
@@ -141,7 +142,7 @@
10
 class BMD_PUBLIC IDeckLinkOutput_v7_6 : public IUnknown
11
 {
12
 public:
13
-    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport *result) = 0;
14
+   virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport_v10_11 *result) = 0;
15
     virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
16
 
17
     virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback_v7_6 *previewCallback) = 0;
18
@@ -197,7 +198,7 @@
19
 class BMD_PUBLIC IDeckLinkInput_v7_6 : public IUnknown
20
 {
21
 public:
22
-    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport *result) = 0;
23
+   virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport_v10_11 *result) = 0;
24
     virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
25
 
26
     virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback_v7_6 *previewCallback) = 0;
27
obs-studio-26.0.2.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v9_2.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v9_2.h Changed
18
 
1
@@ -29,6 +29,7 @@
2
 #define BMD_DECKLINKAPI_v9_2_H
3
 
4
 #include "DeckLinkAPI.h"
5
+#include "DeckLinkAPI_v10_11.h"
6
 
7
 
8
 // Interface ID Declarations
9
@@ -43,7 +44,7 @@
10
 class BMD_PUBLIC IDeckLinkInput_v9_2 : public IUnknown
11
 {
12
 public:
13
-    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
14
+   virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport_v10_11 *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
15
     virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
16
 
17
     virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
18
obs-studio-26.0.2.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v9_9.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v9_9.h Changed
18
 
1
@@ -29,6 +29,7 @@
2
 #define BMD_DECKLINKAPI_v9_9_H
3
 
4
 #include "DeckLinkAPI.h"
5
+#include "DeckLinkAPI_v10_11.h"
6
 
7
 
8
 // Interface ID Declarations
9
@@ -43,7 +44,7 @@
10
 class BMD_PUBLIC IDeckLinkOutput_v9_9 : public IUnknown
11
 {
12
 public:
13
-    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoOutputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
14
+   virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoOutputFlags flags, /* out */ BMDDisplayModeSupport_v10_11 *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
15
     virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
16
 
17
     virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
18
obs-studio-26.0.2.tar.xz/plugins/decklink/mac/CMakeLists.txt -> obs-studio-26.1.0.tar.xz/plugins/decklink/mac/CMakeLists.txt Changed
38
 
1
@@ -9,6 +9,8 @@
2
 
3
 find_library(COREFOUNDATION CoreFoundation)
4
 
5
+include_directories(${CMAKE_SOURCE_DIR}/deps/libcaption)
6
+
7
 set(mac-decklink-sdk_HEADERS
8
    decklink-sdk/DeckLinkAPI.h
9
    decklink-sdk/DeckLinkAPIConfiguration.h
10
@@ -37,6 +39,7 @@
11
    ../audio-repack.h
12
    ../audio-repack.hpp
13
    ../util.hpp
14
+   ../OBSVideoFrame.h
15
    )
16
 
17
 set(mac-decklink_SOURCES
18
@@ -54,6 +57,7 @@
19
    ../audio-repack.c
20
    platform.cpp
21
    ../util.cpp
22
+   ../OBSVideoFrame.cpp
23
    )
24
 
25
 list(APPEND decklink_HEADERS ${decklink_UI_HEADERS})
26
@@ -73,7 +77,9 @@
27
 
28
 target_link_libraries(mac-decklink
29
    libobs
30
-   ${COREFOUNDATION})
31
-set_target_properties(mac-decklink PROPERTIES FOLDER "plugins")
32
+   obs-frontend-api
33
+   ${COREFOUNDATION}
34
+   caption)
35
+set_target_properties(mac-decklink PROPERTIES FOLDER "plugins/decklink")
36
 
37
 install_obs_plugin_with_data(mac-decklink ../data)
38
obs-studio-26.0.2.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI.h Changed
1407
 
1
@@ -1,5 +1,5 @@
2
 /* -LICENSE-START-
3
-** Copyright (c) 2018 Blackmagic Design
4
+** Copyright (c) 2020 Blackmagic Design
5
 **
6
 ** Permission is hereby granted, free of charge, to any person or organization
7
 ** obtaining a copy of the software and accompanying documentation covered by
8
@@ -7,14 +7,14 @@
9
 ** execute, and transmit the Software, and to prepare derivative works of the
10
 ** Software, and to permit third-parties to whom the Software is furnished to
11
 ** do so, all subject to the following:
12
-** 
13
+**
14
 ** The copyright notices in the Software and this entire statement, including
15
 ** the above license grant, this restriction and the following disclaimer,
16
 ** must be included in all copies of the Software, in whole or in part, and
17
 ** all derivative works of the Software, unless such copies or derivative
18
 ** works are solely in the form of machine-executable object code generated by
19
 ** a source language processor.
20
-** 
21
+**
22
 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
 ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
 ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
25
@@ -62,42 +62,46 @@
26
 
27
 // Interface ID Declarations
28
 
29
-BMD_CONST REFIID IID_IDeckLinkVideoOutputCallback                 = /* 20AA5225-1958-47CB-820B-80A8D521A6EE */ {0x20,0xAA,0x52,0x25,0x19,0x58,0x47,0xCB,0x82,0x0B,0x80,0xA8,0xD5,0x21,0xA6,0xEE};
30
-BMD_CONST REFIID IID_IDeckLinkInputCallback                       = /* DD04E5EC-7415-42AB-AE4A-E80C4DFC044A */ {0xDD,0x04,0xE5,0xEC,0x74,0x15,0x42,0xAB,0xAE,0x4A,0xE8,0x0C,0x4D,0xFC,0x04,0x4A};
31
-BMD_CONST REFIID IID_IDeckLinkEncoderInputCallback                = /* ACF13E61-F4A0-4974-A6A7-59AFF6268B31 */ {0xAC,0xF1,0x3E,0x61,0xF4,0xA0,0x49,0x74,0xA6,0xA7,0x59,0xAF,0xF6,0x26,0x8B,0x31};
32
-BMD_CONST REFIID IID_IDeckLinkMemoryAllocator                     = /* B36EB6E7-9D29-4AA8-92EF-843B87A289E8 */ {0xB3,0x6E,0xB6,0xE7,0x9D,0x29,0x4A,0xA8,0x92,0xEF,0x84,0x3B,0x87,0xA2,0x89,0xE8};
33
-BMD_CONST REFIID IID_IDeckLinkAudioOutputCallback                 = /* 403C681B-7F46-4A12-B993-2BB127084EE6 */ {0x40,0x3C,0x68,0x1B,0x7F,0x46,0x4A,0x12,0xB9,0x93,0x2B,0xB1,0x27,0x08,0x4E,0xE6};
34
-BMD_CONST REFIID IID_IDeckLinkIterator                            = /* 50FB36CD-3063-4B73-BDBB-958087F2D8BA */ {0x50,0xFB,0x36,0xCD,0x30,0x63,0x4B,0x73,0xBD,0xBB,0x95,0x80,0x87,0xF2,0xD8,0xBA};
35
-BMD_CONST REFIID IID_IDeckLinkAPIInformation                      = /* 7BEA3C68-730D-4322-AF34-8A7152B532A4 */ {0x7B,0xEA,0x3C,0x68,0x73,0x0D,0x43,0x22,0xAF,0x34,0x8A,0x71,0x52,0xB5,0x32,0xA4};
36
-BMD_CONST REFIID IID_IDeckLinkOutput                              = /* CC5C8A6E-3F2F-4B3A-87EA-FD78AF300564 */ {0xCC,0x5C,0x8A,0x6E,0x3F,0x2F,0x4B,0x3A,0x87,0xEA,0xFD,0x78,0xAF,0x30,0x05,0x64};
37
-BMD_CONST REFIID IID_IDeckLinkInput                               = /* AF22762B-DFAC-4846-AA79-FA8883560995 */ {0xAF,0x22,0x76,0x2B,0xDF,0xAC,0x48,0x46,0xAA,0x79,0xFA,0x88,0x83,0x56,0x09,0x95};
38
-BMD_CONST REFIID IID_IDeckLinkHDMIInputEDID                       = /* ABBBACBC-45BC-4665-9D92-ACE6E5A97902 */ {0xAB,0xBB,0xAC,0xBC,0x45,0xBC,0x46,0x65,0x9D,0x92,0xAC,0xE6,0xE5,0xA9,0x79,0x02};
39
-BMD_CONST REFIID IID_IDeckLinkEncoderInput                        = /* 270587DA-6B7D-42E7-A1F0-6D853F581185 */ {0x27,0x05,0x87,0xDA,0x6B,0x7D,0x42,0xE7,0xA1,0xF0,0x6D,0x85,0x3F,0x58,0x11,0x85};
40
-BMD_CONST REFIID IID_IDeckLinkVideoFrame                          = /* 3F716FE0-F023-4111-BE5D-EF4414C05B17 */ {0x3F,0x71,0x6F,0xE0,0xF0,0x23,0x41,0x11,0xBE,0x5D,0xEF,0x44,0x14,0xC0,0x5B,0x17};
41
-BMD_CONST REFIID IID_IDeckLinkMutableVideoFrame                   = /* 69E2639F-40DA-4E19-B6F2-20ACE815C390 */ {0x69,0xE2,0x63,0x9F,0x40,0xDA,0x4E,0x19,0xB6,0xF2,0x20,0xAC,0xE8,0x15,0xC3,0x90};
42
-BMD_CONST REFIID IID_IDeckLinkVideoFrame3DExtensions              = /* DA0F7E4A-EDC7-48A8-9CDD-2DB51C729CD7 */ {0xDA,0x0F,0x7E,0x4A,0xED,0xC7,0x48,0xA8,0x9C,0xDD,0x2D,0xB5,0x1C,0x72,0x9C,0xD7};
43
-BMD_CONST REFIID IID_IDeckLinkVideoFrameMetadataExtensions        = /* D5973DC9-6432-46D0-8F0B-2496F8A1238F */ {0xD5,0x97,0x3D,0xC9,0x64,0x32,0x46,0xD0,0x8F,0x0B,0x24,0x96,0xF8,0xA1,0x23,0x8F};
44
-BMD_CONST REFIID IID_IDeckLinkVideoInputFrame                     = /* 05CFE374-537C-4094-9A57-680525118F44 */ {0x05,0xCF,0xE3,0x74,0x53,0x7C,0x40,0x94,0x9A,0x57,0x68,0x05,0x25,0x11,0x8F,0x44};
45
-BMD_CONST REFIID IID_IDeckLinkAncillaryPacket                     = /* CC5BBF7E-029C-4D3B-9158-6000EF5E3670 */ {0xCC,0x5B,0xBF,0x7E,0x02,0x9C,0x4D,0x3B,0x91,0x58,0x60,0x00,0xEF,0x5E,0x36,0x70};
46
-BMD_CONST REFIID IID_IDeckLinkAncillaryPacketIterator             = /* 3FC8994B-88FB-4C17-968F-9AAB69D964A7 */ {0x3F,0xC8,0x99,0x4B,0x88,0xFB,0x4C,0x17,0x96,0x8F,0x9A,0xAB,0x69,0xD9,0x64,0xA7};
47
-BMD_CONST REFIID IID_IDeckLinkVideoFrameAncillaryPackets          = /* 6C186C0F-459E-41D8-AEE2-4812D81AEE68 */ {0x6C,0x18,0x6C,0x0F,0x45,0x9E,0x41,0xD8,0xAE,0xE2,0x48,0x12,0xD8,0x1A,0xEE,0x68};
48
-BMD_CONST REFIID IID_IDeckLinkVideoFrameAncillary                 = /* 732E723C-D1A4-4E29-9E8E-4A88797A0004 */ {0x73,0x2E,0x72,0x3C,0xD1,0xA4,0x4E,0x29,0x9E,0x8E,0x4A,0x88,0x79,0x7A,0x00,0x04};
49
-BMD_CONST REFIID IID_IDeckLinkEncoderPacket                       = /* B693F36C-316E-4AF1-B6C2-F389A4BCA620 */ {0xB6,0x93,0xF3,0x6C,0x31,0x6E,0x4A,0xF1,0xB6,0xC2,0xF3,0x89,0xA4,0xBC,0xA6,0x20};
50
-BMD_CONST REFIID IID_IDeckLinkEncoderVideoPacket                  = /* 4E7FD944-E8C7-4EAC-B8C0-7B77F80F5AE0 */ {0x4E,0x7F,0xD9,0x44,0xE8,0xC7,0x4E,0xAC,0xB8,0xC0,0x7B,0x77,0xF8,0x0F,0x5A,0xE0};
51
-BMD_CONST REFIID IID_IDeckLinkEncoderAudioPacket                  = /* 49E8EDC8-693B-4E14-8EF6-12C658F5A07A */ {0x49,0xE8,0xED,0xC8,0x69,0x3B,0x4E,0x14,0x8E,0xF6,0x12,0xC6,0x58,0xF5,0xA0,0x7A};
52
-BMD_CONST REFIID IID_IDeckLinkH265NALPacket                       = /* 639C8E0B-68D5-4BDE-A6D4-95F3AEAFF2E7 */ {0x63,0x9C,0x8E,0x0B,0x68,0xD5,0x4B,0xDE,0xA6,0xD4,0x95,0xF3,0xAE,0xAF,0xF2,0xE7};
53
-BMD_CONST REFIID IID_IDeckLinkAudioInputPacket                    = /* E43D5870-2894-11DE-8C30-0800200C9A66 */ {0xE4,0x3D,0x58,0x70,0x28,0x94,0x11,0xDE,0x8C,0x30,0x08,0x00,0x20,0x0C,0x9A,0x66};
54
-BMD_CONST REFIID IID_IDeckLinkScreenPreviewCallback               = /* B1D3F49A-85FE-4C5D-95C8-0B5D5DCCD438 */ {0xB1,0xD3,0xF4,0x9A,0x85,0xFE,0x4C,0x5D,0x95,0xC8,0x0B,0x5D,0x5D,0xCC,0xD4,0x38};
55
-BMD_CONST REFIID IID_IDeckLinkCocoaScreenPreviewCallback          = /* D174152F-8F96-4C07-83A5-DD5F5AF0A2AA */ {0xD1,0x74,0x15,0x2F,0x8F,0x96,0x4C,0x07,0x83,0xA5,0xDD,0x5F,0x5A,0xF0,0xA2,0xAA};
56
-BMD_CONST REFIID IID_IDeckLinkGLScreenPreviewHelper               = /* 504E2209-CAC7-4C1A-9FB4-C5BB6274D22F */ {0x50,0x4E,0x22,0x09,0xCA,0xC7,0x4C,0x1A,0x9F,0xB4,0xC5,0xBB,0x62,0x74,0xD2,0x2F};
57
-BMD_CONST REFIID IID_IDeckLinkNotificationCallback                = /* B002A1EC-070D-4288-8289-BD5D36E5FF0D */ {0xB0,0x02,0xA1,0xEC,0x07,0x0D,0x42,0x88,0x82,0x89,0xBD,0x5D,0x36,0xE5,0xFF,0x0D};
58
-BMD_CONST REFIID IID_IDeckLinkNotification                        = /* 0A1FB207-E215-441B-9B19-6FA1575946C5 */ {0x0A,0x1F,0xB2,0x07,0xE2,0x15,0x44,0x1B,0x9B,0x19,0x6F,0xA1,0x57,0x59,0x46,0xC5};
59
-BMD_CONST REFIID IID_IDeckLinkAttributes                          = /* ABC11843-D966-44CB-96E2-A1CB5D3135C4 */ {0xAB,0xC1,0x18,0x43,0xD9,0x66,0x44,0xCB,0x96,0xE2,0xA1,0xCB,0x5D,0x31,0x35,0xC4};
60
-BMD_CONST REFIID IID_IDeckLinkStatus                              = /* 5F558200-4028-49BC-BEAC-DB3FA4A96E46 */ {0x5F,0x55,0x82,0x00,0x40,0x28,0x49,0xBC,0xBE,0xAC,0xDB,0x3F,0xA4,0xA9,0x6E,0x46};
61
-BMD_CONST REFIID IID_IDeckLinkKeyer                               = /* 89AFCAF5-65F8-421E-98F7-96FE5F5BFBA3 */ {0x89,0xAF,0xCA,0xF5,0x65,0xF8,0x42,0x1E,0x98,0xF7,0x96,0xFE,0x5F,0x5B,0xFB,0xA3};
62
-BMD_CONST REFIID IID_IDeckLinkVideoConversion                     = /* 3BBCB8A2-DA2C-42D9-B5D8-88083644E99A */ {0x3B,0xBC,0xB8,0xA2,0xDA,0x2C,0x42,0xD9,0xB5,0xD8,0x88,0x08,0x36,0x44,0xE9,0x9A};
63
-BMD_CONST REFIID IID_IDeckLinkDeviceNotificationCallback          = /* 4997053B-0ADF-4CC8-AC70-7A50C4BE728F */ {0x49,0x97,0x05,0x3B,0x0A,0xDF,0x4C,0xC8,0xAC,0x70,0x7A,0x50,0xC4,0xBE,0x72,0x8F};
64
-BMD_CONST REFIID IID_IDeckLinkDiscovery                           = /* CDBF631C-BC76-45FA-B44D-C55059BC6101 */ {0xCD,0xBF,0x63,0x1C,0xBC,0x76,0x45,0xFA,0xB4,0x4D,0xC5,0x50,0x59,0xBC,0x61,0x01};
65
+BMD_CONST REFIID IID_IDeckLinkVideoOutputCallback                 = /* 20AA5225-1958-47CB-820B-80A8D521A6EE */ { 0x20,0xAA,0x52,0x25,0x19,0x58,0x47,0xCB,0x82,0x0B,0x80,0xA8,0xD5,0x21,0xA6,0xEE };
66
+BMD_CONST REFIID IID_IDeckLinkInputCallback                       = /* C6FCE4C9-C4E4-4047-82FB-5D238232A902 */ { 0xC6,0xFC,0xE4,0xC9,0xC4,0xE4,0x40,0x47,0x82,0xFB,0x5D,0x23,0x82,0x32,0xA9,0x02 };
67
+BMD_CONST REFIID IID_IDeckLinkEncoderInputCallback                = /* ACF13E61-F4A0-4974-A6A7-59AFF6268B31 */ { 0xAC,0xF1,0x3E,0x61,0xF4,0xA0,0x49,0x74,0xA6,0xA7,0x59,0xAF,0xF6,0x26,0x8B,0x31 };
68
+BMD_CONST REFIID IID_IDeckLinkMemoryAllocator                     = /* B36EB6E7-9D29-4AA8-92EF-843B87A289E8 */ { 0xB3,0x6E,0xB6,0xE7,0x9D,0x29,0x4A,0xA8,0x92,0xEF,0x84,0x3B,0x87,0xA2,0x89,0xE8 };
69
+BMD_CONST REFIID IID_IDeckLinkAudioOutputCallback                 = /* 403C681B-7F46-4A12-B993-2BB127084EE6 */ { 0x40,0x3C,0x68,0x1B,0x7F,0x46,0x4A,0x12,0xB9,0x93,0x2B,0xB1,0x27,0x08,0x4E,0xE6 };
70
+BMD_CONST REFIID IID_IDeckLinkIterator                            = /* 50FB36CD-3063-4B73-BDBB-958087F2D8BA */ { 0x50,0xFB,0x36,0xCD,0x30,0x63,0x4B,0x73,0xBD,0xBB,0x95,0x80,0x87,0xF2,0xD8,0xBA };
71
+BMD_CONST REFIID IID_IDeckLinkAPIInformation                      = /* 7BEA3C68-730D-4322-AF34-8A7152B532A4 */ { 0x7B,0xEA,0x3C,0x68,0x73,0x0D,0x43,0x22,0xAF,0x34,0x8A,0x71,0x52,0xB5,0x32,0xA4 };
72
+BMD_CONST REFIID IID_IDeckLinkOutput                              = /* BE2D9020-461E-442F-84B7-E949CB953B9D */ { 0xBE,0x2D,0x90,0x20,0x46,0x1E,0x44,0x2F,0x84,0xB7,0xE9,0x49,0xCB,0x95,0x3B,0x9D };
73
+BMD_CONST REFIID IID_IDeckLinkInput                               = /* C21CDB6E-F414-46E4-A636-80A566E0ED37 */ { 0xC2,0x1C,0xDB,0x6E,0xF4,0x14,0x46,0xE4,0xA6,0x36,0x80,0xA5,0x66,0xE0,0xED,0x37 };
74
+BMD_CONST REFIID IID_IDeckLinkHDMIInputEDID                       = /* ABBBACBC-45BC-4665-9D92-ACE6E5A97902 */ { 0xAB,0xBB,0xAC,0xBC,0x45,0xBC,0x46,0x65,0x9D,0x92,0xAC,0xE6,0xE5,0xA9,0x79,0x02 };
75
+BMD_CONST REFIID IID_IDeckLinkEncoderInput                        = /* F222551D-13DF-4FD8-B587-9D4F19EC12C9 */ { 0xF2,0x22,0x55,0x1D,0x13,0xDF,0x4F,0xD8,0xB5,0x87,0x9D,0x4F,0x19,0xEC,0x12,0xC9 };
76
+BMD_CONST REFIID IID_IDeckLinkVideoFrame                          = /* 3F716FE0-F023-4111-BE5D-EF4414C05B17 */ { 0x3F,0x71,0x6F,0xE0,0xF0,0x23,0x41,0x11,0xBE,0x5D,0xEF,0x44,0x14,0xC0,0x5B,0x17 };
77
+BMD_CONST REFIID IID_IDeckLinkMutableVideoFrame                   = /* 69E2639F-40DA-4E19-B6F2-20ACE815C390 */ { 0x69,0xE2,0x63,0x9F,0x40,0xDA,0x4E,0x19,0xB6,0xF2,0x20,0xAC,0xE8,0x15,0xC3,0x90 };
78
+BMD_CONST REFIID IID_IDeckLinkVideoFrame3DExtensions              = /* DA0F7E4A-EDC7-48A8-9CDD-2DB51C729CD7 */ { 0xDA,0x0F,0x7E,0x4A,0xED,0xC7,0x48,0xA8,0x9C,0xDD,0x2D,0xB5,0x1C,0x72,0x9C,0xD7 };
79
+BMD_CONST REFIID IID_IDeckLinkVideoFrameMetadataExtensions        = /* E232A5B7-4DB4-44C9-9152-F47C12E5F051 */ { 0xE2,0x32,0xA5,0xB7,0x4D,0xB4,0x44,0xC9,0x91,0x52,0xF4,0x7C,0x12,0xE5,0xF0,0x51 };
80
+BMD_CONST REFIID IID_IDeckLinkVideoInputFrame                     = /* 05CFE374-537C-4094-9A57-680525118F44 */ { 0x05,0xCF,0xE3,0x74,0x53,0x7C,0x40,0x94,0x9A,0x57,0x68,0x05,0x25,0x11,0x8F,0x44 };
81
+BMD_CONST REFIID IID_IDeckLinkAncillaryPacket                     = /* CC5BBF7E-029C-4D3B-9158-6000EF5E3670 */ { 0xCC,0x5B,0xBF,0x7E,0x02,0x9C,0x4D,0x3B,0x91,0x58,0x60,0x00,0xEF,0x5E,0x36,0x70 };
82
+BMD_CONST REFIID IID_IDeckLinkAncillaryPacketIterator             = /* 3FC8994B-88FB-4C17-968F-9AAB69D964A7 */ { 0x3F,0xC8,0x99,0x4B,0x88,0xFB,0x4C,0x17,0x96,0x8F,0x9A,0xAB,0x69,0xD9,0x64,0xA7 };
83
+BMD_CONST REFIID IID_IDeckLinkVideoFrameAncillaryPackets          = /* 6C186C0F-459E-41D8-AEE2-4812D81AEE68 */ { 0x6C,0x18,0x6C,0x0F,0x45,0x9E,0x41,0xD8,0xAE,0xE2,0x48,0x12,0xD8,0x1A,0xEE,0x68 };
84
+BMD_CONST REFIID IID_IDeckLinkVideoFrameAncillary                 = /* 732E723C-D1A4-4E29-9E8E-4A88797A0004 */ { 0x73,0x2E,0x72,0x3C,0xD1,0xA4,0x4E,0x29,0x9E,0x8E,0x4A,0x88,0x79,0x7A,0x00,0x04 };
85
+BMD_CONST REFIID IID_IDeckLinkEncoderPacket                       = /* B693F36C-316E-4AF1-B6C2-F389A4BCA620 */ { 0xB6,0x93,0xF3,0x6C,0x31,0x6E,0x4A,0xF1,0xB6,0xC2,0xF3,0x89,0xA4,0xBC,0xA6,0x20 };
86
+BMD_CONST REFIID IID_IDeckLinkEncoderVideoPacket                  = /* 4E7FD944-E8C7-4EAC-B8C0-7B77F80F5AE0 */ { 0x4E,0x7F,0xD9,0x44,0xE8,0xC7,0x4E,0xAC,0xB8,0xC0,0x7B,0x77,0xF8,0x0F,0x5A,0xE0 };
87
+BMD_CONST REFIID IID_IDeckLinkEncoderAudioPacket                  = /* 49E8EDC8-693B-4E14-8EF6-12C658F5A07A */ { 0x49,0xE8,0xED,0xC8,0x69,0x3B,0x4E,0x14,0x8E,0xF6,0x12,0xC6,0x58,0xF5,0xA0,0x7A };
88
+BMD_CONST REFIID IID_IDeckLinkH265NALPacket                       = /* 639C8E0B-68D5-4BDE-A6D4-95F3AEAFF2E7 */ { 0x63,0x9C,0x8E,0x0B,0x68,0xD5,0x4B,0xDE,0xA6,0xD4,0x95,0xF3,0xAE,0xAF,0xF2,0xE7 };
89
+BMD_CONST REFIID IID_IDeckLinkAudioInputPacket                    = /* E43D5870-2894-11DE-8C30-0800200C9A66 */ { 0xE4,0x3D,0x58,0x70,0x28,0x94,0x11,0xDE,0x8C,0x30,0x08,0x00,0x20,0x0C,0x9A,0x66 };
90
+BMD_CONST REFIID IID_IDeckLinkScreenPreviewCallback               = /* B1D3F49A-85FE-4C5D-95C8-0B5D5DCCD438 */ { 0xB1,0xD3,0xF4,0x9A,0x85,0xFE,0x4C,0x5D,0x95,0xC8,0x0B,0x5D,0x5D,0xCC,0xD4,0x38 };
91
+BMD_CONST REFIID IID_IDeckLinkCocoaScreenPreviewCallback          = /* D174152F-8F96-4C07-83A5-DD5F5AF0A2AA */ { 0xD1,0x74,0x15,0x2F,0x8F,0x96,0x4C,0x07,0x83,0xA5,0xDD,0x5F,0x5A,0xF0,0xA2,0xAA };
92
+BMD_CONST REFIID IID_IDeckLinkGLScreenPreviewHelper               = /* 504E2209-CAC7-4C1A-9FB4-C5BB6274D22F */ { 0x50,0x4E,0x22,0x09,0xCA,0xC7,0x4C,0x1A,0x9F,0xB4,0xC5,0xBB,0x62,0x74,0xD2,0x2F };
93
+BMD_CONST REFIID IID_IDeckLinkNotificationCallback                = /* B002A1EC-070D-4288-8289-BD5D36E5FF0D */ { 0xB0,0x02,0xA1,0xEC,0x07,0x0D,0x42,0x88,0x82,0x89,0xBD,0x5D,0x36,0xE5,0xFF,0x0D };
94
+BMD_CONST REFIID IID_IDeckLinkNotification                        = /* B85DF4C8-BDF5-47C1-8064-28162EBDD4EB */ { 0xB8,0x5D,0xF4,0xC8,0xBD,0xF5,0x47,0xC1,0x80,0x64,0x28,0x16,0x2E,0xBD,0xD4,0xEB };
95
+BMD_CONST REFIID IID_IDeckLinkProfileAttributes                   = /* 17D4BF8E-4911-473A-80A0-731CF6FF345B */ { 0x17,0xD4,0xBF,0x8E,0x49,0x11,0x47,0x3A,0x80,0xA0,0x73,0x1C,0xF6,0xFF,0x34,0x5B };
96
+BMD_CONST REFIID IID_IDeckLinkProfileIterator                     = /* 29E5A8C0-8BE4-46EB-93AC-31DAAB5B7BF2 */ { 0x29,0xE5,0xA8,0xC0,0x8B,0xE4,0x46,0xEB,0x93,0xAC,0x31,0xDA,0xAB,0x5B,0x7B,0xF2 };
97
+BMD_CONST REFIID IID_IDeckLinkProfile                             = /* 16093466-674A-432B-9DA0-1AC2C5A8241C */ { 0x16,0x09,0x34,0x66,0x67,0x4A,0x43,0x2B,0x9D,0xA0,0x1A,0xC2,0xC5,0xA8,0x24,0x1C };
98
+BMD_CONST REFIID IID_IDeckLinkProfileCallback                     = /* A4F9341E-97AA-4E04-8935-15F809898CEA */ { 0xA4,0xF9,0x34,0x1E,0x97,0xAA,0x4E,0x04,0x89,0x35,0x15,0xF8,0x09,0x89,0x8C,0xEA };
99
+BMD_CONST REFIID IID_IDeckLinkProfileManager                      = /* 30D41429-3998-4B6D-84F8-78C94A797C6E */ { 0x30,0xD4,0x14,0x29,0x39,0x98,0x4B,0x6D,0x84,0xF8,0x78,0xC9,0x4A,0x79,0x7C,0x6E };
100
+BMD_CONST REFIID IID_IDeckLinkStatus                              = /* 5F558200-4028-49BC-BEAC-DB3FA4A96E46 */ { 0x5F,0x55,0x82,0x00,0x40,0x28,0x49,0xBC,0xBE,0xAC,0xDB,0x3F,0xA4,0xA9,0x6E,0x46 };
101
+BMD_CONST REFIID IID_IDeckLinkKeyer                               = /* 89AFCAF5-65F8-421E-98F7-96FE5F5BFBA3 */ { 0x89,0xAF,0xCA,0xF5,0x65,0xF8,0x42,0x1E,0x98,0xF7,0x96,0xFE,0x5F,0x5B,0xFB,0xA3 };
102
+BMD_CONST REFIID IID_IDeckLinkVideoConversion                     = /* 3BBCB8A2-DA2C-42D9-B5D8-88083644E99A */ { 0x3B,0xBC,0xB8,0xA2,0xDA,0x2C,0x42,0xD9,0xB5,0xD8,0x88,0x08,0x36,0x44,0xE9,0x9A };
103
+BMD_CONST REFIID IID_IDeckLinkDeviceNotificationCallback          = /* 4997053B-0ADF-4CC8-AC70-7A50C4BE728F */ { 0x49,0x97,0x05,0x3B,0x0A,0xDF,0x4C,0xC8,0xAC,0x70,0x7A,0x50,0xC4,0xBE,0x72,0x8F };
104
+BMD_CONST REFIID IID_IDeckLinkDiscovery                           = /* CDBF631C-BC76-45FA-B44D-C55059BC6101 */ { 0xCD,0xBF,0x63,0x1C,0xBC,0x76,0x45,0xFA,0xB4,0x4D,0xC5,0x50,0x59,0xBC,0x61,0x01 };
105
 
106
 /* Enum BMDVideoOutputFlags - Flags to control the output of ancillary data along with video. */
107
 
108
@@ -107,15 +111,29 @@
109
     bmdVideoOutputVANC                                           = 1 << 0,
110
     bmdVideoOutputVITC                                           = 1 << 1,
111
     bmdVideoOutputRP188                                          = 1 << 2,
112
-    bmdVideoOutputDualStream3D                                   = 1 << 4
113
+    bmdVideoOutputDualStream3D                                   = 1 << 4,
114
+    bmdVideoOutputSynchronizeToPlaybackGroup                     = 1 << 6
115
+};
116
+
117
+/* Enum BMDSupportedVideoModeFlags - Flags to describe supported video modes */
118
+
119
+typedef uint32_t BMDSupportedVideoModeFlags;
120
+enum _BMDSupportedVideoModeFlags {
121
+    bmdSupportedVideoModeDefault                                 = 0,
122
+    bmdSupportedVideoModeKeying                                  = 1 << 0,
123
+    bmdSupportedVideoModeDualStream3D                            = 1 << 1,
124
+    bmdSupportedVideoModeSDISingleLink                           = 1 << 2,
125
+    bmdSupportedVideoModeSDIDualLink                             = 1 << 3,
126
+    bmdSupportedVideoModeSDIQuadLink                             = 1 << 4,
127
+    bmdSupportedVideoModeInAnyProfile                            = 1 << 5
128
 };
129
 
130
 /* Enum BMDPacketType - Type of packet */
131
 
132
 typedef uint32_t BMDPacketType;
133
 enum _BMDPacketType {
134
-    bmdPacketTypeStreamInterruptedMarker                         = 'sint', // A packet of this type marks the time when a video stream was interrupted, for example by a disconnected cable
135
-    bmdPacketTypeStreamData                                      = 'sdat'  // Regular stream data
136
+    bmdPacketTypeStreamInterruptedMarker                         = /* 'sint' */ 0x73696E74,    // A packet of this type marks the time when a video stream was interrupted, for example by a disconnected cable
137
+    bmdPacketTypeStreamData                                      = /* 'sdat' */ 0x73646174 // Regular stream data
138
 };
139
 
140
 /* Enum BMDFrameFlags - Frame flags */
141
@@ -125,7 +143,6 @@
142
     bmdFrameFlagDefault                                          = 0,
143
     bmdFrameFlagFlipVertical                                     = 1 << 0,
144
     bmdFrameContainsHDRMetadata                                  = 1 << 1,
145
-    bmdFrameContainsCintelMetadata                               = 1 << 2,
146
 
147
     /* Flags that are applicable only to instances of IDeckLinkVideoInputFrame */
148
 
149
@@ -139,7 +156,8 @@
150
 enum _BMDVideoInputFlags {
151
     bmdVideoInputFlagDefault                                     = 0,
152
     bmdVideoInputEnableFormatDetection                           = 1 << 0,
153
-    bmdVideoInputDualStream3D                                    = 1 << 1
154
+    bmdVideoInputDualStream3D                                    = 1 << 1,
155
+    bmdVideoInputSynchronizeToCaptureGroup                       = 1 << 2
156
 };
157
 
158
 /* Enum BMDVideoInputFormatChangedEvents - Bitmask passed to the VideoInputFormatChanged notification to identify the properties of the input signal that have changed */
159
@@ -157,26 +175,29 @@
160
 enum _BMDDetectedVideoInputFormatFlags {
161
     bmdDetectedVideoInputYCbCr422                                = 1 << 0,
162
     bmdDetectedVideoInputRGB444                                  = 1 << 1,
163
-    bmdDetectedVideoInputDualStream3D                            = 1 << 2
164
+    bmdDetectedVideoInputDualStream3D                            = 1 << 2,
165
+    bmdDetectedVideoInput12BitDepth                              = 1 << 3,
166
+    bmdDetectedVideoInput10BitDepth                              = 1 << 4,
167
+    bmdDetectedVideoInput8BitDepth                               = 1 << 5
168
 };
169
 
170
 /* Enum BMDDeckLinkCapturePassthroughMode - Enumerates whether the video output is electrically connected to the video input or if the clean switching mode is enabled */
171
 
172
 typedef uint32_t BMDDeckLinkCapturePassthroughMode;
173
 enum _BMDDeckLinkCapturePassthroughMode {
174
-    bmdDeckLinkCapturePassthroughModeDisabled                    = 'pdis',
175
-    bmdDeckLinkCapturePassthroughModeDirect                      = 'pdir',
176
-    bmdDeckLinkCapturePassthroughModeCleanSwitch                 = 'pcln'
177
+    bmdDeckLinkCapturePassthroughModeDisabled                    = /* 'pdis' */ 0x70646973,
178
+    bmdDeckLinkCapturePassthroughModeDirect                      = /* 'pdir' */ 0x70646972,
179
+    bmdDeckLinkCapturePassthroughModeCleanSwitch                 = /* 'pcln' */ 0x70636C6E
180
 };
181
 
182
 /* Enum BMDOutputFrameCompletionResult - Frame Completion Callback */
183
 
184
 typedef uint32_t BMDOutputFrameCompletionResult;
185
 enum _BMDOutputFrameCompletionResult {
186
-    bmdOutputFrameCompleted,                                    
187
-    bmdOutputFrameDisplayedLate,                                
188
-    bmdOutputFrameDropped,                                      
189
-    bmdOutputFrameFlushed                                       
190
+    bmdOutputFrameCompleted,
191
+    bmdOutputFrameDisplayedLate,
192
+    bmdOutputFrameDropped,
193
+    bmdOutputFrameFlushed
194
 };
195
 
196
 /* Enum BMDReferenceStatus - GenLock input status */
197
@@ -191,7 +212,7 @@
198
 
199
 typedef uint32_t BMDAudioFormat;
200
 enum _BMDAudioFormat {
201
-    bmdAudioFormatPCM                                            = 'lpcm'  // Linear signed PCM samples
202
+    bmdAudioFormatPCM                                            = /* 'lpcm' */ 0x6C70636D // Linear signed PCM samples
203
 };
204
 
205
 /* Enum BMDAudioSampleRate - Audio sample rates supported for output/input */
206
@@ -213,40 +234,32 @@
207
 
208
 typedef uint32_t BMDAudioOutputStreamType;
209
 enum _BMDAudioOutputStreamType {
210
-    bmdAudioOutputStreamContinuous,                             
211
-    bmdAudioOutputStreamContinuousDontResample,                 
212
-    bmdAudioOutputStreamTimestamped                             
213
-};
214
-
215
-/* Enum BMDDisplayModeSupport - Output mode supported flags */
216
-
217
-typedef uint32_t BMDDisplayModeSupport;
218
-enum _BMDDisplayModeSupport {
219
-    bmdDisplayModeNotSupported                                   = 0,
220
-    bmdDisplayModeSupported,                                    
221
-    bmdDisplayModeSupportedWithConversion                       
222
+    bmdAudioOutputStreamContinuous,
223
+    bmdAudioOutputStreamContinuousDontResample,
224
+    bmdAudioOutputStreamTimestamped
225
 };
226
 
227
 /* Enum BMDAncillaryPacketFormat - Ancillary packet format */
228
 
229
 typedef uint32_t BMDAncillaryPacketFormat;
230
 enum _BMDAncillaryPacketFormat {
231
-    bmdAncillaryPacketFormatUInt8                                = 'ui08',
232
-    bmdAncillaryPacketFormatUInt16                               = 'ui16',
233
-    bmdAncillaryPacketFormatYCbCr10                              = 'v210'
234
+    bmdAncillaryPacketFormatUInt8                                = /* 'ui08' */ 0x75693038,
235
+    bmdAncillaryPacketFormatUInt16                               = /* 'ui16' */ 0x75693136,
236
+    bmdAncillaryPacketFormatYCbCr10                              = /* 'v210' */ 0x76323130
237
 };
238
 
239
 /* Enum BMDTimecodeFormat - Timecode formats for frame metadata */
240
 
241
 typedef uint32_t BMDTimecodeFormat;
242
 enum _BMDTimecodeFormat {
243
-    bmdTimecodeRP188VITC1                                        = 'rpv1', // RP188 timecode where DBB1 equals VITC1 (line 9)
244
-    bmdTimecodeRP188VITC2                                        = 'rp12', // RP188 timecode where DBB1 equals VITC2 (line 9 for progressive or line 571 for interlaced/PsF)
245
-    bmdTimecodeRP188LTC                                          = 'rplt', // RP188 timecode where DBB1 equals LTC (line 10)
246
-    bmdTimecodeRP188Any                                          = 'rp18', // For capture: return the first valid timecode in {VITC1, LTC ,VITC2} - For playback: set the timecode as VITC1
247
-    bmdTimecodeVITC                                              = 'vitc',
248
-    bmdTimecodeVITCField2                                        = 'vit2',
249
-    bmdTimecodeSerial                                            = 'seri'
250
+    bmdTimecodeRP188VITC1                                        = /* 'rpv1' */ 0x72707631,    // RP188 timecode where DBB1 equals VITC1 (line 9)
251
+    bmdTimecodeRP188VITC2                                        = /* 'rp12' */ 0x72703132,    // RP188 timecode where DBB1 equals VITC2 (line 9 for progressive or line 571 for interlaced/PsF)
252
+    bmdTimecodeRP188LTC                                          = /* 'rplt' */ 0x72706C74,    // RP188 timecode where DBB1 equals LTC (line 10)
253
+    bmdTimecodeRP188HighFrameRate                                = /* 'rphr' */ 0x72706872,    // RP188 timecode where DBB1 is an HFRTC (SMPTE ST 12-3), the only timecode allowing the frame value to go above 30
254
+    bmdTimecodeRP188Any                                          = /* 'rp18' */ 0x72703138,    // Convenience for capture, returning the first valid timecode in {HFRTC (if supported), VITC1, LTC, VITC2}
255
+    bmdTimecodeVITC                                              = /* 'vitc' */ 0x76697463,
256
+    bmdTimecodeVITCField2                                        = /* 'vit2' */ 0x76697432,
257
+    bmdTimecodeSerial                                            = /* 'seri' */ 0x73657269
258
 };
259
 
260
 /* Enum BMDAnalogVideoFlags - Analog video display flags */
261
@@ -261,190 +274,183 @@
262
 
263
 typedef uint32_t BMDAudioOutputAnalogAESSwitch;
264
 enum _BMDAudioOutputAnalogAESSwitch {
265
-    bmdAudioOutputSwitchAESEBU                                   = 'aes ',
266
-    bmdAudioOutputSwitchAnalog                                   = 'anlg'
267
+    bmdAudioOutputSwitchAESEBU                                   = /* 'aes ' */ 0x61657320,
268
+    bmdAudioOutputSwitchAnalog                                   = /* 'anlg' */ 0x616E6C67
269
 };
270
 
271
 /* Enum BMDVideoOutputConversionMode - Video/audio conversion mode */
272
 
273
 typedef uint32_t BMDVideoOutputConversionMode;
274
 enum _BMDVideoOutputConversionMode {
275
-    bmdNoVideoOutputConversion                                   = 'none',
276
-    bmdVideoOutputLetterboxDownconversion                        = 'ltbx',
277
-    bmdVideoOutputAnamorphicDownconversion                       = 'amph',
278
-    bmdVideoOutputHD720toHD1080Conversion                        = '720c',
279
-    bmdVideoOutputHardwareLetterboxDownconversion                = 'HWlb',
280
-    bmdVideoOutputHardwareAnamorphicDownconversion               = 'HWam',
281
-    bmdVideoOutputHardwareCenterCutDownconversion                = 'HWcc',
282
-    bmdVideoOutputHardware720p1080pCrossconversion               = 'xcap',
283
-    bmdVideoOutputHardwareAnamorphic720pUpconversion             = 'ua7p',
284
-    bmdVideoOutputHardwareAnamorphic1080iUpconversion            = 'ua1i',
285
-    bmdVideoOutputHardwareAnamorphic149To720pUpconversion        = 'u47p',
286
-    bmdVideoOutputHardwareAnamorphic149To1080iUpconversion       = 'u41i',
287
-    bmdVideoOutputHardwarePillarbox720pUpconversion              = 'up7p',
288
-    bmdVideoOutputHardwarePillarbox1080iUpconversion             = 'up1i'
289
+    bmdNoVideoOutputConversion                                   = /* 'none' */ 0x6E6F6E65,
290
+    bmdVideoOutputLetterboxDownconversion                        = /* 'ltbx' */ 0x6C746278,
291
+    bmdVideoOutputAnamorphicDownconversion                       = /* 'amph' */ 0x616D7068,
292
+    bmdVideoOutputHD720toHD1080Conversion                        = /* '720c' */ 0x37323063,
293
+    bmdVideoOutputHardwareLetterboxDownconversion                = /* 'HWlb' */ 0x48576C62,
294
+    bmdVideoOutputHardwareAnamorphicDownconversion               = /* 'HWam' */ 0x4857616D,
295
+    bmdVideoOutputHardwareCenterCutDownconversion                = /* 'HWcc' */ 0x48576363,
296
+    bmdVideoOutputHardware720p1080pCrossconversion               = /* 'xcap' */ 0x78636170,
297
+    bmdVideoOutputHardwareAnamorphic720pUpconversion             = /* 'ua7p' */ 0x75613770,
298
+    bmdVideoOutputHardwareAnamorphic1080iUpconversion            = /* 'ua1i' */ 0x75613169,
299
+    bmdVideoOutputHardwareAnamorphic149To720pUpconversion        = /* 'u47p' */ 0x75343770,
300
+    bmdVideoOutputHardwareAnamorphic149To1080iUpconversion       = /* 'u41i' */ 0x75343169,
301
+    bmdVideoOutputHardwarePillarbox720pUpconversion              = /* 'up7p' */ 0x75703770,
302
+    bmdVideoOutputHardwarePillarbox1080iUpconversion             = /* 'up1i' */ 0x75703169
303
 };
304
 
305
 /* Enum BMDVideoInputConversionMode - Video input conversion mode */
306
 
307
 typedef uint32_t BMDVideoInputConversionMode;
308
 enum _BMDVideoInputConversionMode {
309
-    bmdNoVideoInputConversion                                    = 'none',
310
-    bmdVideoInputLetterboxDownconversionFromHD1080               = '10lb',
311
-    bmdVideoInputAnamorphicDownconversionFromHD1080              = '10am',
312
-    bmdVideoInputLetterboxDownconversionFromHD720                = '72lb',
313
-    bmdVideoInputAnamorphicDownconversionFromHD720               = '72am',
314
-    bmdVideoInputLetterboxUpconversion                           = 'lbup',
315
-    bmdVideoInputAnamorphicUpconversion                          = 'amup'
316
+    bmdNoVideoInputConversion                                    = /* 'none' */ 0x6E6F6E65,
317
+    bmdVideoInputLetterboxDownconversionFromHD1080               = /* '10lb' */ 0x31306C62,
318
+    bmdVideoInputAnamorphicDownconversionFromHD1080              = /* '10am' */ 0x3130616D,
319
+    bmdVideoInputLetterboxDownconversionFromHD720                = /* '72lb' */ 0x37326C62,
320
+    bmdVideoInputAnamorphicDownconversionFromHD720               = /* '72am' */ 0x3732616D,
321
+    bmdVideoInputLetterboxUpconversion                           = /* 'lbup' */ 0x6C627570,
322
+    bmdVideoInputAnamorphicUpconversion                          = /* 'amup' */ 0x616D7570
323
 };
324
 
325
 /* Enum BMDVideo3DPackingFormat - Video 3D packing format */
326
 
327
 typedef uint32_t BMDVideo3DPackingFormat;
328
 enum _BMDVideo3DPackingFormat {
329
-    bmdVideo3DPackingSidebySideHalf                              = 'sbsh',
330
-    bmdVideo3DPackingLinebyLine                                  = 'lbyl',
331
-    bmdVideo3DPackingTopAndBottom                                = 'tabo',
332
-    bmdVideo3DPackingFramePacking                                = 'frpk',
333
-    bmdVideo3DPackingLeftOnly                                    = 'left',
334
-    bmdVideo3DPackingRightOnly                                   = 'righ'
335
+    bmdVideo3DPackingSidebySideHalf                              = /* 'sbsh' */ 0x73627368,
336
+    bmdVideo3DPackingLinebyLine                                  = /* 'lbyl' */ 0x6C62796C,
337
+    bmdVideo3DPackingTopAndBottom                                = /* 'tabo' */ 0x7461626F,
338
+    bmdVideo3DPackingFramePacking                                = /* 'frpk' */ 0x6672706B,
339
+    bmdVideo3DPackingLeftOnly                                    = /* 'left' */ 0x6C656674,
340
+    bmdVideo3DPackingRightOnly                                   = /* 'righ' */ 0x72696768
341
 };
342
 
343
 /* Enum BMDIdleVideoOutputOperation - Video output operation when not playing video */
344
 
345
 typedef uint32_t BMDIdleVideoOutputOperation;
346
 enum _BMDIdleVideoOutputOperation {
347
-    bmdIdleVideoOutputBlack                                      = 'blac',
348
-    bmdIdleVideoOutputLastFrame                                  = 'lafa'
349
+    bmdIdleVideoOutputBlack                                      = /* 'blac' */ 0x626C6163,
350
+    bmdIdleVideoOutputLastFrame                                  = /* 'lafa' */ 0x6C616661
351
 };
352
 
353
 /* Enum BMDVideoEncoderFrameCodingMode - Video frame coding mode */
354
 
355
 typedef uint32_t BMDVideoEncoderFrameCodingMode;
356
 enum _BMDVideoEncoderFrameCodingMode {
357
-    bmdVideoEncoderFrameCodingModeInter                          = 'inte',
358
-    bmdVideoEncoderFrameCodingModeIntra                          = 'intr'
359
+    bmdVideoEncoderFrameCodingModeInter                          = /* 'inte' */ 0x696E7465,
360
+    bmdVideoEncoderFrameCodingModeIntra                          = /* 'intr' */ 0x696E7472
361
 };
362
 
363
 /* Enum BMDDNxHRLevel - DNxHR Levels */
364
 
365
 typedef uint32_t BMDDNxHRLevel;
366
 enum _BMDDNxHRLevel {
367
-    bmdDNxHRLevelSQ                                              = 'dnsq',
368
-    bmdDNxHRLevelLB                                              = 'dnlb',
369
-    bmdDNxHRLevelHQ                                              = 'dnhq',
370
-    bmdDNxHRLevelHQX                                             = 'dhqx',
371
-    bmdDNxHRLevel444                                             = 'd444'
372
+    bmdDNxHRLevelSQ                                              = /* 'dnsq' */ 0x646E7371,
373
+    bmdDNxHRLevelLB                                              = /* 'dnlb' */ 0x646E6C62,
374
+    bmdDNxHRLevelHQ                                              = /* 'dnhq' */ 0x646E6871,
375
+    bmdDNxHRLevelHQX                                             = /* 'dhqx' */ 0x64687178,
376
+    bmdDNxHRLevel444                                             = /* 'd444' */ 0x64343434
377
 };
378
 
379
 /* Enum BMDLinkConfiguration - Video link configuration */
380
 
381
 typedef uint32_t BMDLinkConfiguration;
382
 enum _BMDLinkConfiguration {
383
-    bmdLinkConfigurationSingleLink                               = 'lcsl',
384
-    bmdLinkConfigurationDualLink                                 = 'lcdl',
385
-    bmdLinkConfigurationQuadLink                                 = 'lcql'
386
+    bmdLinkConfigurationSingleLink                               = /* 'lcsl' */ 0x6C63736C,
387
+    bmdLinkConfigurationDualLink                                 = /* 'lcdl' */ 0x6C63646C,
388
+    bmdLinkConfigurationQuadLink                                 = /* 'lcql' */ 0x6C63716C
389
 };
390
 
391
 /* Enum BMDDeviceInterface - Device interface type */
392
 
393
 typedef uint32_t BMDDeviceInterface;
394
 enum _BMDDeviceInterface {
395
-    bmdDeviceInterfacePCI                                        = 'pci ',
396
-    bmdDeviceInterfaceUSB                                        = 'usb ',
397
-    bmdDeviceInterfaceThunderbolt                                = 'thun'
398
+    bmdDeviceInterfacePCI                                        = /* 'pci ' */ 0x70636920,
399
+    bmdDeviceInterfaceUSB                                        = /* 'usb ' */ 0x75736220,
400
+    bmdDeviceInterfaceThunderbolt                                = /* 'thun' */ 0x7468756E
401
 };
402
 
403
 /* Enum BMDColorspace - Colorspace */
404
 
405
 typedef uint32_t BMDColorspace;
406
 enum _BMDColorspace {
407
-    bmdColorspaceRec601                                          = 'r601',
408
-    bmdColorspaceRec709                                          = 'r709',
409
-    bmdColorspaceRec2020                                         = '2020'
410
+    bmdColorspaceRec601                                          = /* 'r601' */ 0x72363031,
411
+    bmdColorspaceRec709                                          = /* 'r709' */ 0x72373039,
412
+    bmdColorspaceRec2020                                         = /* '2020' */ 0x32303230
413
 };
414
 
415
 /* Enum BMDDynamicRange - SDR or HDR */
416
 
417
 typedef uint32_t BMDDynamicRange;
418
 enum _BMDDynamicRange {
419
-    bmdDynamicRangeSDR                                           = 0,
420
-    bmdDynamicRangeHDRStaticPQ                                   = 1 << 29,    // SMPTE ST 2084
421
-    bmdDynamicRangeHDRStaticHLG                                  = 1 << 30 // ITU-R BT.2100-0
422
+    bmdDynamicRangeSDR                                           = 0,  // Standard Dynamic Range in accordance with SMPTE ST 2036-1
423
+    bmdDynamicRangeHDRStaticPQ                                   = 1 << 29,    // High Dynamic Range PQ in accordance with SMPTE ST 2084
424
+    bmdDynamicRangeHDRStaticHLG                                  = 1 << 30 // High Dynamic Range HLG in accordance with ITU-R BT.2100-0
425
 };
426
 
427
 /* Enum BMDDeckLinkHDMIInputEDIDID - DeckLink HDMI Input EDID ID */
428
 
429
 typedef uint32_t BMDDeckLinkHDMIInputEDIDID;
430
 enum _BMDDeckLinkHDMIInputEDIDID {
431
-    bmdDeckLinkHDMIInputEDIDDynamicRange                         = 'HIDy'  // Parameter is of type BMDDynamicRange. Default is (bmdDynamicRangeSDR|bmdDynamicRangeHDRStaticPQ)
432
+
433
+    /* Integers */
434
+
435
+    bmdDeckLinkHDMIInputEDIDDynamicRange                         = /* 'HIDy' */ 0x48494479 // Parameter is of type BMDDynamicRange. Default is (bmdDynamicRangeSDR|bmdDynamicRangeHDRStaticPQ)
436
 };
437
 
438
 /* Enum BMDDeckLinkFrameMetadataID - DeckLink Frame Metadata ID */
439
 
440
 typedef uint32_t BMDDeckLinkFrameMetadataID;
441
 enum _BMDDeckLinkFrameMetadataID {
442
-    bmdDeckLinkFrameMetadataColorspace                           = 'cspc', // Colorspace of video frame (see BMDColorspace)
443
-    bmdDeckLinkFrameMetadataHDRElectroOpticalTransferFunc        = 'eotf', // EOTF in range 0-7 as per CEA 861.3
444
-    bmdDeckLinkFrameMetadataCintelFilmType                       = 'cfty', // Current film type
445
-    bmdDeckLinkFrameMetadataCintelFilmGauge                      = 'cfga', // Current film gauge
446
-    bmdDeckLinkFrameMetadataCintelOffsetDetectedHorizontal       = 'odfh', // Horizontal offset (pixels) detected in image
447
-    bmdDeckLinkFrameMetadataCintelOffsetDetectedVertical         = 'odfv', // Vertical offset (pixels) detected in image
448
-    bmdDeckLinkFrameMetadataCintelKeykodeLow                     = 'ckkl', // Raw keykode value - low 64 bits
449
-    bmdDeckLinkFrameMetadataCintelKeykodeHigh                    = 'ckkh', // Raw keykode value - high 64 bits
450
-    bmdDeckLinkFrameMetadataCintelTile1Size                      = 'ct1s', // Size in bytes of compressed raw tile 1
451
-    bmdDeckLinkFrameMetadataCintelTile2Size                      = 'ct2s', // Size in bytes of compressed raw tile 2
452
-    bmdDeckLinkFrameMetadataCintelTile3Size                      = 'ct3s', // Size in bytes of compressed raw tile 3
453
-    bmdDeckLinkFrameMetadataCintelTile4Size                      = 'ct4s', // Size in bytes of compressed raw tile 4
454
-    bmdDeckLinkFrameMetadataCintelImageWidth                     = 'IWPx', // Width in pixels of image
455
-    bmdDeckLinkFrameMetadataCintelImageHeight                    = 'IHPx', // Height in pixels of image
456
-    bmdDeckLinkFrameMetadataCintelLinearMaskingRedInRed          = 'mrir', // Red in red linear masking parameter
457
-    bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInRed        = 'mgir', // Green in red linear masking parameter
458
-    bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInRed         = 'mbir', // Blue in red linear masking parameter
459
-    bmdDeckLinkFrameMetadataCintelLinearMaskingRedInGreen        = 'mrig', // Red in green linear masking parameter
460
-    bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInGreen      = 'mgig', // Green in green linear masking parameter
461
-    bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInGreen       = 'mbig', // Blue in green linear masking parameter
462
-    bmdDeckLinkFrameMetadataCintelLinearMaskingRedInBlue         = 'mrib', // Red in blue linear masking parameter
463
-    bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInBlue       = 'mgib', // Green in blue linear masking parameter
464
-    bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInBlue        = 'mbib', // Blue in blue linear masking parameter
465
-    bmdDeckLinkFrameMetadataCintelLogMaskingRedInRed             = 'mlrr', // Red in red log masking parameter
466
-    bmdDeckLinkFrameMetadataCintelLogMaskingGreenInRed           = 'mlgr', // Green in red log masking parameter
467
-    bmdDeckLinkFrameMetadataCintelLogMaskingBlueInRed            = 'mlbr', // Blue in red log masking parameter
468
-    bmdDeckLinkFrameMetadataCintelLogMaskingRedInGreen           = 'mlrg', // Red in green log masking parameter
469
-    bmdDeckLinkFrameMetadataCintelLogMaskingGreenInGreen         = 'mlgg', // Green in green log masking parameter
470
-    bmdDeckLinkFrameMetadataCintelLogMaskingBlueInGreen          = 'mlbg', // Blue in green log masking parameter
471
-    bmdDeckLinkFrameMetadataCintelLogMaskingRedInBlue            = 'mlrb', // Red in blue log masking parameter
472
-    bmdDeckLinkFrameMetadataCintelLogMaskingGreenInBlue          = 'mlgb', // Green in blue log masking parameter
473
-    bmdDeckLinkFrameMetadataCintelLogMaskingBlueInBlue           = 'mlbb', // Blue in blue log masking parameter
474
-    bmdDeckLinkFrameMetadataCintelFilmFrameRate                  = 'cffr', // Film frame rate
475
-    bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedX              = 'hdrx', // Red display primaries in range 0.0 - 1.0
476
-    bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedY              = 'hdry', // Red display primaries in range 0.0 - 1.0
477
-    bmdDeckLinkFrameMetadataHDRDisplayPrimariesGreenX            = 'hdgx', // Green display primaries in range 0.0 - 1.0
478
-    bmdDeckLinkFrameMetadataHDRDisplayPrimariesGreenY            = 'hdgy', // Green display primaries in range 0.0 - 1.0
479
-    bmdDeckLinkFrameMetadataHDRDisplayPrimariesBlueX             = 'hdbx', // Blue display primaries in range 0.0 - 1.0
480
-    bmdDeckLinkFrameMetadataHDRDisplayPrimariesBlueY             = 'hdby', // Blue display primaries in range 0.0 - 1.0
481
-    bmdDeckLinkFrameMetadataHDRWhitePointX                       = 'hdwx', // White point in range 0.0 - 1.0
482
-    bmdDeckLinkFrameMetadataHDRWhitePointY                       = 'hdwy', // White point in range 0.0 - 1.0
483
-    bmdDeckLinkFrameMetadataHDRMaxDisplayMasteringLuminance      = 'hdml', // Max display mastering luminance in range 1 cd/m2 - 65535 cd/m2
484
-    bmdDeckLinkFrameMetadataHDRMinDisplayMasteringLuminance      = 'hmil', // Min display mastering luminance in range 0.0001 cd/m2 - 6.5535 cd/m2
485
-    bmdDeckLinkFrameMetadataHDRMaximumContentLightLevel          = 'mcll', // Maximum Content Light Level in range 1 cd/m2 - 65535 cd/m2
486
-    bmdDeckLinkFrameMetadataHDRMaximumFrameAverageLightLevel     = 'fall', // Maximum Frame Average Light Level in range 1 cd/m2 - 65535 cd/m2
487
-    bmdDeckLinkFrameMetadataCintelOffsetToApplyHorizontal        = 'otah', // Horizontal offset (pixels) to be applied to image
488
-    bmdDeckLinkFrameMetadataCintelOffsetToApplyVertical          = 'otav', // Vertical offset (pixels) to be applied to image
489
-    bmdDeckLinkFrameMetadataCintelGainRed                        = 'LfRd', // Red gain parameter to apply after log
490
-    bmdDeckLinkFrameMetadataCintelGainGreen                      = 'LfGr', // Green gain parameter to apply after log
491
-    bmdDeckLinkFrameMetadataCintelGainBlue                       = 'LfBl', // Blue gain parameter to apply after log
492
-    bmdDeckLinkFrameMetadataCintelLiftRed                        = 'GnRd', // Red lift parameter to apply after log and gain
493
-    bmdDeckLinkFrameMetadataCintelLiftGreen                      = 'GnGr', // Green lift parameter to apply after log and gain
494
-    bmdDeckLinkFrameMetadataCintelLiftBlue                       = 'GnBl'  // Blue lift parameter to apply after log and gain
495
-};
496
-
497
-/* Enum BMDDuplexMode - Duplex for configurable ports */
498
 
499
-typedef uint32_t BMDDuplexMode;
500
-enum _BMDDuplexMode {
501
-    bmdDuplexModeFull                                            = 'fdup',
502
-    bmdDuplexModeHalf                                            = 'hdup'
503
+    /* Colorspace Metadata - Integers */
504
+
505
+    bmdDeckLinkFrameMetadataColorspace                           = /* 'cspc' */ 0x63737063,    // Colorspace of video frame (see BMDColorspace)
506
+
507
+    /* HDR Metadata - Integers */
508
+
509
+    bmdDeckLinkFrameMetadataHDRElectroOpticalTransferFunc        = /* 'eotf' */ 0x656F7466,    // EOTF in range 0-7 as per CEA 861.3
510
+
511
+    /* HDR Metadata - Floats */
512
+
513
+    bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedX              = /* 'hdrx' */ 0x68647278,    // Red display primaries in range 0.0 - 1.0
514
+    bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedY              = /* 'hdry' */ 0x68647279,    // Red display primaries in range 0.0 - 1.0
515
+    bmdDeckLinkFrameMetadataHDRDisplayPrimariesGreenX            = /* 'hdgx' */ 0x68646778,    // Green display primaries in range 0.0 - 1.0
516
+    bmdDeckLinkFrameMetadataHDRDisplayPrimariesGreenY            = /* 'hdgy' */ 0x68646779,    // Green display primaries in range 0.0 - 1.0
517
+    bmdDeckLinkFrameMetadataHDRDisplayPrimariesBlueX             = /* 'hdbx' */ 0x68646278,    // Blue display primaries in range 0.0 - 1.0
518
+    bmdDeckLinkFrameMetadataHDRDisplayPrimariesBlueY             = /* 'hdby' */ 0x68646279,    // Blue display primaries in range 0.0 - 1.0
519
+    bmdDeckLinkFrameMetadataHDRWhitePointX                       = /* 'hdwx' */ 0x68647778,    // White point in range 0.0 - 1.0
520
+    bmdDeckLinkFrameMetadataHDRWhitePointY                       = /* 'hdwy' */ 0x68647779,    // White point in range 0.0 - 1.0
521
+    bmdDeckLinkFrameMetadataHDRMaxDisplayMasteringLuminance      = /* 'hdml' */ 0x68646D6C,    // Max display mastering luminance in range 1 cd/m2 - 65535 cd/m2
522
+    bmdDeckLinkFrameMetadataHDRMinDisplayMasteringLuminance      = /* 'hmil' */ 0x686D696C,    // Min display mastering luminance in range 0.0001 cd/m2 - 6.5535 cd/m2
523
+    bmdDeckLinkFrameMetadataHDRMaximumContentLightLevel          = /* 'mcll' */ 0x6D636C6C,    // Maximum Content Light Level in range 1 cd/m2 - 65535 cd/m2
524
+    bmdDeckLinkFrameMetadataHDRMaximumFrameAverageLightLevel     = /* 'fall' */ 0x66616C6C // Maximum Frame Average Light Level in range 1 cd/m2 - 65535 cd/m2
525
+};
526
+
527
+/* Enum BMDProfileID - Identifies a profile */
528
+
529
+typedef uint32_t BMDProfileID;
530
+enum _BMDProfileID {
531
+    bmdProfileOneSubDeviceFullDuplex                             = /* '1dfd' */ 0x31646664,
532
+    bmdProfileOneSubDeviceHalfDuplex                             = /* '1dhd' */ 0x31646864,
533
+    bmdProfileTwoSubDevicesFullDuplex                            = /* '2dfd' */ 0x32646664,
534
+    bmdProfileTwoSubDevicesHalfDuplex                            = /* '2dhd' */ 0x32646864,
535
+    bmdProfileFourSubDevicesHalfDuplex                           = /* '4dhd' */ 0x34646864
536
+};
537
+
538
+/* Enum BMDHDMITimecodePacking - Packing form of timecode on HDMI */
539
+
540
+typedef uint32_t BMDHDMITimecodePacking;
541
+enum _BMDHDMITimecodePacking {
542
+    bmdHDMITimecodePackingIEEEOUI000085                          = 0x00008500,
543
+    bmdHDMITimecodePackingIEEEOUI080046                          = 0x08004601,
544
+    bmdHDMITimecodePackingIEEEOUI5CF9F0                          = 0x5CF9F003
545
+};
546
+
547
+/* Enum BMDInternalKeyingAncillaryDataSource - Source for VANC and timecode data when performing internal keying */
548
+
549
+typedef uint32_t BMDInternalKeyingAncillaryDataSource;
550
+enum _BMDInternalKeyingAncillaryDataSource {
551
+    bmdInternalKeyingUsesAncillaryDataFromInputSignal            = /* 'ikai' */ 0x696B6169,
552
+    bmdInternalKeyingUsesAncillaryDataFromKeyFrame               = /* 'ikak' */ 0x696B616B
553
 };
554
 
555
 /* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
556
@@ -454,74 +460,83 @@
557
 
558
     /* Flags */
559
 
560
-    BMDDeckLinkSupportsInternalKeying                            = 'keyi',
561
-    BMDDeckLinkSupportsExternalKeying                            = 'keye',
562
-    BMDDeckLinkSupportsHDKeying                                  = 'keyh',
563
-    BMDDeckLinkSupportsInputFormatDetection                      = 'infd',
564
-    BMDDeckLinkHasReferenceInput                                 = 'hrin',
565
-    BMDDeckLinkHasSerialPort                                     = 'hspt',
566
-    BMDDeckLinkHasAnalogVideoOutputGain                          = 'avog',
567
-    BMDDeckLinkCanOnlyAdjustOverallVideoOutputGain               = 'ovog',
568
-    BMDDeckLinkHasVideoInputAntiAliasingFilter                   = 'aafl',
569
-    BMDDeckLinkHasBypass                                         = 'byps',
570
-    BMDDeckLinkSupportsClockTimingAdjustment                     = 'ctad',
571
-    BMDDeckLinkSupportsFullDuplex                                = 'fdup',
572
-    BMDDeckLinkSupportsFullFrameReferenceInputTimingOffset       = 'frin',
573
-    BMDDeckLinkSupportsSMPTELevelAOutput                         = 'lvla',
574
-    BMDDeckLinkSupportsDualLinkSDI                               = 'sdls',
575
-    BMDDeckLinkSupportsQuadLinkSDI                               = 'sqls',
576
-    BMDDeckLinkSupportsIdleOutput                                = 'idou',
577
-    BMDDeckLinkHasLTCTimecodeInput                               = 'hltc',
578
-    BMDDeckLinkSupportsDuplexModeConfiguration                   = 'dupx',
579
-    BMDDeckLinkSupportsHDRMetadata                               = 'hdrm',
580
-    BMDDeckLinkSupportsColorspaceMetadata                        = 'cmet',
581
+    BMDDeckLinkSupportsInternalKeying                            = /* 'keyi' */ 0x6B657969,
582
+    BMDDeckLinkSupportsExternalKeying                            = /* 'keye' */ 0x6B657965,
583
+    BMDDeckLinkSupportsInputFormatDetection                      = /* 'infd' */ 0x696E6664,
584
+    BMDDeckLinkHasReferenceInput                                 = /* 'hrin' */ 0x6872696E,
585
+    BMDDeckLinkHasSerialPort                                     = /* 'hspt' */ 0x68737074,
586
+    BMDDeckLinkHasAnalogVideoOutputGain                          = /* 'avog' */ 0x61766F67,
587
+    BMDDeckLinkCanOnlyAdjustOverallVideoOutputGain               = /* 'ovog' */ 0x6F766F67,
588
+    BMDDeckLinkHasVideoInputAntiAliasingFilter                   = /* 'aafl' */ 0x6161666C,
589
+    BMDDeckLinkHasBypass                                         = /* 'byps' */ 0x62797073,
590
+    BMDDeckLinkSupportsClockTimingAdjustment                     = /* 'ctad' */ 0x63746164,
591
+    BMDDeckLinkSupportsFullFrameReferenceInputTimingOffset       = /* 'frin' */ 0x6672696E,
592
+    BMDDeckLinkSupportsSMPTELevelAOutput                         = /* 'lvla' */ 0x6C766C61,
593
+    BMDDeckLinkSupportsAutoSwitchingPPsFOnInput                  = /* 'apsf' */ 0x61707366,
594
+    BMDDeckLinkSupportsDualLinkSDI                               = /* 'sdls' */ 0x73646C73,
595
+    BMDDeckLinkSupportsQuadLinkSDI                               = /* 'sqls' */ 0x73716C73,
596
+    BMDDeckLinkSupportsIdleOutput                                = /* 'idou' */ 0x69646F75,
597
+    BMDDeckLinkVANCRequires10BitYUVVideoFrames                   = /* 'vioY' */ 0x76696F59,    // Legacy product requires v210 active picture for IDeckLinkVideoFrameAncillaryPackets or 10-bit VANC
598
+    BMDDeckLinkHasLTCTimecodeInput                               = /* 'hltc' */ 0x686C7463,
599
+    BMDDeckLinkSupportsHDRMetadata                               = /* 'hdrm' */ 0x6864726D,
600
+    BMDDeckLinkSupportsColorspaceMetadata                        = /* 'cmet' */ 0x636D6574,
601
+    BMDDeckLinkSupportsHDMITimecode                              = /* 'htim' */ 0x6874696D,
602
+    BMDDeckLinkSupportsHighFrameRateTimecode                     = /* 'HFRT' */ 0x48465254,
603
+    BMDDeckLinkSupportsSynchronizeToCaptureGroup                 = /* 'stcg' */ 0x73746367,
604
+    BMDDeckLinkSupportsSynchronizeToPlaybackGroup                = /* 'stpg' */ 0x73747067,
605
 
606
     /* Integers */
607
 
608
-    BMDDeckLinkMaximumAudioChannels                              = 'mach',
609
-    BMDDeckLinkMaximumAnalogAudioInputChannels                   = 'iach',
610
-    BMDDeckLinkMaximumAnalogAudioOutputChannels                  = 'aach',
611
-    BMDDeckLinkNumberOfSubDevices                                = 'nsbd',
612
-    BMDDeckLinkSubDeviceIndex                                    = 'subi',
613
-    BMDDeckLinkPersistentID                                      = 'peid',
614
-    BMDDeckLinkDeviceGroupID                                     = 'dgid',
615
-    BMDDeckLinkTopologicalID                                     = 'toid',
616
-    BMDDeckLinkVideoOutputConnections                            = 'vocn', // Returns a BMDVideoConnection bit field
617
-    BMDDeckLinkVideoInputConnections                             = 'vicn', // Returns a BMDVideoConnection bit field
618
-    BMDDeckLinkAudioOutputConnections                            = 'aocn', // Returns a BMDAudioConnection bit field
619
-    BMDDeckLinkAudioInputConnections                             = 'aicn', // Returns a BMDAudioConnection bit field
620
-    BMDDeckLinkVideoIOSupport                                    = 'vios', // Returns a BMDVideoIOSupport bit field
621
-    BMDDeckLinkDeckControlConnections                            = 'dccn', // Returns a BMDDeckControlConnection bit field
622
-    BMDDeckLinkDeviceInterface                                   = 'dbus', // Returns a BMDDeviceInterface
623
-    BMDDeckLinkAudioInputRCAChannelCount                         = 'airc',
624
-    BMDDeckLinkAudioInputXLRChannelCount                         = 'aixc',
625
-    BMDDeckLinkAudioOutputRCAChannelCount                        = 'aorc',
626
-    BMDDeckLinkAudioOutputXLRChannelCount                        = 'aoxc',
627
-    BMDDeckLinkPairedDevicePersistentID                          = 'ppid',
628
+    BMDDeckLinkMaximumAudioChannels                              = /* 'mach' */ 0x6D616368,
629
+    BMDDeckLinkMaximumAnalogAudioInputChannels                   = /* 'iach' */ 0x69616368,
630
+    BMDDeckLinkMaximumAnalogAudioOutputChannels                  = /* 'aach' */ 0x61616368,
631
+    BMDDeckLinkNumberOfSubDevices                                = /* 'nsbd' */ 0x6E736264,
632
+    BMDDeckLinkSubDeviceIndex                                    = /* 'subi' */ 0x73756269,
633
+    BMDDeckLinkPersistentID                                      = /* 'peid' */ 0x70656964,
634
+    BMDDeckLinkDeviceGroupID                                     = /* 'dgid' */ 0x64676964,
635
+    BMDDeckLinkTopologicalID                                     = /* 'toid' */ 0x746F6964,
636
+    BMDDeckLinkVideoOutputConnections                            = /* 'vocn' */ 0x766F636E,    // Returns a BMDVideoConnection bit field
637
+    BMDDeckLinkVideoInputConnections                             = /* 'vicn' */ 0x7669636E,    // Returns a BMDVideoConnection bit field
638
+    BMDDeckLinkAudioOutputConnections                            = /* 'aocn' */ 0x616F636E,    // Returns a BMDAudioConnection bit field
639
+    BMDDeckLinkAudioInputConnections                             = /* 'aicn' */ 0x6169636E,    // Returns a BMDAudioConnection bit field
640
+    BMDDeckLinkVideoIOSupport                                    = /* 'vios' */ 0x76696F73,    // Returns a BMDVideoIOSupport bit field
641
+    BMDDeckLinkDeckControlConnections                            = /* 'dccn' */ 0x6463636E,    // Returns a BMDDeckControlConnection bit field
642
+    BMDDeckLinkDeviceInterface                                   = /* 'dbus' */ 0x64627573,    // Returns a BMDDeviceInterface
643
+    BMDDeckLinkAudioInputRCAChannelCount                         = /* 'airc' */ 0x61697263,
644
+    BMDDeckLinkAudioInputXLRChannelCount                         = /* 'aixc' */ 0x61697863,
645
+    BMDDeckLinkAudioOutputRCAChannelCount                        = /* 'aorc' */ 0x616F7263,
646
+    BMDDeckLinkAudioOutputXLRChannelCount                        = /* 'aoxc' */ 0x616F7863,
647
+    BMDDeckLinkProfileID                                         = /* 'prid' */ 0x70726964,    // Returns a BMDProfileID
648
+    BMDDeckLinkDuplex                                            = /* 'dupx' */ 0x64757078,
649
+    BMDDeckLinkMinimumPrerollFrames                              = /* 'mprf' */ 0x6D707266,
650
+    BMDDeckLinkSupportedDynamicRange                             = /* 'sudr' */ 0x73756472,
651
 
652
     /* Floats */
653
 
654
-    BMDDeckLinkVideoInputGainMinimum                             = 'vigm',
655
-    BMDDeckLinkVideoInputGainMaximum                             = 'vigx',
656
-    BMDDeckLinkVideoOutputGainMinimum                            = 'vogm',
657
-    BMDDeckLinkVideoOutputGainMaximum                            = 'vogx',
658
-    BMDDeckLinkMicrophoneInputGainMinimum                        = 'migm',
659
-    BMDDeckLinkMicrophoneInputGainMaximum                        = 'migx',
660
+    BMDDeckLinkVideoInputGainMinimum                             = /* 'vigm' */ 0x7669676D,
661
+    BMDDeckLinkVideoInputGainMaximum                             = /* 'vigx' */ 0x76696778,
662
+    BMDDeckLinkVideoOutputGainMinimum                            = /* 'vogm' */ 0x766F676D,
663
+    BMDDeckLinkVideoOutputGainMaximum                            = /* 'vogx' */ 0x766F6778,
664
+    BMDDeckLinkMicrophoneInputGainMinimum                        = /* 'migm' */ 0x6D69676D,
665
+    BMDDeckLinkMicrophoneInputGainMaximum                        = /* 'migx' */ 0x6D696778,
666
 
667
     /* Strings */
668
 
669
-    BMDDeckLinkSerialPortDeviceName                              = 'slpn',
670
-    BMDDeckLinkVendorName                                        = 'vndr',
671
-    BMDDeckLinkDisplayName                                       = 'dspn',
672
-    BMDDeckLinkModelName                                         = 'mdln',
673
-    BMDDeckLinkDeviceHandle                                      = 'devh'
674
+    BMDDeckLinkSerialPortDeviceName                              = /* 'slpn' */ 0x736C706E,
675
+    BMDDeckLinkVendorName                                        = /* 'vndr' */ 0x766E6472,
676
+    BMDDeckLinkDisplayName                                       = /* 'dspn' */ 0x6473706E,
677
+    BMDDeckLinkModelName                                         = /* 'mdln' */ 0x6D646C6E,
678
+    BMDDeckLinkDeviceHandle                                      = /* 'devh' */ 0x64657668
679
 };
680
 
681
 /* Enum BMDDeckLinkAPIInformationID - DeckLinkAPI information ID */
682
 
683
 typedef uint32_t BMDDeckLinkAPIInformationID;
684
 enum _BMDDeckLinkAPIInformationID {
685
-    BMDDeckLinkAPIVersion                                        = 'vers'
686
+
687
+    /* Integer or String */
688
+
689
+    BMDDeckLinkAPIVersion                                        = /* 'vers' */ 0x76657273
690
 };
691
 
692
 /* Enum BMDDeckLinkStatusID - DeckLink Status ID */
693
@@ -531,28 +546,34 @@
694
 
695
     /* Integers */
696
 
697
-    bmdDeckLinkStatusDetectedVideoInputMode                      = 'dvim',
698
-    bmdDeckLinkStatusDetectedVideoInputFlags                     = 'dvif',
699
-    bmdDeckLinkStatusCurrentVideoInputMode                       = 'cvim',
700
-    bmdDeckLinkStatusCurrentVideoInputPixelFormat                = 'cvip',
701
-    bmdDeckLinkStatusCurrentVideoInputFlags                      = 'cvif',
702
-    bmdDeckLinkStatusCurrentVideoOutputMode                      = 'cvom',
703
-    bmdDeckLinkStatusCurrentVideoOutputFlags                     = 'cvof',
704
-    bmdDeckLinkStatusPCIExpressLinkWidth                         = 'pwid',
705
-    bmdDeckLinkStatusPCIExpressLinkSpeed                         = 'plnk',
706
-    bmdDeckLinkStatusLastVideoOutputPixelFormat                  = 'opix',
707
-    bmdDeckLinkStatusReferenceSignalMode                         = 'refm',
708
-    bmdDeckLinkStatusReferenceSignalFlags                        = 'reff',
709
-    bmdDeckLinkStatusDuplexMode                                  = 'dupx',
710
-    bmdDeckLinkStatusBusy                                        = 'busy',
711
-    bmdDeckLinkStatusInterchangeablePanelType                    = 'icpt',
712
-    bmdDeckLinkStatusDeviceTemperature                           = 'dtmp',
713
+    bmdDeckLinkStatusDetectedVideoInputMode                      = /* 'dvim' */ 0x6476696D,
714
+    bmdDeckLinkStatusDetectedVideoInputFormatFlags               = /* 'dvff' */ 0x64766666,
715
+    bmdDeckLinkStatusDetectedVideoInputFieldDominance            = /* 'dvfd' */ 0x64766664,
716
+    bmdDeckLinkStatusDetectedVideoInputColorspace                = /* 'dscl' */ 0x6473636C,
717
+    bmdDeckLinkStatusDetectedVideoInputDynamicRange              = /* 'dsdr' */ 0x64736472,
718
+    bmdDeckLinkStatusDetectedSDILinkConfiguration                = /* 'dslc' */ 0x64736C63,
719
+    bmdDeckLinkStatusCurrentVideoInputMode                       = /* 'cvim' */ 0x6376696D,
720
+    bmdDeckLinkStatusCurrentVideoInputPixelFormat                = /* 'cvip' */ 0x63766970,
721
+    bmdDeckLinkStatusCurrentVideoInputFlags                      = /* 'cvif' */ 0x63766966,
722
+    bmdDeckLinkStatusCurrentVideoOutputMode                      = /* 'cvom' */ 0x63766F6D,
723
+    bmdDeckLinkStatusCurrentVideoOutputFlags                     = /* 'cvof' */ 0x63766F66,
724
+    bmdDeckLinkStatusPCIExpressLinkWidth                         = /* 'pwid' */ 0x70776964,
725
+    bmdDeckLinkStatusPCIExpressLinkSpeed                         = /* 'plnk' */ 0x706C6E6B,
726
+    bmdDeckLinkStatusLastVideoOutputPixelFormat                  = /* 'opix' */ 0x6F706978,
727
+    bmdDeckLinkStatusReferenceSignalMode                         = /* 'refm' */ 0x7265666D,
728
+    bmdDeckLinkStatusReferenceSignalFlags                        = /* 'reff' */ 0x72656666,
729
+    bmdDeckLinkStatusBusy                                        = /* 'busy' */ 0x62757379,
730
+    bmdDeckLinkStatusInterchangeablePanelType                    = /* 'icpt' */ 0x69637074,
731
+    bmdDeckLinkStatusDeviceTemperature                           = /* 'dtmp' */ 0x64746D70,
732
 
733
     /* Flags */
734
 
735
-    bmdDeckLinkStatusVideoInputSignalLocked                      = 'visl',
736
-    bmdDeckLinkStatusReferenceSignalLocked                       = 'refl',
737
-    bmdDeckLinkStatusReceivedEDID                                = 'edid'
738
+    bmdDeckLinkStatusVideoInputSignalLocked                      = /* 'visl' */ 0x7669736C,
739
+    bmdDeckLinkStatusReferenceSignalLocked                       = /* 'refl' */ 0x7265666C,
740
+
741
+    /* Bytes */
742
+
743
+    bmdDeckLinkStatusReceivedEDID                                = /* 'edid' */ 0x65646964
744
 };
745
 
746
 /* Enum BMDDeckLinkVideoStatusFlags -  */
747
@@ -563,22 +584,22 @@
748
     bmdDeckLinkVideoStatusDualStream3D                           = 1 << 1
749
 };
750
 
751
-/* Enum BMDDuplexStatus - Duplex status of the device */
752
+/* Enum BMDDuplexMode - Duplex of the device */
753
 
754
-typedef uint32_t BMDDuplexStatus;
755
-enum _BMDDuplexStatus {
756
-    bmdDuplexStatusFullDuplex                                    = 'fdup',
757
-    bmdDuplexStatusHalfDuplex                                    = 'hdup',
758
-    bmdDuplexStatusSimplex                                       = 'splx',
759
-    bmdDuplexStatusInactive                                      = 'inac'
760
+typedef uint32_t BMDDuplexMode;
761
+enum _BMDDuplexMode {
762
+    bmdDuplexFull                                                = /* 'dxfu' */ 0x64786675,
763
+    bmdDuplexHalf                                                = /* 'dxha' */ 0x64786861,
764
+    bmdDuplexSimplex                                             = /* 'dxsp' */ 0x64787370,
765
+    bmdDuplexInactive                                            = /* 'dxin' */ 0x6478696E
766
 };
767
 
768
 /* Enum BMDPanelType - The type of interchangeable panel */
769
 
770
 typedef uint32_t BMDPanelType;
771
 enum _BMDPanelType {
772
-    bmdPanelNotDetected                                          = 'npnl',
773
-    bmdPanelTeranexMiniSmartPanel                                = 'tmsm'
774
+    bmdPanelNotDetected                                          = /* 'npnl' */ 0x6E706E6C,
775
+    bmdPanelTeranexMiniSmartPanel                                = /* 'tmsm' */ 0x746D736D
776
 };
777
 
778
 /* Enum BMDDeviceBusyState - Current device busy state */
779
@@ -602,19 +623,19 @@
780
 
781
 typedef uint32_t BMD3DPreviewFormat;
782
 enum _BMD3DPreviewFormat {
783
-    bmd3DPreviewFormatDefault                                    = 'defa',
784
-    bmd3DPreviewFormatLeftOnly                                   = 'left',
785
-    bmd3DPreviewFormatRightOnly                                  = 'righ',
786
-    bmd3DPreviewFormatSideBySide                                 = 'side',
787
-    bmd3DPreviewFormatTopBottom                                  = 'topb'
788
+    bmd3DPreviewFormatDefault                                    = /* 'defa' */ 0x64656661,
789
+    bmd3DPreviewFormatLeftOnly                                   = /* 'left' */ 0x6C656674,
790
+    bmd3DPreviewFormatRightOnly                                  = /* 'righ' */ 0x72696768,
791
+    bmd3DPreviewFormatSideBySide                                 = /* 'side' */ 0x73696465,
792
+    bmd3DPreviewFormatTopBottom                                  = /* 'topb' */ 0x746F7062
793
 };
794
 
795
 /* Enum BMDNotifications - Events that can be subscribed through IDeckLinkNotification */
796
 
797
 typedef uint32_t BMDNotifications;
798
 enum _BMDNotifications {
799
-    bmdPreferencesChanged                                        = 'pref',
800
-    bmdStatusChanged                                             = 'stat'
801
+    bmdPreferencesChanged                                        = /* 'pref' */ 0x70726566,
802
+    bmdStatusChanged                                             = /* 'stat' */ 0x73746174
803
 };
804
 
805
 #if defined(__cplusplus)
806
@@ -651,7 +672,11 @@
807
 class IDeckLinkGLScreenPreviewHelper;
808
 class IDeckLinkNotificationCallback;
809
 class IDeckLinkNotification;
810
-class IDeckLinkAttributes;
811
+class IDeckLinkProfileAttributes;
812
+class IDeckLinkProfileIterator;
813
+class IDeckLinkProfile;
814
+class IDeckLinkProfileCallback;
815
+class IDeckLinkProfileManager;
816
 class IDeckLinkStatus;
817
 class IDeckLinkKeyer;
818
 class IDeckLinkVideoConversion;
819
@@ -663,7 +688,7 @@
820
 class BMD_PUBLIC IDeckLinkVideoOutputCallback : public IUnknown
821
 {
822
 public:
823
-    virtual HRESULT ScheduledFrameCompleted (/* in */ IDeckLinkVideoFrame *completedFrame, /* in */ BMDOutputFrameCompletionResult result) = 0;
824
+    virtual HRESULT ScheduledFrameCompleted (/* in */ IDeckLinkVideoFrame* completedFrame, /* in */ BMDOutputFrameCompletionResult result) = 0;
825
     virtual HRESULT ScheduledPlaybackHasStopped (void) = 0;
826
 
827
 protected:
828
@@ -675,7 +700,7 @@
829
 class BMD_PUBLIC IDeckLinkInputCallback : public IUnknown
830
 {
831
 public:
832
-    virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode *newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
833
+    virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode* newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
834
     virtual HRESULT VideoInputFrameArrived (/* in */ IDeckLinkVideoInputFrame* videoFrame, /* in */ IDeckLinkAudioInputPacket* audioPacket) = 0;
835
 
836
 protected:
837
@@ -687,7 +712,7 @@
838
 class BMD_PUBLIC IDeckLinkEncoderInputCallback : public IUnknown
839
 {
840
 public:
841
-    virtual HRESULT VideoInputSignalChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode *newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
842
+    virtual HRESULT VideoInputSignalChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode* newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
843
     virtual HRESULT VideoPacketArrived (/* in */ IDeckLinkEncoderVideoPacket* videoPacket) = 0;
844
     virtual HRESULT AudioPacketArrived (/* in */ IDeckLinkEncoderAudioPacket* audioPacket) = 0;
845
 
846
@@ -700,9 +725,8 @@
847
 class BMD_PUBLIC IDeckLinkMemoryAllocator : public IUnknown
848
 {
849
 public:
850
-    virtual HRESULT AllocateBuffer (/* in */ uint32_t bufferSize, /* out */ void **allocatedBuffer) = 0;
851
-    virtual HRESULT ReleaseBuffer (/* in */ void *buffer) = 0;
852
-
853
+    virtual HRESULT AllocateBuffer (/* in */ uint32_t bufferSize, /* out */ void** allocatedBuffer) = 0;
854
+    virtual HRESULT ReleaseBuffer (/* in */ void* buffer) = 0;
855
     virtual HRESULT Commit (void) = 0;
856
     virtual HRESULT Decommit (void) = 0;
857
 };
858
@@ -715,12 +739,12 @@
859
     virtual HRESULT RenderAudioSamples (/* in */ bool preroll) = 0;
860
 };
861
 
862
-/* Interface IDeckLinkIterator - enumerates installed DeckLink hardware */
863
+/* Interface IDeckLinkIterator - Enumerates installed DeckLink hardware */
864
 
865
 class BMD_PUBLIC IDeckLinkIterator : public IUnknown
866
 {
867
 public:
868
-    virtual HRESULT Next (/* out */ IDeckLink **deckLinkInstance) = 0;
869
+    virtual HRESULT Next (/* out */ IDeckLink** deckLinkInstance) = 0;
870
 };
871
 
872
 /* Interface IDeckLinkAPIInformation - DeckLinkAPI attribute interface */
873
@@ -728,10 +752,10 @@
874
 class BMD_PUBLIC IDeckLinkAPIInformation : public IUnknown
875
 {
876
 public:
877
-    virtual HRESULT GetFlag (/* in */ BMDDeckLinkAPIInformationID cfgID, /* out */ bool *value) = 0;
878
-    virtual HRESULT GetInt (/* in */ BMDDeckLinkAPIInformationID cfgID, /* out */ int64_t *value) = 0;
879
-    virtual HRESULT GetFloat (/* in */ BMDDeckLinkAPIInformationID cfgID, /* out */ double *value) = 0;
880
-    virtual HRESULT GetString (/* in */ BMDDeckLinkAPIInformationID cfgID, /* out */ CFStringRef *value) = 0;
881
+    virtual HRESULT GetFlag (/* in */ BMDDeckLinkAPIInformationID cfgID, /* out */ bool* value) = 0;
882
+    virtual HRESULT GetInt (/* in */ BMDDeckLinkAPIInformationID cfgID, /* out */ int64_t* value) = 0;
883
+    virtual HRESULT GetFloat (/* in */ BMDDeckLinkAPIInformationID cfgID, /* out */ double* value) = 0;
884
+    virtual HRESULT GetString (/* in */ BMDDeckLinkAPIInformationID cfgID, /* out */ CFStringRef* value) = 0;
885
 
886
 protected:
887
     virtual ~IDeckLinkAPIInformation () {} // call Release method to drop reference count
888
@@ -742,53 +766,47 @@
889
 class BMD_PUBLIC IDeckLinkOutput : public IUnknown
890
 {
891
 public:
892
-    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoOutputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
893
-    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
894
-
895
-    virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
896
+    virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of bmdVideoConnectionUnspecified is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedPixelFormat, /* in */ BMDVideoOutputConversionMode conversionMode, /* in */ BMDSupportedVideoModeFlags flags, /* out */ BMDDisplayMode* actualMode, /* out */ bool* supported) = 0;
897
+    virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
898
+    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
899
+    virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback* previewCallback) = 0;
900
 
901
     /* Video Output */
902
 
903
     virtual HRESULT EnableVideoOutput (/* in */ BMDDisplayMode displayMode, /* in */ BMDVideoOutputFlags flags) = 0;
904
     virtual HRESULT DisableVideoOutput (void) = 0;
905
-
906
-    virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
907
-    virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame **outFrame) = 0;
908
-    virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary **outBuffer) = 0; // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
909
-
910
-    virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame *theFrame) = 0;
911
-    virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame *theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
912
-    virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback *theCallback) = 0;
913
-    virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t *bufferedFrameCount) = 0;
914
+    virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator* theAllocator) = 0;
915
+    virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame** outFrame) = 0;
916
+    virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary** outBuffer) = 0; // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
917
+    virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame* theFrame) = 0;
918
+    virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame* theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
919
+    virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback* theCallback) = 0;
920
+    virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t* bufferedFrameCount) = 0;
921
 
922
     /* Audio Output */
923
 
924
     virtual HRESULT EnableAudioOutput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount, /* in */ BMDAudioOutputStreamType streamType) = 0;
925
     virtual HRESULT DisableAudioOutput (void) = 0;
926
-
927
-    virtual HRESULT WriteAudioSamplesSync (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* out */ uint32_t *sampleFramesWritten) = 0;
928
-
929
+    virtual HRESULT WriteAudioSamplesSync (/* in */ void* buffer, /* in */ uint32_t sampleFrameCount, /* out */ uint32_t* sampleFramesWritten) = 0;
930
     virtual HRESULT BeginAudioPreroll (void) = 0;
931
     virtual HRESULT EndAudioPreroll (void) = 0;
932
-    virtual HRESULT ScheduleAudioSamples (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* in */ BMDTimeValue streamTime, /* in */ BMDTimeScale timeScale, /* out */ uint32_t *sampleFramesWritten) = 0;
933
-
934
-    virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t *bufferedSampleFrameCount) = 0;
935
+    virtual HRESULT ScheduleAudioSamples (/* in */ void* buffer, /* in */ uint32_t sampleFrameCount, /* in */ BMDTimeValue streamTime, /* in */ BMDTimeScale timeScale, /* out */ uint32_t* sampleFramesWritten) = 0;
936
+    virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t* bufferedSampleFrameCount) = 0;
937
     virtual HRESULT FlushBufferedAudioSamples (void) = 0;
938
-
939
-    virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback *theCallback) = 0;
940
+    virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback* theCallback) = 0;
941
 
942
     /* Output Control */
943
 
944
     virtual HRESULT StartScheduledPlayback (/* in */ BMDTimeValue playbackStartTime, /* in */ BMDTimeScale timeScale, /* in */ double playbackSpeed) = 0;
945
-    virtual HRESULT StopScheduledPlayback (/* in */ BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue *actualStopTime, /* in */ BMDTimeScale timeScale) = 0;
946
-    virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool *active) = 0;
947
-    virtual HRESULT GetScheduledStreamTime (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *streamTime, /* out */ double *playbackSpeed) = 0;
948
-    virtual HRESULT GetReferenceStatus (/* out */ BMDReferenceStatus *referenceStatus) = 0;
949
+    virtual HRESULT StopScheduledPlayback (/* in */ BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue* actualStopTime, /* in */ BMDTimeScale timeScale) = 0;
950
+    virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool* active) = 0;
951
+    virtual HRESULT GetScheduledStreamTime (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* streamTime, /* out */ double* playbackSpeed) = 0;
952
+    virtual HRESULT GetReferenceStatus (/* out */ BMDReferenceStatus* referenceStatus) = 0;
953
 
954
     /* Hardware Timing */
955
 
956
-    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
957
-    virtual HRESULT GetFrameCompletionReferenceTimestamp (/* in */ IDeckLinkVideoFrame *theFrame, /* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *frameCompletionTimestamp) = 0;
958
+    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
959
+    virtual HRESULT GetFrameCompletionReferenceTimestamp (/* in */ IDeckLinkVideoFrame* theFrame, /* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* frameCompletionTimestamp) = 0;
960
 
961
 protected:
962
     virtual ~IDeckLinkOutput () {} // call Release method to drop reference count
963
@@ -799,23 +817,23 @@
964
 class BMD_PUBLIC IDeckLinkInput : public IUnknown
965
 {
966
 public:
967
-    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
968
-    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
969
-
970
-    virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
971
+    virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of bmdVideoConnectionUnspecified is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedPixelFormat, /* in */ BMDVideoInputConversionMode conversionMode, /* in */ BMDSupportedVideoModeFlags flags, /* out */ BMDDisplayMode* actualMode, /* out */ bool* supported) = 0;
972
+    virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
973
+    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
974
+    virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback* previewCallback) = 0;
975
 
976
     /* Video Input */
977
 
978
     virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
979
     virtual HRESULT DisableVideoInput (void) = 0;
980
-    virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t *availableFrameCount) = 0;
981
-    virtual HRESULT SetVideoInputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
982
+    virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t* availableFrameCount) = 0;
983
+    virtual HRESULT SetVideoInputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator* theAllocator) = 0;
984
 
985
     /* Audio Input */
986
 
987
     virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
988
     virtual HRESULT DisableAudioInput (void) = 0;
989
-    virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
990
+    virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t* availableSampleFrameCount) = 0;
991
 
992
     /* Input Control */
993
 
994
@@ -823,11 +841,11 @@
995
     virtual HRESULT StopStreams (void) = 0;
996
     virtual HRESULT PauseStreams (void) = 0;
997
     virtual HRESULT FlushStreams (void) = 0;
998
-    virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback *theCallback) = 0;
999
+    virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback* theCallback) = 0;
1000
 
1001
     /* Hardware Timing */
1002
 
1003
-    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
1004
+    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
1005
 
1006
 protected:
1007
     virtual ~IDeckLinkInput () {} // call Release method to drop reference count
1008
@@ -839,7 +857,7 @@
1009
 {
1010
 public:
1011
     virtual HRESULT SetInt (/* in */ BMDDeckLinkHDMIInputEDIDID cfgID, /* in */ int64_t value) = 0;
1012
-    virtual HRESULT GetInt (/* in */ BMDDeckLinkHDMIInputEDIDID cfgID, /* out */ int64_t *value) = 0;
1013
+    virtual HRESULT GetInt (/* in */ BMDDeckLinkHDMIInputEDIDID cfgID, /* out */ int64_t* value) = 0;
1014
     virtual HRESULT WriteToEDID (void) = 0;
1015
 
1016
 protected:
1017
@@ -851,21 +869,22 @@
1018
 class BMD_PUBLIC IDeckLinkEncoderInput : public IUnknown
1019
 {
1020
 public:
1021
-    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
1022
-    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
1023
+    virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of bmdVideoConnectionUnspecified is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedCodec, /* in */ uint32_t requestedCodecProfile, /* in */ BMDSupportedVideoModeFlags flags, /* out */ bool* supported) = 0;
1024
+    virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
1025
+    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
1026
 
1027
     /* Video Input */
1028
 
1029
     virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
1030
     virtual HRESULT DisableVideoInput (void) = 0;
1031
-    virtual HRESULT GetAvailablePacketsCount (/* out */ uint32_t *availablePacketsCount) = 0;
1032
-    virtual HRESULT SetMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
1033
+    virtual HRESULT GetAvailablePacketsCount (/* out */ uint32_t* availablePacketsCount) = 0;
1034
+    virtual HRESULT SetMemoryAllocator (/* in */ IDeckLinkMemoryAllocator* theAllocator) = 0;
1035
 
1036
     /* Audio Input */
1037
 
1038
     virtual HRESULT EnableAudioInput (/* in */ BMDAudioFormat audioFormat, /* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
1039
     virtual HRESULT DisableAudioInput (void) = 0;
1040
-    virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
1041
+    virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t* availableSampleFrameCount) = 0;
1042
 
1043
     /* Input Control */
1044
 
1045
@@ -873,11 +892,11 @@
1046
     virtual HRESULT StopStreams (void) = 0;
1047
     virtual HRESULT PauseStreams (void) = 0;
1048
     virtual HRESULT FlushStreams (void) = 0;
1049
-    virtual HRESULT SetCallback (/* in */ IDeckLinkEncoderInputCallback *theCallback) = 0;
1050
+    virtual HRESULT SetCallback (/* in */ IDeckLinkEncoderInputCallback* theCallback) = 0;
1051
 
1052
     /* Hardware Timing */
1053
 
1054
-    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
1055
+    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
1056
 
1057
 protected:
1058
     virtual ~IDeckLinkEncoderInput () {} // call Release method to drop reference count
1059
@@ -893,10 +912,9 @@
1060
     virtual long GetRowBytes (void) = 0;
1061
     virtual BMDPixelFormat GetPixelFormat (void) = 0;
1062
     virtual BMDFrameFlags GetFlags (void) = 0;
1063
-    virtual HRESULT GetBytes (/* out */ void **buffer) = 0;
1064
-
1065
-    virtual HRESULT GetTimecode (/* in */ BMDTimecodeFormat format, /* out */ IDeckLinkTimecode **timecode) = 0;
1066
-    virtual HRESULT GetAncillaryData (/* out */ IDeckLinkVideoFrameAncillary **ancillary) = 0; // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
1067
+    virtual HRESULT GetBytes (/* out */ void** buffer) = 0;
1068
+    virtual HRESULT GetTimecode (/* in */ BMDTimecodeFormat format, /* out */ IDeckLinkTimecode** timecode) = 0;
1069
+    virtual HRESULT GetAncillaryData (/* out */ IDeckLinkVideoFrameAncillary** ancillary) = 0; // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
1070
 
1071
 protected:
1072
     virtual ~IDeckLinkVideoFrame () {} // call Release method to drop reference count
1073
@@ -908,10 +926,9 @@
1074
 {
1075
 public:
1076
     virtual HRESULT SetFlags (/* in */ BMDFrameFlags newFlags) = 0;
1077
-
1078
-    virtual HRESULT SetTimecode (/* in */ BMDTimecodeFormat format, /* in */ IDeckLinkTimecode *timecode) = 0;
1079
+    virtual HRESULT SetTimecode (/* in */ BMDTimecodeFormat format, /* in */ IDeckLinkTimecode* timecode) = 0;
1080
     virtual HRESULT SetTimecodeFromComponents (/* in */ BMDTimecodeFormat format, /* in */ uint8_t hours, /* in */ uint8_t minutes, /* in */ uint8_t seconds, /* in */ uint8_t frames, /* in */ BMDTimecodeFlags flags) = 0;
1081
-    virtual HRESULT SetAncillaryData (/* in */ IDeckLinkVideoFrameAncillary *ancillary) = 0;
1082
+    virtual HRESULT SetAncillaryData (/* in */ IDeckLinkVideoFrameAncillary* ancillary) = 0;
1083
     virtual HRESULT SetTimecodeUserBits (/* in */ BMDTimecodeFormat format, /* in */ BMDTimecodeUserBits userBits) = 0;
1084
 
1085
 protected:
1086
@@ -924,21 +941,22 @@
1087
 {
1088
 public:
1089
     virtual BMDVideo3DPackingFormat Get3DPackingFormat (void) = 0;
1090
-    virtual HRESULT GetFrameForRightEye (/* out */ IDeckLinkVideoFrame* *rightEyeFrame) = 0;
1091
+    virtual HRESULT GetFrameForRightEye (/* out */ IDeckLinkVideoFrame** rightEyeFrame) = 0;
1092
 
1093
 protected:
1094
     virtual ~IDeckLinkVideoFrame3DExtensions () {} // call Release method to drop reference count
1095
 };
1096
 
1097
-/* Interface IDeckLinkVideoFrameMetadataExtensions - Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDMI HDR information */
1098
+/* Interface IDeckLinkVideoFrameMetadataExtensions - Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDR information */
1099
 
1100
 class BMD_PUBLIC IDeckLinkVideoFrameMetadataExtensions : public IUnknown
1101
 {
1102
 public:
1103
-    virtual HRESULT GetInt (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ int64_t *value) = 0;
1104
-    virtual HRESULT GetFloat (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ double *value) = 0;
1105
+    virtual HRESULT GetInt (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ int64_t* value) = 0;
1106
+    virtual HRESULT GetFloat (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ double* value) = 0;
1107
     virtual HRESULT GetFlag (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ bool* value) = 0;
1108
-    virtual HRESULT GetString (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ CFStringRef *value) = 0;
1109
+    virtual HRESULT GetString (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ CFStringRef* value) = 0;
1110
+    virtual HRESULT GetBytes (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ void* buffer /* optional */, /* in, out */ uint32_t* bufferSize) = 0;
1111
 
1112
 protected:
1113
     virtual ~IDeckLinkVideoFrameMetadataExtensions () {} // call Release method to drop reference count
1114
@@ -949,8 +967,8 @@
1115
 class BMD_PUBLIC IDeckLinkVideoInputFrame : public IDeckLinkVideoFrame
1116
 {
1117
 public:
1118
-    virtual HRESULT GetStreamTime (/* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration, /* in */ BMDTimeScale timeScale) = 0;
1119
-    virtual HRESULT GetHardwareReferenceTimestamp (/* in */ BMDTimeScale timeScale, /* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration) = 0;
1120
+    virtual HRESULT GetStreamTime (/* out */ BMDTimeValue* frameTime, /* out */ BMDTimeValue* frameDuration, /* in */ BMDTimeScale timeScale) = 0;
1121
+    virtual HRESULT GetHardwareReferenceTimestamp (/* in */ BMDTimeScale timeScale, /* out */ BMDTimeValue* frameTime, /* out */ BMDTimeValue* frameDuration) = 0;
1122
 
1123
 protected:
1124
     virtual ~IDeckLinkVideoInputFrame () {} // call Release method to drop reference count
1125
@@ -961,12 +979,11 @@
1126
 class BMD_PUBLIC IDeckLinkAncillaryPacket : public IUnknown
1127
 {
1128
 public:
1129
-
1130
-    virtual HRESULT GetBytes (/* in */ BMDAncillaryPacketFormat format /* For output, only one format need be offered */, /* out */ const void **data /* Optional */, /* out */ uint32_t *size /* Optional */) = 0;
1131
+    virtual HRESULT GetBytes (/* in */ BMDAncillaryPacketFormat format /* For output, only one format need be offered */, /* out */ const void** data /* Optional */, /* out */ uint32_t* size /* Optional */) = 0;
1132
     virtual uint8_t GetDID (void) = 0;
1133
     virtual uint8_t GetSDID (void) = 0;
1134
-    virtual uint32_t GetLineNumber (void) = 0; // On output, zero is auto
1135
-    virtual uint8_t GetDataStreamIndex (void) = 0; // Usually zero. Can only be 1 if non-SD and the first data stream is completely full
1136
+    virtual uint32_t GetLineNumber (void) = 0; // On output, zero is auto
1137
+    virtual uint8_t GetDataStreamIndex (void) = 0; // Usually zero. Can only be 1 if non-SD and the first data stream is completely full
1138
 
1139
 protected:
1140
     virtual ~IDeckLinkAncillaryPacket () {} // call Release method to drop reference count
1141
@@ -977,35 +994,33 @@
1142
 class BMD_PUBLIC IDeckLinkAncillaryPacketIterator : public IUnknown
1143
 {
1144
 public:
1145
-    virtual HRESULT Next (/* out */ IDeckLinkAncillaryPacket **packet) = 0;
1146
+    virtual HRESULT Next (/* out */ IDeckLinkAncillaryPacket** packet) = 0;
1147
 
1148
 protected:
1149
     virtual ~IDeckLinkAncillaryPacketIterator () {} // call Release method to drop reference count
1150
 };
1151
 
1152
-/* Interface IDeckLinkVideoFrameAncillaryPackets - Obtained through QueryInterface() on an IDeckLinkVideoFrame object. */
1153
+/* Interface IDeckLinkVideoFrameAncillaryPackets - Obtained through QueryInterface on an IDeckLinkVideoFrame object. */
1154
 
1155
 class BMD_PUBLIC IDeckLinkVideoFrameAncillaryPackets : public IUnknown
1156
 {
1157
 public:
1158
-
1159
-    virtual HRESULT GetPacketIterator (/* out */ IDeckLinkAncillaryPacketIterator **iterator) = 0;
1160
-    virtual HRESULT GetFirstPacketByID (/* in */ uint8_t DID, /* in */ uint8_t SDID, /* out */ IDeckLinkAncillaryPacket **packet) = 0;
1161
-    virtual HRESULT AttachPacket (/* in */ IDeckLinkAncillaryPacket *packet) = 0; // Implement IDeckLinkAncillaryPacket to output your own
1162
-    virtual HRESULT DetachPacket (/* in */ IDeckLinkAncillaryPacket *packet) = 0;
1163
+    virtual HRESULT GetPacketIterator (/* out */ IDeckLinkAncillaryPacketIterator** iterator) = 0;
1164
+    virtual HRESULT GetFirstPacketByID (/* in */ uint8_t DID, /* in */ uint8_t SDID, /* out */ IDeckLinkAncillaryPacket** packet) = 0;
1165
+    virtual HRESULT AttachPacket (/* in */ IDeckLinkAncillaryPacket* packet) = 0;  // Implement IDeckLinkAncillaryPacket to output your own
1166
+    virtual HRESULT DetachPacket (/* in */ IDeckLinkAncillaryPacket* packet) = 0;
1167
     virtual HRESULT DetachAllPackets (void) = 0;
1168
 
1169
 protected:
1170
     virtual ~IDeckLinkVideoFrameAncillaryPackets () {} // call Release method to drop reference count
1171
 };
1172
 
1173
-/* Interface IDeckLinkVideoFrameAncillary - Use of IDeckLinkVideoFrameAncillaryPackets is preferred. Obtained through QueryInterface() on an IDeckLinkVideoFrame object. */
1174
+/* Interface IDeckLinkVideoFrameAncillary - Use of IDeckLinkVideoFrameAncillaryPackets is preferred. Obtained through QueryInterface on an IDeckLinkVideoFrame object. */
1175
 
1176
 class BMD_PUBLIC IDeckLinkVideoFrameAncillary : public IUnknown
1177
 {
1178
 public:
1179
-
1180
-    virtual HRESULT GetBufferForVerticalBlankingLine (/* in */ uint32_t lineNumber, /* out */ void **buffer) = 0; // Pixels/rowbytes is same as display mode, except for above HD where it's 1920 pixels for UHD modes and 2048 pixels for DCI modes
1181
+    virtual HRESULT GetBufferForVerticalBlankingLine (/* in */ uint32_t lineNumber, /* out */ void** buffer) = 0;  // Pixels/rowbytes is same as display mode, except for above HD where it's 1920 pixels for UHD modes and 2048 pixels for DCI modes
1182
     virtual BMDPixelFormat GetPixelFormat (void) = 0;
1183
     virtual BMDDisplayMode GetDisplayMode (void) = 0;
1184
 
1185
@@ -1018,9 +1033,9 @@
1186
 class BMD_PUBLIC IDeckLinkEncoderPacket : public IUnknown
1187
 {
1188
 public:
1189
-    virtual HRESULT GetBytes (/* out */ void **buffer) = 0;
1190
+    virtual HRESULT GetBytes (/* out */ void** buffer) = 0;
1191
     virtual long GetSize (void) = 0;
1192
-    virtual HRESULT GetStreamTime (/* out */ BMDTimeValue *frameTime, /* in */ BMDTimeScale timeScale) = 0;
1193
+    virtual HRESULT GetStreamTime (/* out */ BMDTimeValue* frameTime, /* in */ BMDTimeScale timeScale) = 0;
1194
     virtual BMDPacketType GetPacketType (void) = 0;
1195
 
1196
 protected:
1197
@@ -1033,9 +1048,8 @@
1198
 {
1199
 public:
1200
     virtual BMDPixelFormat GetPixelFormat (void) = 0;
1201
-    virtual HRESULT GetHardwareReferenceTimestamp (/* in */ BMDTimeScale timeScale, /* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration) = 0;
1202
-
1203
-    virtual HRESULT GetTimecode (/* in */ BMDTimecodeFormat format, /* out */ IDeckLinkTimecode **timecode) = 0;
1204
+    virtual HRESULT GetHardwareReferenceTimestamp (/* in */ BMDTimeScale timeScale, /* out */ BMDTimeValue* frameTime, /* out */ BMDTimeValue* frameDuration) = 0;
1205
+    virtual HRESULT GetTimecode (/* in */ BMDTimecodeFormat format, /* out */ IDeckLinkTimecode** timecode) = 0;
1206
 
1207
 protected:
1208
     virtual ~IDeckLinkEncoderVideoPacket () {} // call Release method to drop reference count
1209
@@ -1052,13 +1066,13 @@
1210
     virtual ~IDeckLinkEncoderAudioPacket () {} // call Release method to drop reference count
1211
 };
1212
 
1213
-/* Interface IDeckLinkH265NALPacket - Obtained through QueryInterface() on an IDeckLinkEncoderVideoPacket object */
1214
+/* Interface IDeckLinkH265NALPacket - Obtained through QueryInterface on an IDeckLinkEncoderVideoPacket object */
1215
 
1216
 class BMD_PUBLIC IDeckLinkH265NALPacket : public IDeckLinkEncoderVideoPacket
1217
 {
1218
 public:
1219
-    virtual HRESULT GetUnitType (/* out */ uint8_t *unitType) = 0;
1220
-    virtual HRESULT GetBytesNoPrefix (/* out */ void **buffer) = 0;
1221
+    virtual HRESULT GetUnitType (/* out */ uint8_t* unitType) = 0;
1222
+    virtual HRESULT GetBytesNoPrefix (/* out */ void** buffer) = 0;
1223
     virtual long GetSizeNoPrefix (void) = 0;
1224
 
1225
 protected:
1226
@@ -1071,8 +1085,8 @@
1227
 {
1228
 public:
1229
     virtual long GetSampleFrameCount (void) = 0;
1230
-    virtual HRESULT GetBytes (/* out */ void **buffer) = 0;
1231
-    virtual HRESULT GetPacketTime (/* out */ BMDTimeValue *packetTime, /* in */ BMDTimeScale timeScale) = 0;
1232
+    virtual HRESULT GetBytes (/* out */ void** buffer) = 0;
1233
+    virtual HRESULT GetPacketTime (/* out */ BMDTimeValue* packetTime, /* in */ BMDTimeScale timeScale) = 0;
1234
 
1235
 protected:
1236
     virtual ~IDeckLinkAudioInputPacket () {} // call Release method to drop reference count
1237
@@ -1083,13 +1097,13 @@
1238
 class BMD_PUBLIC IDeckLinkScreenPreviewCallback : public IUnknown
1239
 {
1240
 public:
1241
-    virtual HRESULT DrawFrame (/* in */ IDeckLinkVideoFrame *theFrame) = 0;
1242
+    virtual HRESULT DrawFrame (/* in */ IDeckLinkVideoFrame* theFrame) = 0;
1243
 
1244
 protected:
1245
     virtual ~IDeckLinkScreenPreviewCallback () {} // call Release method to drop reference count
1246
 };
1247
 
1248
-/* Interface IDeckLinkCocoaScreenPreviewCallback - Screen preview callback for Cocoa-based applications */
1249
+/* Interface IDeckLinkCocoaScreenPreviewCallback - Screen preview callback for Cocoa-based applications. Created with CreateCocoaScreenPreview */
1250
 
1251
 class BMD_PUBLIC IDeckLinkCocoaScreenPreviewCallback : public IDeckLinkScreenPreviewCallback
1252
 {
1253
@@ -1099,7 +1113,7 @@
1254
     virtual ~IDeckLinkCocoaScreenPreviewCallback () {} // call Release method to drop reference count
1255
 };
1256
 
1257
-/* Interface IDeckLinkGLScreenPreviewHelper - Created with CoCreateInstance(). */
1258
+/* Interface IDeckLinkGLScreenPreviewHelper - Created with CoCreateInstance on platforms with native COM support or from CreateOpenGLScreenPreviewHelper on other platforms. */
1259
 
1260
 class BMD_PUBLIC IDeckLinkGLScreenPreviewHelper : public IUnknown
1261
 {
1262
@@ -1109,7 +1123,7 @@
1263
 
1264
     virtual HRESULT InitializeGL (void) = 0;
1265
     virtual HRESULT PaintGL (void) = 0;
1266
-    virtual HRESULT SetFrame (/* in */ IDeckLinkVideoFrame *theFrame) = 0;
1267
+    virtual HRESULT SetFrame (/* in */ IDeckLinkVideoFrame* theFrame) = 0;
1268
     virtual HRESULT Set3DPreviewFormat (/* in */ BMD3DPreviewFormat previewFormat) = 0;
1269
 
1270
 protected:
1271
@@ -1129,22 +1143,75 @@
1272
 class BMD_PUBLIC IDeckLinkNotification : public IUnknown
1273
 {
1274
 public:
1275
-    virtual HRESULT Subscribe (/* in */ BMDNotifications topic, /* in */ IDeckLinkNotificationCallback *theCallback) = 0;
1276
-    virtual HRESULT Unsubscribe (/* in */ BMDNotifications topic, /* in */ IDeckLinkNotificationCallback *theCallback) = 0;
1277
+    virtual HRESULT Subscribe (/* in */ BMDNotifications topic, /* in */ IDeckLinkNotificationCallback* theCallback) = 0;
1278
+    virtual HRESULT Unsubscribe (/* in */ BMDNotifications topic, /* in */ IDeckLinkNotificationCallback* theCallback) = 0;
1279
+
1280
+protected:
1281
+    virtual ~IDeckLinkNotification () {} // call Release method to drop reference count
1282
+};
1283
+
1284
+/* Interface IDeckLinkProfileAttributes - Created by QueryInterface from an IDeckLinkProfile, or from IDeckLink. When queried from IDeckLink, interrogates the active profile */
1285
+
1286
+class BMD_PUBLIC IDeckLinkProfileAttributes : public IUnknown
1287
+{
1288
+public:
1289
+    virtual HRESULT GetFlag (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ bool* value) = 0;
1290
+    virtual HRESULT GetInt (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ int64_t* value) = 0;
1291
+    virtual HRESULT GetFloat (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ double* value) = 0;
1292
+    virtual HRESULT GetString (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ CFStringRef* value) = 0;
1293
+
1294
+protected:
1295
+    virtual ~IDeckLinkProfileAttributes () {} // call Release method to drop reference count
1296
 };
1297
 
1298
-/* Interface IDeckLinkAttributes - DeckLink Attribute interface */
1299
+/* Interface IDeckLinkProfileIterator - Enumerates IDeckLinkProfile interfaces */
1300
 
1301
-class BMD_PUBLIC IDeckLinkAttributes : public IUnknown
1302
+class BMD_PUBLIC IDeckLinkProfileIterator : public IUnknown
1303
 {
1304
 public:
1305
-    virtual HRESULT GetFlag (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ bool *value) = 0;
1306
-    virtual HRESULT GetInt (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ int64_t *value) = 0;
1307
-    virtual HRESULT GetFloat (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ double *value) = 0;
1308
-    virtual HRESULT GetString (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ CFStringRef *value) = 0;
1309
+    virtual HRESULT Next (/* out */ IDeckLinkProfile** profile) = 0;
1310
 
1311
 protected:
1312
-    virtual ~IDeckLinkAttributes () {} // call Release method to drop reference count
1313
+    virtual ~IDeckLinkProfileIterator () {} // call Release method to drop reference count
1314
+};
1315
+
1316
+/* Interface IDeckLinkProfile - Represents the active profile when queried from IDeckLink */
1317
+
1318
+class BMD_PUBLIC IDeckLinkProfile : public IUnknown
1319
+{
1320
+public:
1321
+    virtual HRESULT GetDevice (/* out */ IDeckLink** device) = 0;  // Device affected when this profile becomes active
1322
+    virtual HRESULT IsActive (/* out */ bool* isActive) = 0;
1323
+    virtual HRESULT SetActive (void) = 0;  // Activating a profile will also change the profile on all devices enumerated by GetPeers. Activation is not complete until IDeckLinkProfileCallback::ProfileActivated is called
1324
+    virtual HRESULT GetPeers (/* out */ IDeckLinkProfileIterator** profileIterator) = 0;   // Profiles of other devices activated with this profile
1325
+
1326
+protected:
1327
+    virtual ~IDeckLinkProfile () {} // call Release method to drop reference count
1328
+};
1329
+
1330
+/* Interface IDeckLinkProfileCallback - Receive notifications about profiles related to this device */
1331
+
1332
+class BMD_PUBLIC IDeckLinkProfileCallback : public IUnknown
1333
+{
1334
+public:
1335
+    virtual HRESULT ProfileChanging (/* in */ IDeckLinkProfile* profileToBeActivated, /* in */ bool streamsWillBeForcedToStop) = 0;    // Called before this device changes profile. User has an opportunity for teardown if streamsWillBeForcedToStop
1336
+    virtual HRESULT ProfileActivated (/* in */ IDeckLinkProfile* activatedProfile) = 0;    // Called after this device has been activated with a new profile
1337
+
1338
+protected:
1339
+    virtual ~IDeckLinkProfileCallback () {} // call Release method to drop reference count
1340
+};
1341
+
1342
+/* Interface IDeckLinkProfileManager - Created by QueryInterface from IDeckLink when a device has multiple optional profiles */
1343
+
1344
+class BMD_PUBLIC IDeckLinkProfileManager : public IUnknown
1345
+{
1346
+public:
1347
+    virtual HRESULT GetProfiles (/* out */ IDeckLinkProfileIterator** profileIterator) = 0;    // All available profiles for this device
1348
+    virtual HRESULT GetProfile (/* in */ BMDProfileID profileID, /* out */ IDeckLinkProfile** profile) = 0;
1349
+    virtual HRESULT SetCallback (/* in */ IDeckLinkProfileCallback* callback) = 0;
1350
+
1351
+protected:
1352
+    virtual ~IDeckLinkProfileManager () {} // call Release method to drop reference count
1353
 };
1354
 
1355
 /* Interface IDeckLinkStatus - DeckLink Status interface */
1356
@@ -1152,11 +1219,11 @@
1357
 class BMD_PUBLIC IDeckLinkStatus : public IUnknown
1358
 {
1359
 public:
1360
-    virtual HRESULT GetFlag (/* in */ BMDDeckLinkStatusID statusID, /* out */ bool *value) = 0;
1361
-    virtual HRESULT GetInt (/* in */ BMDDeckLinkStatusID statusID, /* out */ int64_t *value) = 0;
1362
-    virtual HRESULT GetFloat (/* in */ BMDDeckLinkStatusID statusID, /* out */ double *value) = 0;
1363
-    virtual HRESULT GetString (/* in */ BMDDeckLinkStatusID statusID, /* out */ CFStringRef *value) = 0;
1364
-    virtual HRESULT GetBytes (/* in */ BMDDeckLinkStatusID statusID, /* out */ void *buffer, /* in, out */ uint32_t *bufferSize) = 0;
1365
+    virtual HRESULT GetFlag (/* in */ BMDDeckLinkStatusID statusID, /* out */ bool* value) = 0;
1366
+    virtual HRESULT GetInt (/* in */ BMDDeckLinkStatusID statusID, /* out */ int64_t* value) = 0;
1367
+    virtual HRESULT GetFloat (/* in */ BMDDeckLinkStatusID statusID, /* out */ double* value) = 0;
1368
+    virtual HRESULT GetString (/* in */ BMDDeckLinkStatusID statusID, /* out */ CFStringRef* value) = 0;
1369
+    virtual HRESULT GetBytes (/* in */ BMDDeckLinkStatusID statusID, /* out */ void* buffer, /* in, out */ uint32_t* bufferSize) = 0;
1370
 
1371
 protected:
1372
     virtual ~IDeckLinkStatus () {} // call Release method to drop reference count
1373
@@ -1177,7 +1244,7 @@
1374
     virtual ~IDeckLinkKeyer () {} // call Release method to drop reference count
1375
 };
1376
 
1377
-/* Interface IDeckLinkVideoConversion - Created with CoCreateInstance(). */
1378
+/* Interface IDeckLinkVideoConversion - Created with CoCreateInstance. */
1379
 
1380
 class BMD_PUBLIC IDeckLinkVideoConversion : public IUnknown
1381
 {
1382
@@ -1216,16 +1283,15 @@
1383
 
1384
 extern "C" {
1385
 
1386
-    IDeckLinkIterator* BMD_PUBLIC CreateDeckLinkIteratorInstance (void);
1387
-    IDeckLinkDiscovery* BMD_PUBLIC CreateDeckLinkDiscoveryInstance (void);
1388
-    IDeckLinkAPIInformation* BMD_PUBLIC CreateDeckLinkAPIInformationInstance (void);
1389
-    IDeckLinkGLScreenPreviewHelper* BMD_PUBLIC CreateOpenGLScreenPreviewHelper (void);
1390
-    IDeckLinkCocoaScreenPreviewCallback* BMD_PUBLIC CreateCocoaScreenPreview (void* /* (NSView*) */ parentView);
1391
-    IDeckLinkVideoConversion* BMD_PUBLIC CreateVideoConversionInstance (void);
1392
-    IDeckLinkVideoFrameAncillaryPackets* BMD_PUBLIC CreateVideoFrameAncillaryPacketsInstance (void); // For use when creating a custom IDeckLinkVideoFrame without wrapping IDeckLinkOutput::CreateVideoFrame
1393
+    IDeckLinkIterator* BMD_PUBLIC CreateDeckLinkIteratorInstance(void);
1394
+    IDeckLinkDiscovery* BMD_PUBLIC CreateDeckLinkDiscoveryInstance(void);
1395
+    IDeckLinkAPIInformation* BMD_PUBLIC CreateDeckLinkAPIInformationInstance(void);
1396
+    IDeckLinkGLScreenPreviewHelper* BMD_PUBLIC CreateOpenGLScreenPreviewHelper(void);
1397
+    IDeckLinkCocoaScreenPreviewCallback* BMD_PUBLIC CreateCocoaScreenPreview(/* in */ void* /* (NSView*)*/ parentView);
1398
+    IDeckLinkVideoConversion* BMD_PUBLIC CreateVideoConversionInstance(void);
1399
+    IDeckLinkVideoFrameAncillaryPackets* BMD_PUBLIC CreateVideoFrameAncillaryPacketsInstance(void);    // For use when creating a custom IDeckLinkVideoFrame without wrapping IDeckLinkOutput::CreateVideoFrame
1400
 
1401
 }
1402
 
1403
-
1404
-#endif      // defined(__cplusplus)
1405
+#endif /* defined(__cplusplus) */
1406
 #endif /* defined(BMD_DECKLINKAPI_H) */
1407
obs-studio-26.0.2.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIConfiguration.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIConfiguration.h Changed
328
 
1
@@ -1,5 +1,5 @@
2
 /* -LICENSE-START-
3
-** Copyright (c) 2018 Blackmagic Design
4
+** Copyright (c) 2020 Blackmagic Design
5
 **
6
 ** Permission is hereby granted, free of charge, to any person or organization
7
 ** obtaining a copy of the software and accompanying documentation covered by
8
@@ -7,14 +7,14 @@
9
 ** execute, and transmit the Software, and to prepare derivative works of the
10
 ** Software, and to permit third-parties to whom the Software is furnished to
11
 ** do so, all subject to the following:
12
-** 
13
+**
14
 ** The copyright notices in the Software and this entire statement, including
15
 ** the above license grant, this restriction and the following disclaimer,
16
 ** must be included in all copies of the Software, in whole or in part, and
17
 ** all derivative works of the Software, unless such copies or derivative
18
 ** works are solely in the form of machine-executable object code generated by
19
 ** a source language processor.
20
-** 
21
+**
22
 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
 ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
 ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
25
@@ -46,8 +46,8 @@
26
 
27
 // Interface ID Declarations
28
 
29
-BMD_CONST REFIID IID_IDeckLinkConfiguration                       = /* EF90380B-4AE5-4346-9077-E288E149F129 */ {0xEF,0x90,0x38,0x0B,0x4A,0xE5,0x43,0x46,0x90,0x77,0xE2,0x88,0xE1,0x49,0xF1,0x29};
30
-BMD_CONST REFIID IID_IDeckLinkEncoderConfiguration                = /* 138050E5-C60A-4552-BF3F-0F358049327E */ {0x13,0x80,0x50,0xE5,0xC6,0x0A,0x45,0x52,0xBF,0x3F,0x0F,0x35,0x80,0x49,0x32,0x7E};
31
+BMD_CONST REFIID IID_IDeckLinkConfiguration                       = /* 912F634B-2D4E-40A4-8AAB-8D80B73F1289 */ { 0x91,0x2F,0x63,0x4B,0x2D,0x4E,0x40,0xA4,0x8A,0xAB,0x8D,0x80,0xB7,0x3F,0x12,0x89 };
32
+BMD_CONST REFIID IID_IDeckLinkEncoderConfiguration                = /* 138050E5-C60A-4552-BF3F-0F358049327E */ { 0x13,0x80,0x50,0xE5,0xC6,0x0A,0x45,0x52,0xBF,0x3F,0x0F,0x35,0x80,0x49,0x32,0x7E };
33
 
34
 /* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */
35
 
36
@@ -56,129 +56,131 @@
37
 
38
     /* Serial port Flags */
39
 
40
-    bmdDeckLinkConfigSwapSerialRxTx                              = 'ssrt',
41
+    bmdDeckLinkConfigSwapSerialRxTx                              = /* 'ssrt' */ 0x73737274,
42
 
43
     /* Video Input/Output Integers */
44
 
45
-    bmdDeckLinkConfigHDMI3DPackingFormat                         = '3dpf',
46
-    bmdDeckLinkConfigBypass                                      = 'byps',
47
-    bmdDeckLinkConfigClockTimingAdjustment                       = 'ctad',
48
-    bmdDeckLinkConfigDuplexMode                                  = 'dupx',
49
+    bmdDeckLinkConfigHDMI3DPackingFormat                         = /* '3dpf' */ 0x33647066,
50
+    bmdDeckLinkConfigBypass                                      = /* 'byps' */ 0x62797073,
51
+    bmdDeckLinkConfigClockTimingAdjustment                       = /* 'ctad' */ 0x63746164,
52
 
53
     /* Audio Input/Output Flags */
54
 
55
-    bmdDeckLinkConfigAnalogAudioConsumerLevels                   = 'aacl',
56
-
57
-    /* Video output flags */
58
-
59
-    bmdDeckLinkConfigFieldFlickerRemoval                         = 'fdfr',
60
-    bmdDeckLinkConfigHD1080p24ToHD1080i5994Conversion            = 'to59',
61
-    bmdDeckLinkConfig444SDIVideoOutput                           = '444o',
62
-    bmdDeckLinkConfigBlackVideoOutputDuringCapture               = 'bvoc',
63
-    bmdDeckLinkConfigLowLatencyVideoOutput                       = 'llvo',
64
-    bmdDeckLinkConfigDownConversionOnAllAnalogOutput             = 'caao',
65
-    bmdDeckLinkConfigSMPTELevelAOutput                           = 'smta',
66
-    bmdDeckLinkConfigRec2020Output                               = 'rec2', // Ensure output is Rec.2020 colorspace
67
-    bmdDeckLinkConfigQuadLinkSDIVideoOutputSquareDivisionSplit   = 'SDQS',
68
+    bmdDeckLinkConfigAnalogAudioConsumerLevels                   = /* 'aacl' */ 0x6161636C,
69
+    bmdDeckLinkConfigSwapHDMICh3AndCh4OnInput                    = /* 'hi34' */ 0x68693334,
70
+    bmdDeckLinkConfigSwapHDMICh3AndCh4OnOutput                   = /* 'ho34' */ 0x686F3334,
71
 
72
     /* Video Output Flags */
73
 
74
-    bmdDeckLinkConfigOutput1080pAsPsF                            = 'pfpr',
75
+    bmdDeckLinkConfigFieldFlickerRemoval                         = /* 'fdfr' */ 0x66646672,
76
+    bmdDeckLinkConfigHD1080p24ToHD1080i5994Conversion            = /* 'to59' */ 0x746F3539,
77
+    bmdDeckLinkConfig444SDIVideoOutput                           = /* '444o' */ 0x3434346F,
78
+    bmdDeckLinkConfigBlackVideoOutputDuringCapture               = /* 'bvoc' */ 0x62766F63,
79
+    bmdDeckLinkConfigLowLatencyVideoOutput                       = /* 'llvo' */ 0x6C6C766F,
80
+    bmdDeckLinkConfigDownConversionOnAllAnalogOutput             = /* 'caao' */ 0x6361616F,
81
+    bmdDeckLinkConfigSMPTELevelAOutput                           = /* 'smta' */ 0x736D7461,
82
+    bmdDeckLinkConfigRec2020Output                               = /* 'rec2' */ 0x72656332,    // Ensure output is Rec.2020 colorspace
83
+    bmdDeckLinkConfigQuadLinkSDIVideoOutputSquareDivisionSplit   = /* 'SDQS' */ 0x53445153,
84
+    bmdDeckLinkConfigOutput1080pAsPsF                            = /* 'pfpr' */ 0x70667072,
85
 
86
     /* Video Output Integers */
87
 
88
-    bmdDeckLinkConfigVideoOutputConnection                       = 'vocn',
89
-    bmdDeckLinkConfigVideoOutputConversionMode                   = 'vocm',
90
-    bmdDeckLinkConfigAnalogVideoOutputFlags                      = 'avof',
91
-    bmdDeckLinkConfigReferenceInputTimingOffset                  = 'glot',
92
-    bmdDeckLinkConfigVideoOutputIdleOperation                    = 'voio',
93
-    bmdDeckLinkConfigDefaultVideoOutputMode                      = 'dvom',
94
-    bmdDeckLinkConfigDefaultVideoOutputModeFlags                 = 'dvof',
95
-    bmdDeckLinkConfigSDIOutputLinkConfiguration                  = 'solc',
96
+    bmdDeckLinkConfigVideoOutputConnection                       = /* 'vocn' */ 0x766F636E,
97
+    bmdDeckLinkConfigVideoOutputConversionMode                   = /* 'vocm' */ 0x766F636D,
98
+    bmdDeckLinkConfigAnalogVideoOutputFlags                      = /* 'avof' */ 0x61766F66,
99
+    bmdDeckLinkConfigReferenceInputTimingOffset                  = /* 'glot' */ 0x676C6F74,
100
+    bmdDeckLinkConfigVideoOutputIdleOperation                    = /* 'voio' */ 0x766F696F,
101
+    bmdDeckLinkConfigDefaultVideoOutputMode                      = /* 'dvom' */ 0x64766F6D,
102
+    bmdDeckLinkConfigDefaultVideoOutputModeFlags                 = /* 'dvof' */ 0x64766F66,
103
+    bmdDeckLinkConfigSDIOutputLinkConfiguration                  = /* 'solc' */ 0x736F6C63,
104
+    bmdDeckLinkConfigHDMITimecodePacking                         = /* 'htpk' */ 0x6874706B,
105
+    bmdDeckLinkConfigPlaybackGroup                               = /* 'plgr' */ 0x706C6772,
106
 
107
     /* Video Output Floats */
108
 
109
-    bmdDeckLinkConfigVideoOutputComponentLumaGain                = 'oclg',
110
-    bmdDeckLinkConfigVideoOutputComponentChromaBlueGain          = 'occb',
111
-    bmdDeckLinkConfigVideoOutputComponentChromaRedGain           = 'occr',
112
-    bmdDeckLinkConfigVideoOutputCompositeLumaGain                = 'oilg',
113
-    bmdDeckLinkConfigVideoOutputCompositeChromaGain              = 'oicg',
114
-    bmdDeckLinkConfigVideoOutputSVideoLumaGain                   = 'oslg',
115
-    bmdDeckLinkConfigVideoOutputSVideoChromaGain                 = 'oscg',
116
+    bmdDeckLinkConfigVideoOutputComponentLumaGain                = /* 'oclg' */ 0x6F636C67,
117
+    bmdDeckLinkConfigVideoOutputComponentChromaBlueGain          = /* 'occb' */ 0x6F636362,
118
+    bmdDeckLinkConfigVideoOutputComponentChromaRedGain           = /* 'occr' */ 0x6F636372,
119
+    bmdDeckLinkConfigVideoOutputCompositeLumaGain                = /* 'oilg' */ 0x6F696C67,
120
+    bmdDeckLinkConfigVideoOutputCompositeChromaGain              = /* 'oicg' */ 0x6F696367,
121
+    bmdDeckLinkConfigVideoOutputSVideoLumaGain                   = /* 'oslg' */ 0x6F736C67,
122
+    bmdDeckLinkConfigVideoOutputSVideoChromaGain                 = /* 'oscg' */ 0x6F736367,
123
 
124
     /* Video Input Flags */
125
 
126
-    bmdDeckLinkConfigVideoInputScanning                          = 'visc', // Applicable to H264 Pro Recorder only
127
-    bmdDeckLinkConfigUseDedicatedLTCInput                        = 'dltc', // Use timecode from LTC input instead of SDI stream
128
-    bmdDeckLinkConfigSDIInput3DPayloadOverride                   = '3dds',
129
-
130
-    /* Video Input Flags */
131
-
132
-    bmdDeckLinkConfigCapture1080pAsPsF                           = 'cfpr',
133
+    bmdDeckLinkConfigVideoInputScanning                          = /* 'visc' */ 0x76697363,    // Applicable to H264 Pro Recorder only
134
+    bmdDeckLinkConfigUseDedicatedLTCInput                        = /* 'dltc' */ 0x646C7463,    // Use timecode from LTC input instead of SDI stream
135
+    bmdDeckLinkConfigSDIInput3DPayloadOverride                   = /* '3dds' */ 0x33646473,
136
+    bmdDeckLinkConfigCapture1080pAsPsF                           = /* 'cfpr' */ 0x63667072,
137
 
138
     /* Video Input Integers */
139
 
140
-    bmdDeckLinkConfigVideoInputConnection                        = 'vicn',
141
-    bmdDeckLinkConfigAnalogVideoInputFlags                       = 'avif',
142
-    bmdDeckLinkConfigVideoInputConversionMode                    = 'vicm',
143
-    bmdDeckLinkConfig32PulldownSequenceInitialTimecodeFrame      = 'pdif',
144
-    bmdDeckLinkConfigVANCSourceLine1Mapping                      = 'vsl1',
145
-    bmdDeckLinkConfigVANCSourceLine2Mapping                      = 'vsl2',
146
-    bmdDeckLinkConfigVANCSourceLine3Mapping                      = 'vsl3',
147
-    bmdDeckLinkConfigCapturePassThroughMode                      = 'cptm',
148
+    bmdDeckLinkConfigVideoInputConnection                        = /* 'vicn' */ 0x7669636E,
149
+    bmdDeckLinkConfigAnalogVideoInputFlags                       = /* 'avif' */ 0x61766966,
150
+    bmdDeckLinkConfigVideoInputConversionMode                    = /* 'vicm' */ 0x7669636D,
151
+    bmdDeckLinkConfig32PulldownSequenceInitialTimecodeFrame      = /* 'pdif' */ 0x70646966,
152
+    bmdDeckLinkConfigVANCSourceLine1Mapping                      = /* 'vsl1' */ 0x76736C31,
153
+    bmdDeckLinkConfigVANCSourceLine2Mapping                      = /* 'vsl2' */ 0x76736C32,
154
+    bmdDeckLinkConfigVANCSourceLine3Mapping                      = /* 'vsl3' */ 0x76736C33,
155
+    bmdDeckLinkConfigCapturePassThroughMode                      = /* 'cptm' */ 0x6370746D,
156
+    bmdDeckLinkConfigCaptureGroup                                = /* 'cpgr' */ 0x63706772,
157
 
158
     /* Video Input Floats */
159
 
160
-    bmdDeckLinkConfigVideoInputComponentLumaGain                 = 'iclg',
161
-    bmdDeckLinkConfigVideoInputComponentChromaBlueGain           = 'iccb',
162
-    bmdDeckLinkConfigVideoInputComponentChromaRedGain            = 'iccr',
163
-    bmdDeckLinkConfigVideoInputCompositeLumaGain                 = 'iilg',
164
-    bmdDeckLinkConfigVideoInputCompositeChromaGain               = 'iicg',
165
-    bmdDeckLinkConfigVideoInputSVideoLumaGain                    = 'islg',
166
-    bmdDeckLinkConfigVideoInputSVideoChromaGain                  = 'iscg',
167
+    bmdDeckLinkConfigVideoInputComponentLumaGain                 = /* 'iclg' */ 0x69636C67,
168
+    bmdDeckLinkConfigVideoInputComponentChromaBlueGain           = /* 'iccb' */ 0x69636362,
169
+    bmdDeckLinkConfigVideoInputComponentChromaRedGain            = /* 'iccr' */ 0x69636372,
170
+    bmdDeckLinkConfigVideoInputCompositeLumaGain                 = /* 'iilg' */ 0x69696C67,
171
+    bmdDeckLinkConfigVideoInputCompositeChromaGain               = /* 'iicg' */ 0x69696367,
172
+    bmdDeckLinkConfigVideoInputSVideoLumaGain                    = /* 'islg' */ 0x69736C67,
173
+    bmdDeckLinkConfigVideoInputSVideoChromaGain                  = /* 'iscg' */ 0x69736367,
174
+
175
+    /* Keying Integers */
176
+
177
+    bmdDeckLinkConfigInternalKeyingAncillaryDataSource           = /* 'ikas' */ 0x696B6173,
178
 
179
     /* Audio Input Flags */
180
 
181
-    bmdDeckLinkConfigMicrophonePhantomPower                      = 'mphp',
182
+    bmdDeckLinkConfigMicrophonePhantomPower                      = /* 'mphp' */ 0x6D706870,
183
 
184
     /* Audio Input Integers */
185
 
186
-    bmdDeckLinkConfigAudioInputConnection                        = 'aicn',
187
+    bmdDeckLinkConfigAudioInputConnection                        = /* 'aicn' */ 0x6169636E,
188
 
189
     /* Audio Input Floats */
190
 
191
-    bmdDeckLinkConfigAnalogAudioInputScaleChannel1               = 'ais1',
192
-    bmdDeckLinkConfigAnalogAudioInputScaleChannel2               = 'ais2',
193
-    bmdDeckLinkConfigAnalogAudioInputScaleChannel3               = 'ais3',
194
-    bmdDeckLinkConfigAnalogAudioInputScaleChannel4               = 'ais4',
195
-    bmdDeckLinkConfigDigitalAudioInputScale                      = 'dais',
196
-    bmdDeckLinkConfigMicrophoneInputGain                         = 'micg',
197
+    bmdDeckLinkConfigAnalogAudioInputScaleChannel1               = /* 'ais1' */ 0x61697331,
198
+    bmdDeckLinkConfigAnalogAudioInputScaleChannel2               = /* 'ais2' */ 0x61697332,
199
+    bmdDeckLinkConfigAnalogAudioInputScaleChannel3               = /* 'ais3' */ 0x61697333,
200
+    bmdDeckLinkConfigAnalogAudioInputScaleChannel4               = /* 'ais4' */ 0x61697334,
201
+    bmdDeckLinkConfigDigitalAudioInputScale                      = /* 'dais' */ 0x64616973,
202
+    bmdDeckLinkConfigMicrophoneInputGain                         = /* 'micg' */ 0x6D696367,
203
 
204
     /* Audio Output Integers */
205
 
206
-    bmdDeckLinkConfigAudioOutputAESAnalogSwitch                  = 'aoaa',
207
+    bmdDeckLinkConfigAudioOutputAESAnalogSwitch                  = /* 'aoaa' */ 0x616F6161,
208
 
209
     /* Audio Output Floats */
210
 
211
-    bmdDeckLinkConfigAnalogAudioOutputScaleChannel1              = 'aos1',
212
-    bmdDeckLinkConfigAnalogAudioOutputScaleChannel2              = 'aos2',
213
-    bmdDeckLinkConfigAnalogAudioOutputScaleChannel3              = 'aos3',
214
-    bmdDeckLinkConfigAnalogAudioOutputScaleChannel4              = 'aos4',
215
-    bmdDeckLinkConfigDigitalAudioOutputScale                     = 'daos',
216
-    bmdDeckLinkConfigHeadphoneVolume                             = 'hvol',
217
+    bmdDeckLinkConfigAnalogAudioOutputScaleChannel1              = /* 'aos1' */ 0x616F7331,
218
+    bmdDeckLinkConfigAnalogAudioOutputScaleChannel2              = /* 'aos2' */ 0x616F7332,
219
+    bmdDeckLinkConfigAnalogAudioOutputScaleChannel3              = /* 'aos3' */ 0x616F7333,
220
+    bmdDeckLinkConfigAnalogAudioOutputScaleChannel4              = /* 'aos4' */ 0x616F7334,
221
+    bmdDeckLinkConfigDigitalAudioOutputScale                     = /* 'daos' */ 0x64616F73,
222
+    bmdDeckLinkConfigHeadphoneVolume                             = /* 'hvol' */ 0x68766F6C,
223
 
224
     /* Device Information Strings */
225
 
226
-    bmdDeckLinkConfigDeviceInformationLabel                      = 'dila',
227
-    bmdDeckLinkConfigDeviceInformationSerialNumber               = 'disn',
228
-    bmdDeckLinkConfigDeviceInformationCompany                    = 'dico',
229
-    bmdDeckLinkConfigDeviceInformationPhone                      = 'diph',
230
-    bmdDeckLinkConfigDeviceInformationEmail                      = 'diem',
231
-    bmdDeckLinkConfigDeviceInformationDate                       = 'dida',
232
+    bmdDeckLinkConfigDeviceInformationLabel                      = /* 'dila' */ 0x64696C61,
233
+    bmdDeckLinkConfigDeviceInformationSerialNumber               = /* 'disn' */ 0x6469736E,
234
+    bmdDeckLinkConfigDeviceInformationCompany                    = /* 'dico' */ 0x6469636F,
235
+    bmdDeckLinkConfigDeviceInformationPhone                      = /* 'diph' */ 0x64697068,
236
+    bmdDeckLinkConfigDeviceInformationEmail                      = /* 'diem' */ 0x6469656D,
237
+    bmdDeckLinkConfigDeviceInformationDate                       = /* 'dida' */ 0x64696461,
238
 
239
     /* Deck Control Integers */
240
 
241
-    bmdDeckLinkConfigDeckControlConnection                       = 'dcco'
242
+    bmdDeckLinkConfigDeckControlConnection                       = /* 'dcco' */ 0x6463636F
243
 };
244
 
245
 /* Enum BMDDeckLinkEncoderConfigurationID - DeckLink Encoder Configuration ID */
246
@@ -188,27 +190,29 @@
247
 
248
     /* Video Encoder Integers */
249
 
250
-    bmdDeckLinkEncoderConfigPreferredBitDepth                    = 'epbr',
251
-    bmdDeckLinkEncoderConfigFrameCodingMode                      = 'efcm',
252
+    bmdDeckLinkEncoderConfigPreferredBitDepth                    = /* 'epbr' */ 0x65706272,
253
+    bmdDeckLinkEncoderConfigFrameCodingMode                      = /* 'efcm' */ 0x6566636D,
254
 
255
     /* HEVC/H.265 Encoder Integers */
256
 
257
-    bmdDeckLinkEncoderConfigH265TargetBitrate                    = 'htbr',
258
+    bmdDeckLinkEncoderConfigH265TargetBitrate                    = /* 'htbr' */ 0x68746272,
259
 
260
     /* DNxHR/DNxHD Compression ID */
261
 
262
-    bmdDeckLinkEncoderConfigDNxHRCompressionID                   = 'dcid',
263
+    bmdDeckLinkEncoderConfigDNxHRCompressionID                   = /* 'dcid' */ 0x64636964,
264
 
265
     /* DNxHR/DNxHD Level */
266
 
267
-    bmdDeckLinkEncoderConfigDNxHRLevel                           = 'dlev',
268
+    bmdDeckLinkEncoderConfigDNxHRLevel                           = /* 'dlev' */ 0x646C6576,
269
 
270
     /* Encoded Sample Decriptions */
271
 
272
-    bmdDeckLinkEncoderConfigMPEG4SampleDescription               = 'stsE', // Full MPEG4 sample description (aka SampleEntry of an 'stsd' atom-box). Useful for MediaFoundation, QuickTime, MKV and more
273
-    bmdDeckLinkEncoderConfigMPEG4CodecSpecificDesc               = 'esds'  // Sample description extensions only (atom stream, each with size and fourCC header). Useful for AVFoundation, VideoToolbox, MKV and more
274
+    bmdDeckLinkEncoderConfigMPEG4SampleDescription               = /* 'stsE' */ 0x73747345,    // Full MPEG4 sample description (aka SampleEntry of an 'stsd' atom-box). Useful for MediaFoundation, QuickTime, MKV and more
275
+    bmdDeckLinkEncoderConfigMPEG4CodecSpecificDesc               = /* 'esds' */ 0x65736473 // Sample description extensions only (atom stream, each with size and fourCC header). Useful for AVFoundation, VideoToolbox, MKV and more
276
 };
277
 
278
+#if defined(__cplusplus)
279
+
280
 // Forward Declarations
281
 
282
 class IDeckLinkConfiguration;
283
@@ -220,13 +224,13 @@
284
 {
285
 public:
286
     virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
287
-    virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool *value) = 0;
288
+    virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool* value) = 0;
289
     virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
290
-    virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t *value) = 0;
291
+    virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t* value) = 0;
292
     virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
293
-    virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double *value) = 0;
294
+    virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double* value) = 0;
295
     virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ CFStringRef value) = 0;
296
-    virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ CFStringRef *value) = 0;
297
+    virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ CFStringRef* value) = 0;
298
     virtual HRESULT WriteConfigurationToPreferences (void) = 0;
299
 
300
 protected:
301
@@ -239,14 +243,14 @@
302
 {
303
 public:
304
     virtual HRESULT SetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ bool value) = 0;
305
-    virtual HRESULT GetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ bool *value) = 0;
306
+    virtual HRESULT GetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ bool* value) = 0;
307
     virtual HRESULT SetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ int64_t value) = 0;
308
-    virtual HRESULT GetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ int64_t *value) = 0;
309
+    virtual HRESULT GetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ int64_t* value) = 0;
310
     virtual HRESULT SetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ double value) = 0;
311
-    virtual HRESULT GetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ double *value) = 0;
312
+    virtual HRESULT GetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ double* value) = 0;
313
     virtual HRESULT SetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ CFStringRef value) = 0;
314
-    virtual HRESULT GetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ CFStringRef *value) = 0;
315
-    virtual HRESULT GetBytes (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ void *buffer /* optional */, /* in, out */ uint32_t *bufferSize) = 0;
316
+    virtual HRESULT GetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ CFStringRef* value) = 0;
317
+    virtual HRESULT GetBytes (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ void* buffer /* optional */, /* in, out */ uint32_t* bufferSize) = 0;
318
 
319
 protected:
320
     virtual ~IDeckLinkEncoderConfiguration () {} // call Release method to drop reference count
321
@@ -259,5 +263,5 @@
322
 
323
 }
324
 
325
-
326
+#endif /* defined(__cplusplus) */
327
 #endif /* defined(BMD_DECKLINKAPICONFIGURATION_H) */
328
obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIConfiguration_v10_11.h Added
73
 
1
@@ -0,0 +1,71 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2017 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPICONFIGURATION_v10_11_H
30
+#define BMD_DECKLINKAPICONFIGURATION_v10_11_H
31
+
32
+#include "DeckLinkAPIConfiguration.h"
33
+
34
+// Interface ID Declarations
35
+
36
+BMD_CONST REFIID IID_IDeckLinkConfiguration_v10_11                   = /* EF90380B-4AE5-4346-9077-E288E149F129 */ {0xEF,0x90,0x38,0x0B,0x4A,0xE5,0x43,0x46,0x90,0x77,0xE2,0x88,0xE1,0x49,0xF1,0x29};
37
+
38
+/* Enum BMDDeckLinkConfigurationID_v10_11 - DeckLink Configuration ID */
39
+
40
+typedef uint32_t BMDDeckLinkConfigurationID_v10_11;
41
+enum _BMDDeckLinkConfigurationID_v10_11 {
42
+
43
+    /* Video Input/Output Integers */
44
+
45
+    bmdDeckLinkConfigDuplexMode_v10_11                              = 'dupx',
46
+};
47
+
48
+// Forward Declarations
49
+
50
+class IDeckLinkConfiguration_v10_11;
51
+
52
+/* Interface IDeckLinkConfiguration_v10_11 - DeckLink Configuration interface */
53
+
54
+class IDeckLinkConfiguration_v10_11 : public IUnknown
55
+{
56
+public:
57
+    virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
58
+    virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool *value) = 0;
59
+    virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
60
+    virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t *value) = 0;
61
+    virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
62
+    virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double *value) = 0;
63
+    virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ CFStringRef value) = 0;
64
+    virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ CFStringRef *value) = 0;
65
+    virtual HRESULT WriteConfigurationToPreferences (void) = 0;
66
+
67
+protected:
68
+    virtual ~IDeckLinkConfiguration_v10_11 () {} // call Release method to drop reference count
69
+};
70
+
71
+
72
+#endif /* defined(BMD_DECKLINKAPICONFIGURATION_v10_11_H) */
73
obs-studio-26.0.2.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIDeckControl.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIDeckControl.h Changed
212
 
1
@@ -1,5 +1,5 @@
2
 /* -LICENSE-START-
3
-** Copyright (c) 2018 Blackmagic Design
4
+** Copyright (c) 2020 Blackmagic Design
5
 **
6
 ** Permission is hereby granted, free of charge, to any person or organization
7
 ** obtaining a copy of the software and accompanying documentation covered by
8
@@ -7,14 +7,14 @@
9
 ** execute, and transmit the Software, and to prepare derivative works of the
10
 ** Software, and to permit third-parties to whom the Software is furnished to
11
 ** do so, all subject to the following:
12
-** 
13
+**
14
 ** The copyright notices in the Software and this entire statement, including
15
 ** the above license grant, this restriction and the following disclaimer,
16
 ** must be included in all copies of the Software, in whole or in part, and
17
 ** all derivative works of the Software, unless such copies or derivative
18
 ** works are solely in the form of machine-executable object code generated by
19
 ** a source language processor.
20
-** 
21
+**
22
 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
 ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
 ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
25
@@ -46,49 +46,49 @@
26
 
27
 // Interface ID Declarations
28
 
29
-BMD_CONST REFIID IID_IDeckLinkDeckControlStatusCallback           = /* 53436FFB-B434-4906-BADC-AE3060FFE8EF */ {0x53,0x43,0x6F,0xFB,0xB4,0x34,0x49,0x06,0xBA,0xDC,0xAE,0x30,0x60,0xFF,0xE8,0xEF};
30
-BMD_CONST REFIID IID_IDeckLinkDeckControl                         = /* 8E1C3ACE-19C7-4E00-8B92-D80431D958BE */ {0x8E,0x1C,0x3A,0xCE,0x19,0xC7,0x4E,0x00,0x8B,0x92,0xD8,0x04,0x31,0xD9,0x58,0xBE};
31
+BMD_CONST REFIID IID_IDeckLinkDeckControlStatusCallback           = /* 53436FFB-B434-4906-BADC-AE3060FFE8EF */ { 0x53,0x43,0x6F,0xFB,0xB4,0x34,0x49,0x06,0xBA,0xDC,0xAE,0x30,0x60,0xFF,0xE8,0xEF };
32
+BMD_CONST REFIID IID_IDeckLinkDeckControl                         = /* 8E1C3ACE-19C7-4E00-8B92-D80431D958BE */ { 0x8E,0x1C,0x3A,0xCE,0x19,0xC7,0x4E,0x00,0x8B,0x92,0xD8,0x04,0x31,0xD9,0x58,0xBE };
33
 
34
 /* Enum BMDDeckControlMode - DeckControl mode */
35
 
36
 typedef uint32_t BMDDeckControlMode;
37
 enum _BMDDeckControlMode {
38
-    bmdDeckControlNotOpened                                      = 'ntop',
39
-    bmdDeckControlVTRControlMode                                 = 'vtrc',
40
-    bmdDeckControlExportMode                                     = 'expm',
41
-    bmdDeckControlCaptureMode                                    = 'capm'
42
+    bmdDeckControlNotOpened                                      = /* 'ntop' */ 0x6E746F70,
43
+    bmdDeckControlVTRControlMode                                 = /* 'vtrc' */ 0x76747263,
44
+    bmdDeckControlExportMode                                     = /* 'expm' */ 0x6578706D,
45
+    bmdDeckControlCaptureMode                                    = /* 'capm' */ 0x6361706D
46
 };
47
 
48
 /* Enum BMDDeckControlEvent - DeckControl event */
49
 
50
 typedef uint32_t BMDDeckControlEvent;
51
 enum _BMDDeckControlEvent {
52
-    bmdDeckControlAbortedEvent                                   = 'abte', // This event is triggered when a capture or edit-to-tape operation is aborted.
53
+    bmdDeckControlAbortedEvent                                   = /* 'abte' */ 0x61627465,    // This event is triggered when a capture or edit-to-tape operation is aborted.
54
 
55
     /* Export-To-Tape events */
56
 
57
-    bmdDeckControlPrepareForExportEvent                          = 'pfee', // This event is triggered a few frames before reaching the in-point. IDeckLinkInput::StartScheduledPlayback() should be called at this point.
58
-    bmdDeckControlExportCompleteEvent                            = 'exce', // This event is triggered a few frames after reaching the out-point. At this point, it is safe to stop playback.
59
+    bmdDeckControlPrepareForExportEvent                          = /* 'pfee' */ 0x70666565,    // This event is triggered a few frames before reaching the in-point. IDeckLinkInput::StartScheduledPlayback should be called at this point.
60
+    bmdDeckControlExportCompleteEvent                            = /* 'exce' */ 0x65786365,    // This event is triggered a few frames after reaching the out-point. At this point, it is safe to stop playback. Upon reception of this event the deck's control mode is set back to bmdDeckControlVTRControlMode.
61
 
62
     /* Capture events */
63
 
64
-    bmdDeckControlPrepareForCaptureEvent                         = 'pfce', // This event is triggered a few frames before reaching the in-point. The serial timecode attached to IDeckLinkVideoInputFrames is now valid.
65
-    bmdDeckControlCaptureCompleteEvent                           = 'ccev'  // This event is triggered a few frames after reaching the out-point.
66
+    bmdDeckControlPrepareForCaptureEvent                         = /* 'pfce' */ 0x70666365,    // This event is triggered a few frames before reaching the in-point. The serial timecode attached to IDeckLinkVideoInputFrames is now valid.
67
+    bmdDeckControlCaptureCompleteEvent                           = /* 'ccev' */ 0x63636576 // This event is triggered a few frames after reaching the out-point. Upon reception of this event the deck's control mode is set back to bmdDeckControlVTRControlMode.
68
 };
69
 
70
 /* Enum BMDDeckControlVTRControlState - VTR Control state */
71
 
72
 typedef uint32_t BMDDeckControlVTRControlState;
73
 enum _BMDDeckControlVTRControlState {
74
-    bmdDeckControlNotInVTRControlMode                            = 'nvcm',
75
-    bmdDeckControlVTRControlPlaying                              = 'vtrp',
76
-    bmdDeckControlVTRControlRecording                            = 'vtrr',
77
-    bmdDeckControlVTRControlStill                                = 'vtra',
78
-    bmdDeckControlVTRControlShuttleForward                       = 'vtsf',
79
-    bmdDeckControlVTRControlShuttleReverse                       = 'vtsr',
80
-    bmdDeckControlVTRControlJogForward                           = 'vtjf',
81
-    bmdDeckControlVTRControlJogReverse                           = 'vtjr',
82
-    bmdDeckControlVTRControlStopped                              = 'vtro'
83
+    bmdDeckControlNotInVTRControlMode                            = /* 'nvcm' */ 0x6E76636D,
84
+    bmdDeckControlVTRControlPlaying                              = /* 'vtrp' */ 0x76747270,
85
+    bmdDeckControlVTRControlRecording                            = /* 'vtrr' */ 0x76747272,
86
+    bmdDeckControlVTRControlStill                                = /* 'vtra' */ 0x76747261,
87
+    bmdDeckControlVTRControlShuttleForward                       = /* 'vtsf' */ 0x76747366,
88
+    bmdDeckControlVTRControlShuttleReverse                       = /* 'vtsr' */ 0x76747372,
89
+    bmdDeckControlVTRControlJogForward                           = /* 'vtjf' */ 0x76746A66,
90
+    bmdDeckControlVTRControlJogReverse                           = /* 'vtjr' */ 0x76746A72,
91
+    bmdDeckControlVTRControlStopped                              = /* 'vtro' */ 0x7674726F
92
 };
93
 
94
 /* Enum BMDDeckControlStatusFlags - Deck Control status flags */
95
@@ -128,24 +128,26 @@
96
 
97
 typedef uint32_t BMDDeckControlError;
98
 enum _BMDDeckControlError {
99
-    bmdDeckControlNoError                                        = 'noer',
100
-    bmdDeckControlModeError                                      = 'moer',
101
-    bmdDeckControlMissedInPointError                             = 'mier',
102
-    bmdDeckControlDeckTimeoutError                               = 'dter',
103
-    bmdDeckControlCommandFailedError                             = 'cfer',
104
-    bmdDeckControlDeviceAlreadyOpenedError                       = 'dalo',
105
-    bmdDeckControlFailedToOpenDeviceError                        = 'fder',
106
-    bmdDeckControlInLocalModeError                               = 'lmer',
107
-    bmdDeckControlEndOfTapeError                                 = 'eter',
108
-    bmdDeckControlUserAbortError                                 = 'uaer',
109
-    bmdDeckControlNoTapeInDeckError                              = 'nter',
110
-    bmdDeckControlNoVideoFromCardError                           = 'nvfc',
111
-    bmdDeckControlNoCommunicationError                           = 'ncom',
112
-    bmdDeckControlBufferTooSmallError                            = 'btsm',
113
-    bmdDeckControlBadChecksumError                               = 'chks',
114
-    bmdDeckControlUnknownError                                   = 'uner'
115
+    bmdDeckControlNoError                                        = /* 'noer' */ 0x6E6F6572,
116
+    bmdDeckControlModeError                                      = /* 'moer' */ 0x6D6F6572,
117
+    bmdDeckControlMissedInPointError                             = /* 'mier' */ 0x6D696572,
118
+    bmdDeckControlDeckTimeoutError                               = /* 'dter' */ 0x64746572,
119
+    bmdDeckControlCommandFailedError                             = /* 'cfer' */ 0x63666572,
120
+    bmdDeckControlDeviceAlreadyOpenedError                       = /* 'dalo' */ 0x64616C6F,
121
+    bmdDeckControlFailedToOpenDeviceError                        = /* 'fder' */ 0x66646572,
122
+    bmdDeckControlInLocalModeError                               = /* 'lmer' */ 0x6C6D6572,
123
+    bmdDeckControlEndOfTapeError                                 = /* 'eter' */ 0x65746572,
124
+    bmdDeckControlUserAbortError                                 = /* 'uaer' */ 0x75616572,
125
+    bmdDeckControlNoTapeInDeckError                              = /* 'nter' */ 0x6E746572,
126
+    bmdDeckControlNoVideoFromCardError                           = /* 'nvfc' */ 0x6E766663,
127
+    bmdDeckControlNoCommunicationError                           = /* 'ncom' */ 0x6E636F6D,
128
+    bmdDeckControlBufferTooSmallError                            = /* 'btsm' */ 0x6274736D,
129
+    bmdDeckControlBadChecksumError                               = /* 'chks' */ 0x63686B73,
130
+    bmdDeckControlUnknownError                                   = /* 'uner' */ 0x756E6572
131
 };
132
 
133
+#if defined(__cplusplus)
134
+
135
 // Forward Declarations
136
 
137
 class IDeckLinkDeckControlStatusCallback;
138
@@ -170,39 +172,39 @@
139
 class BMD_PUBLIC IDeckLinkDeckControl : public IUnknown
140
 {
141
 public:
142
-    virtual HRESULT Open (/* in */ BMDTimeScale timeScale, /* in */ BMDTimeValue timeValue, /* in */ bool timecodeIsDropFrame, /* out */ BMDDeckControlError *error) = 0;
143
+    virtual HRESULT Open (/* in */ BMDTimeScale timeScale, /* in */ BMDTimeValue timeValue, /* in */ bool timecodeIsDropFrame, /* out */ BMDDeckControlError* error) = 0;
144
     virtual HRESULT Close (/* in */ bool standbyOn) = 0;
145
-    virtual HRESULT GetCurrentState (/* out */ BMDDeckControlMode *mode, /* out */ BMDDeckControlVTRControlState *vtrControlState, /* out */ BMDDeckControlStatusFlags *flags) = 0;
146
+    virtual HRESULT GetCurrentState (/* out */ BMDDeckControlMode* mode, /* out */ BMDDeckControlVTRControlState* vtrControlState, /* out */ BMDDeckControlStatusFlags* flags) = 0;
147
     virtual HRESULT SetStandby (/* in */ bool standbyOn) = 0;
148
-    virtual HRESULT SendCommand (/* in */ uint8_t *inBuffer, /* in */ uint32_t inBufferSize, /* out */ uint8_t *outBuffer, /* out */ uint32_t *outDataSize, /* in */ uint32_t outBufferSize, /* out */ BMDDeckControlError *error) = 0;
149
-    virtual HRESULT Play (/* out */ BMDDeckControlError *error) = 0;
150
-    virtual HRESULT Stop (/* out */ BMDDeckControlError *error) = 0;
151
-    virtual HRESULT TogglePlayStop (/* out */ BMDDeckControlError *error) = 0;
152
-    virtual HRESULT Eject (/* out */ BMDDeckControlError *error) = 0;
153
-    virtual HRESULT GoToTimecode (/* in */ BMDTimecodeBCD timecode, /* out */ BMDDeckControlError *error) = 0;
154
-    virtual HRESULT FastForward (/* in */ bool viewTape, /* out */ BMDDeckControlError *error) = 0;
155
-    virtual HRESULT Rewind (/* in */ bool viewTape, /* out */ BMDDeckControlError *error) = 0;
156
-    virtual HRESULT StepForward (/* out */ BMDDeckControlError *error) = 0;
157
-    virtual HRESULT StepBack (/* out */ BMDDeckControlError *error) = 0;
158
-    virtual HRESULT Jog (/* in */ double rate, /* out */ BMDDeckControlError *error) = 0;
159
-    virtual HRESULT Shuttle (/* in */ double rate, /* out */ BMDDeckControlError *error) = 0;
160
-    virtual HRESULT GetTimecodeString (/* out */ CFStringRef *currentTimeCode, /* out */ BMDDeckControlError *error) = 0;
161
-    virtual HRESULT GetTimecode (/* out */ IDeckLinkTimecode **currentTimecode, /* out */ BMDDeckControlError *error) = 0;
162
-    virtual HRESULT GetTimecodeBCD (/* out */ BMDTimecodeBCD *currentTimecode, /* out */ BMDDeckControlError *error) = 0;
163
+    virtual HRESULT SendCommand (/* in */ uint8_t* inBuffer, /* in */ uint32_t inBufferSize, /* out */ uint8_t* outBuffer, /* out */ uint32_t* outDataSize, /* in */ uint32_t outBufferSize, /* out */ BMDDeckControlError* error) = 0;
164
+    virtual HRESULT Play (/* out */ BMDDeckControlError* error) = 0;
165
+    virtual HRESULT Stop (/* out */ BMDDeckControlError* error) = 0;
166
+    virtual HRESULT TogglePlayStop (/* out */ BMDDeckControlError* error) = 0;
167
+    virtual HRESULT Eject (/* out */ BMDDeckControlError* error) = 0;
168
+    virtual HRESULT GoToTimecode (/* in */ BMDTimecodeBCD timecode, /* out */ BMDDeckControlError* error) = 0;
169
+    virtual HRESULT FastForward (/* in */ bool viewTape, /* out */ BMDDeckControlError* error) = 0;
170
+    virtual HRESULT Rewind (/* in */ bool viewTape, /* out */ BMDDeckControlError* error) = 0;
171
+    virtual HRESULT StepForward (/* out */ BMDDeckControlError* error) = 0;
172
+    virtual HRESULT StepBack (/* out */ BMDDeckControlError* error) = 0;
173
+    virtual HRESULT Jog (/* in */ double rate, /* out */ BMDDeckControlError* error) = 0;
174
+    virtual HRESULT Shuttle (/* in */ double rate, /* out */ BMDDeckControlError* error) = 0;
175
+    virtual HRESULT GetTimecodeString (/* out */ CFStringRef* currentTimeCode, /* out */ BMDDeckControlError* error) = 0;
176
+    virtual HRESULT GetTimecode (/* out */ IDeckLinkTimecode** currentTimecode, /* out */ BMDDeckControlError* error) = 0;
177
+    virtual HRESULT GetTimecodeBCD (/* out */ BMDTimecodeBCD* currentTimecode, /* out */ BMDDeckControlError* error) = 0;
178
     virtual HRESULT SetPreroll (/* in */ uint32_t prerollSeconds) = 0;
179
-    virtual HRESULT GetPreroll (/* out */ uint32_t *prerollSeconds) = 0;
180
+    virtual HRESULT GetPreroll (/* out */ uint32_t* prerollSeconds) = 0;
181
     virtual HRESULT SetExportOffset (/* in */ int32_t exportOffsetFields) = 0;
182
-    virtual HRESULT GetExportOffset (/* out */ int32_t *exportOffsetFields) = 0;
183
-    virtual HRESULT GetManualExportOffset (/* out */ int32_t *deckManualExportOffsetFields) = 0;
184
+    virtual HRESULT GetExportOffset (/* out */ int32_t* exportOffsetFields) = 0;
185
+    virtual HRESULT GetManualExportOffset (/* out */ int32_t* deckManualExportOffsetFields) = 0;
186
     virtual HRESULT SetCaptureOffset (/* in */ int32_t captureOffsetFields) = 0;
187
-    virtual HRESULT GetCaptureOffset (/* out */ int32_t *captureOffsetFields) = 0;
188
-    virtual HRESULT StartExport (/* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* in */ BMDDeckControlExportModeOpsFlags exportModeOps, /* out */ BMDDeckControlError *error) = 0;
189
-    virtual HRESULT StartCapture (/* in */ bool useVITC, /* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* out */ BMDDeckControlError *error) = 0;
190
-    virtual HRESULT GetDeviceID (/* out */ uint16_t *deviceId, /* out */ BMDDeckControlError *error) = 0;
191
+    virtual HRESULT GetCaptureOffset (/* out */ int32_t* captureOffsetFields) = 0;
192
+    virtual HRESULT StartExport (/* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* in */ BMDDeckControlExportModeOpsFlags exportModeOps, /* out */ BMDDeckControlError* error) = 0;
193
+    virtual HRESULT StartCapture (/* in */ bool useVITC, /* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* out */ BMDDeckControlError* error) = 0;
194
+    virtual HRESULT GetDeviceID (/* out */ uint16_t* deviceId, /* out */ BMDDeckControlError* error) = 0;
195
     virtual HRESULT Abort (void) = 0;
196
-    virtual HRESULT CrashRecordStart (/* out */ BMDDeckControlError *error) = 0;
197
-    virtual HRESULT CrashRecordStop (/* out */ BMDDeckControlError *error) = 0;
198
-    virtual HRESULT SetCallback (/* in */ IDeckLinkDeckControlStatusCallback *callback) = 0;
199
+    virtual HRESULT CrashRecordStart (/* out */ BMDDeckControlError* error) = 0;
200
+    virtual HRESULT CrashRecordStop (/* out */ BMDDeckControlError* error) = 0;
201
+    virtual HRESULT SetCallback (/* in */ IDeckLinkDeckControlStatusCallback* callback) = 0;
202
 
203
 protected:
204
     virtual ~IDeckLinkDeckControl () {} // call Release method to drop reference count
205
@@ -215,5 +217,5 @@
206
 
207
 }
208
 
209
-
210
+#endif /* defined(__cplusplus) */
211
 #endif /* defined(BMD_DECKLINKAPIDECKCONTROL_H) */
212
obs-studio-26.0.2.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIDiscovery.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIDiscovery.h Changed
58
 
1
@@ -1,5 +1,5 @@
2
 /* -LICENSE-START-
3
-** Copyright (c) 2018 Blackmagic Design
4
+** Copyright (c) 2020 Blackmagic Design
5
 **
6
 ** Permission is hereby granted, free of charge, to any person or organization
7
 ** obtaining a copy of the software and accompanying documentation covered by
8
@@ -7,14 +7,14 @@
9
 ** execute, and transmit the Software, and to prepare derivative works of the
10
 ** Software, and to permit third-parties to whom the Software is furnished to
11
 ** do so, all subject to the following:
12
-** 
13
+**
14
 ** The copyright notices in the Software and this entire statement, including
15
 ** the above license grant, this restriction and the following disclaimer,
16
 ** must be included in all copies of the Software, in whole or in part, and
17
 ** all derivative works of the Software, unless such copies or derivative
18
 ** works are solely in the form of machine-executable object code generated by
19
 ** a source language processor.
20
-** 
21
+**
22
 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
 ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
 ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
25
@@ -46,19 +46,21 @@
26
 
27
 // Interface ID Declarations
28
 
29
-BMD_CONST REFIID IID_IDeckLink                                    = /* C418FBDD-0587-48ED-8FE5-640F0A14AF91 */ {0xC4,0x18,0xFB,0xDD,0x05,0x87,0x48,0xED,0x8F,0xE5,0x64,0x0F,0x0A,0x14,0xAF,0x91};
30
+BMD_CONST REFIID IID_IDeckLink                                    = /* C418FBDD-0587-48ED-8FE5-640F0A14AF91 */ { 0xC4,0x18,0xFB,0xDD,0x05,0x87,0x48,0xED,0x8F,0xE5,0x64,0x0F,0x0A,0x14,0xAF,0x91 };
31
+
32
+#if defined(__cplusplus)
33
 
34
 // Forward Declarations
35
 
36
 class IDeckLink;
37
 
38
-/* Interface IDeckLink - represents a DeckLink device */
39
+/* Interface IDeckLink - Represents a DeckLink device */
40
 
41
 class BMD_PUBLIC IDeckLink : public IUnknown
42
 {
43
 public:
44
-    virtual HRESULT GetModelName (/* out */ CFStringRef *modelName) = 0;
45
-    virtual HRESULT GetDisplayName (/* out */ CFStringRef *displayName) = 0;
46
+    virtual HRESULT GetModelName (/* out */ CFStringRef* modelName) = 0;
47
+    virtual HRESULT GetDisplayName (/* out */ CFStringRef* displayName) = 0;
48
 
49
 protected:
50
     virtual ~IDeckLink () {} // call Release method to drop reference count
51
@@ -71,5 +73,5 @@
52
 
53
 }
54
 
55
-
56
+#endif /* defined(__cplusplus) */
57
 #endif /* defined(BMD_DECKLINKAPIDISCOVERY_H) */
58
obs-studio-26.0.2.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIDispatch.cpp -> obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIDispatch.cpp Changed
16
 
1
@@ -65,12 +65,12 @@
2
        gDeckLinkAPIBundleRef = CFBundleCreate(kCFAllocatorDefault, bundleURL);
3
        if (gDeckLinkAPIBundleRef != NULL)
4
        {
5
-           gCreateIteratorFunc = (CreateIteratorFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkIteratorInstance_0003"));
6
+           gCreateIteratorFunc = (CreateIteratorFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkIteratorInstance_0004"));
7
            gCreateAPIInformationFunc = (CreateAPIInformationFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkAPIInformationInstance_0001"));
8
            gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateOpenGLScreenPreviewHelper_0001"));
9
            gCreateCocoaPreviewFunc = (CreateCocoaScreenPreviewFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateCocoaScreenPreview_0001"));
10
            gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateVideoConversionInstance_0001"));
11
-            gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkDiscoveryInstance_0002"));
12
+            gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkDiscoveryInstance_0003"));
13
             gCreateVideoFrameAncillaryPacketsFunc = (CreateVideoFrameAncillaryPacketsInstanceFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateVideoFrameAncillaryPacketsInstance_0001"));
14
        }
15
        CFRelease(bundleURL);
16
obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIDispatch_v10_11.cpp Added
208
 
1
@@ -0,0 +1,206 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2019 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+** 
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+** 
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+/* DeckLinkAPIDispatch.cpp */
29
+
30
+#include "DeckLinkAPI_v10_11.h"
31
+#include <pthread.h>
32
+
33
+#if BLACKMAGIC_DECKLINK_API_MAGIC != 1
34
+   #error The DeckLink API version of DeckLinkAPIDispatch.cpp is not the same version as DeckLinkAPI.h
35
+#endif
36
+
37
+#define kDeckLinkAPI_BundlePath "/Library/Frameworks/DeckLinkAPI.framework"
38
+
39
+
40
+typedef IDeckLinkIterator* (*CreateIteratorFunc)(void);
41
+typedef IDeckLinkAPIInformation* (*CreateAPIInformationFunc)(void);
42
+typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGLScreenPreviewHelperFunc)(void);
43
+typedef IDeckLinkCocoaScreenPreviewCallback* (*CreateCocoaScreenPreviewFunc)(void*);
44
+typedef IDeckLinkVideoConversion* (*CreateVideoConversionInstanceFunc)(void);
45
+typedef IDeckLinkDiscovery* (*CreateDeckLinkDiscoveryInstanceFunc)(void);
46
+typedef IDeckLinkVideoFrameAncillaryPackets* (*CreateVideoFrameAncillaryPacketsInstanceFunc)(void);
47
+
48
+static pthread_once_t                      gDeckLinkOnceControl        = PTHREAD_ONCE_INIT;
49
+static CFBundleRef                         gDeckLinkAPIBundleRef       = NULL;
50
+static CreateIteratorFunc                  gCreateIteratorFunc         = NULL;
51
+static CreateAPIInformationFunc                gCreateAPIInformationFunc   = NULL;
52
+static CreateOpenGLScreenPreviewHelperFunc gCreateOpenGLPreviewFunc    = NULL;
53
+static CreateCocoaScreenPreviewFunc            gCreateCocoaPreviewFunc     = NULL;
54
+static CreateVideoConversionInstanceFunc   gCreateVideoConversionFunc  = NULL;
55
+static CreateDeckLinkDiscoveryInstanceFunc  gCreateDeckLinkDiscoveryFunc= NULL;
56
+static CreateVideoFrameAncillaryPacketsInstanceFunc    gCreateVideoFrameAncillaryPacketsFunc = NULL;
57
+
58
+
59
+static void    InitDeckLinkAPI (void)
60
+{
61
+   CFURLRef        bundleURL;
62
+
63
+   bundleURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, CFSTR(kDeckLinkAPI_BundlePath), kCFURLPOSIXPathStyle, true);
64
+   if (bundleURL != NULL)
65
+   {
66
+       gDeckLinkAPIBundleRef = CFBundleCreate(kCFAllocatorDefault, bundleURL);
67
+       if (gDeckLinkAPIBundleRef != NULL)
68
+       {
69
+           gCreateIteratorFunc = (CreateIteratorFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkIteratorInstance_0003"));
70
+           gCreateAPIInformationFunc = (CreateAPIInformationFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkAPIInformationInstance_0001"));
71
+           gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateOpenGLScreenPreviewHelper_0001"));
72
+           gCreateCocoaPreviewFunc = (CreateCocoaScreenPreviewFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateCocoaScreenPreview_0001"));
73
+           gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateVideoConversionInstance_0001"));
74
+            gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkDiscoveryInstance_0002"));
75
+            gCreateVideoFrameAncillaryPacketsFunc = (CreateVideoFrameAncillaryPacketsInstanceFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateVideoFrameAncillaryPacketsInstance_0001"));
76
+       }
77
+       CFRelease(bundleURL);
78
+   }
79
+}
80
+
81
+bool       IsDeckLinkAPIPresent_v10_11 (void)
82
+{
83
+   // If the DeckLink API bundle was successfully loaded, return this knowledge to the caller
84
+   if (gDeckLinkAPIBundleRef != NULL)
85
+       return true;
86
+   
87
+   return false;
88
+}
89
+
90
+IDeckLinkIterator*     CreateDeckLinkIteratorInstance_v10_11 (void)
91
+{
92
+   pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
93
+   
94
+   if (gCreateIteratorFunc == NULL)
95
+       return NULL;
96
+   
97
+   return gCreateIteratorFunc();
98
+}
99
+
100
+IDeckLinkAPIInformation*   CreateDeckLinkAPIInformationInstance_v10_11 (void)
101
+{
102
+   pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
103
+   
104
+   if (gCreateAPIInformationFunc == NULL)
105
+       return NULL;
106
+   
107
+   return gCreateAPIInformationFunc();
108
+}
109
+
110
+IDeckLinkGLScreenPreviewHelper*        CreateOpenGLScreenPreviewHelper_v10_11 (void)
111
+{
112
+   pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
113
+   
114
+   if (gCreateOpenGLPreviewFunc == NULL)
115
+       return NULL;
116
+   
117
+   return gCreateOpenGLPreviewFunc();
118
+}
119
+
120
+IDeckLinkCocoaScreenPreviewCallback*   CreateCocoaScreenPreview_v10_11 (void* parentView)
121
+{
122
+   pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
123
+   
124
+   if (gCreateCocoaPreviewFunc == NULL)
125
+       return NULL;
126
+   
127
+   return gCreateCocoaPreviewFunc(parentView);
128
+}
129
+
130
+IDeckLinkVideoConversion* CreateVideoConversionInstance_v10_11 (void)
131
+{
132
+   pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
133
+   
134
+   if (gCreateVideoConversionFunc == NULL)
135
+       return NULL;
136
+   
137
+   return gCreateVideoConversionFunc();
138
+}
139
+
140
+IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance_v10_11 (void)
141
+{
142
+   pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
143
+   
144
+   if (gCreateDeckLinkDiscoveryFunc == NULL)
145
+       return NULL;
146
+   
147
+   return gCreateDeckLinkDiscoveryFunc();
148
+}
149
+
150
+IDeckLinkVideoFrameAncillaryPackets* CreateVideoFrameAncillaryPacketsInstance_v10_11 (void)
151
+{
152
+   pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
153
+   
154
+   if (gCreateVideoFrameAncillaryPacketsFunc == NULL)
155
+       return NULL;
156
+   
157
+   return gCreateVideoFrameAncillaryPacketsFunc();
158
+}
159
+
160
+
161
+#define kBMDStreamingAPI_BundlePath "/Library/Application Support/Blackmagic Design/Streaming/BMDStreamingAPI.bundle"
162
+
163
+typedef IBMDStreamingDiscovery* (*CreateDiscoveryFunc)(void);
164
+typedef IBMDStreamingH264NALParser* (*CreateNALParserFunc)(void);
165
+
166
+static pthread_once_t      gBMDStreamingOnceControl  = PTHREAD_ONCE_INIT;
167
+static CFBundleRef         gBMDStreamingAPIBundleRef = NULL;
168
+static CreateDiscoveryFunc gCreateDiscoveryFunc      = NULL;
169
+static CreateNALParserFunc gCreateNALParserFunc      = NULL;
170
+
171
+static void InitBMDStreamingAPI(void)
172
+{
173
+   CFURLRef bundleURL;
174
+
175
+   bundleURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, CFSTR(kBMDStreamingAPI_BundlePath), kCFURLPOSIXPathStyle, true);
176
+   if (bundleURL != NULL)
177
+   {
178
+       gBMDStreamingAPIBundleRef = CFBundleCreate(kCFAllocatorDefault, bundleURL);
179
+       if (gBMDStreamingAPIBundleRef != NULL)
180
+       {
181
+           gCreateDiscoveryFunc = (CreateDiscoveryFunc)CFBundleGetFunctionPointerForName(gBMDStreamingAPIBundleRef, CFSTR("CreateBMDStreamingDiscoveryInstance_0002"));
182
+           gCreateNALParserFunc = (CreateNALParserFunc)CFBundleGetFunctionPointerForName(gBMDStreamingAPIBundleRef, CFSTR("CreateBMDStreamingH264NALParser_0001"));
183
+       }
184
+
185
+       CFRelease(bundleURL);
186
+   }
187
+}
188
+
189
+IBMDStreamingDiscovery* CreateBMDStreamingDiscoveryInstance_v10_11()
190
+{
191
+   pthread_once(&gBMDStreamingOnceControl, InitBMDStreamingAPI);
192
+
193
+   if (gCreateDiscoveryFunc == NULL)
194
+       return NULL;
195
+
196
+   return gCreateDiscoveryFunc();
197
+}
198
+
199
+IBMDStreamingH264NALParser* CreateBMDStreamingH264NALParser_v10_11()
200
+{
201
+   pthread_once(&gBMDStreamingOnceControl, InitBMDStreamingAPI);
202
+
203
+   if (gCreateNALParserFunc == NULL)
204
+       return NULL;
205
+
206
+   return gCreateNALParserFunc();
207
+}
208
obs-studio-26.0.2.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIModes.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIModes.h Changed
353
 
1
@@ -1,5 +1,5 @@
2
 /* -LICENSE-START-
3
-** Copyright (c) 2018 Blackmagic Design
4
+** Copyright (c) 2020 Blackmagic Design
5
 **
6
 ** Permission is hereby granted, free of charge, to any person or organization
7
 ** obtaining a copy of the software and accompanying documentation covered by
8
@@ -7,14 +7,14 @@
9
 ** execute, and transmit the Software, and to prepare derivative works of the
10
 ** Software, and to permit third-parties to whom the Software is furnished to
11
 ** do so, all subject to the following:
12
-** 
13
+**
14
 ** The copyright notices in the Software and this entire statement, including
15
 ** the above license grant, this restriction and the following disclaimer,
16
 ** must be included in all copies of the Software, in whole or in part, and
17
 ** all derivative works of the Software, unless such copies or derivative
18
 ** works are solely in the form of machine-executable object code generated by
19
 ** a source language processor.
20
-** 
21
+**
22
 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
 ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
 ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
25
@@ -46,147 +46,189 @@
26
 
27
 // Interface ID Declarations
28
 
29
-BMD_CONST REFIID IID_IDeckLinkDisplayModeIterator                 = /* 9C88499F-F601-4021-B80B-032E4EB41C35 */ {0x9C,0x88,0x49,0x9F,0xF6,0x01,0x40,0x21,0xB8,0x0B,0x03,0x2E,0x4E,0xB4,0x1C,0x35};
30
-BMD_CONST REFIID IID_IDeckLinkDisplayMode                         = /* 3EB2C1AB-0A3D-4523-A3AD-F40D7FB14E78 */ {0x3E,0xB2,0xC1,0xAB,0x0A,0x3D,0x45,0x23,0xA3,0xAD,0xF4,0x0D,0x7F,0xB1,0x4E,0x78};
31
+BMD_CONST REFIID IID_IDeckLinkDisplayModeIterator                 = /* 9C88499F-F601-4021-B80B-032E4EB41C35 */ { 0x9C,0x88,0x49,0x9F,0xF6,0x01,0x40,0x21,0xB8,0x0B,0x03,0x2E,0x4E,0xB4,0x1C,0x35 };
32
+BMD_CONST REFIID IID_IDeckLinkDisplayMode                         = /* 3EB2C1AB-0A3D-4523-A3AD-F40D7FB14E78 */ { 0x3E,0xB2,0xC1,0xAB,0x0A,0x3D,0x45,0x23,0xA3,0xAD,0xF4,0x0D,0x7F,0xB1,0x4E,0x78 };
33
 
34
-/* Enum BMDDisplayMode - Video display modes */
35
+/* Enum BMDDisplayMode - BMDDisplayMode enumerates the video modes supported. */
36
 
37
 typedef uint32_t BMDDisplayMode;
38
 enum _BMDDisplayMode {
39
 
40
     /* SD Modes */
41
 
42
-    bmdModeNTSC                                                  = 'ntsc',
43
-    bmdModeNTSC2398                                              = 'nt23', // 3:2 pulldown
44
-    bmdModePAL                                                   = 'pal ',
45
-    bmdModeNTSCp                                                 = 'ntsp',
46
-    bmdModePALp                                                  = 'palp',
47
+    bmdModeNTSC                                                  = /* 'ntsc' */ 0x6E747363,
48
+    bmdModeNTSC2398                                              = /* 'nt23' */ 0x6E743233,    // 3:2 pulldown
49
+    bmdModePAL                                                   = /* 'pal ' */ 0x70616C20,
50
+    bmdModeNTSCp                                                 = /* 'ntsp' */ 0x6E747370,
51
+    bmdModePALp                                                  = /* 'palp' */ 0x70616C70,
52
 
53
     /* HD 1080 Modes */
54
 
55
-    bmdModeHD1080p2398                                           = '23ps',
56
-    bmdModeHD1080p24                                             = '24ps',
57
-    bmdModeHD1080p25                                             = 'Hp25',
58
-    bmdModeHD1080p2997                                           = 'Hp29',
59
-    bmdModeHD1080p30                                             = 'Hp30',
60
-    bmdModeHD1080p50                                             = 'Hp50',
61
-    bmdModeHD1080p5994                                           = 'Hp59',
62
-    bmdModeHD1080p6000                                           = 'Hp60', // N.B. This _really_ is 60.00 Hz.
63
-    bmdModeHD1080i50                                             = 'Hi50',
64
-    bmdModeHD1080i5994                                           = 'Hi59',
65
-    bmdModeHD1080i6000                                           = 'Hi60', // N.B. This _really_ is 60.00 Hz.
66
+    bmdModeHD1080p2398                                           = /* '23ps' */ 0x32337073,
67
+    bmdModeHD1080p24                                             = /* '24ps' */ 0x32347073,
68
+    bmdModeHD1080p25                                             = /* 'Hp25' */ 0x48703235,
69
+    bmdModeHD1080p2997                                           = /* 'Hp29' */ 0x48703239,
70
+    bmdModeHD1080p30                                             = /* 'Hp30' */ 0x48703330,
71
+    bmdModeHD1080p4795                                           = /* 'Hp47' */ 0x48703437,
72
+    bmdModeHD1080p48                                             = /* 'Hp48' */ 0x48703438,
73
+    bmdModeHD1080p50                                             = /* 'Hp50' */ 0x48703530,
74
+    bmdModeHD1080p5994                                           = /* 'Hp59' */ 0x48703539,
75
+    bmdModeHD1080p6000                                           = /* 'Hp60' */ 0x48703630,    // N.B. This _really_ is 60.00 Hz.
76
+    bmdModeHD1080p9590                                           = /* 'Hp95' */ 0x48703935,
77
+    bmdModeHD1080p96                                             = /* 'Hp96' */ 0x48703936,
78
+    bmdModeHD1080p100                                            = /* 'Hp10' */ 0x48703130,
79
+    bmdModeHD1080p11988                                          = /* 'Hp11' */ 0x48703131,
80
+    bmdModeHD1080p120                                            = /* 'Hp12' */ 0x48703132,
81
+    bmdModeHD1080i50                                             = /* 'Hi50' */ 0x48693530,
82
+    bmdModeHD1080i5994                                           = /* 'Hi59' */ 0x48693539,
83
+    bmdModeHD1080i6000                                           = /* 'Hi60' */ 0x48693630,    // N.B. This _really_ is 60.00 Hz.
84
 
85
     /* HD 720 Modes */
86
 
87
-    bmdModeHD720p50                                              = 'hp50',
88
-    bmdModeHD720p5994                                            = 'hp59',
89
-    bmdModeHD720p60                                              = 'hp60',
90
+    bmdModeHD720p50                                              = /* 'hp50' */ 0x68703530,
91
+    bmdModeHD720p5994                                            = /* 'hp59' */ 0x68703539,
92
+    bmdModeHD720p60                                              = /* 'hp60' */ 0x68703630,
93
 
94
     /* 2K Modes */
95
 
96
-    bmdMode2k2398                                                = '2k23',
97
-    bmdMode2k24                                                  = '2k24',
98
-    bmdMode2k25                                                  = '2k25',
99
+    bmdMode2k2398                                                = /* '2k23' */ 0x326B3233,
100
+    bmdMode2k24                                                  = /* '2k24' */ 0x326B3234,
101
+    bmdMode2k25                                                  = /* '2k25' */ 0x326B3235,
102
 
103
     /* 2K DCI Modes */
104
 
105
-    bmdMode2kDCI2398                                             = '2d23',
106
-    bmdMode2kDCI24                                               = '2d24',
107
-    bmdMode2kDCI25                                               = '2d25',
108
-    bmdMode2kDCI2997                                             = '2d29',
109
-    bmdMode2kDCI30                                               = '2d30',
110
-    bmdMode2kDCI50                                               = '2d50',
111
-    bmdMode2kDCI5994                                             = '2d59',
112
-    bmdMode2kDCI60                                               = '2d60',
113
+    bmdMode2kDCI2398                                             = /* '2d23' */ 0x32643233,
114
+    bmdMode2kDCI24                                               = /* '2d24' */ 0x32643234,
115
+    bmdMode2kDCI25                                               = /* '2d25' */ 0x32643235,
116
+    bmdMode2kDCI2997                                             = /* '2d29' */ 0x32643239,
117
+    bmdMode2kDCI30                                               = /* '2d30' */ 0x32643330,
118
+    bmdMode2kDCI4795                                             = /* '2d47' */ 0x32643437,
119
+    bmdMode2kDCI48                                               = /* '2d48' */ 0x32643438,
120
+    bmdMode2kDCI50                                               = /* '2d50' */ 0x32643530,
121
+    bmdMode2kDCI5994                                             = /* '2d59' */ 0x32643539,
122
+    bmdMode2kDCI60                                               = /* '2d60' */ 0x32643630,
123
+    bmdMode2kDCI9590                                             = /* '2d95' */ 0x32643935,
124
+    bmdMode2kDCI96                                               = /* '2d96' */ 0x32643936,
125
+    bmdMode2kDCI100                                              = /* '2d10' */ 0x32643130,
126
+    bmdMode2kDCI11988                                            = /* '2d11' */ 0x32643131,
127
+    bmdMode2kDCI120                                              = /* '2d12' */ 0x32643132,
128
 
129
     /* 4K UHD Modes */
130
 
131
-    bmdMode4K2160p2398                                           = '4k23',
132
-    bmdMode4K2160p24                                             = '4k24',
133
-    bmdMode4K2160p25                                             = '4k25',
134
-    bmdMode4K2160p2997                                           = '4k29',
135
-    bmdMode4K2160p30                                             = '4k30',
136
-    bmdMode4K2160p50                                             = '4k50',
137
-    bmdMode4K2160p5994                                           = '4k59',
138
-    bmdMode4K2160p60                                             = '4k60',
139
+    bmdMode4K2160p2398                                           = /* '4k23' */ 0x346B3233,
140
+    bmdMode4K2160p24                                             = /* '4k24' */ 0x346B3234,
141
+    bmdMode4K2160p25                                             = /* '4k25' */ 0x346B3235,
142
+    bmdMode4K2160p2997                                           = /* '4k29' */ 0x346B3239,
143
+    bmdMode4K2160p30                                             = /* '4k30' */ 0x346B3330,
144
+    bmdMode4K2160p4795                                           = /* '4k47' */ 0x346B3437,
145
+    bmdMode4K2160p48                                             = /* '4k48' */ 0x346B3438,
146
+    bmdMode4K2160p50                                             = /* '4k50' */ 0x346B3530,
147
+    bmdMode4K2160p5994                                           = /* '4k59' */ 0x346B3539,
148
+    bmdMode4K2160p60                                             = /* '4k60' */ 0x346B3630,
149
+    bmdMode4K2160p9590                                           = /* '4k95' */ 0x346B3935,
150
+    bmdMode4K2160p96                                             = /* '4k96' */ 0x346B3936,
151
+    bmdMode4K2160p100                                            = /* '4k10' */ 0x346B3130,
152
+    bmdMode4K2160p11988                                          = /* '4k11' */ 0x346B3131,
153
+    bmdMode4K2160p120                                            = /* '4k12' */ 0x346B3132,
154
 
155
     /* 4K DCI Modes */
156
 
157
-    bmdMode4kDCI2398                                             = '4d23',
158
-    bmdMode4kDCI24                                               = '4d24',
159
-    bmdMode4kDCI25                                               = '4d25',
160
-    bmdMode4kDCI2997                                             = '4d29',
161
-    bmdMode4kDCI30                                               = '4d30',
162
-    bmdMode4kDCI50                                               = '4d50',
163
-    bmdMode4kDCI5994                                             = '4d59',
164
-    bmdMode4kDCI60                                               = '4d60',
165
+    bmdMode4kDCI2398                                             = /* '4d23' */ 0x34643233,
166
+    bmdMode4kDCI24                                               = /* '4d24' */ 0x34643234,
167
+    bmdMode4kDCI25                                               = /* '4d25' */ 0x34643235,
168
+    bmdMode4kDCI2997                                             = /* '4d29' */ 0x34643239,
169
+    bmdMode4kDCI30                                               = /* '4d30' */ 0x34643330,
170
+    bmdMode4kDCI4795                                             = /* '4d47' */ 0x34643437,
171
+    bmdMode4kDCI48                                               = /* '4d48' */ 0x34643438,
172
+    bmdMode4kDCI50                                               = /* '4d50' */ 0x34643530,
173
+    bmdMode4kDCI5994                                             = /* '4d59' */ 0x34643539,
174
+    bmdMode4kDCI60                                               = /* '4d60' */ 0x34643630,
175
+    bmdMode4kDCI9590                                             = /* '4d95' */ 0x34643935,
176
+    bmdMode4kDCI96                                               = /* '4d96' */ 0x34643936,
177
+    bmdMode4kDCI100                                              = /* '4d10' */ 0x34643130,
178
+    bmdMode4kDCI11988                                            = /* '4d11' */ 0x34643131,
179
+    bmdMode4kDCI120                                              = /* '4d12' */ 0x34643132,
180
 
181
     /* 8K UHD Modes */
182
 
183
-    bmdMode8K4320p2398                                           = '8k23',
184
-    bmdMode8K4320p24                                             = '8k24',
185
-    bmdMode8K4320p25                                             = '8k25',
186
-    bmdMode8K4320p2997                                           = '8k29',
187
-    bmdMode8K4320p30                                             = '8k30',
188
-    bmdMode8K4320p50                                             = '8k50',
189
-    bmdMode8K4320p5994                                           = '8k59',
190
-    bmdMode8K4320p60                                             = '8k60',
191
+    bmdMode8K4320p2398                                           = /* '8k23' */ 0x386B3233,
192
+    bmdMode8K4320p24                                             = /* '8k24' */ 0x386B3234,
193
+    bmdMode8K4320p25                                             = /* '8k25' */ 0x386B3235,
194
+    bmdMode8K4320p2997                                           = /* '8k29' */ 0x386B3239,
195
+    bmdMode8K4320p30                                             = /* '8k30' */ 0x386B3330,
196
+    bmdMode8K4320p4795                                           = /* '8k47' */ 0x386B3437,
197
+    bmdMode8K4320p48                                             = /* '8k48' */ 0x386B3438,
198
+    bmdMode8K4320p50                                             = /* '8k50' */ 0x386B3530,
199
+    bmdMode8K4320p5994                                           = /* '8k59' */ 0x386B3539,
200
+    bmdMode8K4320p60                                             = /* '8k60' */ 0x386B3630,
201
 
202
     /* 8K DCI Modes */
203
 
204
-    bmdMode8kDCI2398                                             = '8d23',
205
-    bmdMode8kDCI24                                               = '8d24',
206
-    bmdMode8kDCI25                                               = '8d25',
207
-    bmdMode8kDCI2997                                             = '8d29',
208
-    bmdMode8kDCI30                                               = '8d30',
209
-    bmdMode8kDCI50                                               = '8d50',
210
-    bmdMode8kDCI5994                                             = '8d59',
211
-    bmdMode8kDCI60                                               = '8d60',
212
-
213
-    /* RAW Modes for Cintel (input only) */
214
-
215
-    bmdModeCintelRAW                                             = 'rwci', // Frame size up to 4096x3072, variable frame rate
216
-    bmdModeCintelCompressedRAW                                   = 'rwcc', // Frame size up to 4096x3072, variable frame rate
217
+    bmdMode8kDCI2398                                             = /* '8d23' */ 0x38643233,
218
+    bmdMode8kDCI24                                               = /* '8d24' */ 0x38643234,
219
+    bmdMode8kDCI25                                               = /* '8d25' */ 0x38643235,
220
+    bmdMode8kDCI2997                                             = /* '8d29' */ 0x38643239,
221
+    bmdMode8kDCI30                                               = /* '8d30' */ 0x38643330,
222
+    bmdMode8kDCI4795                                             = /* '8d47' */ 0x38643437,
223
+    bmdMode8kDCI48                                               = /* '8d48' */ 0x38643438,
224
+    bmdMode8kDCI50                                               = /* '8d50' */ 0x38643530,
225
+    bmdMode8kDCI5994                                             = /* '8d59' */ 0x38643539,
226
+    bmdMode8kDCI60                                               = /* '8d60' */ 0x38643630,
227
+
228
+    /* PC Modes */
229
+
230
+    bmdMode640x480p60                                            = /* 'vga6' */ 0x76676136,
231
+    bmdMode800x600p60                                            = /* 'svg6' */ 0x73766736,
232
+    bmdMode1440x900p50                                           = /* 'wxg5' */ 0x77786735,
233
+    bmdMode1440x900p60                                           = /* 'wxg6' */ 0x77786736,
234
+    bmdMode1440x1080p50                                          = /* 'sxg5' */ 0x73786735,
235
+    bmdMode1440x1080p60                                          = /* 'sxg6' */ 0x73786736,
236
+    bmdMode1600x1200p50                                          = /* 'uxg5' */ 0x75786735,
237
+    bmdMode1600x1200p60                                          = /* 'uxg6' */ 0x75786736,
238
+    bmdMode1920x1200p50                                          = /* 'wux5' */ 0x77757835,
239
+    bmdMode1920x1200p60                                          = /* 'wux6' */ 0x77757836,
240
+    bmdMode1920x1440p50                                          = /* '1945' */ 0x31393435,
241
+    bmdMode1920x1440p60                                          = /* '1946' */ 0x31393436,
242
+    bmdMode2560x1440p50                                          = /* 'wqh5' */ 0x77716835,
243
+    bmdMode2560x1440p60                                          = /* 'wqh6' */ 0x77716836,
244
+    bmdMode2560x1600p50                                          = /* 'wqx5' */ 0x77717835,
245
+    bmdMode2560x1600p60                                          = /* 'wqx6' */ 0x77717836,
246
 
247
     /* Special Modes */
248
 
249
-    bmdModeUnknown                                               = 'iunk'
250
+    bmdModeUnknown                                               = /* 'iunk' */ 0x69756E6B
251
 };
252
 
253
-/* Enum BMDFieldDominance - Video field dominance */
254
+/* Enum BMDFieldDominance - BMDFieldDominance enumerates settings applicable to video fields. */
255
 
256
 typedef uint32_t BMDFieldDominance;
257
 enum _BMDFieldDominance {
258
     bmdUnknownFieldDominance                                     = 0,
259
-    bmdLowerFieldFirst                                           = 'lowr',
260
-    bmdUpperFieldFirst                                           = 'uppr',
261
-    bmdProgressiveFrame                                          = 'prog',
262
-    bmdProgressiveSegmentedFrame                                 = 'psf '
263
+    bmdLowerFieldFirst                                           = /* 'lowr' */ 0x6C6F7772,
264
+    bmdUpperFieldFirst                                           = /* 'uppr' */ 0x75707072,
265
+    bmdProgressiveFrame                                          = /* 'prog' */ 0x70726F67,
266
+    bmdProgressiveSegmentedFrame                                 = /* 'psf ' */ 0x70736620
267
 };
268
 
269
 /* Enum BMDPixelFormat - Video pixel formats supported for output/input */
270
 
271
 typedef uint32_t BMDPixelFormat;
272
 enum _BMDPixelFormat {
273
-    bmdFormat8BitYUV                                             = '2vuy',
274
-    bmdFormat10BitYUV                                            = 'v210',
275
+    bmdFormatUnspecified                                         = 0,
276
+    bmdFormat8BitYUV                                             = /* '2vuy' */ 0x32767579,
277
+    bmdFormat10BitYUV                                            = /* 'v210' */ 0x76323130,
278
     bmdFormat8BitARGB                                            = 32,
279
-    bmdFormat8BitBGRA                                            = 'BGRA',
280
-    bmdFormat10BitRGB                                            = 'r210', // Big-endian RGB 10-bit per component with SMPTE video levels (64-960). Packed as 2:10:10:10
281
-    bmdFormat12BitRGB                                            = 'R12B', // Big-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component
282
-    bmdFormat12BitRGBLE                                          = 'R12L', // Little-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component
283
-    bmdFormat10BitRGBXLE                                         = 'R10l', // Little-endian 10-bit RGB with SMPTE video levels (64-940)
284
-    bmdFormat10BitRGBX                                           = 'R10b', // Big-endian 10-bit RGB with SMPTE video levels (64-940)
285
-    bmdFormatH265                                                = 'hev1', // High Efficiency Video Coding (HEVC/h.265)
286
+    bmdFormat8BitBGRA                                            = /* 'BGRA' */ 0x42475241,
287
+    bmdFormat10BitRGB                                            = /* 'r210' */ 0x72323130,    // Big-endian RGB 10-bit per component with SMPTE video levels (64-960). Packed as 2:10:10:10
288
+    bmdFormat12BitRGB                                            = /* 'R12B' */ 0x52313242,    // Big-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component
289
+    bmdFormat12BitRGBLE                                          = /* 'R12L' */ 0x5231324C,    // Little-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component
290
+    bmdFormat10BitRGBXLE                                         = /* 'R10l' */ 0x5231306C,    // Little-endian 10-bit RGB with SMPTE video levels (64-940)
291
+    bmdFormat10BitRGBX                                           = /* 'R10b' */ 0x52313062,    // Big-endian 10-bit RGB with SMPTE video levels (64-940)
292
+    bmdFormatH265                                                = /* 'hev1' */ 0x68657631,    // High Efficiency Video Coding (HEVC/h.265)
293
 
294
     /* AVID DNxHR */
295
 
296
-    bmdFormatDNxHR                                               = 'AVdh',
297
-
298
-    /* Cintel formats */
299
-
300
-    bmdFormat12BitRAWGRBG                                        = 'r12p', // 12-bit RAW data for bayer pattern GRBG
301
-    bmdFormat12BitRAWJPEG                                        = 'r16p'  // 12-bit RAW data arranged in tiles and JPEG compressed
302
+    bmdFormatDNxHR                                               = /* 'AVdh' */ 0x41566468
303
 };
304
 
305
 /* Enum BMDDisplayModeFlags - Flags to describe the characteristics of an IDeckLinkDisplayMode. */
306
@@ -199,32 +241,34 @@
307
     bmdDisplayModeColorspaceRec2020                              = 1 << 3
308
 };
309
 
310
+#if defined(__cplusplus)
311
+
312
 // Forward Declarations
313
 
314
 class IDeckLinkDisplayModeIterator;
315
 class IDeckLinkDisplayMode;
316
 
317
-/* Interface IDeckLinkDisplayModeIterator - enumerates over supported input/output display modes. */
318
+/* Interface IDeckLinkDisplayModeIterator - Enumerates over supported input/output display modes. */
319
 
320
 class BMD_PUBLIC IDeckLinkDisplayModeIterator : public IUnknown
321
 {
322
 public:
323
-    virtual HRESULT Next (/* out */ IDeckLinkDisplayMode **deckLinkDisplayMode) = 0;
324
+    virtual HRESULT Next (/* out */ IDeckLinkDisplayMode** deckLinkDisplayMode) = 0;
325
 
326
 protected:
327
     virtual ~IDeckLinkDisplayModeIterator () {} // call Release method to drop reference count
328
 };
329
 
330
-/* Interface IDeckLinkDisplayMode - represents a display mode */
331
+/* Interface IDeckLinkDisplayMode - Represents a display mode */
332
 
333
 class BMD_PUBLIC IDeckLinkDisplayMode : public IUnknown
334
 {
335
 public:
336
-    virtual HRESULT GetName (/* out */ CFStringRef *name) = 0;
337
+    virtual HRESULT GetName (/* out */ CFStringRef* name) = 0;
338
     virtual BMDDisplayMode GetDisplayMode (void) = 0;
339
     virtual long GetWidth (void) = 0;
340
     virtual long GetHeight (void) = 0;
341
-    virtual HRESULT GetFrameRate (/* out */ BMDTimeValue *frameDuration, /* out */ BMDTimeScale *timeScale) = 0;
342
+    virtual HRESULT GetFrameRate (/* out */ BMDTimeValue* frameDuration, /* out */ BMDTimeScale* timeScale) = 0;
343
     virtual BMDFieldDominance GetFieldDominance (void) = 0;
344
     virtual BMDDisplayModeFlags GetFlags (void) = 0;
345
 
346
@@ -239,5 +283,5 @@
347
 
348
 }
349
 
350
-
351
+#endif /* defined(__cplusplus) */
352
 #endif /* defined(BMD_DECKLINKAPIMODES_H) */
353
obs-studio-26.0.2.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIStreaming.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIStreaming.h Changed
271
 
1
@@ -1,5 +1,5 @@
2
 /* -LICENSE-START-
3
-** Copyright (c) 2018 Blackmagic Design
4
+** Copyright (c) 2020 Blackmagic Design
5
 **
6
 ** Permission is hereby granted, free of charge, to any person or organization
7
 ** obtaining a copy of the software and accompanying documentation covered by
8
@@ -7,14 +7,14 @@
9
 ** execute, and transmit the Software, and to prepare derivative works of the
10
 ** Software, and to permit third-parties to whom the Software is furnished to
11
 ** do so, all subject to the following:
12
-** 
13
+**
14
 ** The copyright notices in the Software and this entire statement, including
15
 ** the above license grant, this restriction and the following disclaimer,
16
 ** must be included in all copies of the Software, in whole or in part, and
17
 ** all derivative works of the Software, unless such copies or derivative
18
 ** works are solely in the form of machine-executable object code generated by
19
 ** a source language processor.
20
-** 
21
+**
22
 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
 ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
 ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
25
@@ -46,26 +46,26 @@
26
 
27
 // Interface ID Declarations
28
 
29
-BMD_CONST REFIID IID_IBMDStreamingDeviceNotificationCallback      = /* F9531D64-3305-4B29-A387-7F74BB0D0E84 */ {0xF9,0x53,0x1D,0x64,0x33,0x05,0x4B,0x29,0xA3,0x87,0x7F,0x74,0xBB,0x0D,0x0E,0x84};
30
-BMD_CONST REFIID IID_IBMDStreamingH264InputCallback               = /* 823C475F-55AE-46F9-890C-537CC5CEDCCA */ {0x82,0x3C,0x47,0x5F,0x55,0xAE,0x46,0xF9,0x89,0x0C,0x53,0x7C,0xC5,0xCE,0xDC,0xCA};
31
-BMD_CONST REFIID IID_IBMDStreamingDiscovery                       = /* 2C837444-F989-4D87-901A-47C8A36D096D */ {0x2C,0x83,0x74,0x44,0xF9,0x89,0x4D,0x87,0x90,0x1A,0x47,0xC8,0xA3,0x6D,0x09,0x6D};
32
-BMD_CONST REFIID IID_IBMDStreamingVideoEncodingMode               = /* 1AB8035B-CD13-458D-B6DF-5E8F7C2141D9 */ {0x1A,0xB8,0x03,0x5B,0xCD,0x13,0x45,0x8D,0xB6,0xDF,0x5E,0x8F,0x7C,0x21,0x41,0xD9};
33
-BMD_CONST REFIID IID_IBMDStreamingMutableVideoEncodingMode        = /* 19BF7D90-1E0A-400D-B2C6-FFC4E78AD49D */ {0x19,0xBF,0x7D,0x90,0x1E,0x0A,0x40,0x0D,0xB2,0xC6,0xFF,0xC4,0xE7,0x8A,0xD4,0x9D};
34
-BMD_CONST REFIID IID_IBMDStreamingVideoEncodingModePresetIterator = /* 7AC731A3-C950-4AD0-804A-8377AA51C6C4 */ {0x7A,0xC7,0x31,0xA3,0xC9,0x50,0x4A,0xD0,0x80,0x4A,0x83,0x77,0xAA,0x51,0xC6,0xC4};
35
-BMD_CONST REFIID IID_IBMDStreamingDeviceInput                     = /* 24B6B6EC-1727-44BB-9818-34FF086ACF98 */ {0x24,0xB6,0xB6,0xEC,0x17,0x27,0x44,0xBB,0x98,0x18,0x34,0xFF,0x08,0x6A,0xCF,0x98};
36
-BMD_CONST REFIID IID_IBMDStreamingH264NALPacket                   = /* E260E955-14BE-4395-9775-9F02CC0A9D89 */ {0xE2,0x60,0xE9,0x55,0x14,0xBE,0x43,0x95,0x97,0x75,0x9F,0x02,0xCC,0x0A,0x9D,0x89};
37
-BMD_CONST REFIID IID_IBMDStreamingAudioPacket                     = /* D9EB5902-1AD2-43F4-9E2C-3CFA50B5EE19 */ {0xD9,0xEB,0x59,0x02,0x1A,0xD2,0x43,0xF4,0x9E,0x2C,0x3C,0xFA,0x50,0xB5,0xEE,0x19};
38
-BMD_CONST REFIID IID_IBMDStreamingMPEG2TSPacket                   = /* 91810D1C-4FB3-4AAA-AE56-FA301D3DFA4C */ {0x91,0x81,0x0D,0x1C,0x4F,0xB3,0x4A,0xAA,0xAE,0x56,0xFA,0x30,0x1D,0x3D,0xFA,0x4C};
39
-BMD_CONST REFIID IID_IBMDStreamingH264NALParser                   = /* 5867F18C-5BFA-4CCC-B2A7-9DFD140417D2 */ {0x58,0x67,0xF1,0x8C,0x5B,0xFA,0x4C,0xCC,0xB2,0xA7,0x9D,0xFD,0x14,0x04,0x17,0xD2};
40
+BMD_CONST REFIID IID_IBMDStreamingDeviceNotificationCallback      = /* F9531D64-3305-4B29-A387-7F74BB0D0E84 */ { 0xF9,0x53,0x1D,0x64,0x33,0x05,0x4B,0x29,0xA3,0x87,0x7F,0x74,0xBB,0x0D,0x0E,0x84 };
41
+BMD_CONST REFIID IID_IBMDStreamingH264InputCallback               = /* 823C475F-55AE-46F9-890C-537CC5CEDCCA */ { 0x82,0x3C,0x47,0x5F,0x55,0xAE,0x46,0xF9,0x89,0x0C,0x53,0x7C,0xC5,0xCE,0xDC,0xCA };
42
+BMD_CONST REFIID IID_IBMDStreamingDiscovery                       = /* 2C837444-F989-4D87-901A-47C8A36D096D */ { 0x2C,0x83,0x74,0x44,0xF9,0x89,0x4D,0x87,0x90,0x1A,0x47,0xC8,0xA3,0x6D,0x09,0x6D };
43
+BMD_CONST REFIID IID_IBMDStreamingVideoEncodingMode               = /* 1AB8035B-CD13-458D-B6DF-5E8F7C2141D9 */ { 0x1A,0xB8,0x03,0x5B,0xCD,0x13,0x45,0x8D,0xB6,0xDF,0x5E,0x8F,0x7C,0x21,0x41,0xD9 };
44
+BMD_CONST REFIID IID_IBMDStreamingMutableVideoEncodingMode        = /* 19BF7D90-1E0A-400D-B2C6-FFC4E78AD49D */ { 0x19,0xBF,0x7D,0x90,0x1E,0x0A,0x40,0x0D,0xB2,0xC6,0xFF,0xC4,0xE7,0x8A,0xD4,0x9D };
45
+BMD_CONST REFIID IID_IBMDStreamingVideoEncodingModePresetIterator = /* 7AC731A3-C950-4AD0-804A-8377AA51C6C4 */ { 0x7A,0xC7,0x31,0xA3,0xC9,0x50,0x4A,0xD0,0x80,0x4A,0x83,0x77,0xAA,0x51,0xC6,0xC4 };
46
+BMD_CONST REFIID IID_IBMDStreamingDeviceInput                     = /* 24B6B6EC-1727-44BB-9818-34FF086ACF98 */ { 0x24,0xB6,0xB6,0xEC,0x17,0x27,0x44,0xBB,0x98,0x18,0x34,0xFF,0x08,0x6A,0xCF,0x98 };
47
+BMD_CONST REFIID IID_IBMDStreamingH264NALPacket                   = /* E260E955-14BE-4395-9775-9F02CC0A9D89 */ { 0xE2,0x60,0xE9,0x55,0x14,0xBE,0x43,0x95,0x97,0x75,0x9F,0x02,0xCC,0x0A,0x9D,0x89 };
48
+BMD_CONST REFIID IID_IBMDStreamingAudioPacket                     = /* D9EB5902-1AD2-43F4-9E2C-3CFA50B5EE19 */ { 0xD9,0xEB,0x59,0x02,0x1A,0xD2,0x43,0xF4,0x9E,0x2C,0x3C,0xFA,0x50,0xB5,0xEE,0x19 };
49
+BMD_CONST REFIID IID_IBMDStreamingMPEG2TSPacket                   = /* 91810D1C-4FB3-4AAA-AE56-FA301D3DFA4C */ { 0x91,0x81,0x0D,0x1C,0x4F,0xB3,0x4A,0xAA,0xAE,0x56,0xFA,0x30,0x1D,0x3D,0xFA,0x4C };
50
+BMD_CONST REFIID IID_IBMDStreamingH264NALParser                   = /* 5867F18C-5BFA-4CCC-B2A7-9DFD140417D2 */ { 0x58,0x67,0xF1,0x8C,0x5B,0xFA,0x4C,0xCC,0xB2,0xA7,0x9D,0xFD,0x14,0x04,0x17,0xD2 };
51
 
52
 /* Enum BMDStreamingDeviceMode - Device modes */
53
 
54
 typedef uint32_t BMDStreamingDeviceMode;
55
 enum _BMDStreamingDeviceMode {
56
-    bmdStreamingDeviceIdle                                       = 'idle',
57
-    bmdStreamingDeviceEncoding                                   = 'enco',
58
-    bmdStreamingDeviceStopping                                   = 'stop',
59
-    bmdStreamingDeviceUnknown                                    = 'munk'
60
+    bmdStreamingDeviceIdle                                       = /* 'idle' */ 0x69646C65,
61
+    bmdStreamingDeviceEncoding                                   = /* 'enco' */ 0x656E636F,
62
+    bmdStreamingDeviceStopping                                   = /* 'stop' */ 0x73746F70,
63
+    bmdStreamingDeviceUnknown                                    = /* 'munk' */ 0x6D756E6B
64
 };
65
 
66
 /* Enum BMDStreamingEncodingFrameRate - Encoded frame rates */
67
@@ -75,20 +75,20 @@
68
 
69
     /* Interlaced rates */
70
 
71
-    bmdStreamingEncodedFrameRate50i                              = 'e50i',
72
-    bmdStreamingEncodedFrameRate5994i                            = 'e59i',
73
-    bmdStreamingEncodedFrameRate60i                              = 'e60i',
74
+    bmdStreamingEncodedFrameRate50i                              = /* 'e50i' */ 0x65353069,
75
+    bmdStreamingEncodedFrameRate5994i                            = /* 'e59i' */ 0x65353969,
76
+    bmdStreamingEncodedFrameRate60i                              = /* 'e60i' */ 0x65363069,
77
 
78
     /* Progressive rates */
79
 
80
-    bmdStreamingEncodedFrameRate2398p                            = 'e23p',
81
-    bmdStreamingEncodedFrameRate24p                              = 'e24p',
82
-    bmdStreamingEncodedFrameRate25p                              = 'e25p',
83
-    bmdStreamingEncodedFrameRate2997p                            = 'e29p',
84
-    bmdStreamingEncodedFrameRate30p                              = 'e30p',
85
-    bmdStreamingEncodedFrameRate50p                              = 'e50p',
86
-    bmdStreamingEncodedFrameRate5994p                            = 'e59p',
87
-    bmdStreamingEncodedFrameRate60p                              = 'e60p'
88
+    bmdStreamingEncodedFrameRate2398p                            = /* 'e23p' */ 0x65323370,
89
+    bmdStreamingEncodedFrameRate24p                              = /* 'e24p' */ 0x65323470,
90
+    bmdStreamingEncodedFrameRate25p                              = /* 'e25p' */ 0x65323570,
91
+    bmdStreamingEncodedFrameRate2997p                            = /* 'e29p' */ 0x65323970,
92
+    bmdStreamingEncodedFrameRate30p                              = /* 'e30p' */ 0x65333070,
93
+    bmdStreamingEncodedFrameRate50p                              = /* 'e50p' */ 0x65353070,
94
+    bmdStreamingEncodedFrameRate5994p                            = /* 'e59p' */ 0x65353970,
95
+    bmdStreamingEncodedFrameRate60p                              = /* 'e60p' */ 0x65363070
96
 };
97
 
98
 /* Enum BMDStreamingEncodingSupport - Output encoding mode supported flag */
99
@@ -96,56 +96,56 @@
100
 typedef uint32_t BMDStreamingEncodingSupport;
101
 enum _BMDStreamingEncodingSupport {
102
     bmdStreamingEncodingModeNotSupported                         = 0,
103
-    bmdStreamingEncodingModeSupported,                          
104
-    bmdStreamingEncodingModeSupportedWithChanges                
105
+    bmdStreamingEncodingModeSupported,
106
+    bmdStreamingEncodingModeSupportedWithChanges
107
 };
108
 
109
 /* Enum BMDStreamingVideoCodec - Video codecs */
110
 
111
 typedef uint32_t BMDStreamingVideoCodec;
112
 enum _BMDStreamingVideoCodec {
113
-    bmdStreamingVideoCodecH264                                   = 'H264'
114
+    bmdStreamingVideoCodecH264                                   = /* 'H264' */ 0x48323634
115
 };
116
 
117
 /* Enum BMDStreamingH264Profile - H264 encoding profile */
118
 
119
 typedef uint32_t BMDStreamingH264Profile;
120
 enum _BMDStreamingH264Profile {
121
-    bmdStreamingH264ProfileHigh                                  = 'high',
122
-    bmdStreamingH264ProfileMain                                  = 'main',
123
-    bmdStreamingH264ProfileBaseline                              = 'base'
124
+    bmdStreamingH264ProfileHigh                                  = /* 'high' */ 0x68696768,
125
+    bmdStreamingH264ProfileMain                                  = /* 'main' */ 0x6D61696E,
126
+    bmdStreamingH264ProfileBaseline                              = /* 'base' */ 0x62617365
127
 };
128
 
129
 /* Enum BMDStreamingH264Level - H264 encoding level */
130
 
131
 typedef uint32_t BMDStreamingH264Level;
132
 enum _BMDStreamingH264Level {
133
-    bmdStreamingH264Level12                                      = 'lv12',
134
-    bmdStreamingH264Level13                                      = 'lv13',
135
-    bmdStreamingH264Level2                                       = 'lv2 ',
136
-    bmdStreamingH264Level21                                      = 'lv21',
137
-    bmdStreamingH264Level22                                      = 'lv22',
138
-    bmdStreamingH264Level3                                       = 'lv3 ',
139
-    bmdStreamingH264Level31                                      = 'lv31',
140
-    bmdStreamingH264Level32                                      = 'lv32',
141
-    bmdStreamingH264Level4                                       = 'lv4 ',
142
-    bmdStreamingH264Level41                                      = 'lv41',
143
-    bmdStreamingH264Level42                                      = 'lv42'
144
+    bmdStreamingH264Level12                                      = /* 'lv12' */ 0x6C763132,
145
+    bmdStreamingH264Level13                                      = /* 'lv13' */ 0x6C763133,
146
+    bmdStreamingH264Level2                                       = /* 'lv2 ' */ 0x6C763220,
147
+    bmdStreamingH264Level21                                      = /* 'lv21' */ 0x6C763231,
148
+    bmdStreamingH264Level22                                      = /* 'lv22' */ 0x6C763232,
149
+    bmdStreamingH264Level3                                       = /* 'lv3 ' */ 0x6C763320,
150
+    bmdStreamingH264Level31                                      = /* 'lv31' */ 0x6C763331,
151
+    bmdStreamingH264Level32                                      = /* 'lv32' */ 0x6C763332,
152
+    bmdStreamingH264Level4                                       = /* 'lv4 ' */ 0x6C763420,
153
+    bmdStreamingH264Level41                                      = /* 'lv41' */ 0x6C763431,
154
+    bmdStreamingH264Level42                                      = /* 'lv42' */ 0x6C763432
155
 };
156
 
157
 /* Enum BMDStreamingH264EntropyCoding - H264 entropy coding */
158
 
159
 typedef uint32_t BMDStreamingH264EntropyCoding;
160
 enum _BMDStreamingH264EntropyCoding {
161
-    bmdStreamingH264EntropyCodingCAVLC                           = 'EVLC',
162
-    bmdStreamingH264EntropyCodingCABAC                           = 'EBAC'
163
+    bmdStreamingH264EntropyCodingCAVLC                           = /* 'EVLC' */ 0x45564C43,
164
+    bmdStreamingH264EntropyCodingCABAC                           = /* 'EBAC' */ 0x45424143
165
 };
166
 
167
 /* Enum BMDStreamingAudioCodec - Audio codecs */
168
 
169
 typedef uint32_t BMDStreamingAudioCodec;
170
 enum _BMDStreamingAudioCodec {
171
-    bmdStreamingAudioCodecAAC                                    = 'AAC '
172
+    bmdStreamingAudioCodecAAC                                    = /* 'AAC ' */ 0x41414320
173
 };
174
 
175
 /* Enum BMDStreamingEncodingModePropertyID - Encoding mode properties */
176
@@ -155,27 +155,29 @@
177
 
178
     /* Integers, Video Properties */
179
 
180
-    bmdStreamingEncodingPropertyVideoFrameRate                   = 'vfrt', // Uses values of type BMDStreamingEncodingFrameRate
181
-    bmdStreamingEncodingPropertyVideoBitRateKbps                 = 'vbrt',
182
+    bmdStreamingEncodingPropertyVideoFrameRate                   = /* 'vfrt' */ 0x76667274,    // Uses values of type BMDStreamingEncodingFrameRate
183
+    bmdStreamingEncodingPropertyVideoBitRateKbps                 = /* 'vbrt' */ 0x76627274,
184
 
185
     /* Integers, H264 Properties */
186
 
187
-    bmdStreamingEncodingPropertyH264Profile                      = 'hprf',
188
-    bmdStreamingEncodingPropertyH264Level                        = 'hlvl',
189
-    bmdStreamingEncodingPropertyH264EntropyCoding                = 'hent',
190
+    bmdStreamingEncodingPropertyH264Profile                      = /* 'hprf' */ 0x68707266,
191
+    bmdStreamingEncodingPropertyH264Level                        = /* 'hlvl' */ 0x686C766C,
192
+    bmdStreamingEncodingPropertyH264EntropyCoding                = /* 'hent' */ 0x68656E74,
193
 
194
     /* Flags, H264 Properties */
195
 
196
-    bmdStreamingEncodingPropertyH264HasBFrames                   = 'hBfr',
197
+    bmdStreamingEncodingPropertyH264HasBFrames                   = /* 'hBfr' */ 0x68426672,
198
 
199
     /* Integers, Audio Properties */
200
 
201
-    bmdStreamingEncodingPropertyAudioCodec                       = 'acdc',
202
-    bmdStreamingEncodingPropertyAudioSampleRate                  = 'asrt',
203
-    bmdStreamingEncodingPropertyAudioChannelCount                = 'achc',
204
-    bmdStreamingEncodingPropertyAudioBitRateKbps                 = 'abrt'
205
+    bmdStreamingEncodingPropertyAudioCodec                       = /* 'acdc' */ 0x61636463,
206
+    bmdStreamingEncodingPropertyAudioSampleRate                  = /* 'asrt' */ 0x61737274,
207
+    bmdStreamingEncodingPropertyAudioChannelCount                = /* 'achc' */ 0x61636863,
208
+    bmdStreamingEncodingPropertyAudioBitRateKbps                 = /* 'abrt' */ 0x61627274
209
 };
210
 
211
+#if defined(__cplusplus)
212
+
213
 // Forward Declarations
214
 
215
 class IBMDStreamingDeviceNotificationCallback;
216
@@ -236,7 +238,7 @@
217
 class BMD_PUBLIC IBMDStreamingVideoEncodingMode : public IUnknown
218
 {
219
 public:
220
-    virtual HRESULT GetName (/* out */ CFStringRef *name) = 0;
221
+    virtual HRESULT GetName (/* out */ CFStringRef* name) = 0;
222
     virtual unsigned int GetPresetID (void) = 0;
223
     virtual unsigned int GetSourcePositionX (void) = 0;
224
     virtual unsigned int GetSourcePositionY (void) = 0;
225
@@ -247,8 +249,8 @@
226
     virtual HRESULT GetFlag (/* in */ BMDStreamingEncodingModePropertyID cfgID, /* out */ bool* value) = 0;
227
     virtual HRESULT GetInt (/* in */ BMDStreamingEncodingModePropertyID cfgID, /* out */ int64_t* value) = 0;
228
     virtual HRESULT GetFloat (/* in */ BMDStreamingEncodingModePropertyID cfgID, /* out */ double* value) = 0;
229
-    virtual HRESULT GetString (/* in */ BMDStreamingEncodingModePropertyID cfgID, /* out */ CFStringRef *value) = 0;
230
-    virtual HRESULT CreateMutableVideoEncodingMode (/* out */ IBMDStreamingMutableVideoEncodingMode** newEncodingMode) = 0; // Creates a mutable copy of the encoding mode
231
+    virtual HRESULT GetString (/* in */ BMDStreamingEncodingModePropertyID cfgID, /* out */ CFStringRef* value) = 0;
232
+    virtual HRESULT CreateMutableVideoEncodingMode (/* out */ IBMDStreamingMutableVideoEncodingMode** newEncodingMode) = 0;    // Creates a mutable copy of the encoding mode
233
 
234
 protected:
235
     virtual ~IBMDStreamingVideoEncodingMode () {} // call Release method to drop reference count
236
@@ -318,9 +320,9 @@
237
 public:
238
     virtual long GetPayloadSize (void) = 0;
239
     virtual HRESULT GetBytes (/* out */ void** buffer) = 0;
240
-    virtual HRESULT GetBytesWithSizePrefix (/* out */ void** buffer) = 0; // Contains a 32-bit unsigned big endian size prefix
241
+    virtual HRESULT GetBytesWithSizePrefix (/* out */ void** buffer) = 0;  // Contains a 32-bit unsigned big endian size prefix
242
     virtual HRESULT GetDisplayTime (/* in */ uint64_t requestedTimeScale, /* out */ uint64_t* displayTime) = 0;
243
-    virtual HRESULT GetPacketIndex (/* out */ uint32_t* packetIndex) = 0; // Deprecated
244
+    virtual HRESULT GetPacketIndex (/* out */ uint32_t* packetIndex) = 0;  // Deprecated
245
 
246
 protected:
247
     virtual ~IBMDStreamingH264NALPacket () {} // call Release method to drop reference count
248
@@ -335,7 +337,7 @@
249
     virtual long GetPayloadSize (void) = 0;
250
     virtual HRESULT GetBytes (/* out */ void** buffer) = 0;
251
     virtual HRESULT GetPlayTime (/* in */ uint64_t requestedTimeScale, /* out */ uint64_t* playTime) = 0;
252
-    virtual HRESULT GetPacketIndex (/* out */ uint32_t* packetIndex) = 0; // Deprecated
253
+    virtual HRESULT GetPacketIndex (/* out */ uint32_t* packetIndex) = 0;  // Deprecated
254
 
255
 protected:
256
     virtual ~IBMDStreamingAudioPacket () {} // call Release method to drop reference count
257
@@ -370,10 +372,10 @@
258
 
259
 extern "C" {
260
 
261
-    IBMDStreamingDiscovery* BMD_PUBLIC CreateBMDStreamingDiscoveryInstance (void);
262
-    IBMDStreamingH264NALParser* BMD_PUBLIC CreateBMDStreamingH264NALParser (void);
263
+    IBMDStreamingDiscovery* BMD_PUBLIC CreateBMDStreamingDiscoveryInstance(void);
264
+    IBMDStreamingH264NALParser* BMD_PUBLIC CreateBMDStreamingH264NALParser(void);
265
 
266
 }
267
 
268
-
269
+#endif /* defined(__cplusplus) */
270
 #endif /* defined(BMD_DECKLINKAPISTREAMING_H) */
271
obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIStreaming_v10_11.h Added
48
 
1
@@ -0,0 +1,46 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2018 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+** 
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+** 
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPISTREAMING_H
30
+#define BMD_DECKLINKAPISTREAMING_H
31
+
32
+#ifndef BMD_PUBLIC
33
+   #define BMD_PUBLIC
34
+#endif
35
+
36
+
37
+/* Functions */
38
+
39
+extern "C" {
40
+
41
+    IBMDStreamingDiscovery* BMD_PUBLIC CreateBMDStreamingDiscoveryInstance_v10_11 (void);
42
+    IBMDStreamingH264NALParser* BMD_PUBLIC CreateBMDStreamingH264NALParser_v10_11 (void);
43
+
44
+}
45
+
46
+
47
+#endif /* defined(BMD_DECKLINKAPISTREAMING_H) */
48
obs-studio-26.0.2.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPITypes.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPITypes.h Changed
82
 
1
@@ -1,5 +1,5 @@
2
 /* -LICENSE-START-
3
-** Copyright (c) 2018 Blackmagic Design
4
+** Copyright (c) 2020 Blackmagic Design
5
 **
6
 ** Permission is hereby granted, free of charge, to any person or organization
7
 ** obtaining a copy of the software and accompanying documentation covered by
8
@@ -7,14 +7,14 @@
9
 ** execute, and transmit the Software, and to prepare derivative works of the
10
 ** Software, and to permit third-parties to whom the Software is furnished to
11
 ** do so, all subject to the following:
12
-** 
13
+**
14
 ** The copyright notices in the Software and this entire statement, including
15
 ** the above license grant, this restriction and the following disclaimer,
16
 ** must be included in all copies of the Software, in whole or in part, and
17
 ** all derivative works of the Software, unless such copies or derivative
18
 ** works are solely in the form of machine-executable object code generated by
19
 ** a source language processor.
20
-** 
21
+**
22
 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
 ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
 ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
25
@@ -50,7 +50,7 @@
26
 
27
 // Interface ID Declarations
28
 
29
-BMD_CONST REFIID IID_IDeckLinkTimecode                            = /* BC6CFBD3-8317-4325-AC1C-1216391E9340 */ {0xBC,0x6C,0xFB,0xD3,0x83,0x17,0x43,0x25,0xAC,0x1C,0x12,0x16,0x39,0x1E,0x93,0x40};
30
+BMD_CONST REFIID IID_IDeckLinkTimecode                            = /* BC6CFBD3-8317-4325-AC1C-1216391E9340 */ { 0xBC,0x6C,0xFB,0xD3,0x83,0x17,0x43,0x25,0xAC,0x1C,0x12,0x16,0x39,0x1E,0x93,0x40 };
31
 
32
 /* Enum BMDTimecodeFlags - Timecode flags */
33
 
34
@@ -59,13 +59,16 @@
35
     bmdTimecodeFlagDefault                                       = 0,
36
     bmdTimecodeIsDropFrame                                       = 1 << 0,
37
     bmdTimecodeFieldMark                                         = 1 << 1,
38
-    bmdTimecodeColorFrame                                        = 1 << 2
39
+    bmdTimecodeColorFrame                                        = 1 << 2,
40
+    bmdTimecodeEmbedRecordingTrigger                             = 1 << 3, // On SDI recording trigger utilises a user-bit.
41
+    bmdTimecodeRecordingTriggered                                = 1 << 4
42
 };
43
 
44
 /* Enum BMDVideoConnection - Video connection types */
45
 
46
 typedef uint32_t BMDVideoConnection;
47
 enum _BMDVideoConnection {
48
+    bmdVideoConnectionUnspecified                                = 0,
49
     bmdVideoConnectionSDI                                        = 1 << 0,
50
     bmdVideoConnectionHDMI                                       = 1 << 1,
51
     bmdVideoConnectionOpticalSDI                                 = 1 << 2,
52
@@ -95,6 +98,8 @@
53
     bmdDeckControlConnectionRS422Remote2                         = 1 << 1
54
 };
55
 
56
+#if defined(__cplusplus)
57
+
58
 // Forward Declarations
59
 
60
 class IDeckLinkTimecode;
61
@@ -105,10 +110,10 @@
62
 {
63
 public:
64
     virtual BMDTimecodeBCD GetBCD (void) = 0;
65
-    virtual HRESULT GetComponents (/* out */ uint8_t *hours, /* out */ uint8_t *minutes, /* out */ uint8_t *seconds, /* out */ uint8_t *frames) = 0;
66
-    virtual HRESULT GetString (/* out */ CFStringRef *timecode) = 0;
67
+    virtual HRESULT GetComponents (/* out */ uint8_t* hours, /* out */ uint8_t* minutes, /* out */ uint8_t* seconds, /* out */ uint8_t* frames) = 0;
68
+    virtual HRESULT GetString (/* out */ CFStringRef* timecode) = 0;
69
     virtual BMDTimecodeFlags GetFlags (void) = 0;
70
-    virtual HRESULT GetTimecodeUserBits (/* out */ BMDTimecodeUserBits *userBits) = 0;
71
+    virtual HRESULT GetTimecodeUserBits (/* out */ BMDTimecodeUserBits* userBits) = 0;
72
 
73
 protected:
74
     virtual ~IDeckLinkTimecode () {} // call Release method to drop reference count
75
@@ -121,5 +126,5 @@
76
 
77
 }
78
 
79
-
80
+#endif /* defined(__cplusplus) */
81
 #endif /* defined(BMD_DECKLINKAPITYPES_H) */
82
obs-studio-26.0.2.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIVersion.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIVersion.h Changed
12
 
1
@@ -30,8 +30,8 @@
2
 #ifndef __DeckLink_API_Version_h__
3
 #define __DeckLink_API_Version_h__
4
 
5
-#define BLACKMAGIC_DECKLINK_API_VERSION                    0x0a0b0400
6
-#define BLACKMAGIC_DECKLINK_API_VERSION_STRING         "10.11.4"
7
+#define BLACKMAGIC_DECKLINK_API_VERSION                    0x0b060000
8
+#define BLACKMAGIC_DECKLINK_API_VERSION_STRING         "11.6"
9
 
10
 #endif // __DeckLink_API_Version_h__
11
 
12
obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIVideoEncoderInput_v10_11.h Added
77
 
1
@@ -0,0 +1,75 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2017 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPIVIDEOENCODERINPUT_v10_11_H
30
+#define BMD_DECKLINKAPIVIDEOENCODERINPUT_v10_11_H
31
+
32
+#include "DeckLinkAPI.h"
33
+#include "DeckLinkAPI_v10_11.h"
34
+
35
+// Type Declarations
36
+
37
+BMD_CONST REFIID IID_IDeckLinkEncoderInput_v10_11                        = /* 270587DA-6B7D-42E7-A1F0-6D853F581185 */ {0x27,0x05,0x87,0xDA,0x6B,0x7D,0x42,0xE7,0xA1,0xF0,0x6D,0x85,0x3F,0x58,0x11,0x85};
38
+
39
+/* Interface IDeckLinkEncoderInput_v10_11 - Created by QueryInterface from IDeckLink. */
40
+
41
+class IDeckLinkEncoderInput_v10_11 : public IUnknown
42
+{
43
+public:
44
+    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport_v10_11 *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
45
+    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
46
+
47
+    /* Video Input */
48
+
49
+    virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
50
+    virtual HRESULT DisableVideoInput (void) = 0;
51
+    virtual HRESULT GetAvailablePacketsCount (/* out */ uint32_t *availablePacketsCount) = 0;
52
+    virtual HRESULT SetMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
53
+
54
+    /* Audio Input */
55
+
56
+    virtual HRESULT EnableAudioInput (/* in */ BMDAudioFormat audioFormat, /* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
57
+    virtual HRESULT DisableAudioInput (void) = 0;
58
+    virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
59
+
60
+    /* Input Control */
61
+
62
+    virtual HRESULT StartStreams (void) = 0;
63
+    virtual HRESULT StopStreams (void) = 0;
64
+    virtual HRESULT PauseStreams (void) = 0;
65
+    virtual HRESULT FlushStreams (void) = 0;
66
+    virtual HRESULT SetCallback (/* in */ IDeckLinkEncoderInputCallback *theCallback) = 0;
67
+
68
+    /* Hardware Timing */
69
+
70
+    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
71
+
72
+protected:
73
+    virtual ~IDeckLinkEncoderInput_v10_11 () {} // call Release method to drop reference count
74
+};
75
+
76
+#endif /* defined(BMD_DECKLINKAPIVIDEOENCODERINPUT_v10_11_H) */
77
obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIVideoInput_v10_11.h Added
79
 
1
@@ -0,0 +1,77 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2017 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPIVIDEOINPUT_v10_11_H
30
+#define BMD_DECKLINKAPIVIDEOINPUT_v10_11_H
31
+
32
+#include "DeckLinkAPI.h"
33
+#include "DeckLinkAPI_v10_11.h"
34
+
35
+// Type Declarations
36
+
37
+BMD_CONST REFIID IID_IDeckLinkInput_v10_11                               = /* AF22762B-DFAC-4846-AA79-FA8883560995 */ {0xAF,0x22,0x76,0x2B,0xDF,0xAC,0x48,0x46,0xAA,0x79,0xFA,0x88,0x83,0x56,0x09,0x95};
38
+
39
+/* Interface IDeckLinkInput_v10_11 - DeckLink input interface. */
40
+
41
+class IDeckLinkInput_v10_11 : public IUnknown
42
+{
43
+public:
44
+    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport_v10_11 *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
45
+    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
46
+
47
+    virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
48
+
49
+    /* Video Input */
50
+
51
+    virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
52
+    virtual HRESULT DisableVideoInput (void) = 0;
53
+    virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t *availableFrameCount) = 0;
54
+    virtual HRESULT SetVideoInputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
55
+
56
+    /* Audio Input */
57
+
58
+    virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
59
+    virtual HRESULT DisableAudioInput (void) = 0;
60
+    virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
61
+
62
+    /* Input Control */
63
+
64
+    virtual HRESULT StartStreams (void) = 0;
65
+    virtual HRESULT StopStreams (void) = 0;
66
+    virtual HRESULT PauseStreams (void) = 0;
67
+    virtual HRESULT FlushStreams (void) = 0;
68
+    virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback *theCallback) = 0;
69
+
70
+    /* Hardware Timing */
71
+
72
+    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
73
+
74
+protected:
75
+    virtual ~IDeckLinkInput_v10_11 () {} // call Release method to drop reference count
76
+};
77
+
78
+#endif /* defined(BMD_DECKLINKAPIVIDEOINPUT_v10_11_H) */
79
obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIVideoInput_v11_4.h Added
78
 
1
@@ -0,0 +1,76 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2019 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPIVIDEOINPUT_v11_4_H
30
+#define BMD_DECKLINKAPIVIDEOINPUT_v11_4_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+// Type Declarations
35
+
36
+BMD_CONST REFIID IID_IDeckLinkInput_v11_4                               = /* 2A88CF76-F494-4216-A7EF-DC74EEB83882 */ { 0x2A,0x88,0xCF,0x76,0xF4,0x94,0x42,0x16,0xA7,0xEF,0xDC,0x74,0xEE,0xB8,0x38,0x82 };
37
+
38
+/* Interface IDeckLinkInput_v11_4 - Created by QueryInterface from IDeckLink. */
39
+
40
+class BMD_PUBLIC IDeckLinkInput_v11_4 : public IUnknown
41
+{
42
+public:
43
+    virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of 0 is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedPixelFormat, /* in */ BMDSupportedVideoModeFlags flags, /* out */ bool* supported) = 0;
44
+    virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
45
+    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
46
+    virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback* previewCallback) = 0;
47
+
48
+    /* Video Input */
49
+
50
+    virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
51
+    virtual HRESULT DisableVideoInput (void) = 0;
52
+    virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t* availableFrameCount) = 0;
53
+    virtual HRESULT SetVideoInputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator* theAllocator) = 0;
54
+
55
+    /* Audio Input */
56
+
57
+    virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
58
+    virtual HRESULT DisableAudioInput (void) = 0;
59
+    virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t* availableSampleFrameCount) = 0;
60
+
61
+    /* Input Control */
62
+
63
+    virtual HRESULT StartStreams (void) = 0;
64
+    virtual HRESULT StopStreams (void) = 0;
65
+    virtual HRESULT PauseStreams (void) = 0;
66
+    virtual HRESULT FlushStreams (void) = 0;
67
+    virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback* theCallback) = 0;
68
+
69
+    /* Hardware Timing */
70
+
71
+    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
72
+
73
+protected:
74
+    virtual ~IDeckLinkInput_v11_4 () {} // call Release method to drop reference count
75
+};
76
+
77
+#endif /* defined(BMD_DECKLINKAPIVIDEOINPUT_v11_4_H) */
78
obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIVideoInput_v11_5_1.h Added
91
 
1
@@ -0,0 +1,89 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2020 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+** 
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+** 
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPIVIDEOINPUT_v11_5_1_H
30
+#define BMD_DECKLINKAPIVIDEOINPUT_v11_5_1_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+// Type Declarations
35
+
36
+BMD_CONST REFIID IID_IDeckLinkInputCallback_v11_5_1                       = /* DD04E5EC-7415-42AB-AE4A-E80C4DFC044A */ { 0xDD, 0x04, 0xE5, 0xEC, 0x74, 0x15, 0x42, 0xAB, 0xAE, 0x4A, 0xE8, 0x0C, 0x4D, 0xFC, 0x04, 0x4A };
37
+BMD_CONST REFIID IID_IDeckLinkInput_v11_5_1                               = /* 9434C6E4-B15D-4B1C-979E-661E3DDCB4B9 */ { 0x94, 0x34, 0xC6, 0xE4, 0xB1, 0x5D, 0x4B, 0x1C, 0x97, 0x9E, 0x66, 0x1E, 0x3D, 0xDC, 0xB4, 0xB9 };
38
+
39
+/* Interface IDeckLinkInputCallback_v11_5_1 - Frame arrival callback. */
40
+
41
+class BMD_PUBLIC IDeckLinkInputCallback_v11_5_1 : public IUnknown
42
+{
43
+public:
44
+    virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode* newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
45
+    virtual HRESULT VideoInputFrameArrived (/* in */ IDeckLinkVideoInputFrame* videoFrame, /* in */ IDeckLinkAudioInputPacket* audioPacket) = 0;
46
+
47
+protected:
48
+    virtual ~IDeckLinkInputCallback_v11_5_1 () {} // call Release method to drop reference count
49
+};
50
+
51
+/* Interface IDeckLinkInput_v11_5_1 - Created by QueryInterface from IDeckLink. */
52
+
53
+class BMD_PUBLIC IDeckLinkInput_v11_5_1 : public IUnknown
54
+{
55
+public:
56
+    virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of bmdVideoConnectionUnspecified is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedPixelFormat, /* in */ BMDVideoInputConversionMode conversionMode, /* in */ BMDSupportedVideoModeFlags flags, /* out */ BMDDisplayMode* actualMode, /* out */ bool* supported) = 0;
57
+    virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
58
+    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
59
+    virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback* previewCallback) = 0;
60
+
61
+    /* Video Input */
62
+
63
+    virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
64
+    virtual HRESULT DisableVideoInput (void) = 0;
65
+    virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t* availableFrameCount) = 0;
66
+    virtual HRESULT SetVideoInputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator* theAllocator) = 0;
67
+
68
+    /* Audio Input */
69
+
70
+    virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
71
+    virtual HRESULT DisableAudioInput (void) = 0;
72
+    virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t* availableSampleFrameCount) = 0;
73
+
74
+    /* Input Control */
75
+
76
+    virtual HRESULT StartStreams (void) = 0;
77
+    virtual HRESULT StopStreams (void) = 0;
78
+    virtual HRESULT PauseStreams (void) = 0;
79
+    virtual HRESULT FlushStreams (void) = 0;
80
+    virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback_v11_5_1* theCallback) = 0;
81
+
82
+    /* Hardware Timing */
83
+
84
+    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
85
+
86
+protected:
87
+    virtual ~IDeckLinkInput_v11_5_1 () {} // call Release method to drop reference count
88
+};
89
+
90
+#endif /* defined(BMD_DECKLINKAPIVIDEOINPUT_v11_5_1_H) */
91
obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIVideoOutput_v10_11.h Added
97
 
1
@@ -0,0 +1,95 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2017 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPIVIDEOOUTPUT_v10_11_H
30
+#define BMD_DECKLINKAPIVIDEOOUTPUT_v10_11_H
31
+
32
+#include "DeckLinkAPI.h"
33
+#include "DeckLinkAPI_v10_11.h"
34
+
35
+// Type Declarations
36
+
37
+BMD_CONST REFIID IID_IDeckLinkOutput_v10_11                              = /* CC5C8A6E-3F2F-4B3A-87EA-FD78AF300564 */ {0xCC,0x5C,0x8A,0x6E,0x3F,0x2F,0x4B,0x3A,0x87,0xEA,0xFD,0x78,0xAF,0x30,0x05,0x64};
38
+
39
+/* Interface IDeckLinkOutput_v10_11 - DeckLink output interface. */
40
+
41
+class IDeckLinkOutput_v10_11 : public IUnknown
42
+{
43
+public:
44
+    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoOutputFlags flags, /* out */ BMDDisplayModeSupport_v10_11 *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
45
+    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
46
+
47
+    virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
48
+
49
+    /* Video Output */
50
+
51
+    virtual HRESULT EnableVideoOutput (/* in */ BMDDisplayMode displayMode, /* in */ BMDVideoOutputFlags flags) = 0;
52
+    virtual HRESULT DisableVideoOutput (void) = 0;
53
+
54
+    virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
55
+    virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame **outFrame) = 0;
56
+    virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary **outBuffer) = 0;
57
+
58
+    virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame *theFrame) = 0;
59
+    virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame *theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
60
+    virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback *theCallback) = 0;
61
+    virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t *bufferedFrameCount) = 0;
62
+
63
+    /* Audio Output */
64
+
65
+    virtual HRESULT EnableAudioOutput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount, /* in */ BMDAudioOutputStreamType streamType) = 0;
66
+    virtual HRESULT DisableAudioOutput (void) = 0;
67
+
68
+    virtual HRESULT WriteAudioSamplesSync (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* out */ uint32_t *sampleFramesWritten) = 0;
69
+
70
+    virtual HRESULT BeginAudioPreroll (void) = 0;
71
+    virtual HRESULT EndAudioPreroll (void) = 0;
72
+    virtual HRESULT ScheduleAudioSamples (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* in */ BMDTimeValue streamTime, /* in */ BMDTimeScale timeScale, /* out */ uint32_t *sampleFramesWritten) = 0;
73
+
74
+    virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t *bufferedSampleFrameCount) = 0;
75
+    virtual HRESULT FlushBufferedAudioSamples (void) = 0;
76
+
77
+    virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback *theCallback) = 0;
78
+
79
+    /* Output Control */
80
+
81
+    virtual HRESULT StartScheduledPlayback (/* in */ BMDTimeValue playbackStartTime, /* in */ BMDTimeScale timeScale, /* in */ double playbackSpeed) = 0;
82
+    virtual HRESULT StopScheduledPlayback (/* in */ BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue *actualStopTime, /* in */ BMDTimeScale timeScale) = 0;
83
+    virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool *active) = 0;
84
+    virtual HRESULT GetScheduledStreamTime (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *streamTime, /* out */ double *playbackSpeed) = 0;
85
+    virtual HRESULT GetReferenceStatus (/* out */ BMDReferenceStatus *referenceStatus) = 0;
86
+
87
+    /* Hardware Timing */
88
+
89
+    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
90
+    virtual HRESULT GetFrameCompletionReferenceTimestamp (/* in */ IDeckLinkVideoFrame *theFrame, /* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *frameCompletionTimestamp) = 0;
91
+
92
+protected:
93
+    virtual ~IDeckLinkOutput_v10_11 () {} // call Release method to drop reference count
94
+};
95
+
96
+#endif /* defined(BMD_DECKLINKAPIVIDEOOUTPUT_v10_11_H) */
97
obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIVideoOutput_v11_4.h Added
90
 
1
@@ -0,0 +1,88 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2019 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPIVIDEOOUTPUT_v11_4_H
30
+#define BMD_DECKLINKAPIVIDEOOUTPUT_v11_4_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+// Type Declarations
35
+
36
+BMD_CONST REFIID IID_IDeckLinkOutput_v11_4                              = /* 065A0F6C-C508-4D0D-B919-F5EB0EBFC96B */ { 0x06,0x5A,0x0F,0x6C,0xC5,0x08,0x4D,0x0D,0xB9,0x19,0xF5,0xEB,0x0E,0xBF,0xC9,0x6B };
37
+
38
+/* Interface IDeckLinkOutput_v11_4 - Created by QueryInterface from IDeckLink. */
39
+
40
+class BMD_PUBLIC IDeckLinkOutput_v11_4 : public IUnknown
41
+{
42
+public:
43
+    virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of 0 is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedPixelFormat, /* in */ BMDSupportedVideoModeFlags flags, /* out */ BMDDisplayMode* actualMode, /* out */ bool* supported) = 0;
44
+    virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
45
+    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
46
+    virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback* previewCallback) = 0;
47
+
48
+    /* Video Output */
49
+
50
+    virtual HRESULT EnableVideoOutput (/* in */ BMDDisplayMode displayMode, /* in */ BMDVideoOutputFlags flags) = 0;
51
+    virtual HRESULT DisableVideoOutput (void) = 0;
52
+    virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator* theAllocator) = 0;
53
+    virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame** outFrame) = 0;
54
+    virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary** outBuffer) = 0; // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
55
+    virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame* theFrame) = 0;
56
+    virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame* theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
57
+    virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback* theCallback) = 0;
58
+    virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t* bufferedFrameCount) = 0;
59
+
60
+    /* Audio Output */
61
+
62
+    virtual HRESULT EnableAudioOutput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount, /* in */ BMDAudioOutputStreamType streamType) = 0;
63
+    virtual HRESULT DisableAudioOutput (void) = 0;
64
+    virtual HRESULT WriteAudioSamplesSync (/* in */ void* buffer, /* in */ uint32_t sampleFrameCount, /* out */ uint32_t* sampleFramesWritten) = 0;
65
+    virtual HRESULT BeginAudioPreroll (void) = 0;
66
+    virtual HRESULT EndAudioPreroll (void) = 0;
67
+    virtual HRESULT ScheduleAudioSamples (/* in */ void* buffer, /* in */ uint32_t sampleFrameCount, /* in */ BMDTimeValue streamTime, /* in */ BMDTimeScale timeScale, /* out */ uint32_t* sampleFramesWritten) = 0;
68
+    virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t* bufferedSampleFrameCount) = 0;
69
+    virtual HRESULT FlushBufferedAudioSamples (void) = 0;
70
+    virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback* theCallback) = 0;
71
+
72
+    /* Output Control */
73
+
74
+    virtual HRESULT StartScheduledPlayback (/* in */ BMDTimeValue playbackStartTime, /* in */ BMDTimeScale timeScale, /* in */ double playbackSpeed) = 0;
75
+    virtual HRESULT StopScheduledPlayback (/* in */ BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue* actualStopTime, /* in */ BMDTimeScale timeScale) = 0;
76
+    virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool* active) = 0;
77
+    virtual HRESULT GetScheduledStreamTime (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* streamTime, /* out */ double* playbackSpeed) = 0;
78
+    virtual HRESULT GetReferenceStatus (/* out */ BMDReferenceStatus* referenceStatus) = 0;
79
+
80
+    /* Hardware Timing */
81
+
82
+    virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
83
+    virtual HRESULT GetFrameCompletionReferenceTimestamp (/* in */ IDeckLinkVideoFrame* theFrame, /* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* frameCompletionTimestamp) = 0;
84
+
85
+protected:
86
+    virtual ~IDeckLinkOutput_v11_4 () {} // call Release method to drop reference count
87
+};
88
+
89
+#endif /* defined(BMD_DECKLINKAPIVIDEOOUTPUT_v11_4_H) */
90
obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v10_11.h Added
124
 
1
@@ -0,0 +1,122 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2018 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+** 
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+** 
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPI_v10_11_H
30
+#define BMD_DECKLINKAPI_v10_11_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+// Interface ID Declarations
35
+
36
+BMD_CONST REFIID IID_IDeckLinkAttributes_v10_11                     = /* ABC11843-D966-44CB-96E2-A1CB5D3135C4 */ {0xAB,0xC1,0x18,0x43,0xD9,0x66,0x44,0xCB,0x96,0xE2,0xA1,0xCB,0x5D,0x31,0x35,0xC4};
37
+BMD_CONST REFIID IID_IDeckLinkNotification_v10_11                   = /* 0A1FB207-E215-441B-9B19-6FA1575946C5 */ {0x0A,0x1F,0xB2,0x07,0xE2,0x15,0x44,0x1B,0x9B,0x19,0x6F,0xA1,0x57,0x59,0x46,0xC5};
38
+
39
+/* Enum BMDDisplayModeSupport_v10_11 - Output mode supported flags */
40
+
41
+typedef uint32_t BMDDisplayModeSupport_v10_11;
42
+enum _BMDDisplayModeSupport_v10_11 {
43
+   bmdDisplayModeNotSupported_v10_11                               = 0,
44
+   bmdDisplayModeSupported_v10_11,
45
+   bmdDisplayModeSupportedWithConversion_v10_11
46
+};
47
+
48
+/* Enum BMDDuplexMode_v10_11 - Duplex for configurable ports */
49
+
50
+typedef uint32_t BMDDuplexMode_v10_11;
51
+enum _BMDDuplexMode_v10_11 {
52
+   bmdDuplexModeFull_v10_11                                        = 'fdup',
53
+   bmdDuplexModeHalf_v10_11                                        = 'hdup'
54
+};
55
+
56
+/* Enum BMDDeckLinkAttributeID_v10_11 - DeckLink Attribute ID */
57
+
58
+enum _BMDDeckLinkAttributeID_v10_11 {
59
+
60
+    /* Flags */
61
+
62
+    BMDDeckLinkSupportsDuplexModeConfiguration_v10_11               = 'dupx',
63
+    BMDDeckLinkSupportsHDKeying_v10_11                              = 'keyh',
64
+
65
+    /* Integers */
66
+
67
+    BMDDeckLinkPairedDevicePersistentID_v10_11                      = 'ppid',
68
+    BMDDeckLinkSupportsFullDuplex_v10_11                            = 'fdup',
69
+};
70
+
71
+enum  _BMDDeckLinkStatusID_v10_11 {
72
+    bmdDeckLinkStatusDuplexMode_v10_11                             = 'dupx',
73
+};
74
+
75
+typedef uint32_t BMDDuplexStatus_v10_11;
76
+enum _BMDDuplexStatus_v10_11 {
77
+    bmdDuplexFullDuplex_v10_11                                     = 'fdup',
78
+    bmdDuplexHalfDuplex_v10_11                                     = 'hdup',
79
+    bmdDuplexSimplex_v10_11                                        = 'splx',
80
+    bmdDuplexInactive_v10_11                                       = 'inac',
81
+};
82
+
83
+#if defined(__cplusplus)
84
+
85
+/* Interface IDeckLinkAttributes_v10_11 - DeckLink Attribute interface */
86
+
87
+class BMD_PUBLIC IDeckLinkAttributes_v10_11 : public IUnknown
88
+{
89
+public:
90
+    virtual HRESULT GetFlag (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ bool *value) = 0;
91
+    virtual HRESULT GetInt (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ int64_t *value) = 0;
92
+    virtual HRESULT GetFloat (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ double *value) = 0;
93
+    virtual HRESULT GetString (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ CFStringRef *value) = 0;
94
+
95
+protected:
96
+    virtual ~IDeckLinkAttributes_v10_11 () {} // call Release method to drop reference count
97
+};
98
+
99
+/* Interface IDeckLinkNotification_v10_11 - DeckLink Notification interface */
100
+
101
+class BMD_PUBLIC IDeckLinkNotification_v10_11 : public IUnknown
102
+{
103
+public:
104
+    virtual HRESULT Subscribe (/* in */ BMDNotifications topic, /* in */ IDeckLinkNotificationCallback *theCallback) = 0;
105
+    virtual HRESULT Unsubscribe (/* in */ BMDNotifications topic, /* in */ IDeckLinkNotificationCallback *theCallback) = 0;
106
+};
107
+
108
+/* Functions */
109
+
110
+extern "C" {
111
+
112
+    IDeckLinkIterator* BMD_PUBLIC CreateDeckLinkIteratorInstance_v10_11 (void);
113
+    IDeckLinkDiscovery* BMD_PUBLIC CreateDeckLinkDiscoveryInstance_v10_11 (void);
114
+    IDeckLinkAPIInformation* BMD_PUBLIC CreateDeckLinkAPIInformationInstance_v10_11 (void);
115
+    IDeckLinkGLScreenPreviewHelper* BMD_PUBLIC CreateOpenGLScreenPreviewHelper_v10_11 (void);
116
+    IDeckLinkCocoaScreenPreviewCallback* BMD_PUBLIC CreateCocoaScreenPreview_v10_11 (void* /* (NSView*) */ parentView);
117
+    IDeckLinkVideoConversion* BMD_PUBLIC CreateVideoConversionInstance_v10_11 (void);
118
+    IDeckLinkVideoFrameAncillaryPackets* BMD_PUBLIC CreateVideoFrameAncillaryPacketsInstance_v10_11 (void); // For use when creating a custom IDeckLinkVideoFrame without wrapping IDeckLinkOutput::CreateVideoFrame
119
+
120
+}
121
+
122
+#endif      // defined(__cplusplus)
123
+#endif /* defined(BMD_DECKLINKAPI_v10_11_H) */
124
obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v11_5.h Added
102
 
1
@@ -0,0 +1,100 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2020 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+** 
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+** 
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPI_v11_5_H
30
+#define BMD_DECKLINKAPI_v11_5_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+BMD_CONST REFIID IID_IDeckLinkVideoFrameMetadataExtensions_v11_5   = /* D5973DC9-6432-46D0-8F0B-2496F8A1238F */ {0xD5,0x97,0x3D,0xC9,0x64,0x32,0x46,0xD0,0x8F,0x0B,0x24,0x96,0xF8,0xA1,0x23,0x8F};
35
+
36
+/* Enum BMDDeckLinkFrameMetadataID - DeckLink Frame Metadata ID */
37
+
38
+typedef uint32_t BMDDeckLinkFrameMetadataID_v11_5;
39
+enum _BMDDeckLinkFrameMetadataID_v11_5 {
40
+    bmdDeckLinkFrameMetadataCintelFilmType_v11_5                       = /* 'cfty' */ 0x63667479,  // Current film type
41
+    bmdDeckLinkFrameMetadataCintelFilmGauge_v11_5                      = /* 'cfga' */ 0x63666761,  // Current film gauge
42
+    bmdDeckLinkFrameMetadataCintelKeykodeLow_v11_5                     = /* 'ckkl' */ 0x636B6B6C,  // Raw keykode value - low 64 bits
43
+    bmdDeckLinkFrameMetadataCintelKeykodeHigh_v11_5                    = /* 'ckkh' */ 0x636B6B68,  // Raw keykode value - high 64 bits
44
+    bmdDeckLinkFrameMetadataCintelTile1Size_v11_5                      = /* 'ct1s' */ 0x63743173,  // Size in bytes of compressed raw tile 1
45
+    bmdDeckLinkFrameMetadataCintelTile2Size_v11_5                      = /* 'ct2s' */ 0x63743273,  // Size in bytes of compressed raw tile 2
46
+    bmdDeckLinkFrameMetadataCintelTile3Size_v11_5                      = /* 'ct3s' */ 0x63743373,  // Size in bytes of compressed raw tile 3
47
+    bmdDeckLinkFrameMetadataCintelTile4Size_v11_5                      = /* 'ct4s' */ 0x63743473,  // Size in bytes of compressed raw tile 4
48
+    bmdDeckLinkFrameMetadataCintelImageWidth_v11_5                     = /* 'IWPx' */ 0x49575078,  // Width in pixels of image
49
+    bmdDeckLinkFrameMetadataCintelImageHeight_v11_5                    = /* 'IHPx' */ 0x49485078,  // Height in pixels of image
50
+    bmdDeckLinkFrameMetadataCintelLinearMaskingRedInRed_v11_5          = /* 'mrir' */ 0x6D726972,  // Red in red linear masking parameter
51
+    bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInRed_v11_5        = /* 'mgir' */ 0x6D676972,  // Green in red linear masking parameter
52
+    bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInRed_v11_5         = /* 'mbir' */ 0x6D626972,  // Blue in red linear masking parameter
53
+    bmdDeckLinkFrameMetadataCintelLinearMaskingRedInGreen_v11_5        = /* 'mrig' */ 0x6D726967,  // Red in green linear masking parameter
54
+    bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInGreen_v11_5      = /* 'mgig' */ 0x6D676967,  // Green in green linear masking parameter
55
+    bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInGreen_v11_5       = /* 'mbig' */ 0x6D626967,  // Blue in green linear masking parameter
56
+    bmdDeckLinkFrameMetadataCintelLinearMaskingRedInBlue_v11_5         = /* 'mrib' */ 0x6D726962,  // Red in blue linear masking parameter
57
+    bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInBlue_v11_5       = /* 'mgib' */ 0x6D676962,  // Green in blue linear masking parameter
58
+    bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInBlue_v11_5        = /* 'mbib' */ 0x6D626962,  // Blue in blue linear masking parameter
59
+    bmdDeckLinkFrameMetadataCintelLogMaskingRedInRed_v11_5             = /* 'mlrr' */ 0x6D6C7272,  // Red in red log masking parameter
60
+    bmdDeckLinkFrameMetadataCintelLogMaskingGreenInRed_v11_5           = /* 'mlgr' */ 0x6D6C6772,  // Green in red log masking parameter
61
+    bmdDeckLinkFrameMetadataCintelLogMaskingBlueInRed_v11_5            = /* 'mlbr' */ 0x6D6C6272,  // Blue in red log masking parameter
62
+    bmdDeckLinkFrameMetadataCintelLogMaskingRedInGreen_v11_5           = /* 'mlrg' */ 0x6D6C7267,  // Red in green log masking parameter
63
+    bmdDeckLinkFrameMetadataCintelLogMaskingGreenInGreen_v11_5         = /* 'mlgg' */ 0x6D6C6767,  // Green in green log masking parameter
64
+    bmdDeckLinkFrameMetadataCintelLogMaskingBlueInGreen_v11_5          = /* 'mlbg' */ 0x6D6C6267,  // Blue in green log masking parameter
65
+    bmdDeckLinkFrameMetadataCintelLogMaskingRedInBlue_v11_5            = /* 'mlrb' */ 0x6D6C7262,  // Red in blue log masking parameter
66
+    bmdDeckLinkFrameMetadataCintelLogMaskingGreenInBlue_v11_5          = /* 'mlgb' */ 0x6D6C6762,  // Green in blue log masking parameter
67
+    bmdDeckLinkFrameMetadataCintelLogMaskingBlueInBlue_v11_5           = /* 'mlbb' */ 0x6D6C6262,  // Blue in blue log masking parameter
68
+    bmdDeckLinkFrameMetadataCintelFilmFrameRate_v11_5                  = /* 'cffr' */ 0x63666672,  // Film frame rate
69
+    bmdDeckLinkFrameMetadataCintelOffsetToApplyHorizontal_v11_5        = /* 'otah' */ 0x6F746168,  // Horizontal offset (pixels) to be applied to image
70
+    bmdDeckLinkFrameMetadataCintelOffsetToApplyVertical_v11_5          = /* 'otav' */ 0x6F746176,  // Vertical offset (pixels) to be applied to image
71
+    bmdDeckLinkFrameMetadataCintelGainRed_v11_5                        = /* 'LfRd' */ 0x4C665264,  // Red gain parameter to apply after log
72
+    bmdDeckLinkFrameMetadataCintelGainGreen_v11_5                      = /* 'LfGr' */ 0x4C664772,  // Green gain parameter to apply after log
73
+    bmdDeckLinkFrameMetadataCintelGainBlue_v11_5                       = /* 'LfBl' */ 0x4C66426C,  // Blue gain parameter to apply after log
74
+    bmdDeckLinkFrameMetadataCintelLiftRed_v11_5                        = /* 'GnRd' */ 0x476E5264,  // Red lift parameter to apply after log and gain
75
+    bmdDeckLinkFrameMetadataCintelLiftGreen_v11_5                      = /* 'GnGr' */ 0x476E4772,  // Green lift parameter to apply after log and gain
76
+    bmdDeckLinkFrameMetadataCintelLiftBlue_v11_5                       = /* 'GnBl' */ 0x476E426C,  // Blue lift parameter to apply after log and gain
77
+    bmdDeckLinkFrameMetadataCintelHDRGainRed_v11_5                     = /* 'HGRd' */ 0x48475264,  // Red gain parameter to apply to linear data for HDR Combination
78
+    bmdDeckLinkFrameMetadataCintelHDRGainGreen_v11_5                   = /* 'HGGr' */ 0x48474772,  // Green gain parameter to apply to linear data for HDR Combination
79
+    bmdDeckLinkFrameMetadataCintelHDRGainBlue_v11_5                    = /* 'HGBl' */ 0x4847426C,  // Blue gain parameter to apply to linear data for HDR Combination
80
+   bmdDeckLinkFrameMetadataCintel16mmCropRequired_v11_5               = /* 'c16c' */ 0x63313663,   // The image should be cropped to 16mm size
81
+    bmdDeckLinkFrameMetadataCintelInversionRequired_v11_5              = /* 'cinv' */ 0x63696E76,  // The image should be colour inverted
82
+    bmdDeckLinkFrameMetadataCintelFlipRequired_v11_5                   = /* 'cflr' */ 0x63666C72,  // The image should be flipped horizontally
83
+    bmdDeckLinkFrameMetadataCintelFocusAssistEnabled_v11_5             = /* 'cfae' */ 0x63666165,  // Focus Assist is currently enabled
84
+    bmdDeckLinkFrameMetadataCintelKeykodeIsInterpolated_v11_5          = /* 'kkii' */ 0x6B6B6969   // The keykode for this frame is interpolated from nearby keykodes
85
+};
86
+
87
+/* Interface IDeckLinkVideoFrameMetadataExtensions - Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDMI HDR information */
88
+
89
+class BMD_PUBLIC IDeckLinkVideoFrameMetadataExtensions_v11_5 : public IUnknown
90
+{
91
+public:
92
+    virtual HRESULT GetInt (/* in */ BMDDeckLinkFrameMetadataID_v11_5 metadataID, /* out */ int64_t *value) = 0;
93
+    virtual HRESULT GetFloat (/* in */ BMDDeckLinkFrameMetadataID_v11_5 metadataID, /* out */ double *value) = 0;
94
+    virtual HRESULT GetFlag (/* in */ BMDDeckLinkFrameMetadataID_v11_5 metadataID, /* out */ bool *value) = 0;
95
+    virtual HRESULT GetString (/* in */ BMDDeckLinkFrameMetadataID_v11_5 metadataID, /* out */ CFStringRef *value) = 0;
96
+
97
+protected:
98
+    virtual ~IDeckLinkVideoFrameMetadataExtensions_v11_5 () {} // call Release method to drop reference count
99
+};
100
+
101
+#endif /* defined(BMD_DECKLINKAPI_v11_5_H) */
102
obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v11_5_1.h Added
46
 
1
@@ -0,0 +1,44 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2020 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+** 
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+** 
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPI_v11_5_1_H
30
+#define BMD_DECKLINKAPI_v11_5_1_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+/* Enum BMDDeckLinkStatusID - DeckLink Status ID */
35
+
36
+typedef uint32_t BMDDeckLinkStatusID_v11_5_1;
37
+enum _BMDDeckLinkStatusID_v11_5_1 {
38
+
39
+    /* Video output flags */
40
+
41
+    bmdDeckLinkStatusDetectedVideoInputFlags_v11_5_1                     = /* 'dvif' */ 0x64766966,
42
+
43
+};
44
+
45
+#endif /* defined(BMD_DECKLINKAPI_v11_5_1_H) */
46
obs-studio-26.0.2.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v7_1.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v7_1.h Changed
27
 
1
@@ -30,6 +30,7 @@
2
 #define __DeckLink_API_v7_1_h__
3
 
4
 #include "DeckLinkAPI.h"
5
+#include "DeckLinkAPI_v10_11.h"
6
 
7
 // "B28131B6-59AC-4857-B5AC-CD75D5883E2F"
8
 #define IID_IDeckLinkDisplayModeIterator_v7_1  (REFIID){0xB2,0x81,0x31,0xB6,0x59,0xAC,0x48,0x57,0xB5,0xAC,0xCD,0x75,0xD5,0x88,0x3E,0x2F}
9
@@ -100,7 +101,7 @@
10
 {
11
 public:
12
    // Display mode predicates
13
-   virtual HRESULT STDMETHODCALLTYPE   DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDDisplayModeSupport *result) = 0;
14
+   virtual HRESULT STDMETHODCALLTYPE   DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDDisplayModeSupport_v10_11 *result) = 0;
15
    virtual HRESULT STDMETHODCALLTYPE   GetDisplayModeIterator (IDeckLinkDisplayModeIterator_v7_1* *iterator) = 0;
16
    
17
    
18
@@ -143,7 +144,7 @@
19
 class IDeckLinkInput_v7_1 : public IUnknown
20
 {
21
 public:
22
-   virtual HRESULT STDMETHODCALLTYPE   DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDDisplayModeSupport *result) = 0;
23
+   virtual HRESULT STDMETHODCALLTYPE   DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDDisplayModeSupport_v10_11 *result) = 0;
24
    virtual HRESULT STDMETHODCALLTYPE   GetDisplayModeIterator (IDeckLinkDisplayModeIterator_v7_1 **iterator) = 0;
25
    
26
    // Video input
27
obs-studio-26.0.2.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v7_3.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v7_3.h Changed
19
 
1
@@ -56,7 +56,7 @@
2
 class IDeckLinkOutput_v7_3 : public IUnknown
3
 {
4
 public:
5
-    virtual HRESULT DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport *result) = 0;
6
+    virtual HRESULT DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport_v10_11 *result) = 0;
7
     virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
8
 
9
     virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
10
@@ -125,7 +125,7 @@
11
 class IDeckLinkInput_v7_3 : public IUnknown
12
 {
13
 public:
14
-    virtual HRESULT DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport *result) = 0;
15
+    virtual HRESULT DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport_v10_11 *result) = 0;
16
     virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
17
 
18
     virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
19
obs-studio-26.0.2.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v7_6.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v7_6.h Changed
27
 
1
@@ -31,6 +31,7 @@
2
 #define __DeckLink_API_v7_6_h__
3
 
4
 #include "DeckLinkAPI.h"
5
+#include "DeckLinkAPI_v10_11.h"
6
 
7
 // Interface ID Declarations
8
 
9
@@ -144,7 +145,7 @@
10
 class IDeckLinkOutput_v7_6 : public IUnknown
11
 {
12
 public:
13
-    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport *result) = 0;
14
+    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport_v10_11 *result) = 0;
15
     virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
16
 
17
     virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback_v7_6 *previewCallback) = 0;
18
@@ -200,7 +201,7 @@
19
 class IDeckLinkInput_v7_6 : public IUnknown
20
 {
21
 public:
22
-    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport *result) = 0;
23
+    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport_v10_11 *result) = 0;
24
     virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
25
 
26
     virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback_v7_6 *previewCallback) = 0;
27
obs-studio-26.0.2.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v9_2.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v9_2.h Changed
18
 
1
@@ -29,6 +29,7 @@
2
 #define BMD_DECKLINKAPI_v9_2_H
3
 
4
 #include "DeckLinkAPI.h"
5
+#include "DeckLinkAPI_v10_11.h"
6
 
7
 
8
 // Interface ID Declarations
9
@@ -43,7 +44,7 @@
10
 class IDeckLinkInput_v9_2 : public IUnknown
11
 {
12
 public:
13
-    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
14
+    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport_v10_11 *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
15
     virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
16
 
17
     virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
18
obs-studio-26.0.2.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v9_9.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v9_9.h Changed
18
 
1
@@ -29,6 +29,7 @@
2
 #define BMD_DECKLINKAPI_v9_9_H
3
 
4
 #include "DeckLinkAPI.h"
5
+#include "DeckLinkAPI_v10_11.h"
6
 
7
 // Interface ID Declarations
8
 
9
@@ -45,7 +46,7 @@
10
 class IDeckLinkOutput_v9_9 : public IUnknown
11
 {
12
 public:
13
-    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoOutputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
14
+    virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoOutputFlags flags, /* out */ BMDDisplayModeSupport_v10_11 *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
15
     virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
16
    
17
     virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
18
obs-studio-26.0.2.tar.xz/plugins/decklink/platform.hpp -> obs-studio-26.1.0.tar.xz/plugins/decklink/platform.hpp Changed
9
 
1
@@ -7,6 +7,7 @@
2
 typedef BSTR decklink_string_t;
3
 IDeckLinkDiscovery *CreateDeckLinkDiscoveryInstance(void);
4
 IDeckLinkIterator *CreateDeckLinkIteratorInstance(void);
5
+IDeckLinkVideoConversion *CreateVideoConversionInstance(void);
6
 #define IUnknownUUID IID_IUnknown
7
 typedef REFIID CFUUIDBytes;
8
 #define CFUUIDGetUUIDBytes(x) x
9
obs-studio-26.0.2.tar.xz/plugins/decklink/win/CMakeLists.txt -> obs-studio-26.1.0.tar.xz/plugins/decklink/win/CMakeLists.txt Changed
48
 
1
@@ -7,6 +7,8 @@
2
 
3
 include(IDLFileHelper)
4
 
5
+include_directories(${CMAKE_SOURCE_DIR}/deps/libcaption)
6
+
7
 set(win-decklink-sdk_IDLS
8
    decklink-sdk/DeckLinkAPI.idl
9
    )
10
@@ -29,6 +31,7 @@
11
    ../audio-repack.h
12
    ../audio-repack.hpp
13
    ../util.hpp
14
+   ../OBSVideoFrame.h
15
    )
16
 
17
 set(MODULE_DESCRIPTION "OBS DeckLink Windows module")
18
@@ -48,7 +51,8 @@
19
    ../audio-repack.c
20
    platform.cpp
21
    ../util.cpp
22
-   win-decklink.rc)
23
+   win-decklink.rc
24
+   ../OBSVideoFrame.cpp)
25
 
26
 add_idl_files(win-decklink-sdk_GENERATED_FILES
27
    ${win-decklink-sdk_IDLS}
28
@@ -56,6 +60,7 @@
29
 
30
 include_directories(
31
    ${CMAKE_CURRENT_BINARY_DIR}
32
+   "${CMAKE_SOURCE_DIR}/UI/obs-frontend-api"
33
 )
34
 
35
 add_library(win-decklink MODULE
36
@@ -66,7 +71,9 @@
37
    )
38
 
39
 target_link_libraries(win-decklink
40
-   libobs)
41
-set_target_properties(win-decklink PROPERTIES FOLDER "plugins")
42
+   libobs
43
+   obs-frontend-api
44
+   caption)
45
+set_target_properties(win-decklink PROPERTIES FOLDER "plugins/decklink")
46
 
47
 install_obs_plugin_with_data(win-decklink ../data)
48
obs-studio-26.0.2.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI.idl -> obs-studio-26.1.0.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI.idl Changed
1456
 
1
@@ -1,5 +1,5 @@
2
 /* -LICENSE-START-
3
-** Copyright (c) 2018 Blackmagic Design
4
+** Copyright (c) 2020 Blackmagic Design
5
 **
6
 ** Permission is hereby granted, free of charge, to any person or organization
7
 ** obtaining a copy of the software and accompanying documentation covered by
8
@@ -7,14 +7,14 @@
9
 ** execute, and transmit the Software, and to prepare derivative works of the
10
 ** Software, and to permit third-parties to whom the Software is furnished to
11
 ** do so, all subject to the following:
12
-** 
13
+**
14
 ** The copyright notices in the Software and this entire statement, including
15
 ** the above license grant, this restriction and the following disclaimer,
16
 ** must be included in all copies of the Software, in whole or in part, and
17
 ** all derivative works of the Software, unless such copies or derivative
18
 ** works are solely in the form of machine-executable object code generated by
19
 ** a source language processor.
20
-** 
21
+**
22
 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
 ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
 ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
25
@@ -74,28 +74,40 @@
26
 
27
 /* Enum BMDVideoOutputFlags - Flags to control the output of ancillary data along with video. */
28
 
29
-typedef [v1_enum] enum _BMDVideoOutputFlags {
30
+typedef [v1_enum] enum _BMDVideoOutputFlags {
31
     bmdVideoOutputFlagDefault                                    = 0,
32
     bmdVideoOutputVANC                                           = 1 << 0,
33
     bmdVideoOutputVITC                                           = 1 << 1,
34
     bmdVideoOutputRP188                                          = 1 << 2,
35
-    bmdVideoOutputDualStream3D                                   = 1 << 4
36
+    bmdVideoOutputDualStream3D                                   = 1 << 4,
37
+    bmdVideoOutputSynchronizeToPlaybackGroup                     = 1 << 6
38
 } BMDVideoOutputFlags;
39
 
40
+/* Enum BMDSupportedVideoModeFlags - Flags to describe supported video modes */
41
+
42
+typedef [v1_enum] enum _BMDSupportedVideoModeFlags {
43
+    bmdSupportedVideoModeDefault                                 = 0,
44
+    bmdSupportedVideoModeKeying                                  = 1 << 0,
45
+    bmdSupportedVideoModeDualStream3D                            = 1 << 1,
46
+    bmdSupportedVideoModeSDISingleLink                           = 1 << 2,
47
+    bmdSupportedVideoModeSDIDualLink                             = 1 << 3,
48
+    bmdSupportedVideoModeSDIQuadLink                             = 1 << 4,
49
+    bmdSupportedVideoModeInAnyProfile                            = 1 << 5
50
+} BMDSupportedVideoModeFlags;
51
+
52
 /* Enum BMDPacketType - Type of packet */
53
 
54
-typedef [v1_enum] enum _BMDPacketType {
55
+typedef [v1_enum] enum _BMDPacketType {
56
     bmdPacketTypeStreamInterruptedMarker                         = /* 'sint' */ 0x73696E74,    // A packet of this type marks the time when a video stream was interrupted, for example by a disconnected cable
57
     bmdPacketTypeStreamData                                      = /* 'sdat' */ 0x73646174 // Regular stream data
58
 } BMDPacketType;
59
 
60
 /* Enum BMDFrameFlags - Frame flags */
61
 
62
-[v1_enum] enum _BMDFrameFlags {
63
+[v1_enum] enum _BMDFrameFlags {
64
     bmdFrameFlagDefault                                          = 0,
65
     bmdFrameFlagFlipVertical                                     = 1 << 0,
66
     bmdFrameContainsHDRMetadata                                  = 1 << 1,
67
-    bmdFrameContainsCintelMetadata                               = 1 << 2,
68
 
69
     /* Flags that are applicable only to instances of IDeckLinkVideoInputFrame */
70
 
71
@@ -105,15 +117,16 @@
72
 
73
 /* Enum BMDVideoInputFlags - Flags applicable to video input */
74
 
75
-[v1_enum] enum _BMDVideoInputFlags {
76
+[v1_enum] enum _BMDVideoInputFlags {
77
     bmdVideoInputFlagDefault                                     = 0,
78
     bmdVideoInputEnableFormatDetection                           = 1 << 0,
79
-    bmdVideoInputDualStream3D                                    = 1 << 1
80
+    bmdVideoInputDualStream3D                                    = 1 << 1,
81
+    bmdVideoInputSynchronizeToCaptureGroup                       = 1 << 2
82
 };
83
 
84
 /* Enum BMDVideoInputFormatChangedEvents - Bitmask passed to the VideoInputFormatChanged notification to identify the properties of the input signal that have changed */
85
 
86
-[v1_enum] enum _BMDVideoInputFormatChangedEvents {
87
+[v1_enum] enum _BMDVideoInputFormatChangedEvents {
88
     bmdVideoInputDisplayModeChanged                              = 1 << 0,
89
     bmdVideoInputFieldDominanceChanged                           = 1 << 1,
90
     bmdVideoInputColorspaceChanged                               = 1 << 2
91
@@ -121,15 +134,18 @@
92
 
93
 /* Enum BMDDetectedVideoInputFormatFlags - Flags passed to the VideoInputFormatChanged notification to describe the detected video input signal */
94
 
95
-[v1_enum] enum _BMDDetectedVideoInputFormatFlags {
96
+[v1_enum] enum _BMDDetectedVideoInputFormatFlags {
97
     bmdDetectedVideoInputYCbCr422                                = 1 << 0,
98
     bmdDetectedVideoInputRGB444                                  = 1 << 1,
99
-    bmdDetectedVideoInputDualStream3D                            = 1 << 2
100
+    bmdDetectedVideoInputDualStream3D                            = 1 << 2,
101
+    bmdDetectedVideoInput12BitDepth                              = 1 << 3,
102
+    bmdDetectedVideoInput10BitDepth                              = 1 << 4,
103
+    bmdDetectedVideoInput8BitDepth                               = 1 << 5
104
 };
105
 
106
 /* Enum BMDDeckLinkCapturePassthroughMode - Enumerates whether the video output is electrically connected to the video input or if the clean switching mode is enabled */
107
 
108
-[v1_enum] enum _BMDDeckLinkCapturePassthroughMode {
109
+[v1_enum] enum _BMDDeckLinkCapturePassthroughMode {
110
     bmdDeckLinkCapturePassthroughModeDisabled                    = /* 'pdis' */ 0x70646973,
111
     bmdDeckLinkCapturePassthroughModeDirect                      = /* 'pdir' */ 0x70646972,
112
     bmdDeckLinkCapturePassthroughModeCleanSwitch                 = /* 'pcln' */ 0x70636C6E
113
@@ -137,58 +153,50 @@
114
 
115
 /* Enum BMDOutputFrameCompletionResult - Frame Completion Callback */
116
 
117
-typedef [v1_enum] enum _BMDOutputFrameCompletionResult {
118
-    bmdOutputFrameCompleted,                                    
119
-    bmdOutputFrameDisplayedLate,                                
120
-    bmdOutputFrameDropped,                                      
121
-    bmdOutputFrameFlushed                                       
122
+typedef [v1_enum] enum _BMDOutputFrameCompletionResult {
123
+    bmdOutputFrameCompleted,
124
+    bmdOutputFrameDisplayedLate,
125
+    bmdOutputFrameDropped,
126
+    bmdOutputFrameFlushed
127
 } BMDOutputFrameCompletionResult;
128
 
129
 /* Enum BMDReferenceStatus - GenLock input status */
130
 
131
-typedef [v1_enum] enum _BMDReferenceStatus {
132
+typedef [v1_enum] enum _BMDReferenceStatus {
133
     bmdReferenceNotSupportedByHardware                           = 1 << 0,
134
     bmdReferenceLocked                                           = 1 << 1
135
 } BMDReferenceStatus;
136
 
137
 /* Enum BMDAudioFormat - Audio Format */
138
 
139
-typedef [v1_enum] enum _BMDAudioFormat {
140
+typedef [v1_enum] enum _BMDAudioFormat {
141
     bmdAudioFormatPCM                                            = /* 'lpcm' */ 0x6C70636D // Linear signed PCM samples
142
 } BMDAudioFormat;
143
 
144
 /* Enum BMDAudioSampleRate - Audio sample rates supported for output/input */
145
 
146
-typedef [v1_enum] enum _BMDAudioSampleRate {
147
+typedef [v1_enum] enum _BMDAudioSampleRate {
148
     bmdAudioSampleRate48kHz                                      = 48000
149
 } BMDAudioSampleRate;
150
 
151
 /* Enum BMDAudioSampleType - Audio sample sizes supported for output/input */
152
 
153
-typedef [v1_enum] enum _BMDAudioSampleType {
154
+typedef [v1_enum] enum _BMDAudioSampleType {
155
     bmdAudioSampleType16bitInteger                               = 16,
156
     bmdAudioSampleType32bitInteger                               = 32
157
 } BMDAudioSampleType;
158
 
159
 /* Enum BMDAudioOutputStreamType - Audio output stream type */
160
 
161
-typedef [v1_enum] enum _BMDAudioOutputStreamType {
162
-    bmdAudioOutputStreamContinuous,                             
163
-    bmdAudioOutputStreamContinuousDontResample,                 
164
-    bmdAudioOutputStreamTimestamped                             
165
+typedef [v1_enum] enum _BMDAudioOutputStreamType {
166
+    bmdAudioOutputStreamContinuous,
167
+    bmdAudioOutputStreamContinuousDontResample,
168
+    bmdAudioOutputStreamTimestamped
169
 } BMDAudioOutputStreamType;
170
 
171
-/* Enum BMDDisplayModeSupport - Output mode supported flags */
172
-
173
-typedef [v1_enum] enum _BMDDisplayModeSupport {
174
-    bmdDisplayModeNotSupported                                   = 0,
175
-    bmdDisplayModeSupported,                                    
176
-    bmdDisplayModeSupportedWithConversion                       
177
-} BMDDisplayModeSupport;
178
-
179
 /* Enum BMDAncillaryPacketFormat - Ancillary packet format */
180
 
181
-typedef [v1_enum] enum _BMDAncillaryPacketFormat {
182
+typedef [v1_enum] enum _BMDAncillaryPacketFormat {
183
     bmdAncillaryPacketFormatUInt8                                = /* 'ui08' */ 0x75693038,
184
     bmdAncillaryPacketFormatUInt16                               = /* 'ui16' */ 0x75693136,
185
     bmdAncillaryPacketFormatYCbCr10                              = /* 'v210' */ 0x76323130
186
@@ -196,11 +204,12 @@
187
 
188
 /* Enum BMDTimecodeFormat - Timecode formats for frame metadata */
189
 
190
-typedef [v1_enum] enum _BMDTimecodeFormat {
191
+typedef [v1_enum] enum _BMDTimecodeFormat {
192
     bmdTimecodeRP188VITC1                                        = /* 'rpv1' */ 0x72707631,    // RP188 timecode where DBB1 equals VITC1 (line 9)
193
     bmdTimecodeRP188VITC2                                        = /* 'rp12' */ 0x72703132,    // RP188 timecode where DBB1 equals VITC2 (line 9 for progressive or line 571 for interlaced/PsF)
194
     bmdTimecodeRP188LTC                                          = /* 'rplt' */ 0x72706C74,    // RP188 timecode where DBB1 equals LTC (line 10)
195
-    bmdTimecodeRP188Any                                          = /* 'rp18' */ 0x72703138,    // For capture: return the first valid timecode in {VITC1, LTC ,VITC2} - For playback: set the timecode as VITC1
196
+    bmdTimecodeRP188HighFrameRate                                = /* 'rphr' */ 0x72706872,    // RP188 timecode where DBB1 is an HFRTC (SMPTE ST 12-3), the only timecode allowing the frame value to go above 30
197
+    bmdTimecodeRP188Any                                          = /* 'rp18' */ 0x72703138,    // Convenience for capture, returning the first valid timecode in {HFRTC (if supported), VITC1, LTC, VITC2}
198
     bmdTimecodeVITC                                              = /* 'vitc' */ 0x76697463,
199
     bmdTimecodeVITCField2                                        = /* 'vit2' */ 0x76697432,
200
     bmdTimecodeSerial                                            = /* 'seri' */ 0x73657269
201
@@ -208,21 +217,21 @@
202
 
203
 /* Enum BMDAnalogVideoFlags - Analog video display flags */
204
 
205
-[v1_enum] enum _BMDAnalogVideoFlags {
206
+[v1_enum] enum _BMDAnalogVideoFlags {
207
     bmdAnalogVideoFlagCompositeSetup75                           = 1 << 0,
208
     bmdAnalogVideoFlagComponentBetacamLevels                     = 1 << 1
209
 };
210
 
211
 /* Enum BMDAudioOutputAnalogAESSwitch - Audio output Analog/AESEBU switch */
212
 
213
-typedef [v1_enum] enum _BMDAudioOutputAnalogAESSwitch {
214
+typedef [v1_enum] enum _BMDAudioOutputAnalogAESSwitch {
215
     bmdAudioOutputSwitchAESEBU                                   = /* 'aes ' */ 0x61657320,
216
     bmdAudioOutputSwitchAnalog                                   = /* 'anlg' */ 0x616E6C67
217
 } BMDAudioOutputAnalogAESSwitch;
218
 
219
 /* Enum BMDVideoOutputConversionMode - Video/audio conversion mode */
220
 
221
-typedef [v1_enum] enum _BMDVideoOutputConversionMode {
222
+typedef [v1_enum] enum _BMDVideoOutputConversionMode {
223
     bmdNoVideoOutputConversion                                   = /* 'none' */ 0x6E6F6E65,
224
     bmdVideoOutputLetterboxDownconversion                        = /* 'ltbx' */ 0x6C746278,
225
     bmdVideoOutputAnamorphicDownconversion                       = /* 'amph' */ 0x616D7068,
226
@@ -241,7 +250,7 @@
227
 
228
 /* Enum BMDVideoInputConversionMode - Video input conversion mode */
229
 
230
-typedef [v1_enum] enum _BMDVideoInputConversionMode {
231
+typedef [v1_enum] enum _BMDVideoInputConversionMode {
232
     bmdNoVideoInputConversion                                    = /* 'none' */ 0x6E6F6E65,
233
     bmdVideoInputLetterboxDownconversionFromHD1080               = /* '10lb' */ 0x31306C62,
234
     bmdVideoInputAnamorphicDownconversionFromHD1080              = /* '10am' */ 0x3130616D,
235
@@ -253,7 +262,7 @@
236
 
237
 /* Enum BMDVideo3DPackingFormat - Video 3D packing format */
238
 
239
-typedef [v1_enum] enum _BMDVideo3DPackingFormat {
240
+typedef [v1_enum] enum _BMDVideo3DPackingFormat {
241
     bmdVideo3DPackingSidebySideHalf                              = /* 'sbsh' */ 0x73627368,
242
     bmdVideo3DPackingLinebyLine                                  = /* 'lbyl' */ 0x6C62796C,
243
     bmdVideo3DPackingTopAndBottom                                = /* 'tabo' */ 0x7461626F,
244
@@ -264,21 +273,21 @@
245
 
246
 /* Enum BMDIdleVideoOutputOperation - Video output operation when not playing video */
247
 
248
-typedef [v1_enum] enum _BMDIdleVideoOutputOperation {
249
+typedef [v1_enum] enum _BMDIdleVideoOutputOperation {
250
     bmdIdleVideoOutputBlack                                      = /* 'blac' */ 0x626C6163,
251
     bmdIdleVideoOutputLastFrame                                  = /* 'lafa' */ 0x6C616661
252
 } BMDIdleVideoOutputOperation;
253
 
254
 /* Enum BMDVideoEncoderFrameCodingMode - Video frame coding mode */
255
 
256
-typedef [v1_enum] enum _BMDVideoEncoderFrameCodingMode {
257
+typedef [v1_enum] enum _BMDVideoEncoderFrameCodingMode {
258
     bmdVideoEncoderFrameCodingModeInter                          = /* 'inte' */ 0x696E7465,
259
     bmdVideoEncoderFrameCodingModeIntra                          = /* 'intr' */ 0x696E7472
260
 } BMDVideoEncoderFrameCodingMode;
261
 
262
 /* Enum BMDDNxHRLevel - DNxHR Levels */
263
 
264
-typedef [v1_enum] enum _BMDDNxHRLevel {
265
+typedef [v1_enum] enum _BMDDNxHRLevel {
266
     bmdDNxHRLevelSQ                                              = /* 'dnsq' */ 0x646E7371,
267
     bmdDNxHRLevelLB                                              = /* 'dnlb' */ 0x646E6C62,
268
     bmdDNxHRLevelHQ                                              = /* 'dnhq' */ 0x646E6871,
269
@@ -288,7 +297,7 @@
270
 
271
 /* Enum BMDLinkConfiguration - Video link configuration */
272
 
273
-typedef [v1_enum] enum _BMDLinkConfiguration {
274
+typedef [v1_enum] enum _BMDLinkConfiguration {
275
     bmdLinkConfigurationSingleLink                               = /* 'lcsl' */ 0x6C63736C,
276
     bmdLinkConfigurationDualLink                                 = /* 'lcdl' */ 0x6C63646C,
277
     bmdLinkConfigurationQuadLink                                 = /* 'lcql' */ 0x6C63716C
278
@@ -296,7 +305,7 @@
279
 
280
 /* Enum BMDDeviceInterface - Device interface type */
281
 
282
-typedef [v1_enum] enum _BMDDeviceInterface {
283
+typedef [v1_enum] enum _BMDDeviceInterface {
284
     bmdDeviceInterfacePCI                                        = /* 'pci ' */ 0x70636920,
285
     bmdDeviceInterfaceUSB                                        = /* 'usb ' */ 0x75736220,
286
     bmdDeviceInterfaceThunderbolt                                = /* 'thun' */ 0x7468756E
287
@@ -304,7 +313,7 @@
288
 
289
 /* Enum BMDColorspace - Colorspace */
290
 
291
-typedef [v1_enum] enum _BMDColorspace {
292
+typedef [v1_enum] enum _BMDColorspace {
293
     bmdColorspaceRec601                                          = /* 'r601' */ 0x72363031,
294
     bmdColorspaceRec709                                          = /* 'r709' */ 0x72373039,
295
     bmdColorspaceRec2020                                         = /* '2020' */ 0x32303230
296
@@ -312,54 +321,35 @@
297
 
298
 /* Enum BMDDynamicRange - SDR or HDR */
299
 
300
-typedef [v1_enum] enum _BMDDynamicRange {
301
-    bmdDynamicRangeSDR                                           = 0,
302
-    bmdDynamicRangeHDRStaticPQ                                   = 1 << 29,    // SMPTE ST 2084
303
-    bmdDynamicRangeHDRStaticHLG                                  = 1 << 30 // ITU-R BT.2100-0
304
+typedef [v1_enum] enum _BMDDynamicRange {
305
+    bmdDynamicRangeSDR                                           = 0,  // Standard Dynamic Range in accordance with SMPTE ST 2036-1
306
+    bmdDynamicRangeHDRStaticPQ                                   = 1 << 29,    // High Dynamic Range PQ in accordance with SMPTE ST 2084
307
+    bmdDynamicRangeHDRStaticHLG                                  = 1 << 30 // High Dynamic Range HLG in accordance with ITU-R BT.2100-0
308
 } BMDDynamicRange;
309
 
310
 /* Enum BMDDeckLinkHDMIInputEDIDID - DeckLink HDMI Input EDID ID */
311
 
312
-typedef [v1_enum] enum _BMDDeckLinkHDMIInputEDIDID {
313
+typedef [v1_enum] enum _BMDDeckLinkHDMIInputEDIDID {
314
+
315
+    /* Integers */
316
+
317
     bmdDeckLinkHDMIInputEDIDDynamicRange                         = /* 'HIDy' */ 0x48494479 // Parameter is of type BMDDynamicRange. Default is (bmdDynamicRangeSDR|bmdDynamicRangeHDRStaticPQ)
318
 } BMDDeckLinkHDMIInputEDIDID;
319
 
320
 /* Enum BMDDeckLinkFrameMetadataID - DeckLink Frame Metadata ID */
321
 
322
-typedef [v1_enum] enum _BMDDeckLinkFrameMetadataID {
323
+typedef [v1_enum] enum _BMDDeckLinkFrameMetadataID {
324
+
325
+    /* Colorspace Metadata - Integers */
326
+
327
     bmdDeckLinkFrameMetadataColorspace                           = /* 'cspc' */ 0x63737063,    // Colorspace of video frame (see BMDColorspace)
328
+
329
+    /* HDR Metadata - Integers */
330
+
331
     bmdDeckLinkFrameMetadataHDRElectroOpticalTransferFunc        = /* 'eotf' */ 0x656F7466,    // EOTF in range 0-7 as per CEA 861.3
332
-    bmdDeckLinkFrameMetadataCintelFilmType                       = /* 'cfty' */ 0x63667479,    // Current film type
333
-    bmdDeckLinkFrameMetadataCintelFilmGauge                      = /* 'cfga' */ 0x63666761,    // Current film gauge
334
-    bmdDeckLinkFrameMetadataCintelOffsetDetectedHorizontal       = /* 'odfh' */ 0x6F646668,    // Horizontal offset (pixels) detected in image
335
-    bmdDeckLinkFrameMetadataCintelOffsetDetectedVertical         = /* 'odfv' */ 0x6F646676,    // Vertical offset (pixels) detected in image
336
-    bmdDeckLinkFrameMetadataCintelKeykodeLow                     = /* 'ckkl' */ 0x636B6B6C,    // Raw keykode value - low 64 bits
337
-    bmdDeckLinkFrameMetadataCintelKeykodeHigh                    = /* 'ckkh' */ 0x636B6B68,    // Raw keykode value - high 64 bits
338
-    bmdDeckLinkFrameMetadataCintelTile1Size                      = /* 'ct1s' */ 0x63743173,    // Size in bytes of compressed raw tile 1
339
-    bmdDeckLinkFrameMetadataCintelTile2Size                      = /* 'ct2s' */ 0x63743273,    // Size in bytes of compressed raw tile 2
340
-    bmdDeckLinkFrameMetadataCintelTile3Size                      = /* 'ct3s' */ 0x63743373,    // Size in bytes of compressed raw tile 3
341
-    bmdDeckLinkFrameMetadataCintelTile4Size                      = /* 'ct4s' */ 0x63743473,    // Size in bytes of compressed raw tile 4
342
-    bmdDeckLinkFrameMetadataCintelImageWidth                     = /* 'IWPx' */ 0x49575078,    // Width in pixels of image
343
-    bmdDeckLinkFrameMetadataCintelImageHeight                    = /* 'IHPx' */ 0x49485078,    // Height in pixels of image
344
-    bmdDeckLinkFrameMetadataCintelLinearMaskingRedInRed          = /* 'mrir' */ 0x6D726972,    // Red in red linear masking parameter
345
-    bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInRed        = /* 'mgir' */ 0x6D676972,    // Green in red linear masking parameter
346
-    bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInRed         = /* 'mbir' */ 0x6D626972,    // Blue in red linear masking parameter
347
-    bmdDeckLinkFrameMetadataCintelLinearMaskingRedInGreen        = /* 'mrig' */ 0x6D726967,    // Red in green linear masking parameter
348
-    bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInGreen      = /* 'mgig' */ 0x6D676967,    // Green in green linear masking parameter
349
-    bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInGreen       = /* 'mbig' */ 0x6D626967,    // Blue in green linear masking parameter
350
-    bmdDeckLinkFrameMetadataCintelLinearMaskingRedInBlue         = /* 'mrib' */ 0x6D726962,    // Red in blue linear masking parameter
351
-    bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInBlue       = /* 'mgib' */ 0x6D676962,    // Green in blue linear masking parameter
352
-    bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInBlue        = /* 'mbib' */ 0x6D626962,    // Blue in blue linear masking parameter
353
-    bmdDeckLinkFrameMetadataCintelLogMaskingRedInRed             = /* 'mlrr' */ 0x6D6C7272,    // Red in red log masking parameter
354
-    bmdDeckLinkFrameMetadataCintelLogMaskingGreenInRed           = /* 'mlgr' */ 0x6D6C6772,    // Green in red log masking parameter
355
-    bmdDeckLinkFrameMetadataCintelLogMaskingBlueInRed            = /* 'mlbr' */ 0x6D6C6272,    // Blue in red log masking parameter
356
-    bmdDeckLinkFrameMetadataCintelLogMaskingRedInGreen           = /* 'mlrg' */ 0x6D6C7267,    // Red in green log masking parameter
357
-    bmdDeckLinkFrameMetadataCintelLogMaskingGreenInGreen         = /* 'mlgg' */ 0x6D6C6767,    // Green in green log masking parameter
358
-    bmdDeckLinkFrameMetadataCintelLogMaskingBlueInGreen          = /* 'mlbg' */ 0x6D6C6267,    // Blue in green log masking parameter
359
-    bmdDeckLinkFrameMetadataCintelLogMaskingRedInBlue            = /* 'mlrb' */ 0x6D6C7262,    // Red in blue log masking parameter
360
-    bmdDeckLinkFrameMetadataCintelLogMaskingGreenInBlue          = /* 'mlgb' */ 0x6D6C6762,    // Green in blue log masking parameter
361
-    bmdDeckLinkFrameMetadataCintelLogMaskingBlueInBlue           = /* 'mlbb' */ 0x6D6C6262,    // Blue in blue log masking parameter
362
-    bmdDeckLinkFrameMetadataCintelFilmFrameRate                  = /* 'cffr' */ 0x63666672,    // Film frame rate
363
+
364
+    /* HDR Metadata - Floats */
365
+
366
     bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedX              = /* 'hdrx' */ 0x68647278,    // Red display primaries in range 0.0 - 1.0
367
     bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedY              = /* 'hdry' */ 0x68647279,    // Red display primaries in range 0.0 - 1.0
368
     bmdDeckLinkFrameMetadataHDRDisplayPrimariesGreenX            = /* 'hdgx' */ 0x68646778,    // Green display primaries in range 0.0 - 1.0
369
@@ -371,33 +361,42 @@
370
     bmdDeckLinkFrameMetadataHDRMaxDisplayMasteringLuminance      = /* 'hdml' */ 0x68646D6C,    // Max display mastering luminance in range 1 cd/m2 - 65535 cd/m2
371
     bmdDeckLinkFrameMetadataHDRMinDisplayMasteringLuminance      = /* 'hmil' */ 0x686D696C,    // Min display mastering luminance in range 0.0001 cd/m2 - 6.5535 cd/m2
372
     bmdDeckLinkFrameMetadataHDRMaximumContentLightLevel          = /* 'mcll' */ 0x6D636C6C,    // Maximum Content Light Level in range 1 cd/m2 - 65535 cd/m2
373
-    bmdDeckLinkFrameMetadataHDRMaximumFrameAverageLightLevel     = /* 'fall' */ 0x66616C6C,    // Maximum Frame Average Light Level in range 1 cd/m2 - 65535 cd/m2
374
-    bmdDeckLinkFrameMetadataCintelOffsetToApplyHorizontal        = /* 'otah' */ 0x6F746168,    // Horizontal offset (pixels) to be applied to image
375
-    bmdDeckLinkFrameMetadataCintelOffsetToApplyVertical          = /* 'otav' */ 0x6F746176,    // Vertical offset (pixels) to be applied to image
376
-    bmdDeckLinkFrameMetadataCintelGainRed                        = /* 'LfRd' */ 0x4C665264,    // Red gain parameter to apply after log
377
-    bmdDeckLinkFrameMetadataCintelGainGreen                      = /* 'LfGr' */ 0x4C664772,    // Green gain parameter to apply after log
378
-    bmdDeckLinkFrameMetadataCintelGainBlue                       = /* 'LfBl' */ 0x4C66426C,    // Blue gain parameter to apply after log
379
-    bmdDeckLinkFrameMetadataCintelLiftRed                        = /* 'GnRd' */ 0x476E5264,    // Red lift parameter to apply after log and gain
380
-    bmdDeckLinkFrameMetadataCintelLiftGreen                      = /* 'GnGr' */ 0x476E4772,    // Green lift parameter to apply after log and gain
381
-    bmdDeckLinkFrameMetadataCintelLiftBlue                       = /* 'GnBl' */ 0x476E426C // Blue lift parameter to apply after log and gain
382
+    bmdDeckLinkFrameMetadataHDRMaximumFrameAverageLightLevel     = /* 'fall' */ 0x66616C6C // Maximum Frame Average Light Level in range 1 cd/m2 - 65535 cd/m2
383
 } BMDDeckLinkFrameMetadataID;
384
 
385
-/* Enum BMDDuplexMode - Duplex for configurable ports */
386
+/* Enum BMDProfileID - Identifies a profile */
387
 
388
-typedef [v1_enum] enum _BMDDuplexMode {
389
-    bmdDuplexModeFull                                            = /* 'fdup' */ 0x66647570,
390
-    bmdDuplexModeHalf                                            = /* 'hdup' */ 0x68647570
391
-} BMDDuplexMode;
392
+typedef [v1_enum] enum _BMDProfileID {
393
+    bmdProfileOneSubDeviceFullDuplex                             = /* '1dfd' */ 0x31646664,
394
+    bmdProfileOneSubDeviceHalfDuplex                             = /* '1dhd' */ 0x31646864,
395
+    bmdProfileTwoSubDevicesFullDuplex                            = /* '2dfd' */ 0x32646664,
396
+    bmdProfileTwoSubDevicesHalfDuplex                            = /* '2dhd' */ 0x32646864,
397
+    bmdProfileFourSubDevicesHalfDuplex                           = /* '4dhd' */ 0x34646864
398
+} BMDProfileID;
399
+
400
+/* Enum BMDHDMITimecodePacking - Packing form of timecode on HDMI */
401
+
402
+typedef [v1_enum] enum _BMDHDMITimecodePacking {
403
+    bmdHDMITimecodePackingIEEEOUI000085                          = 0x00008500,
404
+    bmdHDMITimecodePackingIEEEOUI080046                          = 0x08004601,
405
+    bmdHDMITimecodePackingIEEEOUI5CF9F0                          = 0x5CF9F003
406
+} BMDHDMITimecodePacking;
407
+
408
+/* Enum BMDInternalKeyingAncillaryDataSource - Source for VANC and timecode data when performing internal keying */
409
+
410
+typedef [v1_enum] enum _BMDInternalKeyingAncillaryDataSource {
411
+    bmdInternalKeyingUsesAncillaryDataFromInputSignal            = /* 'ikai' */ 0x696B6169,
412
+    bmdInternalKeyingUsesAncillaryDataFromKeyFrame               = /* 'ikak' */ 0x696B616B
413
+} BMDInternalKeyingAncillaryDataSource;
414
 
415
 /* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
416
 
417
-typedef [v1_enum] enum _BMDDeckLinkAttributeID {
418
+typedef [v1_enum] enum _BMDDeckLinkAttributeID {
419
 
420
     /* Flags */
421
 
422
     BMDDeckLinkSupportsInternalKeying                            = /* 'keyi' */ 0x6B657969,
423
     BMDDeckLinkSupportsExternalKeying                            = /* 'keye' */ 0x6B657965,
424
-    BMDDeckLinkSupportsHDKeying                                  = /* 'keyh' */ 0x6B657968,
425
     BMDDeckLinkSupportsInputFormatDetection                      = /* 'infd' */ 0x696E6664,
426
     BMDDeckLinkHasReferenceInput                                 = /* 'hrin' */ 0x6872696E,
427
     BMDDeckLinkHasSerialPort                                     = /* 'hspt' */ 0x68737074,
428
@@ -406,16 +405,20 @@
429
     BMDDeckLinkHasVideoInputAntiAliasingFilter                   = /* 'aafl' */ 0x6161666C,
430
     BMDDeckLinkHasBypass                                         = /* 'byps' */ 0x62797073,
431
     BMDDeckLinkSupportsClockTimingAdjustment                     = /* 'ctad' */ 0x63746164,
432
-    BMDDeckLinkSupportsFullDuplex                                = /* 'fdup' */ 0x66647570,
433
     BMDDeckLinkSupportsFullFrameReferenceInputTimingOffset       = /* 'frin' */ 0x6672696E,
434
     BMDDeckLinkSupportsSMPTELevelAOutput                         = /* 'lvla' */ 0x6C766C61,
435
+    BMDDeckLinkSupportsAutoSwitchingPPsFOnInput                  = /* 'apsf' */ 0x61707366,
436
     BMDDeckLinkSupportsDualLinkSDI                               = /* 'sdls' */ 0x73646C73,
437
     BMDDeckLinkSupportsQuadLinkSDI                               = /* 'sqls' */ 0x73716C73,
438
     BMDDeckLinkSupportsIdleOutput                                = /* 'idou' */ 0x69646F75,
439
+    BMDDeckLinkVANCRequires10BitYUVVideoFrames                   = /* 'vioY' */ 0x76696F59,    // Legacy product requires v210 active picture for IDeckLinkVideoFrameAncillaryPackets or 10-bit VANC
440
     BMDDeckLinkHasLTCTimecodeInput                               = /* 'hltc' */ 0x686C7463,
441
-    BMDDeckLinkSupportsDuplexModeConfiguration                   = /* 'dupx' */ 0x64757078,
442
     BMDDeckLinkSupportsHDRMetadata                               = /* 'hdrm' */ 0x6864726D,
443
     BMDDeckLinkSupportsColorspaceMetadata                        = /* 'cmet' */ 0x636D6574,
444
+    BMDDeckLinkSupportsHDMITimecode                              = /* 'htim' */ 0x6874696D,
445
+    BMDDeckLinkSupportsHighFrameRateTimecode                     = /* 'HFRT' */ 0x48465254,
446
+    BMDDeckLinkSupportsSynchronizeToCaptureGroup                 = /* 'stcg' */ 0x73746367,
447
+    BMDDeckLinkSupportsSynchronizeToPlaybackGroup                = /* 'stpg' */ 0x73747067,
448
 
449
     /* Integers */
450
 
451
@@ -438,7 +441,10 @@
452
     BMDDeckLinkAudioInputXLRChannelCount                         = /* 'aixc' */ 0x61697863,
453
     BMDDeckLinkAudioOutputRCAChannelCount                        = /* 'aorc' */ 0x616F7263,
454
     BMDDeckLinkAudioOutputXLRChannelCount                        = /* 'aoxc' */ 0x616F7863,
455
-    BMDDeckLinkPairedDevicePersistentID                          = /* 'ppid' */ 0x70706964,
456
+    BMDDeckLinkProfileID                                         = /* 'prid' */ 0x70726964,    // Returns a BMDProfileID
457
+    BMDDeckLinkDuplex                                            = /* 'dupx' */ 0x64757078,
458
+    BMDDeckLinkMinimumPrerollFrames                              = /* 'mprf' */ 0x6D707266,
459
+    BMDDeckLinkSupportedDynamicRange                             = /* 'sudr' */ 0x73756472,
460
 
461
     /* Floats */
462
 
463
@@ -460,18 +466,25 @@
464
 
465
 /* Enum BMDDeckLinkAPIInformationID - DeckLinkAPI information ID */
466
 
467
-typedef [v1_enum] enum _BMDDeckLinkAPIInformationID {
468
+typedef [v1_enum] enum _BMDDeckLinkAPIInformationID {
469
+
470
+    /* Integer or String */
471
+
472
     BMDDeckLinkAPIVersion                                        = /* 'vers' */ 0x76657273
473
 } BMDDeckLinkAPIInformationID;
474
 
475
 /* Enum BMDDeckLinkStatusID - DeckLink Status ID */
476
 
477
-typedef [v1_enum] enum _BMDDeckLinkStatusID {
478
+typedef [v1_enum] enum _BMDDeckLinkStatusID {
479
 
480
     /* Integers */
481
 
482
     bmdDeckLinkStatusDetectedVideoInputMode                      = /* 'dvim' */ 0x6476696D,
483
-    bmdDeckLinkStatusDetectedVideoInputFlags                     = /* 'dvif' */ 0x64766966,
484
+    bmdDeckLinkStatusDetectedVideoInputFormatFlags               = /* 'dvff' */ 0x64766666,
485
+    bmdDeckLinkStatusDetectedVideoInputFieldDominance            = /* 'dvfd' */ 0x64766664,
486
+    bmdDeckLinkStatusDetectedVideoInputColorspace                = /* 'dscl' */ 0x6473636C,
487
+    bmdDeckLinkStatusDetectedVideoInputDynamicRange              = /* 'dsdr' */ 0x64736472,
488
+    bmdDeckLinkStatusDetectedSDILinkConfiguration                = /* 'dslc' */ 0x64736C63,
489
     bmdDeckLinkStatusCurrentVideoInputMode                       = /* 'cvim' */ 0x6376696D,
490
     bmdDeckLinkStatusCurrentVideoInputPixelFormat                = /* 'cvip' */ 0x63766970,
491
     bmdDeckLinkStatusCurrentVideoInputFlags                      = /* 'cvif' */ 0x63766966,
492
@@ -482,7 +495,6 @@
493
     bmdDeckLinkStatusLastVideoOutputPixelFormat                  = /* 'opix' */ 0x6F706978,
494
     bmdDeckLinkStatusReferenceSignalMode                         = /* 'refm' */ 0x7265666D,
495
     bmdDeckLinkStatusReferenceSignalFlags                        = /* 'reff' */ 0x72656666,
496
-    bmdDeckLinkStatusDuplexMode                                  = /* 'dupx' */ 0x64757078,
497
     bmdDeckLinkStatusBusy                                        = /* 'busy' */ 0x62757379,
498
     bmdDeckLinkStatusInterchangeablePanelType                    = /* 'icpt' */ 0x69637074,
499
     bmdDeckLinkStatusDeviceTemperature                           = /* 'dtmp' */ 0x64746D70,
500
@@ -491,35 +503,38 @@
501
 
502
     bmdDeckLinkStatusVideoInputSignalLocked                      = /* 'visl' */ 0x7669736C,
503
     bmdDeckLinkStatusReferenceSignalLocked                       = /* 'refl' */ 0x7265666C,
504
+
505
+    /* Bytes */
506
+
507
     bmdDeckLinkStatusReceivedEDID                                = /* 'edid' */ 0x65646964
508
 } BMDDeckLinkStatusID;
509
 
510
 /* Enum BMDDeckLinkVideoStatusFlags -  */
511
 
512
-typedef [v1_enum] enum _BMDDeckLinkVideoStatusFlags {
513
+typedef [v1_enum] enum _BMDDeckLinkVideoStatusFlags {
514
     bmdDeckLinkVideoStatusPsF                                    = 1 << 0,
515
     bmdDeckLinkVideoStatusDualStream3D                           = 1 << 1
516
 } BMDDeckLinkVideoStatusFlags;
517
 
518
-/* Enum BMDDuplexStatus - Duplex status of the device */
519
+/* Enum BMDDuplexMode - Duplex of the device */
520
 
521
-typedef [v1_enum] enum _BMDDuplexStatus {
522
-    bmdDuplexStatusFullDuplex                                    = /* 'fdup' */ 0x66647570,
523
-    bmdDuplexStatusHalfDuplex                                    = /* 'hdup' */ 0x68647570,
524
-    bmdDuplexStatusSimplex                                       = /* 'splx' */ 0x73706C78,
525
-    bmdDuplexStatusInactive                                      = /* 'inac' */ 0x696E6163
526
-} BMDDuplexStatus;
527
+typedef [v1_enum] enum _BMDDuplexMode {
528
+    bmdDuplexFull                                                = /* 'dxfu' */ 0x64786675,
529
+    bmdDuplexHalf                                                = /* 'dxha' */ 0x64786861,
530
+    bmdDuplexSimplex                                             = /* 'dxsp' */ 0x64787370,
531
+    bmdDuplexInactive                                            = /* 'dxin' */ 0x6478696E
532
+} BMDDuplexMode;
533
 
534
 /* Enum BMDPanelType - The type of interchangeable panel */
535
 
536
-typedef [v1_enum] enum _BMDPanelType {
537
+typedef [v1_enum] enum _BMDPanelType {
538
     bmdPanelNotDetected                                          = /* 'npnl' */ 0x6E706E6C,
539
     bmdPanelTeranexMiniSmartPanel                                = /* 'tmsm' */ 0x746D736D
540
 } BMDPanelType;
541
 
542
 /* Enum BMDDeviceBusyState - Current device busy state */
543
 
544
-[v1_enum] enum _BMDDeviceBusyState {
545
+[v1_enum] enum _BMDDeviceBusyState {
546
     bmdDeviceCaptureBusy                                         = 1 << 0,
547
     bmdDevicePlaybackBusy                                        = 1 << 1,
548
     bmdDeviceSerialPortBusy                                      = 1 << 2
549
@@ -527,14 +542,14 @@
550
 
551
 /* Enum BMDVideoIOSupport - Device video input/output support */
552
 
553
-typedef [v1_enum] enum _BMDVideoIOSupport {
554
+typedef [v1_enum] enum _BMDVideoIOSupport {
555
     bmdDeviceSupportsCapture                                     = 1 << 0,
556
     bmdDeviceSupportsPlayback                                    = 1 << 1
557
 } BMDVideoIOSupport;
558
 
559
 /* Enum BMD3DPreviewFormat - Linked Frame preview format */
560
 
561
-typedef [v1_enum] enum _BMD3DPreviewFormat {
562
+typedef [v1_enum] enum _BMD3DPreviewFormat {
563
     bmd3DPreviewFormatDefault                                    = /* 'defa' */ 0x64656661,
564
     bmd3DPreviewFormatLeftOnly                                   = /* 'left' */ 0x6C656674,
565
     bmd3DPreviewFormatRightOnly                                  = /* 'righ' */ 0x72696768,
566
@@ -544,7 +559,7 @@
567
 
568
 /* Enum BMDNotifications - Events that can be subscribed through IDeckLinkNotification */
569
 
570
-typedef [v1_enum] enum _BMDNotifications {
571
+typedef [v1_enum] enum _BMDNotifications {
572
     bmdPreferencesChanged                                        = /* 'pref' */ 0x70726566,
573
     bmdStatusChanged                                             = /* 'stat' */ 0x73746174
574
 } BMDNotifications;
575
@@ -581,7 +596,11 @@
576
 interface IDeckLinkDX9ScreenPreviewHelper;
577
 interface IDeckLinkNotificationCallback;
578
 interface IDeckLinkNotification;
579
-interface IDeckLinkAttributes;
580
+interface IDeckLinkProfileAttributes;
581
+interface IDeckLinkProfileIterator;
582
+interface IDeckLinkProfile;
583
+interface IDeckLinkProfileCallback;
584
+interface IDeckLinkProfileManager;
585
 interface IDeckLinkStatus;
586
 interface IDeckLinkKeyer;
587
 interface IDeckLinkVideoConversion;
588
@@ -596,20 +615,20 @@
589
     helpstring("Frame completion callback.")
590
 ] interface IDeckLinkVideoOutputCallback : IUnknown
591
 {
592
-    HRESULT ScheduledFrameCompleted([in] IDeckLinkVideoFrame *completedFrame, [in] BMDOutputFrameCompletionResult result);
593
-    HRESULT ScheduledPlaybackHasStopped(void);
594
+    HRESULT ScheduledFrameCompleted ([in] IDeckLinkVideoFrame* completedFrame, [in] BMDOutputFrameCompletionResult result);
595
+    HRESULT ScheduledPlaybackHasStopped (void);
596
 };
597
 
598
 /* Interface IDeckLinkInputCallback - Frame arrival callback. */
599
 
600
 [
601
     object,
602
-    uuid(DD04E5EC-7415-42AB-AE4A-E80C4DFC044A),
603
+    uuid(C6FCE4C9-C4E4-4047-82FB-5D238232A902),
604
     helpstring("Frame arrival callback.")
605
 ] interface IDeckLinkInputCallback : IUnknown
606
 {
607
-    HRESULT VideoInputFormatChanged([in] BMDVideoInputFormatChangedEvents notificationEvents, [in] IDeckLinkDisplayMode *newDisplayMode, [in] BMDDetectedVideoInputFormatFlags detectedSignalFlags);
608
-    HRESULT VideoInputFrameArrived([in] IDeckLinkVideoInputFrame* videoFrame, [in] IDeckLinkAudioInputPacket* audioPacket);
609
+    HRESULT VideoInputFormatChanged ([in] BMDVideoInputFormatChangedEvents notificationEvents, [in] IDeckLinkDisplayMode* newDisplayMode, [in] BMDDetectedVideoInputFormatFlags detectedSignalFlags);
610
+    HRESULT VideoInputFrameArrived ([in] IDeckLinkVideoInputFrame* videoFrame, [in] IDeckLinkAudioInputPacket* audioPacket);
611
 };
612
 
613
 /* Interface IDeckLinkEncoderInputCallback - Frame arrival callback. */
614
@@ -620,9 +639,9 @@
615
     helpstring("Frame arrival callback.")
616
 ] interface IDeckLinkEncoderInputCallback : IUnknown
617
 {
618
-    HRESULT VideoInputSignalChanged([in] BMDVideoInputFormatChangedEvents notificationEvents, [in] IDeckLinkDisplayMode *newDisplayMode, [in] BMDDetectedVideoInputFormatFlags detectedSignalFlags);
619
-    HRESULT VideoPacketArrived([in] IDeckLinkEncoderVideoPacket* videoPacket);
620
-    HRESULT AudioPacketArrived([in] IDeckLinkEncoderAudioPacket* audioPacket);
621
+    HRESULT VideoInputSignalChanged ([in] BMDVideoInputFormatChangedEvents notificationEvents, [in] IDeckLinkDisplayMode* newDisplayMode, [in] BMDDetectedVideoInputFormatFlags detectedSignalFlags);
622
+    HRESULT VideoPacketArrived ([in] IDeckLinkEncoderVideoPacket* videoPacket);
623
+    HRESULT AudioPacketArrived ([in] IDeckLinkEncoderAudioPacket* audioPacket);
624
 };
625
 
626
 /* Interface IDeckLinkMemoryAllocator - Memory allocator for video frames. */
627
@@ -630,15 +649,14 @@
628
 [
629
     object,
630
     uuid(B36EB6E7-9D29-4AA8-92EF-843B87A289E8),
631
-    local, 
632
+    local,
633
     helpstring("Memory allocator for video frames.")
634
 ] interface IDeckLinkMemoryAllocator : IUnknown
635
 {
636
-    HRESULT AllocateBuffer([in] unsigned int bufferSize, [out] void **allocatedBuffer);
637
-    HRESULT ReleaseBuffer([in] void *buffer);
638
-
639
-    HRESULT Commit(void);
640
-    HRESULT Decommit(void);
641
+    HRESULT AllocateBuffer ([in] unsigned int bufferSize, [out] void** allocatedBuffer);
642
+    HRESULT ReleaseBuffer ([in] void* buffer);
643
+    HRESULT Commit (void);
644
+    HRESULT Decommit (void);
645
 };
646
 
647
 /* Interface IDeckLinkAudioOutputCallback - Optional callback to allow audio samples to be pulled as required. */
648
@@ -646,22 +664,22 @@
649
 [
650
     object,
651
     uuid(403C681B-7F46-4A12-B993-2BB127084EE6),
652
-    local, 
653
+    local,
654
     helpstring("Optional callback to allow audio samples to be pulled as required.")
655
 ] interface IDeckLinkAudioOutputCallback : IUnknown
656
 {
657
-    HRESULT RenderAudioSamples([in] BOOL preroll);
658
+    HRESULT RenderAudioSamples ([in] BOOL preroll);
659
 };
660
 
661
-/* Interface IDeckLinkIterator - enumerates installed DeckLink hardware */
662
+/* Interface IDeckLinkIterator - Enumerates installed DeckLink hardware */
663
 
664
 [
665
     object,
666
     uuid(50FB36CD-3063-4B73-BDBB-958087F2D8BA),
667
-    helpstring("enumerates installed DeckLink hardware")
668
+    helpstring("Enumerates installed DeckLink hardware")
669
 ] interface IDeckLinkIterator : IUnknown
670
 {
671
-    HRESULT Next([out] IDeckLink **deckLinkInstance);
672
+    HRESULT Next ([out] IDeckLink** deckLinkInstance);
673
 };
674
 
675
 /* Interface IDeckLinkAPIInformation - DeckLinkAPI attribute interface */
676
@@ -672,107 +690,101 @@
677
     helpstring("DeckLinkAPI attribute interface")
678
 ] interface IDeckLinkAPIInformation : IUnknown
679
 {
680
-    HRESULT GetFlag([in] BMDDeckLinkAPIInformationID cfgID, [out] BOOL *value);
681
-    HRESULT GetInt([in] BMDDeckLinkAPIInformationID cfgID, [out] LONGLONG *value);
682
-    HRESULT GetFloat([in] BMDDeckLinkAPIInformationID cfgID, [out] double *value);
683
-    HRESULT GetString([in] BMDDeckLinkAPIInformationID cfgID, [out] BSTR *value);
684
+    HRESULT GetFlag ([in] BMDDeckLinkAPIInformationID cfgID, [out] BOOL* value);
685
+    HRESULT GetInt ([in] BMDDeckLinkAPIInformationID cfgID, [out] LONGLONG* value);
686
+    HRESULT GetFloat ([in] BMDDeckLinkAPIInformationID cfgID, [out] double* value);
687
+    HRESULT GetString ([in] BMDDeckLinkAPIInformationID cfgID, [out] BSTR* value);
688
 };
689
 
690
 /* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
691
 
692
 [
693
     object,
694
-    uuid(CC5C8A6E-3F2F-4B3A-87EA-FD78AF300564),
695
-    local, 
696
+    uuid(BE2D9020-461E-442F-84B7-E949CB953B9D),
697
+    local,
698
     helpstring("Created by QueryInterface from IDeckLink.")
699
 ] interface IDeckLinkOutput : IUnknown
700
 {
701
-    HRESULT DoesSupportVideoMode([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoOutputFlags flags, [out] BMDDisplayModeSupport *result, [out] IDeckLinkDisplayMode **resultDisplayMode);
702
-    HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator **iterator);
703
-
704
-    HRESULT SetScreenPreviewCallback([in] IDeckLinkScreenPreviewCallback *previewCallback);
705
+    HRESULT DoesSupportVideoMode ([in] BMDVideoConnection connection /* If a value of bmdVideoConnectionUnspecified is specified, the caller does not care about the connection */, [in] BMDDisplayMode requestedMode, [in] BMDPixelFormat requestedPixelFormat, [in] BMDVideoOutputConversionMode conversionMode, [in] BMDSupportedVideoModeFlags flags, [out] BMDDisplayMode* actualMode, [out] BOOL* supported);
706
+    HRESULT GetDisplayMode ([in] BMDDisplayMode displayMode, [out] IDeckLinkDisplayMode** resultDisplayMode);
707
+    HRESULT GetDisplayModeIterator ([out] IDeckLinkDisplayModeIterator** iterator);
708
+    HRESULT SetScreenPreviewCallback ([in] IDeckLinkScreenPreviewCallback* previewCallback);
709
 
710
     /* Video Output */
711
 
712
-    HRESULT EnableVideoOutput([in] BMDDisplayMode displayMode, [in] BMDVideoOutputFlags flags);
713
-    HRESULT DisableVideoOutput(void);
714
-
715
-    HRESULT SetVideoOutputFrameMemoryAllocator([in] IDeckLinkMemoryAllocator *theAllocator);
716
-    HRESULT CreateVideoFrame([in] int width, [in] int height, [in] int rowBytes, [in] BMDPixelFormat pixelFormat, [in] BMDFrameFlags flags, [out] IDeckLinkMutableVideoFrame **outFrame);
717
-    HRESULT CreateAncillaryData([in] BMDPixelFormat pixelFormat, [out] IDeckLinkVideoFrameAncillary **outBuffer); // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
718
-
719
-    HRESULT DisplayVideoFrameSync([in] IDeckLinkVideoFrame *theFrame);
720
-    HRESULT ScheduleVideoFrame([in] IDeckLinkVideoFrame *theFrame, [in] BMDTimeValue displayTime, [in] BMDTimeValue displayDuration, [in] BMDTimeScale timeScale);
721
-    HRESULT SetScheduledFrameCompletionCallback([in] IDeckLinkVideoOutputCallback *theCallback);
722
-    HRESULT GetBufferedVideoFrameCount([out] unsigned int *bufferedFrameCount);
723
+    HRESULT EnableVideoOutput ([in] BMDDisplayMode displayMode, [in] BMDVideoOutputFlags flags);
724
+    HRESULT DisableVideoOutput (void);
725
+    HRESULT SetVideoOutputFrameMemoryAllocator ([in] IDeckLinkMemoryAllocator* theAllocator);
726
+    HRESULT CreateVideoFrame ([in] int width, [in] int height, [in] int rowBytes, [in] BMDPixelFormat pixelFormat, [in] BMDFrameFlags flags, [out] IDeckLinkMutableVideoFrame** outFrame);
727
+    HRESULT CreateAncillaryData ([in] BMDPixelFormat pixelFormat, [out] IDeckLinkVideoFrameAncillary** outBuffer); // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
728
+    HRESULT DisplayVideoFrameSync ([in] IDeckLinkVideoFrame* theFrame);
729
+    HRESULT ScheduleVideoFrame ([in] IDeckLinkVideoFrame* theFrame, [in] BMDTimeValue displayTime, [in] BMDTimeValue displayDuration, [in] BMDTimeScale timeScale);
730
+    HRESULT SetScheduledFrameCompletionCallback ([in] IDeckLinkVideoOutputCallback* theCallback);
731
+    HRESULT GetBufferedVideoFrameCount ([out] unsigned int* bufferedFrameCount);
732
 
733
     /* Audio Output */
734
 
735
-    HRESULT EnableAudioOutput([in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned int channelCount, [in] BMDAudioOutputStreamType streamType);
736
-    HRESULT DisableAudioOutput(void);
737
-
738
-    HRESULT WriteAudioSamplesSync([in] void *buffer, [in] unsigned int sampleFrameCount, [out] unsigned int *sampleFramesWritten);
739
-
740
-    HRESULT BeginAudioPreroll(void);
741
-    HRESULT EndAudioPreroll(void);
742
-    HRESULT ScheduleAudioSamples([in] void *buffer, [in] unsigned int sampleFrameCount, [in] BMDTimeValue streamTime, [in] BMDTimeScale timeScale, [out] unsigned int *sampleFramesWritten);
743
-
744
-    HRESULT GetBufferedAudioSampleFrameCount([out] unsigned int *bufferedSampleFrameCount);
745
-    HRESULT FlushBufferedAudioSamples(void);
746
-
747
-    HRESULT SetAudioCallback([in] IDeckLinkAudioOutputCallback *theCallback);
748
+    HRESULT EnableAudioOutput ([in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned int channelCount, [in] BMDAudioOutputStreamType streamType);
749
+    HRESULT DisableAudioOutput (void);
750
+    HRESULT WriteAudioSamplesSync ([in] void* buffer, [in] unsigned int sampleFrameCount, [out] unsigned int* sampleFramesWritten);
751
+    HRESULT BeginAudioPreroll (void);
752
+    HRESULT EndAudioPreroll (void);
753
+    HRESULT ScheduleAudioSamples ([in] void* buffer, [in] unsigned int sampleFrameCount, [in] BMDTimeValue streamTime, [in] BMDTimeScale timeScale, [out] unsigned int* sampleFramesWritten);
754
+    HRESULT GetBufferedAudioSampleFrameCount ([out] unsigned int* bufferedSampleFrameCount);
755
+    HRESULT FlushBufferedAudioSamples (void);
756
+    HRESULT SetAudioCallback ([in] IDeckLinkAudioOutputCallback* theCallback);
757
 
758
     /* Output Control */
759
 
760
-    HRESULT StartScheduledPlayback([in] BMDTimeValue playbackStartTime, [in] BMDTimeScale timeScale, [in] double playbackSpeed);
761
-    HRESULT StopScheduledPlayback([in] BMDTimeValue stopPlaybackAtTime, [out] BMDTimeValue *actualStopTime, [in] BMDTimeScale timeScale);
762
-    HRESULT IsScheduledPlaybackRunning([out] BOOL *active);
763
-    HRESULT GetScheduledStreamTime([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue *streamTime, [out] double *playbackSpeed);
764
-    HRESULT GetReferenceStatus([out] BMDReferenceStatus *referenceStatus);
765
+    HRESULT StartScheduledPlayback ([in] BMDTimeValue playbackStartTime, [in] BMDTimeScale timeScale, [in] double playbackSpeed);
766
+    HRESULT StopScheduledPlayback ([in] BMDTimeValue stopPlaybackAtTime, [out] BMDTimeValue* actualStopTime, [in] BMDTimeScale timeScale);
767
+    HRESULT IsScheduledPlaybackRunning ([out] BOOL* active);
768
+    HRESULT GetScheduledStreamTime ([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue* streamTime, [out] double* playbackSpeed);
769
+    HRESULT GetReferenceStatus ([out] BMDReferenceStatus* referenceStatus);
770
 
771
     /* Hardware Timing */
772
 
773
-    HRESULT GetHardwareReferenceClock([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue *hardwareTime, [out] BMDTimeValue *timeInFrame, [out] BMDTimeValue *ticksPerFrame);
774
-    HRESULT GetFrameCompletionReferenceTimestamp([in] IDeckLinkVideoFrame *theFrame, [in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue *frameCompletionTimestamp);
775
+    HRESULT GetHardwareReferenceClock ([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue* hardwareTime, [out] BMDTimeValue* timeInFrame, [out] BMDTimeValue* ticksPerFrame);
776
+    HRESULT GetFrameCompletionReferenceTimestamp ([in] IDeckLinkVideoFrame* theFrame, [in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue* frameCompletionTimestamp);
777
 };
778
 
779
 /* Interface IDeckLinkInput - Created by QueryInterface from IDeckLink. */
780
 
781
 [
782
     object,
783
-    uuid(AF22762B-DFAC-4846-AA79-FA8883560995),
784
+    uuid(C21CDB6E-F414-46E4-A636-80A566E0ED37),
785
     helpstring("Created by QueryInterface from IDeckLink.")
786
 ] interface IDeckLinkInput : IUnknown
787
 {
788
-    HRESULT DoesSupportVideoMode([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoInputFlags flags, [out] BMDDisplayModeSupport *result, [out] IDeckLinkDisplayMode **resultDisplayMode);
789
-    HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator **iterator);
790
-
791
-    HRESULT SetScreenPreviewCallback([in] IDeckLinkScreenPreviewCallback *previewCallback);
792
+    HRESULT DoesSupportVideoMode ([in] BMDVideoConnection connection /* If a value of bmdVideoConnectionUnspecified is specified, the caller does not care about the connection */, [in] BMDDisplayMode requestedMode, [in] BMDPixelFormat requestedPixelFormat, [in] BMDVideoInputConversionMode conversionMode, [in] BMDSupportedVideoModeFlags flags, [out] BMDDisplayMode* actualMode, [out] BOOL* supported);
793
+    HRESULT GetDisplayMode ([in] BMDDisplayMode displayMode, [out] IDeckLinkDisplayMode** resultDisplayMode);
794
+    HRESULT GetDisplayModeIterator ([out] IDeckLinkDisplayModeIterator** iterator);
795
+    HRESULT SetScreenPreviewCallback ([in] IDeckLinkScreenPreviewCallback* previewCallback);
796
 
797
     /* Video Input */
798
 
799
-    HRESULT EnableVideoInput([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoInputFlags flags);
800
-    HRESULT DisableVideoInput(void);
801
-    HRESULT GetAvailableVideoFrameCount([out] unsigned int *availableFrameCount);
802
-    HRESULT SetVideoInputFrameMemoryAllocator([in] IDeckLinkMemoryAllocator *theAllocator);
803
+    HRESULT EnableVideoInput ([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoInputFlags flags);
804
+    HRESULT DisableVideoInput (void);
805
+    HRESULT GetAvailableVideoFrameCount ([out] unsigned int* availableFrameCount);
806
+    HRESULT SetVideoInputFrameMemoryAllocator ([in] IDeckLinkMemoryAllocator* theAllocator);
807
 
808
     /* Audio Input */
809
 
810
-    HRESULT EnableAudioInput([in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned int channelCount);
811
-    HRESULT DisableAudioInput(void);
812
-    HRESULT GetAvailableAudioSampleFrameCount([out] unsigned int *availableSampleFrameCount);
813
+    HRESULT EnableAudioInput ([in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned int channelCount);
814
+    HRESULT DisableAudioInput (void);
815
+    HRESULT GetAvailableAudioSampleFrameCount ([out] unsigned int* availableSampleFrameCount);
816
 
817
     /* Input Control */
818
 
819
-    HRESULT StartStreams(void);
820
-    HRESULT StopStreams(void);
821
-    HRESULT PauseStreams(void);
822
-    HRESULT FlushStreams(void);
823
-    HRESULT SetCallback([in] IDeckLinkInputCallback *theCallback);
824
+    HRESULT StartStreams (void);
825
+    HRESULT StopStreams (void);
826
+    HRESULT PauseStreams (void);
827
+    HRESULT FlushStreams (void);
828
+    HRESULT SetCallback ([in] IDeckLinkInputCallback* theCallback);
829
 
830
     /* Hardware Timing */
831
 
832
-    HRESULT GetHardwareReferenceClock([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue *hardwareTime, [out] BMDTimeValue *timeInFrame, [out] BMDTimeValue *ticksPerFrame);
833
+    HRESULT GetHardwareReferenceClock ([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue* hardwareTime, [out] BMDTimeValue* timeInFrame, [out] BMDTimeValue* ticksPerFrame);
834
 };
835
 
836
 /* Interface IDeckLinkHDMIInputEDID - Created by QueryInterface from IDeckLink. Releasing all references will restore EDID to default */
837
@@ -783,46 +795,47 @@
838
     helpstring("Created by QueryInterface from IDeckLink. Releasing all references will restore EDID to default")
839
 ] interface IDeckLinkHDMIInputEDID : IUnknown
840
 {
841
-    HRESULT SetInt([in] BMDDeckLinkHDMIInputEDIDID cfgID, [in] LONGLONG value);
842
-    HRESULT GetInt([in] BMDDeckLinkHDMIInputEDIDID cfgID, [out] LONGLONG *value);
843
-    HRESULT WriteToEDID(void);
844
+    HRESULT SetInt ([in] BMDDeckLinkHDMIInputEDIDID cfgID, [in] LONGLONG value);
845
+    HRESULT GetInt ([in] BMDDeckLinkHDMIInputEDIDID cfgID, [out] LONGLONG* value);
846
+    HRESULT WriteToEDID (void);
847
 };
848
 
849
 /* Interface IDeckLinkEncoderInput - Created by QueryInterface from IDeckLink. */
850
 
851
 [
852
     object,
853
-    uuid(270587DA-6B7D-42E7-A1F0-6D853F581185),
854
+    uuid(F222551D-13DF-4FD8-B587-9D4F19EC12C9),
855
     helpstring("Created by QueryInterface from IDeckLink.")
856
 ] interface IDeckLinkEncoderInput : IUnknown
857
 {
858
-    HRESULT DoesSupportVideoMode([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoInputFlags flags, [out] BMDDisplayModeSupport *result, [out] IDeckLinkDisplayMode **resultDisplayMode);
859
-    HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator **iterator);
860
+    HRESULT DoesSupportVideoMode ([in] BMDVideoConnection connection /* If a value of bmdVideoConnectionUnspecified is specified, the caller does not care about the connection */, [in] BMDDisplayMode requestedMode, [in] BMDPixelFormat requestedCodec, [in] unsigned int requestedCodecProfile, [in] BMDSupportedVideoModeFlags flags, [out] BOOL* supported);
861
+    HRESULT GetDisplayMode ([in] BMDDisplayMode displayMode, [out] IDeckLinkDisplayMode** resultDisplayMode);
862
+    HRESULT GetDisplayModeIterator ([out] IDeckLinkDisplayModeIterator** iterator);
863
 
864
     /* Video Input */
865
 
866
-    HRESULT EnableVideoInput([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoInputFlags flags);
867
-    HRESULT DisableVideoInput(void);
868
-    HRESULT GetAvailablePacketsCount([out] unsigned int *availablePacketsCount);
869
-    HRESULT SetMemoryAllocator([in] IDeckLinkMemoryAllocator *theAllocator);
870
+    HRESULT EnableVideoInput ([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoInputFlags flags);
871
+    HRESULT DisableVideoInput (void);
872
+    HRESULT GetAvailablePacketsCount ([out] unsigned int* availablePacketsCount);
873
+    HRESULT SetMemoryAllocator ([in] IDeckLinkMemoryAllocator* theAllocator);
874
 
875
     /* Audio Input */
876
 
877
-    HRESULT EnableAudioInput([in] BMDAudioFormat audioFormat, [in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned int channelCount);
878
-    HRESULT DisableAudioInput(void);
879
-    HRESULT GetAvailableAudioSampleFrameCount([out] unsigned int *availableSampleFrameCount);
880
+    HRESULT EnableAudioInput ([in] BMDAudioFormat audioFormat, [in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned int channelCount);
881
+    HRESULT DisableAudioInput (void);
882
+    HRESULT GetAvailableAudioSampleFrameCount ([out] unsigned int* availableSampleFrameCount);
883
 
884
     /* Input Control */
885
 
886
-    HRESULT StartStreams(void);
887
-    HRESULT StopStreams(void);
888
-    HRESULT PauseStreams(void);
889
-    HRESULT FlushStreams(void);
890
-    HRESULT SetCallback([in] IDeckLinkEncoderInputCallback *theCallback);
891
+    HRESULT StartStreams (void);
892
+    HRESULT StopStreams (void);
893
+    HRESULT PauseStreams (void);
894
+    HRESULT FlushStreams (void);
895
+    HRESULT SetCallback ([in] IDeckLinkEncoderInputCallback* theCallback);
896
 
897
     /* Hardware Timing */
898
 
899
-    HRESULT GetHardwareReferenceClock([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue *hardwareTime, [out] BMDTimeValue *timeInFrame, [out] BMDTimeValue *ticksPerFrame);
900
+    HRESULT GetHardwareReferenceClock ([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue* hardwareTime, [out] BMDTimeValue* timeInFrame, [out] BMDTimeValue* ticksPerFrame);
901
 };
902
 
903
 /* Interface IDeckLinkVideoFrame - Interface to encapsulate a video frame; can be caller-implemented. */
904
@@ -830,19 +843,18 @@
905
 [
906
     object,
907
     uuid(3F716FE0-F023-4111-BE5D-EF4414C05B17),
908
-    local, 
909
+    local,
910
     helpstring("Interface to encapsulate a video frame; can be caller-implemented.")
911
 ] interface IDeckLinkVideoFrame : IUnknown
912
 {
913
-    long GetWidth(void);
914
-    long GetHeight(void);
915
-    long GetRowBytes(void);
916
-    BMDPixelFormat GetPixelFormat(void);
917
-    BMDFrameFlags GetFlags(void);
918
-    HRESULT GetBytes([out] void **buffer);
919
-
920
-    HRESULT GetTimecode([in] BMDTimecodeFormat format, [out] IDeckLinkTimecode **timecode);
921
-    HRESULT GetAncillaryData([out] IDeckLinkVideoFrameAncillary **ancillary); // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
922
+    long GetWidth (void);
923
+    long GetHeight (void);
924
+    long GetRowBytes (void);
925
+    BMDPixelFormat GetPixelFormat (void);
926
+    BMDFrameFlags GetFlags (void);
927
+    HRESULT GetBytes ([out] void** buffer);
928
+    HRESULT GetTimecode ([in] BMDTimecodeFormat format, [out] IDeckLinkTimecode** timecode);
929
+    HRESULT GetAncillaryData ([out] IDeckLinkVideoFrameAncillary** ancillary); // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
930
 };
931
 
932
 /* Interface IDeckLinkMutableVideoFrame - Created by IDeckLinkOutput::CreateVideoFrame. */
933
@@ -850,16 +862,15 @@
934
 [
935
     object,
936
     uuid(69E2639F-40DA-4E19-B6F2-20ACE815C390),
937
-    local, 
938
+    local,
939
     helpstring("Created by IDeckLinkOutput::CreateVideoFrame.")
940
 ] interface IDeckLinkMutableVideoFrame : IDeckLinkVideoFrame
941
 {
942
-    HRESULT SetFlags([in] BMDFrameFlags newFlags);
943
-
944
-    HRESULT SetTimecode([in] BMDTimecodeFormat format, [in] IDeckLinkTimecode *timecode);
945
-    HRESULT SetTimecodeFromComponents([in] BMDTimecodeFormat format, [in] unsigned char hours, [in] unsigned char minutes, [in] unsigned char seconds, [in] unsigned char frames, [in] BMDTimecodeFlags flags);
946
-    HRESULT SetAncillaryData([in] IDeckLinkVideoFrameAncillary *ancillary);
947
-    HRESULT SetTimecodeUserBits([in] BMDTimecodeFormat format, [in] BMDTimecodeUserBits userBits);
948
+    HRESULT SetFlags ([in] BMDFrameFlags newFlags);
949
+    HRESULT SetTimecode ([in] BMDTimecodeFormat format, [in] IDeckLinkTimecode* timecode);
950
+    HRESULT SetTimecodeFromComponents ([in] BMDTimecodeFormat format, [in] unsigned char hours, [in] unsigned char minutes, [in] unsigned char seconds, [in] unsigned char frames, [in] BMDTimecodeFlags flags);
951
+    HRESULT SetAncillaryData ([in] IDeckLinkVideoFrameAncillary* ancillary);
952
+    HRESULT SetTimecodeUserBits ([in] BMDTimecodeFormat format, [in] BMDTimecodeUserBits userBits);
953
 };
954
 
955
 /* Interface IDeckLinkVideoFrame3DExtensions - Optional interface implemented on IDeckLinkVideoFrame to support 3D frames */
956
@@ -867,27 +878,28 @@
957
 [
958
     object,
959
     uuid(DA0F7E4A-EDC7-48A8-9CDD-2DB51C729CD7),
960
-    local, 
961
+    local,
962
     helpstring("Optional interface implemented on IDeckLinkVideoFrame to support 3D frames")
963
 ] interface IDeckLinkVideoFrame3DExtensions : IUnknown
964
 {
965
-    BMDVideo3DPackingFormat Get3DPackingFormat(void);
966
-    HRESULT GetFrameForRightEye([out] IDeckLinkVideoFrame* *rightEyeFrame);
967
+    BMDVideo3DPackingFormat Get3DPackingFormat (void);
968
+    HRESULT GetFrameForRightEye ([out] IDeckLinkVideoFrame** rightEyeFrame);
969
 };
970
 
971
-/* Interface IDeckLinkVideoFrameMetadataExtensions - Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDMI HDR information */
972
+/* Interface IDeckLinkVideoFrameMetadataExtensions - Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDR information */
973
 
974
 [
975
     object,
976
-    uuid(D5973DC9-6432-46D0-8F0B-2496F8A1238F),
977
-    local, 
978
-    helpstring("Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDMI HDR information")
979
+    uuid(E232A5B7-4DB4-44C9-9152-F47C12E5F051),
980
+    local,
981
+    helpstring("Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDR information")
982
 ] interface IDeckLinkVideoFrameMetadataExtensions : IUnknown
983
 {
984
-    HRESULT GetInt([in] BMDDeckLinkFrameMetadataID metadataID, [out] LONGLONG *value);
985
-    HRESULT GetFloat([in] BMDDeckLinkFrameMetadataID metadataID, [out] double *value);
986
-    HRESULT GetFlag([in] BMDDeckLinkFrameMetadataID metadataID, [out] BOOL* value);
987
-    HRESULT GetString([in] BMDDeckLinkFrameMetadataID metadataID, [out] BSTR *value);
988
+    HRESULT GetInt ([in] BMDDeckLinkFrameMetadataID metadataID, [out] LONGLONG* value);
989
+    HRESULT GetFloat ([in] BMDDeckLinkFrameMetadataID metadataID, [out] double* value);
990
+    HRESULT GetFlag ([in] BMDDeckLinkFrameMetadataID metadataID, [out] BOOL* value);
991
+    HRESULT GetString ([in] BMDDeckLinkFrameMetadataID metadataID, [out] BSTR* value);
992
+    HRESULT GetBytes ([in] BMDDeckLinkFrameMetadataID metadataID, [out] void* buffer /* optional */, [in, out] unsigned int* bufferSize);
993
 };
994
 
995
 /* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */
996
@@ -895,12 +907,12 @@
997
 [
998
     object,
999
     uuid(05CFE374-537C-4094-9A57-680525118F44),
1000
-    local, 
1001
+    local,
1002
     helpstring("Provided by the IDeckLinkVideoInput frame arrival callback.")
1003
 ] interface IDeckLinkVideoInputFrame : IDeckLinkVideoFrame
1004
 {
1005
-    HRESULT GetStreamTime([out] BMDTimeValue *frameTime, [out] BMDTimeValue *frameDuration, [in] BMDTimeScale timeScale);
1006
-    HRESULT GetHardwareReferenceTimestamp([in] BMDTimeScale timeScale, [out] BMDTimeValue *frameTime, [out] BMDTimeValue *frameDuration);
1007
+    HRESULT GetStreamTime ([out] BMDTimeValue* frameTime, [out] BMDTimeValue* frameDuration, [in] BMDTimeScale timeScale);
1008
+    HRESULT GetHardwareReferenceTimestamp ([in] BMDTimeScale timeScale, [out] BMDTimeValue* frameTime, [out] BMDTimeValue* frameDuration);
1009
 };
1010
 
1011
 /* Interface IDeckLinkAncillaryPacket - On output, user needs to implement this interface */
1012
@@ -911,12 +923,11 @@
1013
     helpstring("On output, user needs to implement this interface")
1014
 ] interface IDeckLinkAncillaryPacket : IUnknown
1015
 {
1016
-
1017
-    HRESULT GetBytes([in] BMDAncillaryPacketFormat format /* For output, only one format need be offered */, [out] const void **data /* Optional */, [out] unsigned int *size /* Optional */);
1018
-    unsigned char GetDID(void);
1019
-    unsigned char GetSDID(void);
1020
-    unsigned int GetLineNumber(void); // On output, zero is auto
1021
-    unsigned char GetDataStreamIndex(void); // Usually zero. Can only be 1 if non-SD and the first data stream is completely full
1022
+    HRESULT GetBytes ([in] BMDAncillaryPacketFormat format /* For output, only one format need be offered */, [out] const void** data /* Optional */, [out] unsigned int* size /* Optional */);
1023
+    unsigned char GetDID (void);
1024
+    unsigned char GetSDID (void);
1025
+    unsigned int GetLineNumber (void); // On output, zero is auto
1026
+    unsigned char GetDataStreamIndex (void);   // Usually zero. Can only be 1 if non-SD and the first data stream is completely full
1027
 };
1028
 
1029
 /* Interface IDeckLinkAncillaryPacketIterator - Enumerates ancillary packets */
1030
@@ -927,39 +938,37 @@
1031
     helpstring("Enumerates ancillary packets")
1032
 ] interface IDeckLinkAncillaryPacketIterator : IUnknown
1033
 {
1034
-    HRESULT Next([out] IDeckLinkAncillaryPacket **packet);
1035
+    HRESULT Next ([out] IDeckLinkAncillaryPacket** packet);
1036
 };
1037
 
1038
-/* Interface IDeckLinkVideoFrameAncillaryPackets - Obtained through QueryInterface() on an IDeckLinkVideoFrame object. */
1039
+/* Interface IDeckLinkVideoFrameAncillaryPackets - Obtained through QueryInterface on an IDeckLinkVideoFrame object. */
1040
 
1041
 [
1042
     object,
1043
     uuid(6C186C0F-459E-41D8-AEE2-4812D81AEE68),
1044
-    local, 
1045
-    helpstring("Obtained through QueryInterface() on an IDeckLinkVideoFrame object.")
1046
+    local,
1047
+    helpstring("Obtained through QueryInterface on an IDeckLinkVideoFrame object.")
1048
 ] interface IDeckLinkVideoFrameAncillaryPackets : IUnknown
1049
 {
1050
-
1051
-    HRESULT GetPacketIterator([out] IDeckLinkAncillaryPacketIterator **iterator);
1052
-    HRESULT GetFirstPacketByID([in] unsigned char DID, [in] unsigned char SDID, [out] IDeckLinkAncillaryPacket **packet);
1053
-    HRESULT AttachPacket([in] IDeckLinkAncillaryPacket *packet); // Implement IDeckLinkAncillaryPacket to output your own
1054
-    HRESULT DetachPacket([in] IDeckLinkAncillaryPacket *packet);
1055
-    HRESULT DetachAllPackets(void);
1056
+    HRESULT GetPacketIterator ([out] IDeckLinkAncillaryPacketIterator** iterator);
1057
+    HRESULT GetFirstPacketByID ([in] unsigned char DID, [in] unsigned char SDID, [out] IDeckLinkAncillaryPacket** packet);
1058
+    HRESULT AttachPacket ([in] IDeckLinkAncillaryPacket* packet);  // Implement IDeckLinkAncillaryPacket to output your own
1059
+    HRESULT DetachPacket ([in] IDeckLinkAncillaryPacket* packet);
1060
+    HRESULT DetachAllPackets (void);
1061
 };
1062
 
1063
-/* Interface IDeckLinkVideoFrameAncillary - Use of IDeckLinkVideoFrameAncillaryPackets is preferred. Obtained through QueryInterface() on an IDeckLinkVideoFrame object. */
1064
+/* Interface IDeckLinkVideoFrameAncillary - Use of IDeckLinkVideoFrameAncillaryPackets is preferred. Obtained through QueryInterface on an IDeckLinkVideoFrame object. */
1065
 
1066
 [
1067
     object,
1068
     uuid(732E723C-D1A4-4E29-9E8E-4A88797A0004),
1069
-    local, 
1070
-    helpstring("Use of IDeckLinkVideoFrameAncillaryPackets is preferred. Obtained through QueryInterface() on an IDeckLinkVideoFrame object.")
1071
+    local,
1072
+    helpstring("Use of IDeckLinkVideoFrameAncillaryPackets is preferred. Obtained through QueryInterface on an IDeckLinkVideoFrame object.")
1073
 ] interface IDeckLinkVideoFrameAncillary : IUnknown
1074
 {
1075
-
1076
-    HRESULT GetBufferForVerticalBlankingLine([in] unsigned int lineNumber, [out] void **buffer); // Pixels/rowbytes is same as display mode, except for above HD where it's 1920 pixels for UHD modes and 2048 pixels for DCI modes
1077
-    BMDPixelFormat GetPixelFormat(void);
1078
-    BMDDisplayMode GetDisplayMode(void);
1079
+    HRESULT GetBufferForVerticalBlankingLine ([in] unsigned int lineNumber, [out] void** buffer);  // Pixels/rowbytes is same as display mode, except for above HD where it's 1920 pixels for UHD modes and 2048 pixels for DCI modes
1080
+    BMDPixelFormat GetPixelFormat (void);
1081
+    BMDDisplayMode GetDisplayMode (void);
1082
 };
1083
 
1084
 /* Interface IDeckLinkEncoderPacket - Interface to encapsulate an encoded packet. */
1085
@@ -967,14 +976,14 @@
1086
 [
1087
     object,
1088
     uuid(B693F36C-316E-4AF1-B6C2-F389A4BCA620),
1089
-    local, 
1090
+    local,
1091
     helpstring("Interface to encapsulate an encoded packet.")
1092
 ] interface IDeckLinkEncoderPacket : IUnknown
1093
 {
1094
-    HRESULT GetBytes([out] void **buffer);
1095
-    long GetSize(void);
1096
-    HRESULT GetStreamTime([out] BMDTimeValue *frameTime, [in] BMDTimeScale timeScale);
1097
-    BMDPacketType GetPacketType(void);
1098
+    HRESULT GetBytes ([out] void** buffer);
1099
+    long GetSize (void);
1100
+    HRESULT GetStreamTime ([out] BMDTimeValue* frameTime, [in] BMDTimeScale timeScale);
1101
+    BMDPacketType GetPacketType (void);
1102
 };
1103
 
1104
 /* Interface IDeckLinkEncoderVideoPacket - Provided by the IDeckLinkEncoderInput video packet arrival callback. */
1105
@@ -982,14 +991,13 @@
1106
 [
1107
     object,
1108
     uuid(4E7FD944-E8C7-4EAC-B8C0-7B77F80F5AE0),
1109
-    local, 
1110
+    local,
1111
     helpstring("Provided by the IDeckLinkEncoderInput video packet arrival callback.")
1112
 ] interface IDeckLinkEncoderVideoPacket : IDeckLinkEncoderPacket
1113
 {
1114
-    BMDPixelFormat GetPixelFormat(void);
1115
-    HRESULT GetHardwareReferenceTimestamp([in] BMDTimeScale timeScale, [out] BMDTimeValue *frameTime, [out] BMDTimeValue *frameDuration);
1116
-
1117
-    HRESULT GetTimecode([in] BMDTimecodeFormat format, [out] IDeckLinkTimecode **timecode);
1118
+    BMDPixelFormat GetPixelFormat (void);
1119
+    HRESULT GetHardwareReferenceTimestamp ([in] BMDTimeScale timeScale, [out] BMDTimeValue* frameTime, [out] BMDTimeValue* frameDuration);
1120
+    HRESULT GetTimecode ([in] BMDTimecodeFormat format, [out] IDeckLinkTimecode** timecode);
1121
 };
1122
 
1123
 /* Interface IDeckLinkEncoderAudioPacket - Provided by the IDeckLinkEncoderInput audio packet arrival callback. */
1124
@@ -997,25 +1005,25 @@
1125
 [
1126
     object,
1127
     uuid(49E8EDC8-693B-4E14-8EF6-12C658F5A07A),
1128
-    local, 
1129
+    local,
1130
     helpstring("Provided by the IDeckLinkEncoderInput audio packet arrival callback.")
1131
 ] interface IDeckLinkEncoderAudioPacket : IDeckLinkEncoderPacket
1132
 {
1133
-    BMDAudioFormat GetAudioFormat(void);
1134
+    BMDAudioFormat GetAudioFormat (void);
1135
 };
1136
 
1137
-/* Interface IDeckLinkH265NALPacket - Obtained through QueryInterface() on an IDeckLinkEncoderVideoPacket object */
1138
+/* Interface IDeckLinkH265NALPacket - Obtained through QueryInterface on an IDeckLinkEncoderVideoPacket object */
1139
 
1140
 [
1141
     object,
1142
     uuid(639C8E0B-68D5-4BDE-A6D4-95F3AEAFF2E7),
1143
-    local, 
1144
-    helpstring("Obtained through QueryInterface() on an IDeckLinkEncoderVideoPacket object")
1145
+    local,
1146
+    helpstring("Obtained through QueryInterface on an IDeckLinkEncoderVideoPacket object")
1147
 ] interface IDeckLinkH265NALPacket : IDeckLinkEncoderVideoPacket
1148
 {
1149
-    HRESULT GetUnitType([out] unsigned char *unitType);
1150
-    HRESULT GetBytesNoPrefix([out] void **buffer);
1151
-    long GetSizeNoPrefix(void);
1152
+    HRESULT GetUnitType ([out] unsigned char* unitType);
1153
+    HRESULT GetBytesNoPrefix ([out] void** buffer);
1154
+    long GetSizeNoPrefix (void);
1155
 };
1156
 
1157
 /* Interface IDeckLinkAudioInputPacket - Provided by the IDeckLinkInput callback. */
1158
@@ -1023,13 +1031,13 @@
1159
 [
1160
     object,
1161
     uuid(E43D5870-2894-11DE-8C30-0800200C9A66),
1162
-    local, 
1163
+    local,
1164
     helpstring("Provided by the IDeckLinkInput callback.")
1165
 ] interface IDeckLinkAudioInputPacket : IUnknown
1166
 {
1167
-    long GetSampleFrameCount(void);
1168
-    HRESULT GetBytes([out] void **buffer);
1169
-    HRESULT GetPacketTime([out] BMDTimeValue *packetTime, [in] BMDTimeScale timeScale);
1170
+    long GetSampleFrameCount (void);
1171
+    HRESULT GetBytes ([out] void** buffer);
1172
+    HRESULT GetPacketTime ([out] BMDTimeValue* packetTime, [in] BMDTimeScale timeScale);
1173
 };
1174
 
1175
 /* Interface IDeckLinkScreenPreviewCallback - Screen preview callback */
1176
@@ -1037,44 +1045,44 @@
1177
 [
1178
     object,
1179
     uuid(B1D3F49A-85FE-4C5D-95C8-0B5D5DCCD438),
1180
-    local, 
1181
+    local,
1182
     helpstring("Screen preview callback")
1183
 ] interface IDeckLinkScreenPreviewCallback : IUnknown
1184
 {
1185
-    HRESULT DrawFrame([in] IDeckLinkVideoFrame *theFrame);
1186
+    HRESULT DrawFrame ([in] IDeckLinkVideoFrame* theFrame);
1187
 };
1188
 
1189
-/* Interface IDeckLinkGLScreenPreviewHelper - Created with CoCreateInstance(). */
1190
+/* Interface IDeckLinkGLScreenPreviewHelper - Created with CoCreateInstance on platforms with native COM support or from CreateOpenGLScreenPreviewHelper on other platforms. */
1191
 
1192
 [
1193
     object,
1194
     uuid(504E2209-CAC7-4C1A-9FB4-C5BB6274D22F),
1195
-    local, 
1196
-    helpstring("Created with CoCreateInstance().")
1197
+    local,
1198
+    helpstring("Created with CoCreateInstance on platforms with native COM support or from CreateOpenGLScreenPreviewHelper on other platforms.")
1199
 ] interface IDeckLinkGLScreenPreviewHelper : IUnknown
1200
 {
1201
 
1202
     /* Methods must be called with OpenGL context set */
1203
 
1204
-    HRESULT InitializeGL(void);
1205
-    HRESULT PaintGL(void);
1206
-    HRESULT SetFrame([in] IDeckLinkVideoFrame *theFrame);
1207
-    HRESULT Set3DPreviewFormat([in] BMD3DPreviewFormat previewFormat);
1208
+    HRESULT InitializeGL (void);
1209
+    HRESULT PaintGL (void);
1210
+    HRESULT SetFrame ([in] IDeckLinkVideoFrame* theFrame);
1211
+    HRESULT Set3DPreviewFormat ([in] BMD3DPreviewFormat previewFormat);
1212
 };
1213
 
1214
-/* Interface IDeckLinkDX9ScreenPreviewHelper - Created with CoCreateInstance(). */
1215
+/* Interface IDeckLinkDX9ScreenPreviewHelper - Created with CoCreateInstance. */
1216
 
1217
 [
1218
     object,
1219
     uuid(2094B522-D1A1-40C0-9AC7-1C012218EF02),
1220
-    local, 
1221
-    helpstring("Created with CoCreateInstance().")
1222
+    local,
1223
+    helpstring("Created with CoCreateInstance.")
1224
 ] interface IDeckLinkDX9ScreenPreviewHelper : IUnknown
1225
 {
1226
-    HRESULT Initialize([in] void *device);
1227
-    HRESULT Render([in] RECT *rc);
1228
-    HRESULT SetFrame([in] IDeckLinkVideoFrame *theFrame);
1229
-    HRESULT Set3DPreviewFormat([in] BMD3DPreviewFormat previewFormat);
1230
+    HRESULT Initialize ([in] void* device);
1231
+    HRESULT Render ([in] RECT* rc);
1232
+    HRESULT SetFrame ([in] IDeckLinkVideoFrame* theFrame);
1233
+    HRESULT Set3DPreviewFormat ([in] BMD3DPreviewFormat previewFormat);
1234
 };
1235
 
1236
 /* Interface IDeckLinkNotificationCallback - DeckLink Notification Callback Interface */
1237
@@ -1082,39 +1090,90 @@
1238
 [
1239
     object,
1240
     uuid(b002a1ec-070d-4288-8289-bd5d36e5ff0d),
1241
-    local, 
1242
+    local,
1243
     helpstring("DeckLink Notification Callback Interface")
1244
 ] interface IDeckLinkNotificationCallback : IUnknown
1245
 {
1246
-    HRESULT Notify([in] BMDNotifications topic, [in] ULONGLONG param1, [in] ULONGLONG param2);
1247
+    HRESULT Notify ([in] BMDNotifications topic, [in] ULONGLONG param1, [in] ULONGLONG param2);
1248
 };
1249
 
1250
 /* Interface IDeckLinkNotification - DeckLink Notification interface */
1251
 
1252
 [
1253
     object,
1254
-    uuid(0a1fb207-e215-441b-9b19-6fa1575946c5),
1255
-    local, 
1256
+    uuid(b85df4c8-bdf5-47c1-8064-28162ebdd4eb),
1257
+    local,
1258
     helpstring("DeckLink Notification interface")
1259
 ] interface IDeckLinkNotification : IUnknown
1260
 {
1261
-    HRESULT Subscribe([in] BMDNotifications topic, [in] IDeckLinkNotificationCallback *theCallback);
1262
-    HRESULT Unsubscribe([in] BMDNotifications topic, [in] IDeckLinkNotificationCallback *theCallback);
1263
+    HRESULT Subscribe ([in] BMDNotifications topic, [in] IDeckLinkNotificationCallback* theCallback);
1264
+    HRESULT Unsubscribe ([in] BMDNotifications topic, [in] IDeckLinkNotificationCallback* theCallback);
1265
+};
1266
+
1267
+/* Interface IDeckLinkProfileAttributes - Created by QueryInterface from an IDeckLinkProfile, or from IDeckLink. When queried from IDeckLink, interrogates the active profile */
1268
+
1269
+[
1270
+    object,
1271
+    uuid(17D4BF8E-4911-473A-80A0-731CF6FF345B),
1272
+    local,
1273
+    helpstring("Created by QueryInterface from an IDeckLinkProfile, or from IDeckLink. When queried from IDeckLink, interrogates the active profile")
1274
+] interface IDeckLinkProfileAttributes : IUnknown
1275
+{
1276
+    HRESULT GetFlag ([in] BMDDeckLinkAttributeID cfgID, [out] BOOL* value);
1277
+    HRESULT GetInt ([in] BMDDeckLinkAttributeID cfgID, [out] LONGLONG* value);
1278
+    HRESULT GetFloat ([in] BMDDeckLinkAttributeID cfgID, [out] double* value);
1279
+    HRESULT GetString ([in] BMDDeckLinkAttributeID cfgID, [out] BSTR* value);
1280
+};
1281
+
1282
+/* Interface IDeckLinkProfileIterator - Enumerates IDeckLinkProfile interfaces */
1283
+
1284
+[
1285
+    object,
1286
+    uuid(29E5A8C0-8BE4-46EB-93AC-31DAAB5B7BF2),
1287
+    helpstring("Enumerates IDeckLinkProfile interfaces")
1288
+] interface IDeckLinkProfileIterator : IUnknown
1289
+{
1290
+    HRESULT Next ([out] IDeckLinkProfile** profile);
1291
+};
1292
+
1293
+/* Interface IDeckLinkProfile - Represents the active profile when queried from IDeckLink */
1294
+
1295
+[
1296
+    object,
1297
+    uuid(16093466-674A-432B-9DA0-1AC2C5A8241C),
1298
+    local,
1299
+    helpstring("Represents the active profile when queried from IDeckLink")
1300
+] interface IDeckLinkProfile : IUnknown
1301
+{
1302
+    HRESULT GetDevice ([out] IDeckLink** device);  // Device affected when this profile becomes active
1303
+    HRESULT IsActive ([out] BOOL* isActive);
1304
+    HRESULT SetActive (void);  // Activating a profile will also change the profile on all devices enumerated by GetPeers. Activation is not complete until IDeckLinkProfileCallback::ProfileActivated is called
1305
+    HRESULT GetPeers ([out] IDeckLinkProfileIterator** profileIterator);   // Profiles of other devices activated with this profile
1306
+};
1307
+
1308
+/* Interface IDeckLinkProfileCallback - Receive notifications about profiles related to this device */
1309
+
1310
+[
1311
+    object,
1312
+    uuid(A4F9341E-97AA-4E04-8935-15F809898CEA),
1313
+    helpstring("Receive notifications about profiles related to this device")
1314
+] interface IDeckLinkProfileCallback : IUnknown
1315
+{
1316
+    HRESULT ProfileChanging ([in] IDeckLinkProfile* profileToBeActivated, [in] BOOL streamsWillBeForcedToStop);    // Called before this device changes profile. User has an opportunity for teardown if streamsWillBeForcedToStop
1317
+    HRESULT ProfileActivated ([in] IDeckLinkProfile* activatedProfile);    // Called after this device has been activated with a new profile
1318
 };
1319
 
1320
-/* Interface IDeckLinkAttributes - DeckLink Attribute interface */
1321
+/* Interface IDeckLinkProfileManager - Created by QueryInterface from IDeckLink when a device has multiple optional profiles */
1322
 
1323
 [
1324
     object,
1325
-    uuid(ABC11843-D966-44CB-96E2-A1CB5D3135C4),
1326
-    local, 
1327
-    helpstring("DeckLink Attribute interface")
1328
-] interface IDeckLinkAttributes : IUnknown
1329
+    uuid(30D41429-3998-4B6D-84F8-78C94A797C6E),
1330
+    helpstring("Created by QueryInterface from IDeckLink when a device has multiple optional profiles")
1331
+] interface IDeckLinkProfileManager : IUnknown
1332
 {
1333
-    HRESULT GetFlag([in] BMDDeckLinkAttributeID cfgID, [out] BOOL *value);
1334
-    HRESULT GetInt([in] BMDDeckLinkAttributeID cfgID, [out] LONGLONG *value);
1335
-    HRESULT GetFloat([in] BMDDeckLinkAttributeID cfgID, [out] double *value);
1336
-    HRESULT GetString([in] BMDDeckLinkAttributeID cfgID, [out] BSTR *value);
1337
+    HRESULT GetProfiles ([out] IDeckLinkProfileIterator** profileIterator);    // All available profiles for this device
1338
+    HRESULT GetProfile ([in] BMDProfileID profileID, [out] IDeckLinkProfile** profile);
1339
+    HRESULT SetCallback ([in] IDeckLinkProfileCallback* callback);
1340
 };
1341
 
1342
 /* Interface IDeckLinkStatus - DeckLink Status interface */
1343
@@ -1122,15 +1181,15 @@
1344
 [
1345
     object,
1346
     uuid(5F558200-4028-49BC-BEAC-DB3FA4A96E46),
1347
-    local, 
1348
+    local,
1349
     helpstring("DeckLink Status interface")
1350
 ] interface IDeckLinkStatus : IUnknown
1351
 {
1352
-    HRESULT GetFlag([in] BMDDeckLinkStatusID statusID, [out] BOOL *value);
1353
-    HRESULT GetInt([in] BMDDeckLinkStatusID statusID, [out] LONGLONG *value);
1354
-    HRESULT GetFloat([in] BMDDeckLinkStatusID statusID, [out] double *value);
1355
-    HRESULT GetString([in] BMDDeckLinkStatusID statusID, [out] BSTR *value);
1356
-    HRESULT GetBytes([in] BMDDeckLinkStatusID statusID, [out] void *buffer, [in, out] unsigned int *bufferSize);
1357
+    HRESULT GetFlag ([in] BMDDeckLinkStatusID statusID, [out] BOOL* value);
1358
+    HRESULT GetInt ([in] BMDDeckLinkStatusID statusID, [out] LONGLONG* value);
1359
+    HRESULT GetFloat ([in] BMDDeckLinkStatusID statusID, [out] double* value);
1360
+    HRESULT GetString ([in] BMDDeckLinkStatusID statusID, [out] BSTR* value);
1361
+    HRESULT GetBytes ([in] BMDDeckLinkStatusID statusID, [out] void* buffer, [in, out] unsigned int* bufferSize);
1362
 };
1363
 
1364
 /* Interface IDeckLinkKeyer - DeckLink Keyer interface */
1365
@@ -1138,27 +1197,27 @@
1366
 [
1367
     object,
1368
     uuid(89AFCAF5-65F8-421E-98F7-96FE5F5BFBA3),
1369
-    local, 
1370
+    local,
1371
     helpstring("DeckLink Keyer interface")
1372
 ] interface IDeckLinkKeyer : IUnknown
1373
 {
1374
-    HRESULT Enable([in] BOOL isExternal);
1375
-    HRESULT SetLevel([in] unsigned char level);
1376
-    HRESULT RampUp([in] unsigned int numberOfFrames);
1377
-    HRESULT RampDown([in] unsigned int numberOfFrames);
1378
-    HRESULT Disable(void);
1379
+    HRESULT Enable ([in] BOOL isExternal);
1380
+    HRESULT SetLevel ([in] unsigned char level);
1381
+    HRESULT RampUp ([in] unsigned int numberOfFrames);
1382
+    HRESULT RampDown ([in] unsigned int numberOfFrames);
1383
+    HRESULT Disable (void);
1384
 };
1385
 
1386
-/* Interface IDeckLinkVideoConversion - Created with CoCreateInstance(). */
1387
+/* Interface IDeckLinkVideoConversion - Created with CoCreateInstance. */
1388
 
1389
 [
1390
     object,
1391
     uuid(3BBCB8A2-DA2C-42D9-B5D8-88083644E99A),
1392
-    local, 
1393
-    helpstring("Created with CoCreateInstance().")
1394
+    local,
1395
+    helpstring("Created with CoCreateInstance.")
1396
 ] interface IDeckLinkVideoConversion : IUnknown
1397
 {
1398
-    HRESULT ConvertFrame([in] IDeckLinkVideoFrame* srcFrame, [in] IDeckLinkVideoFrame* dstFrame);
1399
+    HRESULT ConvertFrame ([in] IDeckLinkVideoFrame* srcFrame, [in] IDeckLinkVideoFrame* dstFrame);
1400
 };
1401
 
1402
 /* Interface IDeckLinkDeviceNotificationCallback - DeckLink device arrival/removal notification callbacks */
1403
@@ -1169,8 +1228,8 @@
1404
     helpstring("DeckLink device arrival/removal notification callbacks")
1405
 ] interface IDeckLinkDeviceNotificationCallback : IUnknown
1406
 {
1407
-    HRESULT DeckLinkDeviceArrived([in] IDeckLink* deckLinkDevice);
1408
-    HRESULT DeckLinkDeviceRemoved([in] IDeckLink* deckLinkDevice);
1409
+    HRESULT DeckLinkDeviceArrived ([in] IDeckLink* deckLinkDevice);
1410
+    HRESULT DeckLinkDeviceRemoved ([in] IDeckLink* deckLinkDevice);
1411
 };
1412
 
1413
 /* Interface IDeckLinkDiscovery - DeckLink device discovery */
1414
@@ -1181,8 +1240,8 @@
1415
     helpstring("DeckLink device discovery")
1416
 ] interface IDeckLinkDiscovery : IUnknown
1417
 {
1418
-    HRESULT InstallDeviceNotifications([in] IDeckLinkDeviceNotificationCallback* deviceNotificationCallback);
1419
-    HRESULT UninstallDeviceNotifications(void);
1420
+    HRESULT InstallDeviceNotifications ([in] IDeckLinkDeviceNotificationCallback* deviceNotificationCallback);
1421
+    HRESULT UninstallDeviceNotifications (void);
1422
 };
1423
 
1424
 /* Coclasses */
1425
@@ -1190,7 +1249,7 @@
1426
 importlib("stdole2.tlb");
1427
 
1428
 [
1429
-    uuid(87D2693F-8D4A-45C7-B43F-10ACBA25E68F),
1430
+    uuid(BA6C6F44-6DA5-4DCE-94AA-EE2D1372A676),
1431
     helpstring("CDeckLinkIterator Class")
1432
 ] coclass CDeckLinkIterator
1433
 {
1434
@@ -1230,7 +1289,7 @@
1435
 };
1436
 
1437
 [
1438
-    uuid(652615D4-26CD-4514-B161-2FD5072ED008),
1439
+    uuid(22FBFC33-8D07-495C-A5BF-DAB5EA9B82DB),
1440
     helpstring("CDeckLinkDiscovery Class")
1441
 ] coclass CDeckLinkDiscovery
1442
 {
1443
@@ -1245,8 +1304,11 @@
1444
     [default] interface IDeckLinkVideoFrameAncillaryPackets;
1445
 };
1446
 
1447
-
1448
 // import deprecated interfaces
1449
+#include "DeckLinkAPI_v11_4.idl"
1450
+#include "DeckLinkAPI_v10_11.idl"
1451
+#include "DeckLinkAPI_v11_5_1.idl"
1452
+#include "DeckLinkAPI_v11_5.idl"
1453
 #include "DeckLinkAPI_v10_9.idl"
1454
 #include "DeckLinkAPIStreaming_v10_8.idl"
1455
 #include "DeckLinkAPI_v10_8.idl"
1456
obs-studio-26.0.2.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIConfiguration.idl -> obs-studio-26.1.0.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIConfiguration.idl Changed
174
 
1
@@ -1,5 +1,5 @@
2
 /* -LICENSE-START-
3
-** Copyright (c) 2018 Blackmagic Design
4
+** Copyright (c) 2020 Blackmagic Design
5
 **
6
 ** Permission is hereby granted, free of charge, to any person or organization
7
 ** obtaining a copy of the software and accompanying documentation covered by
8
@@ -7,14 +7,14 @@
9
 ** execute, and transmit the Software, and to prepare derivative works of the
10
 ** Software, and to permit third-parties to whom the Software is furnished to
11
 ** do so, all subject to the following:
12
-** 
13
+**
14
 ** The copyright notices in the Software and this entire statement, including
15
 ** the above license grant, this restriction and the following disclaimer,
16
 ** must be included in all copies of the Software, in whole or in part, and
17
 ** all derivative works of the Software, unless such copies or derivative
18
 ** works are solely in the form of machine-executable object code generated by
19
 ** a source language processor.
20
-** 
21
+**
22
 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
 ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
 ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
25
@@ -44,7 +44,7 @@
26
 
27
 /* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */
28
 
29
-typedef [v1_enum] enum _BMDDeckLinkConfigurationID {
30
+typedef [v1_enum] enum _BMDDeckLinkConfigurationID {
31
 
32
     /* Serial port Flags */
33
 
34
@@ -55,13 +55,14 @@
35
     bmdDeckLinkConfigHDMI3DPackingFormat                         = /* '3dpf' */ 0x33647066,
36
     bmdDeckLinkConfigBypass                                      = /* 'byps' */ 0x62797073,
37
     bmdDeckLinkConfigClockTimingAdjustment                       = /* 'ctad' */ 0x63746164,
38
-    bmdDeckLinkConfigDuplexMode                                  = /* 'dupx' */ 0x64757078,
39
 
40
     /* Audio Input/Output Flags */
41
 
42
     bmdDeckLinkConfigAnalogAudioConsumerLevels                   = /* 'aacl' */ 0x6161636C,
43
+    bmdDeckLinkConfigSwapHDMICh3AndCh4OnInput                    = /* 'hi34' */ 0x68693334,
44
+    bmdDeckLinkConfigSwapHDMICh3AndCh4OnOutput                   = /* 'ho34' */ 0x686F3334,
45
 
46
-    /* Video output flags */
47
+    /* Video Output Flags */
48
 
49
     bmdDeckLinkConfigFieldFlickerRemoval                         = /* 'fdfr' */ 0x66646672,
50
     bmdDeckLinkConfigHD1080p24ToHD1080i5994Conversion            = /* 'to59' */ 0x746F3539,
51
@@ -72,9 +73,6 @@
52
     bmdDeckLinkConfigSMPTELevelAOutput                           = /* 'smta' */ 0x736D7461,
53
     bmdDeckLinkConfigRec2020Output                               = /* 'rec2' */ 0x72656332,    // Ensure output is Rec.2020 colorspace
54
     bmdDeckLinkConfigQuadLinkSDIVideoOutputSquareDivisionSplit   = /* 'SDQS' */ 0x53445153,
55
-
56
-    /* Video Output Flags */
57
-
58
     bmdDeckLinkConfigOutput1080pAsPsF                            = /* 'pfpr' */ 0x70667072,
59
 
60
     /* Video Output Integers */
61
@@ -87,6 +85,8 @@
62
     bmdDeckLinkConfigDefaultVideoOutputMode                      = /* 'dvom' */ 0x64766F6D,
63
     bmdDeckLinkConfigDefaultVideoOutputModeFlags                 = /* 'dvof' */ 0x64766F66,
64
     bmdDeckLinkConfigSDIOutputLinkConfiguration                  = /* 'solc' */ 0x736F6C63,
65
+    bmdDeckLinkConfigHDMITimecodePacking                         = /* 'htpk' */ 0x6874706B,
66
+    bmdDeckLinkConfigPlaybackGroup                               = /* 'plgr' */ 0x706C6772,
67
 
68
     /* Video Output Floats */
69
 
70
@@ -103,9 +103,6 @@
71
     bmdDeckLinkConfigVideoInputScanning                          = /* 'visc' */ 0x76697363,    // Applicable to H264 Pro Recorder only
72
     bmdDeckLinkConfigUseDedicatedLTCInput                        = /* 'dltc' */ 0x646C7463,    // Use timecode from LTC input instead of SDI stream
73
     bmdDeckLinkConfigSDIInput3DPayloadOverride                   = /* '3dds' */ 0x33646473,
74
-
75
-    /* Video Input Flags */
76
-
77
     bmdDeckLinkConfigCapture1080pAsPsF                           = /* 'cfpr' */ 0x63667072,
78
 
79
     /* Video Input Integers */
80
@@ -118,6 +115,7 @@
81
     bmdDeckLinkConfigVANCSourceLine2Mapping                      = /* 'vsl2' */ 0x76736C32,
82
     bmdDeckLinkConfigVANCSourceLine3Mapping                      = /* 'vsl3' */ 0x76736C33,
83
     bmdDeckLinkConfigCapturePassThroughMode                      = /* 'cptm' */ 0x6370746D,
84
+    bmdDeckLinkConfigCaptureGroup                                = /* 'cpgr' */ 0x63706772,
85
 
86
     /* Video Input Floats */
87
 
88
@@ -129,6 +127,10 @@
89
     bmdDeckLinkConfigVideoInputSVideoLumaGain                    = /* 'islg' */ 0x69736C67,
90
     bmdDeckLinkConfigVideoInputSVideoChromaGain                  = /* 'iscg' */ 0x69736367,
91
 
92
+    /* Keying Integers */
93
+
94
+    bmdDeckLinkConfigInternalKeyingAncillaryDataSource           = /* 'ikas' */ 0x696B6173,
95
+
96
     /* Audio Input Flags */
97
 
98
     bmdDeckLinkConfigMicrophonePhantomPower                      = /* 'mphp' */ 0x6D706870,
99
@@ -175,7 +177,7 @@
100
 
101
 /* Enum BMDDeckLinkEncoderConfigurationID - DeckLink Encoder Configuration ID */
102
 
103
-typedef [v1_enum] enum _BMDDeckLinkEncoderConfigurationID {
104
+typedef [v1_enum] enum _BMDDeckLinkEncoderConfigurationID {
105
 
106
     /* Video Encoder Integers */
107
 
108
@@ -209,20 +211,20 @@
109
 
110
 [
111
     object,
112
-    uuid(EF90380B-4AE5-4346-9077-E288E149F129),
113
-    local, 
114
+    uuid(912F634B-2D4E-40A4-8AAB-8D80B73F1289),
115
+    local,
116
     helpstring("DeckLink Configuration interface")
117
 ] interface IDeckLinkConfiguration : IUnknown
118
 {
119
-    HRESULT SetFlag([in] BMDDeckLinkConfigurationID cfgID, [in] BOOL value);
120
-    HRESULT GetFlag([in] BMDDeckLinkConfigurationID cfgID, [out] BOOL *value);
121
-    HRESULT SetInt([in] BMDDeckLinkConfigurationID cfgID, [in] LONGLONG value);
122
-    HRESULT GetInt([in] BMDDeckLinkConfigurationID cfgID, [out] LONGLONG *value);
123
-    HRESULT SetFloat([in] BMDDeckLinkConfigurationID cfgID, [in] double value);
124
-    HRESULT GetFloat([in] BMDDeckLinkConfigurationID cfgID, [out] double *value);
125
-    HRESULT SetString([in] BMDDeckLinkConfigurationID cfgID, [in] BSTR value);
126
-    HRESULT GetString([in] BMDDeckLinkConfigurationID cfgID, [out] BSTR *value);
127
-    HRESULT WriteConfigurationToPreferences(void);
128
+    HRESULT SetFlag ([in] BMDDeckLinkConfigurationID cfgID, [in] BOOL value);
129
+    HRESULT GetFlag ([in] BMDDeckLinkConfigurationID cfgID, [out] BOOL* value);
130
+    HRESULT SetInt ([in] BMDDeckLinkConfigurationID cfgID, [in] LONGLONG value);
131
+    HRESULT GetInt ([in] BMDDeckLinkConfigurationID cfgID, [out] LONGLONG* value);
132
+    HRESULT SetFloat ([in] BMDDeckLinkConfigurationID cfgID, [in] double value);
133
+    HRESULT GetFloat ([in] BMDDeckLinkConfigurationID cfgID, [out] double* value);
134
+    HRESULT SetString ([in] BMDDeckLinkConfigurationID cfgID, [in] BSTR value);
135
+    HRESULT GetString ([in] BMDDeckLinkConfigurationID cfgID, [out] BSTR* value);
136
+    HRESULT WriteConfigurationToPreferences (void);
137
 };
138
 
139
 /* Interface IDeckLinkEncoderConfiguration - DeckLink Encoder Configuration interface. Obtained from IDeckLinkEncoderInput */
140
@@ -230,23 +232,22 @@
141
 [
142
     object,
143
     uuid(138050E5-C60A-4552-BF3F-0F358049327E),
144
-    local, 
145
+    local,
146
     helpstring("DeckLink Encoder Configuration interface. Obtained from IDeckLinkEncoderInput")
147
 ] interface IDeckLinkEncoderConfiguration : IUnknown
148
 {
149
-    HRESULT SetFlag([in] BMDDeckLinkEncoderConfigurationID cfgID, [in] BOOL value);
150
-    HRESULT GetFlag([in] BMDDeckLinkEncoderConfigurationID cfgID, [out] BOOL *value);
151
-    HRESULT SetInt([in] BMDDeckLinkEncoderConfigurationID cfgID, [in] LONGLONG value);
152
-    HRESULT GetInt([in] BMDDeckLinkEncoderConfigurationID cfgID, [out] LONGLONG *value);
153
-    HRESULT SetFloat([in] BMDDeckLinkEncoderConfigurationID cfgID, [in] double value);
154
-    HRESULT GetFloat([in] BMDDeckLinkEncoderConfigurationID cfgID, [out] double *value);
155
-    HRESULT SetString([in] BMDDeckLinkEncoderConfigurationID cfgID, [in] BSTR value);
156
-    HRESULT GetString([in] BMDDeckLinkEncoderConfigurationID cfgID, [out] BSTR *value);
157
-    HRESULT GetBytes([in] BMDDeckLinkEncoderConfigurationID cfgID, [out] void *buffer /* optional */, [in, out] unsigned int *bufferSize);
158
+    HRESULT SetFlag ([in] BMDDeckLinkEncoderConfigurationID cfgID, [in] BOOL value);
159
+    HRESULT GetFlag ([in] BMDDeckLinkEncoderConfigurationID cfgID, [out] BOOL* value);
160
+    HRESULT SetInt ([in] BMDDeckLinkEncoderConfigurationID cfgID, [in] LONGLONG value);
161
+    HRESULT GetInt ([in] BMDDeckLinkEncoderConfigurationID cfgID, [out] LONGLONG* value);
162
+    HRESULT SetFloat ([in] BMDDeckLinkEncoderConfigurationID cfgID, [in] double value);
163
+    HRESULT GetFloat ([in] BMDDeckLinkEncoderConfigurationID cfgID, [out] double* value);
164
+    HRESULT SetString ([in] BMDDeckLinkEncoderConfigurationID cfgID, [in] BSTR value);
165
+    HRESULT GetString ([in] BMDDeckLinkEncoderConfigurationID cfgID, [out] BSTR* value);
166
+    HRESULT GetBytes ([in] BMDDeckLinkEncoderConfigurationID cfgID, [out] void* buffer /* optional */, [in, out] unsigned int* bufferSize);
167
 };
168
 
169
 /* Coclasses */
170
 
171
 importlib("stdole2.tlb");
172
 
173
-
174
obs-studio-26.0.2.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIDeckControl.idl -> obs-studio-26.1.0.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIDeckControl.idl Changed
182
 
1
@@ -1,5 +1,5 @@
2
 /* -LICENSE-START-
3
-** Copyright (c) 2018 Blackmagic Design
4
+** Copyright (c) 2020 Blackmagic Design
5
 **
6
 ** Permission is hereby granted, free of charge, to any person or organization
7
 ** obtaining a copy of the software and accompanying documentation covered by
8
@@ -7,14 +7,14 @@
9
 ** execute, and transmit the Software, and to prepare derivative works of the
10
 ** Software, and to permit third-parties to whom the Software is furnished to
11
 ** do so, all subject to the following:
12
-** 
13
+**
14
 ** The copyright notices in the Software and this entire statement, including
15
 ** the above license grant, this restriction and the following disclaimer,
16
 ** must be included in all copies of the Software, in whole or in part, and
17
 ** all derivative works of the Software, unless such copies or derivative
18
 ** works are solely in the form of machine-executable object code generated by
19
 ** a source language processor.
20
-** 
21
+**
22
 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
 ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
 ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
25
@@ -48,7 +48,7 @@
26
 
27
 /* Enum BMDDeckControlMode - DeckControl mode */
28
 
29
-typedef [v1_enum] enum _BMDDeckControlMode {
30
+typedef [v1_enum] enum _BMDDeckControlMode {
31
     bmdDeckControlNotOpened                                      = /* 'ntop' */ 0x6E746F70,
32
     bmdDeckControlVTRControlMode                                 = /* 'vtrc' */ 0x76747263,
33
     bmdDeckControlExportMode                                     = /* 'expm' */ 0x6578706D,
34
@@ -57,23 +57,23 @@
35
 
36
 /* Enum BMDDeckControlEvent - DeckControl event */
37
 
38
-typedef [v1_enum] enum _BMDDeckControlEvent {
39
+typedef [v1_enum] enum _BMDDeckControlEvent {
40
     bmdDeckControlAbortedEvent                                   = /* 'abte' */ 0x61627465,    // This event is triggered when a capture or edit-to-tape operation is aborted.
41
 
42
     /* Export-To-Tape events */
43
 
44
-    bmdDeckControlPrepareForExportEvent                          = /* 'pfee' */ 0x70666565,    // This event is triggered a few frames before reaching the in-point. IDeckLinkInput::StartScheduledPlayback() should be called at this point.
45
-    bmdDeckControlExportCompleteEvent                            = /* 'exce' */ 0x65786365,    // This event is triggered a few frames after reaching the out-point. At this point, it is safe to stop playback.
46
+    bmdDeckControlPrepareForExportEvent                          = /* 'pfee' */ 0x70666565,    // This event is triggered a few frames before reaching the in-point. IDeckLinkInput::StartScheduledPlayback should be called at this point.
47
+    bmdDeckControlExportCompleteEvent                            = /* 'exce' */ 0x65786365,    // This event is triggered a few frames after reaching the out-point. At this point, it is safe to stop playback. Upon reception of this event the deck's control mode is set back to bmdDeckControlVTRControlMode.
48
 
49
     /* Capture events */
50
 
51
     bmdDeckControlPrepareForCaptureEvent                         = /* 'pfce' */ 0x70666365,    // This event is triggered a few frames before reaching the in-point. The serial timecode attached to IDeckLinkVideoInputFrames is now valid.
52
-    bmdDeckControlCaptureCompleteEvent                           = /* 'ccev' */ 0x63636576 // This event is triggered a few frames after reaching the out-point.
53
+    bmdDeckControlCaptureCompleteEvent                           = /* 'ccev' */ 0x63636576 // This event is triggered a few frames after reaching the out-point. Upon reception of this event the deck's control mode is set back to bmdDeckControlVTRControlMode.
54
 } BMDDeckControlEvent;
55
 
56
 /* Enum BMDDeckControlVTRControlState - VTR Control state */
57
 
58
-typedef [v1_enum] enum _BMDDeckControlVTRControlState {
59
+typedef [v1_enum] enum _BMDDeckControlVTRControlState {
60
     bmdDeckControlNotInVTRControlMode                            = /* 'nvcm' */ 0x6E76636D,
61
     bmdDeckControlVTRControlPlaying                              = /* 'vtrp' */ 0x76747270,
62
     bmdDeckControlVTRControlRecording                            = /* 'vtrr' */ 0x76747272,
63
@@ -87,7 +87,7 @@
64
 
65
 /* Enum BMDDeckControlStatusFlags - Deck Control status flags */
66
 
67
-[v1_enum] enum _BMDDeckControlStatusFlags {
68
+[v1_enum] enum _BMDDeckControlStatusFlags {
69
     bmdDeckControlStatusDeckConnected                            = 1 << 0,
70
     bmdDeckControlStatusRemoteMode                               = 1 << 1,
71
     bmdDeckControlStatusRecordInhibited                          = 1 << 2,
72
@@ -96,7 +96,7 @@
73
 
74
 /* Enum BMDDeckControlExportModeOpsFlags - Export mode flags */
75
 
76
-[v1_enum] enum _BMDDeckControlExportModeOpsFlags {
77
+[v1_enum] enum _BMDDeckControlExportModeOpsFlags {
78
     bmdDeckControlExportModeInsertVideo                          = 1 << 0,
79
     bmdDeckControlExportModeInsertAudio1                         = 1 << 1,
80
     bmdDeckControlExportModeInsertAudio2                         = 1 << 2,
81
@@ -118,7 +118,7 @@
82
 
83
 /* Enum BMDDeckControlError - Deck Control error */
84
 
85
-typedef [v1_enum] enum _BMDDeckControlError {
86
+typedef [v1_enum] enum _BMDDeckControlError {
87
     bmdDeckControlNoError                                        = /* 'noer' */ 0x6E6F6572,
88
     bmdDeckControlModeError                                      = /* 'moer' */ 0x6D6F6572,
89
     bmdDeckControlMissedInPointError                             = /* 'mier' */ 0x6D696572,
90
@@ -150,10 +150,10 @@
91
     helpstring("Deck control state change callback.")
92
 ] interface IDeckLinkDeckControlStatusCallback : IUnknown
93
 {
94
-    HRESULT TimecodeUpdate([in] BMDTimecodeBCD currentTimecode);
95
-    HRESULT VTRControlStateChanged([in] BMDDeckControlVTRControlState newState, [in] BMDDeckControlError error);
96
-    HRESULT DeckControlEventReceived([in] BMDDeckControlEvent event, [in] BMDDeckControlError error);
97
-    HRESULT DeckControlStatusChanged([in] BMDDeckControlStatusFlags flags, [in] unsigned int mask);
98
+    HRESULT TimecodeUpdate ([in] BMDTimecodeBCD currentTimecode);
99
+    HRESULT VTRControlStateChanged ([in] BMDDeckControlVTRControlState newState, [in] BMDDeckControlError error);
100
+    HRESULT DeckControlEventReceived ([in] BMDDeckControlEvent event, [in] BMDDeckControlError error);
101
+    HRESULT DeckControlStatusChanged ([in] BMDDeckControlStatusFlags flags, [in] unsigned int mask);
102
 };
103
 
104
 /* Interface IDeckLinkDeckControl - Deck Control main interface */
105
@@ -164,43 +164,42 @@
106
     helpstring("Deck Control main interface")
107
 ] interface IDeckLinkDeckControl : IUnknown
108
 {
109
-    HRESULT Open([in] BMDTimeScale timeScale, [in] BMDTimeValue timeValue, [in] BOOL timecodeIsDropFrame, [out] BMDDeckControlError *error);
110
-    HRESULT Close([in] BOOL standbyOn);
111
-    HRESULT GetCurrentState([out] BMDDeckControlMode *mode, [out] BMDDeckControlVTRControlState *vtrControlState, [out] BMDDeckControlStatusFlags *flags);
112
-    HRESULT SetStandby([in] BOOL standbyOn);
113
-    HRESULT SendCommand([in] unsigned char *inBuffer, [in] unsigned int inBufferSize, [out] unsigned char *outBuffer, [out] unsigned int *outDataSize, [in] unsigned int outBufferSize, [out] BMDDeckControlError *error);
114
-    HRESULT Play([out] BMDDeckControlError *error);
115
-    HRESULT Stop([out] BMDDeckControlError *error);
116
-    HRESULT TogglePlayStop([out] BMDDeckControlError *error);
117
-    HRESULT Eject([out] BMDDeckControlError *error);
118
-    HRESULT GoToTimecode([in] BMDTimecodeBCD timecode, [out] BMDDeckControlError *error);
119
-    HRESULT FastForward([in] BOOL viewTape, [out] BMDDeckControlError *error);
120
-    HRESULT Rewind([in] BOOL viewTape, [out] BMDDeckControlError *error);
121
-    HRESULT StepForward([out] BMDDeckControlError *error);
122
-    HRESULT StepBack([out] BMDDeckControlError *error);
123
-    HRESULT Jog([in] double rate, [out] BMDDeckControlError *error);
124
-    HRESULT Shuttle([in] double rate, [out] BMDDeckControlError *error);
125
-    HRESULT GetTimecodeString([out] BSTR *currentTimeCode, [out] BMDDeckControlError *error);
126
-    HRESULT GetTimecode([out] IDeckLinkTimecode **currentTimecode, [out] BMDDeckControlError *error);
127
-    HRESULT GetTimecodeBCD([out] BMDTimecodeBCD *currentTimecode, [out] BMDDeckControlError *error);
128
-    HRESULT SetPreroll([in] unsigned int prerollSeconds);
129
-    HRESULT GetPreroll([out] unsigned int *prerollSeconds);
130
-    HRESULT SetExportOffset([in] int exportOffsetFields);
131
-    HRESULT GetExportOffset([out] int *exportOffsetFields);
132
-    HRESULT GetManualExportOffset([out] int *deckManualExportOffsetFields);
133
-    HRESULT SetCaptureOffset([in] int captureOffsetFields);
134
-    HRESULT GetCaptureOffset([out] int *captureOffsetFields);
135
-    HRESULT StartExport([in] BMDTimecodeBCD inTimecode, [in] BMDTimecodeBCD outTimecode, [in] BMDDeckControlExportModeOpsFlags exportModeOps, [out] BMDDeckControlError *error);
136
-    HRESULT StartCapture([in] BOOL useVITC, [in] BMDTimecodeBCD inTimecode, [in] BMDTimecodeBCD outTimecode, [out] BMDDeckControlError *error);
137
-    HRESULT GetDeviceID([out] unsigned short *deviceId, [out] BMDDeckControlError *error);
138
-    HRESULT Abort(void);
139
-    HRESULT CrashRecordStart([out] BMDDeckControlError *error);
140
-    HRESULT CrashRecordStop([out] BMDDeckControlError *error);
141
-    HRESULT SetCallback([in] IDeckLinkDeckControlStatusCallback *callback);
142
+    HRESULT Open ([in] BMDTimeScale timeScale, [in] BMDTimeValue timeValue, [in] BOOL timecodeIsDropFrame, [out] BMDDeckControlError* error);
143
+    HRESULT Close ([in] BOOL standbyOn);
144
+    HRESULT GetCurrentState ([out] BMDDeckControlMode* mode, [out] BMDDeckControlVTRControlState* vtrControlState, [out] BMDDeckControlStatusFlags* flags);
145
+    HRESULT SetStandby ([in] BOOL standbyOn);
146
+    HRESULT SendCommand ([in] unsigned char* inBuffer, [in] unsigned int inBufferSize, [out] unsigned char* outBuffer, [out] unsigned int* outDataSize, [in] unsigned int outBufferSize, [out] BMDDeckControlError* error);
147
+    HRESULT Play ([out] BMDDeckControlError* error);
148
+    HRESULT Stop ([out] BMDDeckControlError* error);
149
+    HRESULT TogglePlayStop ([out] BMDDeckControlError* error);
150
+    HRESULT Eject ([out] BMDDeckControlError* error);
151
+    HRESULT GoToTimecode ([in] BMDTimecodeBCD timecode, [out] BMDDeckControlError* error);
152
+    HRESULT FastForward ([in] BOOL viewTape, [out] BMDDeckControlError* error);
153
+    HRESULT Rewind ([in] BOOL viewTape, [out] BMDDeckControlError* error);
154
+    HRESULT StepForward ([out] BMDDeckControlError* error);
155
+    HRESULT StepBack ([out] BMDDeckControlError* error);
156
+    HRESULT Jog ([in] double rate, [out] BMDDeckControlError* error);
157
+    HRESULT Shuttle ([in] double rate, [out] BMDDeckControlError* error);
158
+    HRESULT GetTimecodeString ([out] BSTR* currentTimeCode, [out] BMDDeckControlError* error);
159
+    HRESULT GetTimecode ([out] IDeckLinkTimecode** currentTimecode, [out] BMDDeckControlError* error);
160
+    HRESULT GetTimecodeBCD ([out] BMDTimecodeBCD* currentTimecode, [out] BMDDeckControlError* error);
161
+    HRESULT SetPreroll ([in] unsigned int prerollSeconds);
162
+    HRESULT GetPreroll ([out] unsigned int* prerollSeconds);
163
+    HRESULT SetExportOffset ([in] int exportOffsetFields);
164
+    HRESULT GetExportOffset ([out] int* exportOffsetFields);
165
+    HRESULT GetManualExportOffset ([out] int* deckManualExportOffsetFields);
166
+    HRESULT SetCaptureOffset ([in] int captureOffsetFields);
167
+    HRESULT GetCaptureOffset ([out] int* captureOffsetFields);
168
+    HRESULT StartExport ([in] BMDTimecodeBCD inTimecode, [in] BMDTimecodeBCD outTimecode, [in] BMDDeckControlExportModeOpsFlags exportModeOps, [out] BMDDeckControlError* error);
169
+    HRESULT StartCapture ([in] BOOL useVITC, [in] BMDTimecodeBCD inTimecode, [in] BMDTimecodeBCD outTimecode, [out] BMDDeckControlError* error);
170
+    HRESULT GetDeviceID ([out] unsigned short* deviceId, [out] BMDDeckControlError* error);
171
+    HRESULT Abort (void);
172
+    HRESULT CrashRecordStart ([out] BMDDeckControlError* error);
173
+    HRESULT CrashRecordStop ([out] BMDDeckControlError* error);
174
+    HRESULT SetCallback ([in] IDeckLinkDeckControlStatusCallback* callback);
175
 };
176
 
177
 /* Coclasses */
178
 
179
 importlib("stdole2.tlb");
180
 
181
-
182
obs-studio-26.0.2.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIDiscovery.idl -> obs-studio-26.1.0.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIDiscovery.idl Changed
50
 
1
@@ -1,5 +1,5 @@
2
 /* -LICENSE-START-
3
-** Copyright (c) 2018 Blackmagic Design
4
+** Copyright (c) 2020 Blackmagic Design
5
 **
6
 ** Permission is hereby granted, free of charge, to any person or organization
7
 ** obtaining a copy of the software and accompanying documentation covered by
8
@@ -7,14 +7,14 @@
9
 ** execute, and transmit the Software, and to prepare derivative works of the
10
 ** Software, and to permit third-parties to whom the Software is furnished to
11
 ** do so, all subject to the following:
12
-** 
13
+**
14
 ** The copyright notices in the Software and this entire statement, including
15
 ** the above license grant, this restriction and the following disclaimer,
16
 ** must be included in all copies of the Software, in whole or in part, and
17
 ** all derivative works of the Software, unless such copies or derivative
18
 ** works are solely in the form of machine-executable object code generated by
19
 ** a source language processor.
20
-** 
21
+**
22
 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
 ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
 ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
25
@@ -46,20 +46,19 @@
26
 
27
 interface IDeckLink;
28
 
29
-/* Interface IDeckLink - represents a DeckLink device */
30
+/* Interface IDeckLink - Represents a DeckLink device */
31
 
32
 [
33
     object,
34
     uuid(C418FBDD-0587-48ED-8FE5-640F0A14AF91),
35
-    helpstring("represents a DeckLink device")
36
+    helpstring("Represents a DeckLink device")
37
 ] interface IDeckLink : IUnknown
38
 {
39
-    HRESULT GetModelName([out] BSTR *modelName);
40
-    HRESULT GetDisplayName([out] BSTR *displayName);
41
+    HRESULT GetModelName ([out] BSTR* modelName);
42
+    HRESULT GetDisplayName ([out] BSTR* displayName);
43
 };
44
 
45
 /* Coclasses */
46
 
47
 importlib("stdole2.tlb");
48
 
49
-
50
obs-studio-26.0.2.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIModes.idl -> obs-studio-26.1.0.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIModes.idl Changed
239
 
1
@@ -1,5 +1,5 @@
2
 /* -LICENSE-START-
3
-** Copyright (c) 2018 Blackmagic Design
4
+** Copyright (c) 2020 Blackmagic Design
5
 **
6
 ** Permission is hereby granted, free of charge, to any person or organization
7
 ** obtaining a copy of the software and accompanying documentation covered by
8
@@ -7,14 +7,14 @@
9
 ** execute, and transmit the Software, and to prepare derivative works of the
10
 ** Software, and to permit third-parties to whom the Software is furnished to
11
 ** do so, all subject to the following:
12
-** 
13
+**
14
 ** The copyright notices in the Software and this entire statement, including
15
 ** the above license grant, this restriction and the following disclaimer,
16
 ** must be included in all copies of the Software, in whole or in part, and
17
 ** all derivative works of the Software, unless such copies or derivative
18
 ** works are solely in the form of machine-executable object code generated by
19
 ** a source language processor.
20
-** 
21
+**
22
 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
 ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
 ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
25
@@ -44,9 +44,9 @@
26
 typedef enum _BMDDisplayModeFlags BMDDisplayModeFlags;
27
 cpp_quote("#endif")
28
 
29
-/* Enum BMDDisplayMode - Video display modes */
30
+/* Enum BMDDisplayMode - BMDDisplayMode enumerates the video modes supported. */
31
 
32
-typedef [v1_enum] enum _BMDDisplayMode {
33
+typedef [v1_enum] enum _BMDDisplayMode {
34
 
35
     /* SD Modes */
36
 
37
@@ -63,9 +63,16 @@
38
     bmdModeHD1080p25                                             = /* 'Hp25' */ 0x48703235,
39
     bmdModeHD1080p2997                                           = /* 'Hp29' */ 0x48703239,
40
     bmdModeHD1080p30                                             = /* 'Hp30' */ 0x48703330,
41
+    bmdModeHD1080p4795                                           = /* 'Hp47' */ 0x48703437,
42
+    bmdModeHD1080p48                                             = /* 'Hp48' */ 0x48703438,
43
     bmdModeHD1080p50                                             = /* 'Hp50' */ 0x48703530,
44
     bmdModeHD1080p5994                                           = /* 'Hp59' */ 0x48703539,
45
     bmdModeHD1080p6000                                           = /* 'Hp60' */ 0x48703630,    // N.B. This _really_ is 60.00 Hz.
46
+    bmdModeHD1080p9590                                           = /* 'Hp95' */ 0x48703935,
47
+    bmdModeHD1080p96                                             = /* 'Hp96' */ 0x48703936,
48
+    bmdModeHD1080p100                                            = /* 'Hp10' */ 0x48703130,
49
+    bmdModeHD1080p11988                                          = /* 'Hp11' */ 0x48703131,
50
+    bmdModeHD1080p120                                            = /* 'Hp12' */ 0x48703132,
51
     bmdModeHD1080i50                                             = /* 'Hi50' */ 0x48693530,
52
     bmdModeHD1080i5994                                           = /* 'Hi59' */ 0x48693539,
53
     bmdModeHD1080i6000                                           = /* 'Hi60' */ 0x48693630,    // N.B. This _really_ is 60.00 Hz.
54
@@ -89,9 +96,16 @@
55
     bmdMode2kDCI25                                               = /* '2d25' */ 0x32643235,
56
     bmdMode2kDCI2997                                             = /* '2d29' */ 0x32643239,
57
     bmdMode2kDCI30                                               = /* '2d30' */ 0x32643330,
58
+    bmdMode2kDCI4795                                             = /* '2d47' */ 0x32643437,
59
+    bmdMode2kDCI48                                               = /* '2d48' */ 0x32643438,
60
     bmdMode2kDCI50                                               = /* '2d50' */ 0x32643530,
61
     bmdMode2kDCI5994                                             = /* '2d59' */ 0x32643539,
62
     bmdMode2kDCI60                                               = /* '2d60' */ 0x32643630,
63
+    bmdMode2kDCI9590                                             = /* '2d95' */ 0x32643935,
64
+    bmdMode2kDCI96                                               = /* '2d96' */ 0x32643936,
65
+    bmdMode2kDCI100                                              = /* '2d10' */ 0x32643130,
66
+    bmdMode2kDCI11988                                            = /* '2d11' */ 0x32643131,
67
+    bmdMode2kDCI120                                              = /* '2d12' */ 0x32643132,
68
 
69
     /* 4K UHD Modes */
70
 
71
@@ -100,9 +114,16 @@
72
     bmdMode4K2160p25                                             = /* '4k25' */ 0x346B3235,
73
     bmdMode4K2160p2997                                           = /* '4k29' */ 0x346B3239,
74
     bmdMode4K2160p30                                             = /* '4k30' */ 0x346B3330,
75
+    bmdMode4K2160p4795                                           = /* '4k47' */ 0x346B3437,
76
+    bmdMode4K2160p48                                             = /* '4k48' */ 0x346B3438,
77
     bmdMode4K2160p50                                             = /* '4k50' */ 0x346B3530,
78
     bmdMode4K2160p5994                                           = /* '4k59' */ 0x346B3539,
79
     bmdMode4K2160p60                                             = /* '4k60' */ 0x346B3630,
80
+    bmdMode4K2160p9590                                           = /* '4k95' */ 0x346B3935,
81
+    bmdMode4K2160p96                                             = /* '4k96' */ 0x346B3936,
82
+    bmdMode4K2160p100                                            = /* '4k10' */ 0x346B3130,
83
+    bmdMode4K2160p11988                                          = /* '4k11' */ 0x346B3131,
84
+    bmdMode4K2160p120                                            = /* '4k12' */ 0x346B3132,
85
 
86
     /* 4K DCI Modes */
87
 
88
@@ -111,9 +132,16 @@
89
     bmdMode4kDCI25                                               = /* '4d25' */ 0x34643235,
90
     bmdMode4kDCI2997                                             = /* '4d29' */ 0x34643239,
91
     bmdMode4kDCI30                                               = /* '4d30' */ 0x34643330,
92
+    bmdMode4kDCI4795                                             = /* '4d47' */ 0x34643437,
93
+    bmdMode4kDCI48                                               = /* '4d48' */ 0x34643438,
94
     bmdMode4kDCI50                                               = /* '4d50' */ 0x34643530,
95
     bmdMode4kDCI5994                                             = /* '4d59' */ 0x34643539,
96
     bmdMode4kDCI60                                               = /* '4d60' */ 0x34643630,
97
+    bmdMode4kDCI9590                                             = /* '4d95' */ 0x34643935,
98
+    bmdMode4kDCI96                                               = /* '4d96' */ 0x34643936,
99
+    bmdMode4kDCI100                                              = /* '4d10' */ 0x34643130,
100
+    bmdMode4kDCI11988                                            = /* '4d11' */ 0x34643131,
101
+    bmdMode4kDCI120                                              = /* '4d12' */ 0x34643132,
102
 
103
     /* 8K UHD Modes */
104
 
105
@@ -122,6 +150,8 @@
106
     bmdMode8K4320p25                                             = /* '8k25' */ 0x386B3235,
107
     bmdMode8K4320p2997                                           = /* '8k29' */ 0x386B3239,
108
     bmdMode8K4320p30                                             = /* '8k30' */ 0x386B3330,
109
+    bmdMode8K4320p4795                                           = /* '8k47' */ 0x386B3437,
110
+    bmdMode8K4320p48                                             = /* '8k48' */ 0x386B3438,
111
     bmdMode8K4320p50                                             = /* '8k50' */ 0x386B3530,
112
     bmdMode8K4320p5994                                           = /* '8k59' */ 0x386B3539,
113
     bmdMode8K4320p60                                             = /* '8k60' */ 0x386B3630,
114
@@ -133,23 +163,39 @@
115
     bmdMode8kDCI25                                               = /* '8d25' */ 0x38643235,
116
     bmdMode8kDCI2997                                             = /* '8d29' */ 0x38643239,
117
     bmdMode8kDCI30                                               = /* '8d30' */ 0x38643330,
118
+    bmdMode8kDCI4795                                             = /* '8d47' */ 0x38643437,
119
+    bmdMode8kDCI48                                               = /* '8d48' */ 0x38643438,
120
     bmdMode8kDCI50                                               = /* '8d50' */ 0x38643530,
121
     bmdMode8kDCI5994                                             = /* '8d59' */ 0x38643539,
122
     bmdMode8kDCI60                                               = /* '8d60' */ 0x38643630,
123
 
124
-    /* RAW Modes for Cintel (input only) */
125
-
126
-    bmdModeCintelRAW                                             = /* 'rwci' */ 0x72776369,    // Frame size up to 4096x3072, variable frame rate
127
-    bmdModeCintelCompressedRAW                                   = /* 'rwcc' */ 0x72776363,    // Frame size up to 4096x3072, variable frame rate
128
+    /* PC Modes */
129
+
130
+    bmdMode640x480p60                                            = /* 'vga6' */ 0x76676136,
131
+    bmdMode800x600p60                                            = /* 'svg6' */ 0x73766736,
132
+    bmdMode1440x900p50                                           = /* 'wxg5' */ 0x77786735,
133
+    bmdMode1440x900p60                                           = /* 'wxg6' */ 0x77786736,
134
+    bmdMode1440x1080p50                                          = /* 'sxg5' */ 0x73786735,
135
+    bmdMode1440x1080p60                                          = /* 'sxg6' */ 0x73786736,
136
+    bmdMode1600x1200p50                                          = /* 'uxg5' */ 0x75786735,
137
+    bmdMode1600x1200p60                                          = /* 'uxg6' */ 0x75786736,
138
+    bmdMode1920x1200p50                                          = /* 'wux5' */ 0x77757835,
139
+    bmdMode1920x1200p60                                          = /* 'wux6' */ 0x77757836,
140
+    bmdMode1920x1440p50                                          = /* '1945' */ 0x31393435,
141
+    bmdMode1920x1440p60                                          = /* '1946' */ 0x31393436,
142
+    bmdMode2560x1440p50                                          = /* 'wqh5' */ 0x77716835,
143
+    bmdMode2560x1440p60                                          = /* 'wqh6' */ 0x77716836,
144
+    bmdMode2560x1600p50                                          = /* 'wqx5' */ 0x77717835,
145
+    bmdMode2560x1600p60                                          = /* 'wqx6' */ 0x77717836,
146
 
147
     /* Special Modes */
148
 
149
     bmdModeUnknown                                               = /* 'iunk' */ 0x69756E6B
150
 } BMDDisplayMode;
151
 
152
-/* Enum BMDFieldDominance - Video field dominance */
153
+/* Enum BMDFieldDominance - BMDFieldDominance enumerates settings applicable to video fields. */
154
 
155
-typedef [v1_enum] enum _BMDFieldDominance {
156
+typedef [v1_enum] enum _BMDFieldDominance {
157
     bmdUnknownFieldDominance                                     = 0,
158
     bmdLowerFieldFirst                                           = /* 'lowr' */ 0x6C6F7772,
159
     bmdUpperFieldFirst                                           = /* 'uppr' */ 0x75707072,
160
@@ -159,7 +205,8 @@
161
 
162
 /* Enum BMDPixelFormat - Video pixel formats supported for output/input */
163
 
164
-typedef [v1_enum] enum _BMDPixelFormat {
165
+typedef [v1_enum] enum _BMDPixelFormat {
166
+    bmdFormatUnspecified                                         = 0,
167
     bmdFormat8BitYUV                                             = /* '2vuy' */ 0x32767579,
168
     bmdFormat10BitYUV                                            = /* 'v210' */ 0x76323130,
169
     bmdFormat8BitARGB                                            = 32,
170
@@ -173,17 +220,12 @@
171
 
172
     /* AVID DNxHR */
173
 
174
-    bmdFormatDNxHR                                               = /* 'AVdh' */ 0x41566468,
175
-
176
-    /* Cintel formats */
177
-
178
-    bmdFormat12BitRAWGRBG                                        = /* 'r12p' */ 0x72313270,    // 12-bit RAW data for bayer pattern GRBG
179
-    bmdFormat12BitRAWJPEG                                        = /* 'r16p' */ 0x72313670 // 12-bit RAW data arranged in tiles and JPEG compressed
180
+    bmdFormatDNxHR                                               = /* 'AVdh' */ 0x41566468
181
 } BMDPixelFormat;
182
 
183
 /* Enum BMDDisplayModeFlags - Flags to describe the characteristics of an IDeckLinkDisplayMode. */
184
 
185
-[v1_enum] enum _BMDDisplayModeFlags {
186
+[v1_enum] enum _BMDDisplayModeFlags {
187
     bmdDisplayModeSupports3D                                     = 1 << 0,
188
     bmdDisplayModeColorspaceRec601                               = 1 << 1,
189
     bmdDisplayModeColorspaceRec709                               = 1 << 2,
190
@@ -195,36 +237,35 @@
191
 interface IDeckLinkDisplayModeIterator;
192
 interface IDeckLinkDisplayMode;
193
 
194
-/* Interface IDeckLinkDisplayModeIterator - enumerates over supported input/output display modes. */
195
+/* Interface IDeckLinkDisplayModeIterator - Enumerates over supported input/output display modes. */
196
 
197
 [
198
     object,
199
     uuid(9C88499F-F601-4021-B80B-032E4EB41C35),
200
-    helpstring("enumerates over supported input/output display modes.")
201
+    helpstring("Enumerates over supported input/output display modes.")
202
 ] interface IDeckLinkDisplayModeIterator : IUnknown
203
 {
204
-    HRESULT Next([out] IDeckLinkDisplayMode **deckLinkDisplayMode);
205
+    HRESULT Next ([out] IDeckLinkDisplayMode** deckLinkDisplayMode);
206
 };
207
 
208
-/* Interface IDeckLinkDisplayMode - represents a display mode */
209
+/* Interface IDeckLinkDisplayMode - Represents a display mode */
210
 
211
 [
212
     object,
213
     uuid(3EB2C1AB-0A3D-4523-A3AD-F40D7FB14E78),
214
-    helpstring("represents a display mode")
215
+    helpstring("Represents a display mode")
216
 ] interface IDeckLinkDisplayMode : IUnknown
217
 {
218
-    HRESULT GetName([out] BSTR *name);
219
-    BMDDisplayMode GetDisplayMode(void);
220
-    long GetWidth(void);
221
-    long GetHeight(void);
222
-    HRESULT GetFrameRate([out] BMDTimeValue *frameDuration, [out] BMDTimeScale *timeScale);
223
-    BMDFieldDominance GetFieldDominance(void);
224
-    BMDDisplayModeFlags GetFlags(void);
225
+    HRESULT GetName ([out] BSTR* name);
226
+    BMDDisplayMode GetDisplayMode (void);
227
+    long GetWidth (void);
228
+    long GetHeight (void);
229
+    HRESULT GetFrameRate ([out] BMDTimeValue* frameDuration, [out] BMDTimeScale* timeScale);
230
+    BMDFieldDominance GetFieldDominance (void);
231
+    BMDDisplayModeFlags GetFlags (void);
232
 };
233
 
234
 /* Coclasses */
235
 
236
 importlib("stdole2.tlb");
237
 
238
-
239
obs-studio-26.0.2.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIStreaming.idl -> obs-studio-26.1.0.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIStreaming.idl Changed
305
 
1
@@ -1,5 +1,5 @@
2
 /* -LICENSE-START-
3
-** Copyright (c) 2018 Blackmagic Design
4
+** Copyright (c) 2020 Blackmagic Design
5
 **
6
 ** Permission is hereby granted, free of charge, to any person or organization
7
 ** obtaining a copy of the software and accompanying documentation covered by
8
@@ -7,14 +7,14 @@
9
 ** execute, and transmit the Software, and to prepare derivative works of the
10
 ** Software, and to permit third-parties to whom the Software is furnished to
11
 ** do so, all subject to the following:
12
-** 
13
+**
14
 ** The copyright notices in the Software and this entire statement, including
15
 ** the above license grant, this restriction and the following disclaimer,
16
 ** must be included in all copies of the Software, in whole or in part, and
17
 ** all derivative works of the Software, unless such copies or derivative
18
 ** works are solely in the form of machine-executable object code generated by
19
 ** a source language processor.
20
-** 
21
+**
22
 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
 ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
 ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
25
@@ -44,7 +44,7 @@
26
 
27
 /* Enum BMDStreamingDeviceMode - Device modes */
28
 
29
-typedef [v1_enum] enum _BMDStreamingDeviceMode {
30
+typedef [v1_enum] enum _BMDStreamingDeviceMode {
31
     bmdStreamingDeviceIdle                                       = /* 'idle' */ 0x69646C65,
32
     bmdStreamingDeviceEncoding                                   = /* 'enco' */ 0x656E636F,
33
     bmdStreamingDeviceStopping                                   = /* 'stop' */ 0x73746F70,
34
@@ -53,7 +53,7 @@
35
 
36
 /* Enum BMDStreamingEncodingFrameRate - Encoded frame rates */
37
 
38
-typedef [v1_enum] enum _BMDStreamingEncodingFrameRate {
39
+typedef [v1_enum] enum _BMDStreamingEncodingFrameRate {
40
 
41
     /* Interlaced rates */
42
 
43
@@ -75,21 +75,21 @@
44
 
45
 /* Enum BMDStreamingEncodingSupport - Output encoding mode supported flag */
46
 
47
-typedef [v1_enum] enum _BMDStreamingEncodingSupport {
48
+typedef [v1_enum] enum _BMDStreamingEncodingSupport {
49
     bmdStreamingEncodingModeNotSupported                         = 0,
50
-    bmdStreamingEncodingModeSupported,                          
51
-    bmdStreamingEncodingModeSupportedWithChanges                
52
+    bmdStreamingEncodingModeSupported,
53
+    bmdStreamingEncodingModeSupportedWithChanges
54
 } BMDStreamingEncodingSupport;
55
 
56
 /* Enum BMDStreamingVideoCodec - Video codecs */
57
 
58
-typedef [v1_enum] enum _BMDStreamingVideoCodec {
59
+typedef [v1_enum] enum _BMDStreamingVideoCodec {
60
     bmdStreamingVideoCodecH264                                   = /* 'H264' */ 0x48323634
61
 } BMDStreamingVideoCodec;
62
 
63
 /* Enum BMDStreamingH264Profile - H264 encoding profile */
64
 
65
-typedef [v1_enum] enum _BMDStreamingH264Profile {
66
+typedef [v1_enum] enum _BMDStreamingH264Profile {
67
     bmdStreamingH264ProfileHigh                                  = /* 'high' */ 0x68696768,
68
     bmdStreamingH264ProfileMain                                  = /* 'main' */ 0x6D61696E,
69
     bmdStreamingH264ProfileBaseline                              = /* 'base' */ 0x62617365
70
@@ -97,7 +97,7 @@
71
 
72
 /* Enum BMDStreamingH264Level - H264 encoding level */
73
 
74
-typedef [v1_enum] enum _BMDStreamingH264Level {
75
+typedef [v1_enum] enum _BMDStreamingH264Level {
76
     bmdStreamingH264Level12                                      = /* 'lv12' */ 0x6C763132,
77
     bmdStreamingH264Level13                                      = /* 'lv13' */ 0x6C763133,
78
     bmdStreamingH264Level2                                       = /* 'lv2 ' */ 0x6C763220,
79
@@ -113,20 +113,20 @@
80
 
81
 /* Enum BMDStreamingH264EntropyCoding - H264 entropy coding */
82
 
83
-typedef [v1_enum] enum _BMDStreamingH264EntropyCoding {
84
+typedef [v1_enum] enum _BMDStreamingH264EntropyCoding {
85
     bmdStreamingH264EntropyCodingCAVLC                           = /* 'EVLC' */ 0x45564C43,
86
     bmdStreamingH264EntropyCodingCABAC                           = /* 'EBAC' */ 0x45424143
87
 } BMDStreamingH264EntropyCoding;
88
 
89
 /* Enum BMDStreamingAudioCodec - Audio codecs */
90
 
91
-typedef [v1_enum] enum _BMDStreamingAudioCodec {
92
+typedef [v1_enum] enum _BMDStreamingAudioCodec {
93
     bmdStreamingAudioCodecAAC                                    = /* 'AAC ' */ 0x41414320
94
 } BMDStreamingAudioCodec;
95
 
96
 /* Enum BMDStreamingEncodingModePropertyID - Encoding mode properties */
97
 
98
-typedef [v1_enum] enum _BMDStreamingEncodingModePropertyID {
99
+typedef [v1_enum] enum _BMDStreamingEncodingModePropertyID {
100
 
101
     /* Integers, Video Properties */
102
 
103
@@ -173,9 +173,9 @@
104
     helpstring("Device notification callbacks.")
105
 ] interface IBMDStreamingDeviceNotificationCallback : IUnknown
106
 {
107
-    HRESULT StreamingDeviceArrived([in] IDeckLink* device);
108
-    HRESULT StreamingDeviceRemoved([in] IDeckLink* device);
109
-    HRESULT StreamingDeviceModeChanged([in] IDeckLink* device, [in] BMDStreamingDeviceMode mode);
110
+    HRESULT StreamingDeviceArrived ([in] IDeckLink* device);
111
+    HRESULT StreamingDeviceRemoved ([in] IDeckLink* device);
112
+    HRESULT StreamingDeviceModeChanged ([in] IDeckLink* device, [in] BMDStreamingDeviceMode mode);
113
 };
114
 
115
 /* Interface IBMDStreamingH264InputCallback - H264 input callbacks. */
116
@@ -186,12 +186,12 @@
117
     helpstring("H264 input callbacks.")
118
 ] interface IBMDStreamingH264InputCallback : IUnknown
119
 {
120
-    HRESULT H264NALPacketArrived([in] IBMDStreamingH264NALPacket* nalPacket);
121
-    HRESULT H264AudioPacketArrived([in] IBMDStreamingAudioPacket* audioPacket);
122
-    HRESULT MPEG2TSPacketArrived([in] IBMDStreamingMPEG2TSPacket* tsPacket);
123
-    HRESULT H264VideoInputConnectorScanningChanged(void);
124
-    HRESULT H264VideoInputConnectorChanged(void);
125
-    HRESULT H264VideoInputModeChanged(void);
126
+    HRESULT H264NALPacketArrived ([in] IBMDStreamingH264NALPacket* nalPacket);
127
+    HRESULT H264AudioPacketArrived ([in] IBMDStreamingAudioPacket* audioPacket);
128
+    HRESULT MPEG2TSPacketArrived ([in] IBMDStreamingMPEG2TSPacket* tsPacket);
129
+    HRESULT H264VideoInputConnectorScanningChanged (void);
130
+    HRESULT H264VideoInputConnectorChanged (void);
131
+    HRESULT H264VideoInputModeChanged (void);
132
 };
133
 
134
 /* Interface IBMDStreamingDiscovery - Installs device notifications */
135
@@ -202,8 +202,8 @@
136
     helpstring("Installs device notifications")
137
 ] interface IBMDStreamingDiscovery : IUnknown
138
 {
139
-    HRESULT InstallDeviceNotifications([in] IBMDStreamingDeviceNotificationCallback* theCallback);
140
-    HRESULT UninstallDeviceNotifications(void);
141
+    HRESULT InstallDeviceNotifications ([in] IBMDStreamingDeviceNotificationCallback* theCallback);
142
+    HRESULT UninstallDeviceNotifications (void);
143
 };
144
 
145
 /* Interface IBMDStreamingVideoEncodingMode - Represents an encoded video mode. */
146
@@ -214,19 +214,19 @@
147
     helpstring("Represents an encoded video mode.")
148
 ] interface IBMDStreamingVideoEncodingMode : IUnknown
149
 {
150
-    HRESULT GetName([out] BSTR *name);
151
-    unsigned int GetPresetID(void);
152
-    unsigned int GetSourcePositionX(void);
153
-    unsigned int GetSourcePositionY(void);
154
-    unsigned int GetSourceWidth(void);
155
-    unsigned int GetSourceHeight(void);
156
-    unsigned int GetDestWidth(void);
157
-    unsigned int GetDestHeight(void);
158
-    HRESULT GetFlag([in] BMDStreamingEncodingModePropertyID cfgID, [out] BOOL* value);
159
-    HRESULT GetInt([in] BMDStreamingEncodingModePropertyID cfgID, [out] LONGLONG* value);
160
-    HRESULT GetFloat([in] BMDStreamingEncodingModePropertyID cfgID, [out] double* value);
161
-    HRESULT GetString([in] BMDStreamingEncodingModePropertyID cfgID, [out] BSTR *value);
162
-    HRESULT CreateMutableVideoEncodingMode([out] IBMDStreamingMutableVideoEncodingMode** newEncodingMode); // Creates a mutable copy of the encoding mode
163
+    HRESULT GetName ([out] BSTR* name);
164
+    unsigned int GetPresetID (void);
165
+    unsigned int GetSourcePositionX (void);
166
+    unsigned int GetSourcePositionY (void);
167
+    unsigned int GetSourceWidth (void);
168
+    unsigned int GetSourceHeight (void);
169
+    unsigned int GetDestWidth (void);
170
+    unsigned int GetDestHeight (void);
171
+    HRESULT GetFlag ([in] BMDStreamingEncodingModePropertyID cfgID, [out] BOOL* value);
172
+    HRESULT GetInt ([in] BMDStreamingEncodingModePropertyID cfgID, [out] LONGLONG* value);
173
+    HRESULT GetFloat ([in] BMDStreamingEncodingModePropertyID cfgID, [out] double* value);
174
+    HRESULT GetString ([in] BMDStreamingEncodingModePropertyID cfgID, [out] BSTR* value);
175
+    HRESULT CreateMutableVideoEncodingMode ([out] IBMDStreamingMutableVideoEncodingMode** newEncodingMode);    // Creates a mutable copy of the encoding mode
176
 };
177
 
178
 /* Interface IBMDStreamingMutableVideoEncodingMode - Represents a mutable encoded video mode. */
179
@@ -237,12 +237,12 @@
180
     helpstring("Represents a mutable encoded video mode.")
181
 ] interface IBMDStreamingMutableVideoEncodingMode : IBMDStreamingVideoEncodingMode
182
 {
183
-    HRESULT SetSourceRect([in] unsigned int posX, [in] unsigned int posY, [in] unsigned int width, [in] unsigned int height);
184
-    HRESULT SetDestSize([in] unsigned int width, [in] unsigned int height);
185
-    HRESULT SetFlag([in] BMDStreamingEncodingModePropertyID cfgID, [in] BOOL value);
186
-    HRESULT SetInt([in] BMDStreamingEncodingModePropertyID cfgID, [in] LONGLONG value);
187
-    HRESULT SetFloat([in] BMDStreamingEncodingModePropertyID cfgID, [in] double value);
188
-    HRESULT SetString([in] BMDStreamingEncodingModePropertyID cfgID, [in] BSTR value);
189
+    HRESULT SetSourceRect ([in] unsigned int posX, [in] unsigned int posY, [in] unsigned int width, [in] unsigned int height);
190
+    HRESULT SetDestSize ([in] unsigned int width, [in] unsigned int height);
191
+    HRESULT SetFlag ([in] BMDStreamingEncodingModePropertyID cfgID, [in] BOOL value);
192
+    HRESULT SetInt ([in] BMDStreamingEncodingModePropertyID cfgID, [in] LONGLONG value);
193
+    HRESULT SetFloat ([in] BMDStreamingEncodingModePropertyID cfgID, [in] double value);
194
+    HRESULT SetString ([in] BMDStreamingEncodingModePropertyID cfgID, [in] BSTR value);
195
 };
196
 
197
 /* Interface IBMDStreamingVideoEncodingModePresetIterator - Enumerates encoding mode presets */
198
@@ -253,7 +253,7 @@
199
     helpstring("Enumerates encoding mode presets")
200
 ] interface IBMDStreamingVideoEncodingModePresetIterator : IUnknown
201
 {
202
-    HRESULT Next([out] IBMDStreamingVideoEncodingMode** videoEncodingMode);
203
+    HRESULT Next ([out] IBMDStreamingVideoEncodingMode** videoEncodingMode);
204
 };
205
 
206
 /* Interface IBMDStreamingDeviceInput - Created by QueryInterface from IDeckLink */
207
@@ -267,23 +267,23 @@
208
 
209
     /* Input modes */
210
 
211
-    HRESULT DoesSupportVideoInputMode([in] BMDDisplayMode inputMode, [out] BOOL* result);
212
-    HRESULT GetVideoInputModeIterator([out] IDeckLinkDisplayModeIterator** iterator);
213
-    HRESULT SetVideoInputMode([in] BMDDisplayMode inputMode);
214
-    HRESULT GetCurrentDetectedVideoInputMode([out] BMDDisplayMode* detectedMode);
215
+    HRESULT DoesSupportVideoInputMode ([in] BMDDisplayMode inputMode, [out] BOOL* result);
216
+    HRESULT GetVideoInputModeIterator ([out] IDeckLinkDisplayModeIterator** iterator);
217
+    HRESULT SetVideoInputMode ([in] BMDDisplayMode inputMode);
218
+    HRESULT GetCurrentDetectedVideoInputMode ([out] BMDDisplayMode* detectedMode);
219
 
220
     /* Capture modes */
221
 
222
-    HRESULT GetVideoEncodingMode([out] IBMDStreamingVideoEncodingMode** encodingMode);
223
-    HRESULT GetVideoEncodingModePresetIterator([in] BMDDisplayMode inputMode, [out] IBMDStreamingVideoEncodingModePresetIterator** iterator);
224
-    HRESULT DoesSupportVideoEncodingMode([in] BMDDisplayMode inputMode, [in] IBMDStreamingVideoEncodingMode* encodingMode, [out] BMDStreamingEncodingSupport* result, [out] IBMDStreamingVideoEncodingMode** changedEncodingMode);
225
-    HRESULT SetVideoEncodingMode([in] IBMDStreamingVideoEncodingMode* encodingMode);
226
+    HRESULT GetVideoEncodingMode ([out] IBMDStreamingVideoEncodingMode** encodingMode);
227
+    HRESULT GetVideoEncodingModePresetIterator ([in] BMDDisplayMode inputMode, [out] IBMDStreamingVideoEncodingModePresetIterator** iterator);
228
+    HRESULT DoesSupportVideoEncodingMode ([in] BMDDisplayMode inputMode, [in] IBMDStreamingVideoEncodingMode* encodingMode, [out] BMDStreamingEncodingSupport* result, [out] IBMDStreamingVideoEncodingMode** changedEncodingMode);
229
+    HRESULT SetVideoEncodingMode ([in] IBMDStreamingVideoEncodingMode* encodingMode);
230
 
231
     /* Input control */
232
 
233
-    HRESULT StartCapture(void);
234
-    HRESULT StopCapture(void);
235
-    HRESULT SetCallback([in] IUnknown* theCallback);
236
+    HRESULT StartCapture (void);
237
+    HRESULT StopCapture (void);
238
+    HRESULT SetCallback ([in] IUnknown* theCallback);
239
 };
240
 
241
 /* Interface IBMDStreamingH264NALPacket - Represent an H.264 NAL packet */
242
@@ -294,11 +294,11 @@
243
     helpstring("Represent an H.264 NAL packet")
244
 ] interface IBMDStreamingH264NALPacket : IUnknown
245
 {
246
-    long GetPayloadSize(void);
247
-    HRESULT GetBytes([out] void** buffer);
248
-    HRESULT GetBytesWithSizePrefix([out] void** buffer); // Contains a 32-bit unsigned big endian size prefix
249
-    HRESULT GetDisplayTime([in] ULONGLONG requestedTimeScale, [out] ULONGLONG* displayTime);
250
-    HRESULT GetPacketIndex([out] unsigned int* packetIndex); // Deprecated
251
+    long GetPayloadSize (void);
252
+    HRESULT GetBytes ([out] void** buffer);
253
+    HRESULT GetBytesWithSizePrefix ([out] void** buffer);  // Contains a 32-bit unsigned big endian size prefix
254
+    HRESULT GetDisplayTime ([in] ULONGLONG requestedTimeScale, [out] ULONGLONG* displayTime);
255
+    HRESULT GetPacketIndex ([out] unsigned int* packetIndex);  // Deprecated
256
 };
257
 
258
 /* Interface IBMDStreamingAudioPacket - Represents a chunk of audio data */
259
@@ -309,11 +309,11 @@
260
     helpstring("Represents a chunk of audio data")
261
 ] interface IBMDStreamingAudioPacket : IUnknown
262
 {
263
-    BMDStreamingAudioCodec GetCodec(void);
264
-    long GetPayloadSize(void);
265
-    HRESULT GetBytes([out] void** buffer);
266
-    HRESULT GetPlayTime([in] ULONGLONG requestedTimeScale, [out] ULONGLONG* playTime);
267
-    HRESULT GetPacketIndex([out] unsigned int* packetIndex); // Deprecated
268
+    BMDStreamingAudioCodec GetCodec (void);
269
+    long GetPayloadSize (void);
270
+    HRESULT GetBytes ([out] void** buffer);
271
+    HRESULT GetPlayTime ([in] ULONGLONG requestedTimeScale, [out] ULONGLONG* playTime);
272
+    HRESULT GetPacketIndex ([out] unsigned int* packetIndex);  // Deprecated
273
 };
274
 
275
 /* Interface IBMDStreamingMPEG2TSPacket - Represent an MPEG2 Transport Stream packet */
276
@@ -324,8 +324,8 @@
277
     helpstring("Represent an MPEG2 Transport Stream packet")
278
 ] interface IBMDStreamingMPEG2TSPacket : IUnknown
279
 {
280
-    long GetPayloadSize(void);
281
-    HRESULT GetBytes([out] void** buffer);
282
+    long GetPayloadSize (void);
283
+    HRESULT GetBytes ([out] void** buffer);
284
 };
285
 
286
 /* Interface IBMDStreamingH264NALParser - For basic NAL parsing */
287
@@ -336,9 +336,9 @@
288
     helpstring("For basic NAL parsing")
289
 ] interface IBMDStreamingH264NALParser : IUnknown
290
 {
291
-    HRESULT IsNALSequenceParameterSet([in] IBMDStreamingH264NALPacket* nal);
292
-    HRESULT IsNALPictureParameterSet([in] IBMDStreamingH264NALPacket* nal);
293
-    HRESULT GetProfileAndLevelFromSPS([in] IBMDStreamingH264NALPacket* nal, [out] unsigned int* profileIdc, [out] unsigned int* profileCompatability, [out] unsigned int* levelIdc);
294
+    HRESULT IsNALSequenceParameterSet ([in] IBMDStreamingH264NALPacket* nal);
295
+    HRESULT IsNALPictureParameterSet ([in] IBMDStreamingH264NALPacket* nal);
296
+    HRESULT GetProfileAndLevelFromSPS ([in] IBMDStreamingH264NALPacket* nal, [out] unsigned int* profileIdc, [out] unsigned int* profileCompatability, [out] unsigned int* levelIdc);
297
 };
298
 
299
 /* Coclasses */
300
@@ -361,4 +361,3 @@
301
     [default] interface IBMDStreamingH264NALParser;
302
 };
303
 
304
-
305
obs-studio-26.0.2.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPITypes.idl -> obs-studio-26.1.0.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPITypes.idl Changed
87
 
1
@@ -1,5 +1,5 @@
2
 /* -LICENSE-START-
3
-** Copyright (c) 2018 Blackmagic Design
4
+** Copyright (c) 2020 Blackmagic Design
5
 **
6
 ** Permission is hereby granted, free of charge, to any person or organization
7
 ** obtaining a copy of the software and accompanying documentation covered by
8
@@ -7,14 +7,14 @@
9
 ** execute, and transmit the Software, and to prepare derivative works of the
10
 ** Software, and to permit third-parties to whom the Software is furnished to
11
 ** do so, all subject to the following:
12
-** 
13
+**
14
 ** The copyright notices in the Software and this entire statement, including
15
 ** the above license grant, this restriction and the following disclaimer,
16
 ** must be included in all copies of the Software, in whole or in part, and
17
 ** all derivative works of the Software, unless such copies or derivative
18
 ** works are solely in the form of machine-executable object code generated by
19
 ** a source language processor.
20
-** 
21
+**
22
 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
 ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
 ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
25
@@ -50,16 +50,19 @@
26
 
27
 /* Enum BMDTimecodeFlags - Timecode flags */
28
 
29
-[v1_enum] enum _BMDTimecodeFlags {
30
+[v1_enum] enum _BMDTimecodeFlags {
31
     bmdTimecodeFlagDefault                                       = 0,
32
     bmdTimecodeIsDropFrame                                       = 1 << 0,
33
     bmdTimecodeFieldMark                                         = 1 << 1,
34
-    bmdTimecodeColorFrame                                        = 1 << 2
35
+    bmdTimecodeColorFrame                                        = 1 << 2,
36
+    bmdTimecodeEmbedRecordingTrigger                             = 1 << 3, // On SDI recording trigger utilises a user-bit.
37
+    bmdTimecodeRecordingTriggered                                = 1 << 4
38
 };
39
 
40
 /* Enum BMDVideoConnection - Video connection types */
41
 
42
-typedef [v1_enum] enum _BMDVideoConnection {
43
+typedef [v1_enum] enum _BMDVideoConnection {
44
+    bmdVideoConnectionUnspecified                                = 0,
45
     bmdVideoConnectionSDI                                        = 1 << 0,
46
     bmdVideoConnectionHDMI                                       = 1 << 1,
47
     bmdVideoConnectionOpticalSDI                                 = 1 << 2,
48
@@ -70,7 +73,7 @@
49
 
50
 /* Enum BMDAudioConnection - Audio connection types */
51
 
52
-typedef [v1_enum] enum _BMDAudioConnection {
53
+typedef [v1_enum] enum _BMDAudioConnection {
54
     bmdAudioConnectionEmbedded                                   = 1 << 0,
55
     bmdAudioConnectionAESEBU                                     = 1 << 1,
56
     bmdAudioConnectionAnalog                                     = 1 << 2,
57
@@ -82,7 +85,7 @@
58
 
59
 /* Enum BMDDeckControlConnection - Deck control connections */
60
 
61
-typedef [v1_enum] enum _BMDDeckControlConnection {
62
+typedef [v1_enum] enum _BMDDeckControlConnection {
63
     bmdDeckControlConnectionRS422Remote1                         = 1 << 0,
64
     bmdDeckControlConnectionRS422Remote2                         = 1 << 1
65
 } BMDDeckControlConnection;
66
@@ -99,15 +102,14 @@
67
     helpstring("Used for video frame timecode representation.")
68
 ] interface IDeckLinkTimecode : IUnknown
69
 {
70
-    BMDTimecodeBCD GetBCD(void);
71
-    HRESULT GetComponents([out] unsigned char *hours, [out] unsigned char *minutes, [out] unsigned char *seconds, [out] unsigned char *frames);
72
-    HRESULT GetString([out] BSTR *timecode);
73
-    BMDTimecodeFlags GetFlags(void);
74
-    HRESULT GetTimecodeUserBits([out] BMDTimecodeUserBits *userBits);
75
+    BMDTimecodeBCD GetBCD (void);
76
+    HRESULT GetComponents ([out] unsigned char* hours, [out] unsigned char* minutes, [out] unsigned char* seconds, [out] unsigned char* frames);
77
+    HRESULT GetString ([out] BSTR* timecode);
78
+    BMDTimecodeFlags GetFlags (void);
79
+    HRESULT GetTimecodeUserBits ([out] BMDTimecodeUserBits* userBits);
80
 };
81
 
82
 /* Coclasses */
83
 
84
 importlib("stdole2.tlb");
85
 
86
-
87
obs-studio-26.0.2.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIVersion.h -> obs-studio-26.1.0.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIVersion.h Changed
12
 
1
@@ -30,8 +30,8 @@
2
 #ifndef __DeckLink_API_Version_h__
3
 #define __DeckLink_API_Version_h__
4
 
5
-#define BLACKMAGIC_DECKLINK_API_VERSION                    0x0a0b0400
6
-#define BLACKMAGIC_DECKLINK_API_VERSION_STRING         "10.11.4"
7
+#define BLACKMAGIC_DECKLINK_API_VERSION                    0x0b060000
8
+#define BLACKMAGIC_DECKLINK_API_VERSION_STRING         "11.6"
9
 
10
 #endif // __DeckLink_API_Version_h__
11
 
12
obs-studio-26.1.0.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v10_11.idl Added
291
 
1
@@ -0,0 +1,289 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2018 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+** 
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+** 
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+/* DeckLinkAPI_v10_11.idl */
29
+
30
+// Enumeration Mapping
31
+
32
+/* Enum BMDDisplayModeSupport_v10_11 - Output mode supported flags */
33
+
34
+typedef [v1_enum] enum _BMDDisplayModeSupport_v10_11 {
35
+    bmdDisplayModeNotSupported_v10_11                               = 0,
36
+    bmdDisplayModeSupported_v10_11,
37
+    bmdDisplayModeSupportedWithConversion_v10_11
38
+} BMDDisplayModeSupport_v10_11;
39
+
40
+/* Enum BMDDuplexMode - Duplex for configurable ports */
41
+
42
+typedef [v1_enum] enum _BMDDuplexMode_v10_11 {
43
+    bmdDuplexModeFull_v10_11                                        = /* 'fdup' */ 0x66647570,
44
+    bmdDuplexModeHalf_v10_11                                        = /* 'hdup' */ 0x68647570
45
+} BMDDuplexMode_v10_11;
46
+
47
+/* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */
48
+
49
+typedef [v1_enum] enum _BMDDeckLinkConfigurationID_v10_11 {
50
+
51
+    /* Video Input/Output Integers */
52
+
53
+    bmdDeckLinkConfigDuplexMode_v10_11                              = /* 'dupx' */ 0x64757078,
54
+
55
+} BMDDeckLinkConfigurationID_v10_11;
56
+
57
+/* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
58
+
59
+typedef [v1_enum] enum _BMDDeckLinkAttributeID_v10_11 {
60
+
61
+    /* Flags */
62
+
63
+    BMDDeckLinkSupportsDuplexModeConfiguration_v10_11               = /* 'dupx' */ 0x64757078,
64
+    BMDDeckLinkSupportsHDKeying_v10_11                              = /* 'keyh' */ 0x6B657968,
65
+
66
+    /* Integers */
67
+
68
+    BMDDeckLinkPairedDevicePersistentID_v10_11                      = /* 'ppid' */ 0x70706964,
69
+    BMDDeckLinkSupportsFullDuplex_v10_11                            = /* 'fdup' */ 0x66647570,
70
+
71
+} BMDDeckLinkAttributeID_v10_11;
72
+
73
+typedef [v1_enum] enum _BMDDeckLinkStatusID_v10_11 {
74
+   bmdDeckLinkStatusDuplexMode_v10_11                              = /* 'dupx' */ 0x64757078,
75
+} BMDDeckLinkStatusID_v10_11;
76
+
77
+/* Enum BMDDuplexStatus - Duplex status of the device */
78
+
79
+typedef [v1_enum] enum _BMDDuplexStatus_v10_11 {
80
+    bmdDuplexFullDuplex_v10_11                                      = /* 'fdup' */ 0x66647570,
81
+    bmdDuplexHalfDuplex_v10_11                                      = /* 'hdup' */ 0x68647570,
82
+    bmdDuplexSimplex_v10_11                                         = /* 'splx' */ 0x73706C78,
83
+    bmdDuplexInactive_v10_11                                        = /* 'inac' */ 0x696E6163
84
+} BMDDuplexStatus_v10_11;
85
+
86
+// Forward Declarations
87
+
88
+interface IDeckLinkConfiguration_v10_11;
89
+interface IDeckLinkAttributes_v10_11;
90
+interface IDeckLinkNotification_v10_11;
91
+
92
+/* Interface IDeckLinkConfiguration_v10_11 - DeckLink Configuration interface */
93
+
94
+[
95
+    object,
96
+    uuid(EF90380B-4AE5-4346-9077-E288E149F129),
97
+    local, 
98
+    helpstring("DeckLink Configuration interface")
99
+] interface IDeckLinkConfiguration_v10_11 : IUnknown
100
+{
101
+    HRESULT SetFlag([in] BMDDeckLinkConfigurationID cfgID, [in] BOOL value);
102
+    HRESULT GetFlag([in] BMDDeckLinkConfigurationID cfgID, [out] BOOL *value);
103
+    HRESULT SetInt([in] BMDDeckLinkConfigurationID cfgID, [in] LONGLONG value);
104
+    HRESULT GetInt([in] BMDDeckLinkConfigurationID cfgID, [out] LONGLONG *value);
105
+    HRESULT SetFloat([in] BMDDeckLinkConfigurationID cfgID, [in] double value);
106
+    HRESULT GetFloat([in] BMDDeckLinkConfigurationID cfgID, [out] double *value);
107
+    HRESULT SetString([in] BMDDeckLinkConfigurationID cfgID, [in] BSTR value);
108
+    HRESULT GetString([in] BMDDeckLinkConfigurationID cfgID, [out] BSTR *value);
109
+    HRESULT WriteConfigurationToPreferences(void);
110
+};
111
+
112
+/* Interface IDeckLinkAttributes_v10_11 - DeckLink Attribute interface */
113
+
114
+[
115
+    object,
116
+    uuid(ABC11843-D966-44CB-96E2-A1CB5D3135C4),
117
+    local, 
118
+    helpstring("DeckLink Attribute interface")
119
+] interface IDeckLinkAttributes_v10_11 : IUnknown
120
+{
121
+    HRESULT GetFlag([in] BMDDeckLinkAttributeID cfgID, [out] BOOL *value);
122
+    HRESULT GetInt([in] BMDDeckLinkAttributeID cfgID, [out] LONGLONG *value);
123
+    HRESULT GetFloat([in] BMDDeckLinkAttributeID cfgID, [out] double *value);
124
+    HRESULT GetString([in] BMDDeckLinkAttributeID cfgID, [out] BSTR *value);
125
+};
126
+
127
+/* Interface IDeckLinkOutput_v10_11 - DeckLink output interface. */
128
+
129
+[
130
+    object,
131
+    uuid(CC5C8A6E-3F2F-4B3A-87EA-FD78AF300564),
132
+    local,
133
+    helpstring("Created by QueryInterface from IDeckLink.")
134
+] interface IDeckLinkOutput_v10_11 : IUnknown
135
+{
136
+    HRESULT DoesSupportVideoMode([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoOutputFlags flags, [out] BMDDisplayModeSupport_v10_11 *result, [out] IDeckLinkDisplayMode **resultDisplayMode);
137
+    HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator **iterator);
138
+
139
+    HRESULT SetScreenPreviewCallback([in] IDeckLinkScreenPreviewCallback *previewCallback);
140
+
141
+    /* Video Output */
142
+
143
+    HRESULT EnableVideoOutput([in] BMDDisplayMode displayMode, [in] BMDVideoOutputFlags flags);
144
+    HRESULT DisableVideoOutput(void);
145
+
146
+    HRESULT SetVideoOutputFrameMemoryAllocator([in] IDeckLinkMemoryAllocator *theAllocator);
147
+    HRESULT CreateVideoFrame([in] int width, [in] int height, [in] int rowBytes, [in] BMDPixelFormat pixelFormat, [in] BMDFrameFlags flags, [out] IDeckLinkMutableVideoFrame **outFrame);
148
+    HRESULT CreateAncillaryData([in] BMDPixelFormat pixelFormat, [out] IDeckLinkVideoFrameAncillary **outBuffer);
149
+
150
+    HRESULT DisplayVideoFrameSync([in] IDeckLinkVideoFrame *theFrame);
151
+    HRESULT ScheduleVideoFrame([in] IDeckLinkVideoFrame *theFrame, [in] BMDTimeValue displayTime, [in] BMDTimeValue displayDuration, [in] BMDTimeScale timeScale);
152
+    HRESULT SetScheduledFrameCompletionCallback([in] IDeckLinkVideoOutputCallback *theCallback);
153
+    HRESULT GetBufferedVideoFrameCount([out] unsigned int *bufferedFrameCount);
154
+
155
+    /* Audio Output */
156
+
157
+    HRESULT EnableAudioOutput([in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned int channelCount, [in] BMDAudioOutputStreamType streamType);
158
+    HRESULT DisableAudioOutput(void);
159
+
160
+    HRESULT WriteAudioSamplesSync([in] void *buffer, [in] unsigned int sampleFrameCount, [out] unsigned int *sampleFramesWritten);
161
+
162
+    HRESULT BeginAudioPreroll(void);
163
+    HRESULT EndAudioPreroll(void);
164
+    HRESULT ScheduleAudioSamples([in] void *buffer, [in] unsigned int sampleFrameCount, [in] BMDTimeValue streamTime, [in] BMDTimeScale timeScale, [out] unsigned int *sampleFramesWritten);
165
+
166
+    HRESULT GetBufferedAudioSampleFrameCount([out] unsigned int *bufferedSampleFrameCount);
167
+    HRESULT FlushBufferedAudioSamples(void);
168
+
169
+    HRESULT SetAudioCallback([in] IDeckLinkAudioOutputCallback *theCallback);
170
+
171
+    /* Output Control */
172
+
173
+    HRESULT StartScheduledPlayback([in] BMDTimeValue playbackStartTime, [in] BMDTimeScale timeScale, [in] double playbackSpeed);
174
+    HRESULT StopScheduledPlayback([in] BMDTimeValue stopPlaybackAtTime, [out] BMDTimeValue *actualStopTime, [in] BMDTimeScale timeScale);
175
+    HRESULT IsScheduledPlaybackRunning([out] BOOL *active);
176
+    HRESULT GetScheduledStreamTime([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue *streamTime, [out] double *playbackSpeed);
177
+    HRESULT GetReferenceStatus([out] BMDReferenceStatus *referenceStatus);
178
+
179
+    /* Hardware Timing */
180
+
181
+    HRESULT GetHardwareReferenceClock([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue *hardwareTime, [out] BMDTimeValue *timeInFrame, [out] BMDTimeValue *ticksPerFrame);
182
+    HRESULT GetFrameCompletionReferenceTimestamp([in] IDeckLinkVideoFrame *theFrame, [in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue *frameCompletionTimestamp);
183
+};
184
+
185
+/* Interface IDeckLinkInput_v10_11 - DeckLink input interface. */
186
+
187
+[
188
+    object,
189
+    uuid(AF22762B-DFAC-4846-AA79-FA8883560995),
190
+    helpstring("Created by QueryInterface from IDeckLink.")
191
+] interface IDeckLinkInput_v10_11 : IUnknown
192
+{
193
+    HRESULT DoesSupportVideoMode([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoInputFlags flags, [out] BMDDisplayModeSupport_v10_11 *result, [out] IDeckLinkDisplayMode **resultDisplayMode);
194
+    HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator **iterator);
195
+
196
+    HRESULT SetScreenPreviewCallback([in] IDeckLinkScreenPreviewCallback *previewCallback);
197
+
198
+    /* Video Input */
199
+
200
+    HRESULT EnableVideoInput([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoInputFlags flags);
201
+    HRESULT DisableVideoInput(void);
202
+    HRESULT GetAvailableVideoFrameCount([out] unsigned int *availableFrameCount);
203
+    HRESULT SetVideoInputFrameMemoryAllocator([in] IDeckLinkMemoryAllocator *theAllocator);
204
+
205
+    /* Audio Input */
206
+
207
+    HRESULT EnableAudioInput([in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned int channelCount);
208
+    HRESULT DisableAudioInput(void);
209
+    HRESULT GetAvailableAudioSampleFrameCount([out] unsigned int *availableSampleFrameCount);
210
+
211
+    /* Input Control */
212
+
213
+    HRESULT StartStreams(void);
214
+    HRESULT StopStreams(void);
215
+    HRESULT PauseStreams(void);
216
+    HRESULT FlushStreams(void);
217
+    HRESULT SetCallback([in] IDeckLinkInputCallback *theCallback);
218
+
219
+    /* Hardware Timing */
220
+
221
+    HRESULT GetHardwareReferenceClock([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue *hardwareTime, [out] BMDTimeValue *timeInFrame, [out] BMDTimeValue *ticksPerFrame);
222
+};
223
+
224
+/* Interface IDeckLinkEncoderInput_v10_11 - Created by QueryInterface from IDeckLink. */
225
+
226
+[
227
+    object,
228
+    uuid(270587DA-6B7D-42E7-A1F0-6D853F581185),
229
+    helpstring("Created by QueryInterface from IDeckLink.")
230
+] interface IDeckLinkEncoderInput_v10_11 : IUnknown
231
+{
232
+    HRESULT DoesSupportVideoMode([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoInputFlags flags, [out] BMDDisplayModeSupport_v10_11 *result, [out] IDeckLinkDisplayMode **resultDisplayMode);
233
+    HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator **iterator);
234
+
235
+    /* Video Input */
236
+
237
+    HRESULT EnableVideoInput([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoInputFlags flags);
238
+    HRESULT DisableVideoInput(void);
239
+    HRESULT GetAvailablePacketsCount([out] unsigned int *availablePacketsCount);
240
+    HRESULT SetMemoryAllocator([in] IDeckLinkMemoryAllocator *theAllocator);
241
+
242
+    /* Audio Input */
243
+
244
+    HRESULT EnableAudioInput([in] BMDAudioFormat audioFormat, [in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned int channelCount);
245
+    HRESULT DisableAudioInput(void);
246
+    HRESULT GetAvailableAudioSampleFrameCount([out] unsigned int *availableSampleFrameCount);
247
+
248
+    /* Input Control */
249
+
250
+    HRESULT StartStreams(void);
251
+    HRESULT StopStreams(void);
252
+    HRESULT PauseStreams(void);
253
+    HRESULT FlushStreams(void);
254
+    HRESULT SetCallback([in] IDeckLinkEncoderInputCallback *theCallback);
255
+
256
+    /* Hardware Timing */
257
+
258
+    HRESULT GetHardwareReferenceClock([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue *hardwareTime, [out] BMDTimeValue *timeInFrame, [out] BMDTimeValue *ticksPerFrame);
259
+};
260
+
261
+/* Interface IDeckLinkNotification_v10_11 - DeckLink Notification interface */
262
+
263
+[
264
+    object,
265
+    uuid(0A1FB207-E215-441B-9B19-6FA1575946C5),
266
+    local,
267
+    helpstring("DeckLink Notification interface")
268
+] interface IDeckLinkNotification_v10_11 : IUnknown
269
+{
270
+    HRESULT Subscribe([in] BMDNotifications topic, [in] IDeckLinkNotificationCallback *theCallback);
271
+    HRESULT Unsubscribe([in] BMDNotifications topic, [in] IDeckLinkNotificationCallback *theCallback);
272
+};
273
+
274
+importlib("stdole2.tlb");
275
+
276
+[
277
+    uuid(87D2693F-8D4A-45C7-B43F-10ACBA25E68F),
278
+    helpstring("CDeckLinkIterator_v10_11 Class")
279
+] coclass CDeckLinkIterator_v10_11
280
+{
281
+    [default] interface IDeckLinkIterator;
282
+};
283
+
284
+[
285
+    uuid(652615D4-26CD-4514-B161-2FD5072ED008),
286
+    helpstring("CDeckLinkDiscovery_v10_11 Class")
287
+] coclass CDeckLinkDiscovery_v10_11
288
+{
289
+    [default] interface IDeckLinkDiscovery;
290
+};
291
obs-studio-26.1.0.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v11_4.idl Added
122
 
1
@@ -0,0 +1,120 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2019 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+** 
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+** 
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+/* DeckLinkAPI_v11_4.idl */
29
+
30
+// Enumeration Mapping
31
+
32
+/* Interface IDeckLinkOutput_v11_4 - Created by QueryInterface from IDeckLink. */
33
+
34
+[
35
+    object,
36
+    uuid(065A0F6C-C508-4D0D-B919-F5EB0EBFC96B),
37
+    local,
38
+    helpstring("Created by QueryInterface from IDeckLink.")
39
+] interface IDeckLinkOutput_v11_4 : IUnknown
40
+{
41
+    HRESULT DoesSupportVideoMode ([in] BMDVideoConnection connection /* If a value of 0 is specified, the caller does not care about the connection */, [in] BMDDisplayMode requestedMode, [in] BMDPixelFormat requestedPixelFormat, [in] BMDSupportedVideoModeFlags flags, [out] BMDDisplayMode* actualMode, [out] BOOL* supported);
42
+    HRESULT GetDisplayMode ([in] BMDDisplayMode displayMode, [out] IDeckLinkDisplayMode** resultDisplayMode);
43
+    HRESULT GetDisplayModeIterator ([out] IDeckLinkDisplayModeIterator** iterator);
44
+    HRESULT SetScreenPreviewCallback ([in] IDeckLinkScreenPreviewCallback* previewCallback);
45
+
46
+    /* Video Output */
47
+
48
+    HRESULT EnableVideoOutput ([in] BMDDisplayMode displayMode, [in] BMDVideoOutputFlags flags);
49
+    HRESULT DisableVideoOutput (void);
50
+    HRESULT SetVideoOutputFrameMemoryAllocator ([in] IDeckLinkMemoryAllocator* theAllocator);
51
+    HRESULT CreateVideoFrame ([in] int width, [in] int height, [in] int rowBytes, [in] BMDPixelFormat pixelFormat, [in] BMDFrameFlags flags, [out] IDeckLinkMutableVideoFrame** outFrame);
52
+    HRESULT CreateAncillaryData ([in] BMDPixelFormat pixelFormat, [out] IDeckLinkVideoFrameAncillary** outBuffer); // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
53
+    HRESULT DisplayVideoFrameSync ([in] IDeckLinkVideoFrame* theFrame);
54
+    HRESULT ScheduleVideoFrame ([in] IDeckLinkVideoFrame* theFrame, [in] BMDTimeValue displayTime, [in] BMDTimeValue displayDuration, [in] BMDTimeScale timeScale);
55
+    HRESULT SetScheduledFrameCompletionCallback ([in] IDeckLinkVideoOutputCallback* theCallback);
56
+    HRESULT GetBufferedVideoFrameCount ([out] unsigned int* bufferedFrameCount);
57
+
58
+    /* Audio Output */
59
+
60
+    HRESULT EnableAudioOutput ([in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned int channelCount, [in] BMDAudioOutputStreamType streamType);
61
+    HRESULT DisableAudioOutput (void);
62
+    HRESULT WriteAudioSamplesSync ([in] void* buffer, [in] unsigned int sampleFrameCount, [out] unsigned int* sampleFramesWritten);
63
+    HRESULT BeginAudioPreroll (void);
64
+    HRESULT EndAudioPreroll (void);
65
+    HRESULT ScheduleAudioSamples ([in] void* buffer, [in] unsigned int sampleFrameCount, [in] BMDTimeValue streamTime, [in] BMDTimeScale timeScale, [out] unsigned int* sampleFramesWritten);
66
+    HRESULT GetBufferedAudioSampleFrameCount ([out] unsigned int* bufferedSampleFrameCount);
67
+    HRESULT FlushBufferedAudioSamples (void);
68
+    HRESULT SetAudioCallback ([in] IDeckLinkAudioOutputCallback* theCallback);
69
+
70
+    /* Output Control */
71
+
72
+    HRESULT StartScheduledPlayback ([in] BMDTimeValue playbackStartTime, [in] BMDTimeScale timeScale, [in] double playbackSpeed);
73
+    HRESULT StopScheduledPlayback ([in] BMDTimeValue stopPlaybackAtTime, [out] BMDTimeValue* actualStopTime, [in] BMDTimeScale timeScale);
74
+    HRESULT IsScheduledPlaybackRunning ([out] BOOL* active);
75
+    HRESULT GetScheduledStreamTime ([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue* streamTime, [out] double* playbackSpeed);
76
+    HRESULT GetReferenceStatus ([out] BMDReferenceStatus* referenceStatus);
77
+
78
+    /* Hardware Timing */
79
+
80
+    HRESULT GetHardwareReferenceClock ([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue* hardwareTime, [out] BMDTimeValue* timeInFrame, [out] BMDTimeValue* ticksPerFrame);
81
+    HRESULT GetFrameCompletionReferenceTimestamp ([in] IDeckLinkVideoFrame* theFrame, [in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue* frameCompletionTimestamp);
82
+};
83
+
84
+/* Interface IDeckLinkInput_v11_4 - Created by QueryInterface from IDeckLink. */
85
+
86
+[
87
+    object,
88
+    uuid(2A88CF76-F494-4216-A7EF-DC74EEB83882),
89
+    helpstring("Created by QueryInterface from IDeckLink.")
90
+] interface IDeckLinkInput_v11_4 : IUnknown
91
+{
92
+    HRESULT DoesSupportVideoMode ([in] BMDVideoConnection connection /* If a value of 0 is specified, the caller does not care about the connection */, [in] BMDDisplayMode requestedMode, [in] BMDPixelFormat requestedPixelFormat, [in] BMDSupportedVideoModeFlags flags, [out] BOOL* supported);
93
+    HRESULT GetDisplayMode ([in] BMDDisplayMode displayMode, [out] IDeckLinkDisplayMode** resultDisplayMode);
94
+    HRESULT GetDisplayModeIterator ([out] IDeckLinkDisplayModeIterator** iterator);
95
+    HRESULT SetScreenPreviewCallback ([in] IDeckLinkScreenPreviewCallback* previewCallback);
96
+
97
+    /* Video Input */
98
+
99
+    HRESULT EnableVideoInput ([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoInputFlags flags);
100
+    HRESULT DisableVideoInput (void);
101
+    HRESULT GetAvailableVideoFrameCount ([out] unsigned int* availableFrameCount);
102
+    HRESULT SetVideoInputFrameMemoryAllocator ([in] IDeckLinkMemoryAllocator* theAllocator);
103
+
104
+    /* Audio Input */
105
+
106
+    HRESULT EnableAudioInput ([in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned int channelCount);
107
+    HRESULT DisableAudioInput (void);
108
+    HRESULT GetAvailableAudioSampleFrameCount ([out] unsigned int* availableSampleFrameCount);
109
+
110
+    /* Input Control */
111
+
112
+    HRESULT StartStreams (void);
113
+    HRESULT StopStreams (void);
114
+    HRESULT PauseStreams (void);
115
+    HRESULT FlushStreams (void);
116
+    HRESULT SetCallback ([in] IDeckLinkInputCallback* theCallback);
117
+
118
+    /* Hardware Timing */
119
+
120
+    HRESULT GetHardwareReferenceClock ([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue* hardwareTime, [out] BMDTimeValue* timeInFrame, [out] BMDTimeValue* ticksPerFrame);
121
+};
122
obs-studio-26.1.0.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v11_5.idl Added
101
 
1
@@ -0,0 +1,99 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2020 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+** 
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+** 
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+/* DeckLinkAPI_v11_5.idl */
30
+
31
+typedef [v1_enum] enum _BMDDeckLinkFrameMetadataID_v11_5 {
32
+    bmdDeckLinkFrameMetadataCintelFilmType_v11_5                       = /* 'cfty' */ 0x63667479,  // Current film type
33
+    bmdDeckLinkFrameMetadataCintelFilmGauge_v11_5                      = /* 'cfga' */ 0x63666761,  // Current film gauge
34
+    bmdDeckLinkFrameMetadataCintelKeykodeLow_v11_5                     = /* 'ckkl' */ 0x636B6B6C,  // Raw keykode value - low 64 bits
35
+    bmdDeckLinkFrameMetadataCintelKeykodeHigh_v11_5                    = /* 'ckkh' */ 0x636B6B68,  // Raw keykode value - high 64 bits
36
+    bmdDeckLinkFrameMetadataCintelTile1Size_v11_5                      = /* 'ct1s' */ 0x63743173,  // Size in bytes of compressed raw tile 1
37
+    bmdDeckLinkFrameMetadataCintelTile2Size_v11_5                      = /* 'ct2s' */ 0x63743273,  // Size in bytes of compressed raw tile 2
38
+    bmdDeckLinkFrameMetadataCintelTile3Size_v11_5                      = /* 'ct3s' */ 0x63743373,  // Size in bytes of compressed raw tile 3
39
+    bmdDeckLinkFrameMetadataCintelTile4Size_v11_5                      = /* 'ct4s' */ 0x63743473,  // Size in bytes of compressed raw tile 4
40
+    bmdDeckLinkFrameMetadataCintelImageWidth_v11_5                     = /* 'IWPx' */ 0x49575078,  // Width in pixels of image
41
+    bmdDeckLinkFrameMetadataCintelImageHeight_v11_5                    = /* 'IHPx' */ 0x49485078,  // Height in pixels of image
42
+    bmdDeckLinkFrameMetadataCintelLinearMaskingRedInRed_v11_5          = /* 'mrir' */ 0x6D726972,  // Red in red linear masking parameter
43
+    bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInRed_v11_5        = /* 'mgir' */ 0x6D676972,  // Green in red linear masking parameter
44
+    bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInRed_v11_5         = /* 'mbir' */ 0x6D626972,  // Blue in red linear masking parameter
45
+    bmdDeckLinkFrameMetadataCintelLinearMaskingRedInGreen_v11_5        = /* 'mrig' */ 0x6D726967,  // Red in green linear masking parameter
46
+    bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInGreen_v11_5      = /* 'mgig' */ 0x6D676967,  // Green in green linear masking parameter
47
+    bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInGreen_v11_5       = /* 'mbig' */ 0x6D626967,  // Blue in green linear masking parameter
48
+    bmdDeckLinkFrameMetadataCintelLinearMaskingRedInBlue_v11_5         = /* 'mrib' */ 0x6D726962,  // Red in blue linear masking parameter
49
+    bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInBlue_v11_5       = /* 'mgib' */ 0x6D676962,  // Green in blue linear masking parameter
50
+    bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInBlue_v11_5        = /* 'mbib' */ 0x6D626962,  // Blue in blue linear masking parameter
51
+    bmdDeckLinkFrameMetadataCintelLogMaskingRedInRed_v11_5             = /* 'mlrr' */ 0x6D6C7272,  // Red in red log masking parameter
52
+    bmdDeckLinkFrameMetadataCintelLogMaskingGreenInRed_v11_5           = /* 'mlgr' */ 0x6D6C6772,  // Green in red log masking parameter
53
+    bmdDeckLinkFrameMetadataCintelLogMaskingBlueInRed_v11_5            = /* 'mlbr' */ 0x6D6C6272,  // Blue in red log masking parameter
54
+    bmdDeckLinkFrameMetadataCintelLogMaskingRedInGreen_v11_5           = /* 'mlrg' */ 0x6D6C7267,  // Red in green log masking parameter
55
+    bmdDeckLinkFrameMetadataCintelLogMaskingGreenInGreen_v11_5         = /* 'mlgg' */ 0x6D6C6767,  // Green in green log masking parameter
56
+    bmdDeckLinkFrameMetadataCintelLogMaskingBlueInGreen_v11_5          = /* 'mlbg' */ 0x6D6C6267,  // Blue in green log masking parameter
57
+    bmdDeckLinkFrameMetadataCintelLogMaskingRedInBlue_v11_5            = /* 'mlrb' */ 0x6D6C7262,  // Red in blue log masking parameter
58
+    bmdDeckLinkFrameMetadataCintelLogMaskingGreenInBlue_v11_5          = /* 'mlgb' */ 0x6D6C6762,  // Green in blue log masking parameter
59
+    bmdDeckLinkFrameMetadataCintelLogMaskingBlueInBlue_v11_5           = /* 'mlbb' */ 0x6D6C6262,  // Blue in blue log masking parameter
60
+    bmdDeckLinkFrameMetadataCintelFilmFrameRate_v11_5                  = /* 'cffr' */ 0x63666672,  // Film frame rate
61
+    bmdDeckLinkFrameMetadataCintelOffsetToApplyHorizontal_v11_5        = /* 'otah' */ 0x6F746168,  // Horizontal offset (pixels) to be applied to image
62
+    bmdDeckLinkFrameMetadataCintelOffsetToApplyVertical_v11_5          = /* 'otav' */ 0x6F746176,  // Vertical offset (pixels) to be applied to image
63
+    bmdDeckLinkFrameMetadataCintelGainRed_v11_5                        = /* 'LfRd' */ 0x4C665264,  // Red gain parameter to apply after log
64
+    bmdDeckLinkFrameMetadataCintelGainGreen_v11_5                      = /* 'LfGr' */ 0x4C664772,  // Green gain parameter to apply after log
65
+    bmdDeckLinkFrameMetadataCintelGainBlue_v11_5                       = /* 'LfBl' */ 0x4C66426C,  // Blue gain parameter to apply after log
66
+    bmdDeckLinkFrameMetadataCintelLiftRed_v11_5                        = /* 'GnRd' */ 0x476E5264,  // Red lift parameter to apply after log and gain
67
+    bmdDeckLinkFrameMetadataCintelLiftGreen_v11_5                      = /* 'GnGr' */ 0x476E4772,  // Green lift parameter to apply after log and gain
68
+    bmdDeckLinkFrameMetadataCintelLiftBlue_v11_5                       = /* 'GnBl' */ 0x476E426C,  // Blue lift parameter to apply after log and gain
69
+    bmdDeckLinkFrameMetadataCintelHDRGainRed_v11_5                     = /* 'HGRd' */ 0x48475264,  // Red gain parameter to apply to linear data for HDR Combination
70
+    bmdDeckLinkFrameMetadataCintelHDRGainGreen_v11_5                   = /* 'HGGr' */ 0x48474772,  // Green gain parameter to apply to linear data for HDR Combination
71
+    bmdDeckLinkFrameMetadataCintelHDRGainBlue_v11_5                    = /* 'HGBl' */ 0x4847426C,  // Blue gain parameter to apply to linear data for HDR Combination
72
+   bmdDeckLinkFrameMetadataCintel16mmCropRequired_v11_5               = /* 'c16c' */ 0x63313663,   // The image should be cropped to 16mm size
73
+    bmdDeckLinkFrameMetadataCintelInversionRequired_v11_5              = /* 'cinv' */ 0x63696E76,  // The image should be colour inverted
74
+    bmdDeckLinkFrameMetadataCintelFlipRequired_v11_5                   = /* 'cflr' */ 0x63666C72,  // The image should be flipped horizontally
75
+    bmdDeckLinkFrameMetadataCintelFocusAssistEnabled_v11_5             = /* 'cfae' */ 0x63666165,  // Focus Assist is currently enabled
76
+    bmdDeckLinkFrameMetadataCintelKeykodeIsInterpolated_v11_5          = /* 'kkii' */ 0x6B6B6969   // The keykode for this frame is interpolated from nearby keykodes
77
+} BMDDeckLinkFrameMetadataID_v11_5;
78
+
79
+// Forward Declarations
80
+
81
+interface IDeckLinkVideoFrameMetadataExtensions_v11_5;
82
+
83
+/* Interface IDeckLinkVideoFrameMetadataExtensions_v11_5 - Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDMI HDR information */
84
+
85
+[
86
+    object,
87
+    uuid(D5973DC9-6432-46D0-8F0B-2496F8A1238F),
88
+    local, 
89
+    helpstring("Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDMI HDR information")
90
+] interface IDeckLinkVideoFrameMetadataExtensions_v11_5 : IUnknown
91
+{
92
+    HRESULT GetInt([in] BMDDeckLinkFrameMetadataID_v11_5 metadataID, [out] LONGLONG *value);
93
+    HRESULT GetFloat([in] BMDDeckLinkFrameMetadataID_v11_5 metadataID, [out] double *value);
94
+    HRESULT GetFlag([in] BMDDeckLinkFrameMetadataID_v11_5 metadataID, [out] BOOL* value);
95
+    HRESULT GetString([in] BMDDeckLinkFrameMetadataID_v11_5 metadataID, [out] BSTR *value);
96
+};
97
+
98
+/* Coclasses */
99
+
100
+importlib("stdole2.tlb");
101
obs-studio-26.1.0.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v11_5_1.idl Added
93
 
1
@@ -0,0 +1,90 @@
2
+/* -LICENSE-START-
3
+** Copyright (c) 2020 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+** 
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+** 
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+/* DeckLinkAPI_v11_5_1.idl */
29
+
30
+// Enumeration Mapping
31
+
32
+/* Enum BMDDeckLinkStatusID - DeckLink Status ID */
33
+
34
+typedef [v1_enum] enum _BMDDeckLinkStatusID_v11_5_1 {
35
+
36
+    /* Video output flags */
37
+
38
+    bmdDeckLinkStatusDetectedVideoInputFlags_v11_5_1                     = /* 'dvif' */ 0x64766966,
39
+
40
+} BMDDeckLinkStatusID_v11_5_1;
41
+
42
+/* Interface IDeckLinkInputCallback_v11_5_1 - Frame arrival callback. */
43
+
44
+[
45
+    object,
46
+    uuid(DD04E5EC-7415-42AB-AE4A-E80C4DFC044A),
47
+    helpstring("Frame arrival callback.")
48
+] interface IDeckLinkInputCallback_v11_5_1 : IUnknown
49
+{
50
+    HRESULT VideoInputFormatChanged ([in] BMDVideoInputFormatChangedEvents notificationEvents, [in] IDeckLinkDisplayMode* newDisplayMode, [in] BMDDetectedVideoInputFormatFlags detectedSignalFlags);
51
+    HRESULT VideoInputFrameArrived ([in] IDeckLinkVideoInputFrame* videoFrame, [in] IDeckLinkAudioInputPacket* audioPacket);
52
+};
53
+
54
+/* Interface IDeckLinkInput_v11_5_1 - Created by QueryInterface from IDeckLink. */
55
+
56
+[
57
+    object,
58
+    uuid(9434C6E4-B15D-4B1C-979E-661E3DDCB4B9),
59
+    helpstring("Created by QueryInterface from IDeckLink.")
60
+] interface IDeckLinkInput_v11_5_1 : IUnknown
61
+{
62
+    HRESULT DoesSupportVideoMode ([in] BMDVideoConnection connection /* If a value of bmdVideoConnectionUnspecified is specified, the caller does not care about the connection */, [in] BMDDisplayMode requestedMode, [in] BMDPixelFormat requestedPixelFormat, [in] BMDVideoInputConversionMode conversionMode, [in] BMDSupportedVideoModeFlags flags, [out] BMDDisplayMode* actualMode, [out] BOOL* supported);
63
+    HRESULT GetDisplayMode ([in] BMDDisplayMode displayMode, [out] IDeckLinkDisplayMode** resultDisplayMode);
64
+    HRESULT GetDisplayModeIterator ([out] IDeckLinkDisplayModeIterator** iterator);
65
+    HRESULT SetScreenPreviewCallback ([in] IDeckLinkScreenPreviewCallback* previewCallback);
66
+
67
+    /* Video Input */
68
+
69
+    HRESULT EnableVideoInput ([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoInputFlags flags);
70
+    HRESULT DisableVideoInput (void);
71
+    HRESULT GetAvailableVideoFrameCount ([out] unsigned int* availableFrameCount);
72
+    HRESULT SetVideoInputFrameMemoryAllocator ([in] IDeckLinkMemoryAllocator* theAllocator);
73
+
74
+    /* Audio Input */
75
+
76
+    HRESULT EnableAudioInput ([in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned int channelCount);
77
+    HRESULT DisableAudioInput (void);
78
+    HRESULT GetAvailableAudioSampleFrameCount ([out] unsigned int* availableSampleFrameCount);
79
+
80
+    /* Input Control */
81
+
82
+    HRESULT StartStreams (void);
83
+    HRESULT StopStreams (void);
84
+    HRESULT PauseStreams (void);
85
+    HRESULT FlushStreams (void);
86
+    HRESULT SetCallback ([in] IDeckLinkInputCallback_v11_5_1* theCallback);
87
+
88
+    /* Hardware Timing */
89
+
90
+    HRESULT GetHardwareReferenceClock ([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue* hardwareTime, [out] BMDTimeValue* timeInFrame, [out] BMDTimeValue* ticksPerFrame);
91
+};
92
\ No newline at end of file
93
obs-studio-26.0.2.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v7_1.idl -> obs-studio-26.1.0.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v7_1.idl Changed
19
 
1
@@ -70,7 +70,7 @@
2
      helpstring("IDeckLinkOutput_v7_1.  Created by QueryInterface from IDeckLink.")]
3
     interface IDeckLinkOutput_v7_1 : IUnknown
4
     {
5
-       HRESULT     DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport *result);
6
+       HRESULT     DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport_v10_11 *result);
7
        HRESULT     GetDisplayModeIterator ([out] IDeckLinkDisplayModeIterator_v7_1 **iterator);
8
        
9
        // Video output
10
@@ -110,7 +110,7 @@
11
      helpstring("IDeckLinkInput_v7_1.  Created by QueryInterface from IDeckLink.")]
12
     interface IDeckLinkInput_v7_1 : IUnknown
13
     {
14
-       HRESULT     DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport *result);
15
+       HRESULT     DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport_v10_11 *result);
16
        HRESULT     GetDisplayModeIterator ([out] IDeckLinkDisplayModeIterator_v7_1 **iterator);
17
        
18
        // Video input
19
obs-studio-26.0.2.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v7_3.idl -> obs-studio-26.1.0.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v7_3.idl Changed
19
 
1
@@ -59,7 +59,7 @@
2
     helpstring("Created by QueryInterface from IDeckLink.")
3
 ] interface IDeckLinkOutput_v7_3 : IUnknown
4
 {
5
-    HRESULT DoesSupportVideoMode(BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport *result);
6
+   HRESULT DoesSupportVideoMode(BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport_v10_11 *result);
7
     HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator_v7_6 **iterator);
8
 
9
     HRESULT SetScreenPreviewCallback([in] IDeckLinkScreenPreviewCallback *previewCallback);
10
@@ -112,7 +112,7 @@
11
     helpstring("Created by QueryInterface from IDeckLink.")
12
 ] interface IDeckLinkInput_v7_3 : IUnknown
13
 {
14
-    HRESULT DoesSupportVideoMode(BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport *result);
15
+   HRESULT DoesSupportVideoMode(BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport_v10_11 *result);
16
     HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator_v7_6 **iterator);
17
 
18
     HRESULT SetScreenPreviewCallback([in] IDeckLinkScreenPreviewCallback *previewCallback);
19
obs-studio-26.0.2.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v7_6.idl -> obs-studio-26.1.0.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v7_6.idl Changed
19
 
1
@@ -118,7 +118,7 @@
2
     helpstring("Created by QueryInterface from IDeckLink.")
3
 ] interface IDeckLinkOutput_v7_6 : IUnknown
4
 {
5
-    HRESULT DoesSupportVideoMode(BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport *result);
6
+   HRESULT DoesSupportVideoMode(BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport_v10_11 *result);
7
     HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator_v7_6 **iterator);
8
 
9
     HRESULT SetScreenPreviewCallback([in] IDeckLinkScreenPreviewCallback_v7_6 *previewCallback);
10
@@ -174,7 +174,7 @@
11
     helpstring("Created by QueryInterface from IDeckLink.")
12
 ] interface IDeckLinkInput_v7_6 : IUnknown
13
 {
14
-    HRESULT DoesSupportVideoMode(BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport *result);
15
+   HRESULT DoesSupportVideoMode(BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport_v10_11 *result);
16
     HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator_v7_6 **iterator);
17
 
18
     HRESULT SetScreenPreviewCallback([in] IDeckLinkScreenPreviewCallback_v7_6 *previewCallback);
19
obs-studio-26.0.2.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v9_2.idl -> obs-studio-26.1.0.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v9_2.idl Changed
10
 
1
@@ -36,7 +36,7 @@
2
     helpstring("Created by QueryInterface from IDeckLink.")
3
 ] interface IDeckLinkInput_v9_2 : IUnknown
4
 {
5
-    HRESULT DoesSupportVideoMode([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoInputFlags flags, [out] BMDDisplayModeSupport *result, [out] IDeckLinkDisplayMode **resultDisplayMode);
6
+   HRESULT DoesSupportVideoMode([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoInputFlags flags, [out] BMDDisplayModeSupport_v10_11 *result, [out] IDeckLinkDisplayMode **resultDisplayMode);
7
     HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator **iterator);
8
 
9
     HRESULT SetScreenPreviewCallback([in] IDeckLinkScreenPreviewCallback *previewCallback);
10
obs-studio-26.0.2.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v9_9.idl -> obs-studio-26.1.0.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v9_9.idl Changed
10
 
1
@@ -37,7 +37,7 @@
2
     helpstring("Created by QueryInterface from IDeckLink.")
3
 ] interface IDeckLinkOutput_v9_9 : IUnknown
4
 {
5
-    HRESULT DoesSupportVideoMode([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoOutputFlags flags, [out] BMDDisplayModeSupport *result, [out] IDeckLinkDisplayMode **resultDisplayMode);
6
+   HRESULT DoesSupportVideoMode([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoOutputFlags flags, [out] BMDDisplayModeSupport_v10_11 *result, [out] IDeckLinkDisplayMode **resultDisplayMode);
7
     HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator **iterator);
8
 
9
     HRESULT SetScreenPreviewCallback([in] IDeckLinkScreenPreviewCallback *previewCallback);
10
obs-studio-26.0.2.tar.xz/plugins/decklink/win/platform.cpp -> obs-studio-26.1.0.tar.xz/plugins/decklink/win/platform.cpp Changed
18
 
1
@@ -20,6 +20,16 @@
2
    return result == S_OK ? iterator : nullptr;
3
 }
4
 
5
+IDeckLinkVideoConversion *CreateVideoConversionInstance(void)
6
+{
7
+   IDeckLinkVideoConversion *conversion;
8
+   const HRESULT result = CoCreateInstance(CLSID_CDeckLinkVideoConversion,
9
+                       nullptr, CLSCTX_ALL,
10
+                       IID_IDeckLinkVideoConversion,
11
+                       (void **)&conversion);
12
+   return result == S_OK ? conversion : nullptr;
13
+}
14
+
15
 bool DeckLinkStringToStdString(decklink_string_t input, std::string &output)
16
 {
17
    if (input == nullptr)
18
obs-studio-26.0.2.tar.xz/plugins/enc-amf/source/amf-encoder-h264.cpp -> obs-studio-26.1.0.tar.xz/plugins/enc-amf/source/amf-encoder-h264.cpp Changed
93
 
1
@@ -67,7 +67,12 @@
2
 
3
    std::vector<Usage> ret;
4
    for (const amf::AMFEnumDescriptionEntry* enm = var->pEnumDescription; enm->name != nullptr; enm++) {
5
-       ret.push_back(Utility::UsageFromAMFH264((AMF_VIDEO_ENCODER_USAGE_ENUM)enm->value));
6
+       try {
7
+           ret.push_back(Utility::UsageFromAMFH264((AMF_VIDEO_ENCODER_USAGE_ENUM)enm->value));
8
+       } catch (...) {
9
+           // ignore unknown enum entries
10
+       }
11
+
12
    }
13
    return ret;
14
 }
15
@@ -108,7 +113,11 @@
16
 
17
    std::vector<QualityPreset> ret;
18
    for (const amf::AMFEnumDescriptionEntry* enm = var->pEnumDescription; enm->name != nullptr; enm++) {
19
-       ret.push_back(Utility::QualityPresetFromAMFH264((AMF_VIDEO_ENCODER_QUALITY_PRESET_ENUM)enm->value));
20
+       try {
21
+           ret.push_back(Utility::QualityPresetFromAMFH264((AMF_VIDEO_ENCODER_QUALITY_PRESET_ENUM)enm->value));
22
+       } catch (...) {
23
+           // ignore unknown enum entries
24
+       }
25
    }
26
    return ret;
27
 }
28
@@ -150,7 +159,11 @@
29
 
30
    std::vector<Profile> ret;
31
    for (const amf::AMFEnumDescriptionEntry* enm = var->pEnumDescription; enm->name != nullptr; enm++) {
32
-       ret.push_back(Utility::ProfileFromAMFH264((AMF_VIDEO_ENCODER_PROFILE_ENUM)enm->value));
33
+       try {
34
+           ret.push_back(Utility::ProfileFromAMFH264((AMF_VIDEO_ENCODER_PROFILE_ENUM)enm->value));
35
+       } catch (...) {
36
+           // ignore unknown enum entries
37
+       }
38
    }
39
    return ret;
40
 }
41
@@ -191,7 +204,11 @@
42
 
43
    std::vector<ProfileLevel> ret;
44
    for (const amf::AMFEnumDescriptionEntry* enm = var->pEnumDescription; enm->name != nullptr; enm++) {
45
-       ret.push_back((ProfileLevel)enm->value);
46
+       try {
47
+           ret.push_back((ProfileLevel)enm->value);
48
+       } catch (...) {
49
+           // ignore unknown enum entries
50
+       }
51
    }
52
    return ret;
53
 }
54
@@ -380,7 +397,11 @@
55
 
56
    std::vector<CodingType> ret;
57
    for (const amf::AMFEnumDescriptionEntry* enm = var->pEnumDescription; enm->name != nullptr; enm++) {
58
-       ret.push_back(Utility::CodingTypeFromAMFH264((AMF_VIDEO_ENCODER_CODING_ENUM)enm->value));
59
+       try {
60
+           ret.push_back(Utility::CodingTypeFromAMFH264((AMF_VIDEO_ENCODER_CODING_ENUM)enm->value));
61
+       } catch (...) {
62
+           // ignore unknown enum entries
63
+       }
64
    }
65
    return ret;
66
 }
67
@@ -479,7 +500,11 @@
68
 
69
    std::vector<RateControlMethod> ret;
70
    for (const amf::AMFEnumDescriptionEntry* enm = var->pEnumDescription; enm->name != nullptr; enm++) {
71
-       ret.push_back(Utility::RateControlMethodFromAMFH264((AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_ENUM)enm->value));
72
+       try {
73
+           ret.push_back(Utility::RateControlMethodFromAMFH264((AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_ENUM)enm->value));
74
+       } catch (...) {
75
+           // ignore unknown enum entries
76
+       }
77
    }
78
    return ret;
79
 }
80
@@ -521,7 +546,11 @@
81
 
82
    std::vector<PrePassMode> ret;
83
    for (const amf::AMFEnumDescriptionEntry* enm = var->pEnumDescription; enm->name != nullptr; enm++) {
84
-       ret.push_back(Utility::PrePassModeFromAMFH264((AMF_VIDEO_ENCODER_PREENCODE_MODE_ENUM)enm->value));
85
+       try {
86
+           ret.push_back(Utility::PrePassModeFromAMFH264((AMF_VIDEO_ENCODER_PREENCODE_MODE_ENUM)enm->value));
87
+       } catch (...) {
88
+           // ignore unknown enum entries
89
+       }
90
    }
91
    return ret;
92
 }
93
obs-studio-26.0.2.tar.xz/plugins/enc-amf/source/amf-encoder-h265.cpp -> obs-studio-26.1.0.tar.xz/plugins/enc-amf/source/amf-encoder-h265.cpp Changed
106
 
1
@@ -58,7 +58,11 @@
2
 
3
    std::vector<Usage> ret;
4
    for (const amf::AMFEnumDescriptionEntry* enm = var->pEnumDescription; enm->name != nullptr; enm++) {
5
-       ret.push_back(Utility::UsageFromAMFH265((AMF_VIDEO_ENCODER_HEVC_USAGE_ENUM)enm->value));
6
+       try {
7
+           ret.push_back(Utility::UsageFromAMFH265((AMF_VIDEO_ENCODER_HEVC_USAGE_ENUM)enm->value));
8
+       } catch (...) {
9
+           // ignore unknown enum entries
10
+       }
11
    }
12
    return ret;
13
 }
14
@@ -99,7 +103,11 @@
15
 
16
    std::vector<QualityPreset> ret;
17
    for (const amf::AMFEnumDescriptionEntry* enm = var->pEnumDescription; enm->name != nullptr; enm++) {
18
-       ret.push_back(Utility::QualityPresetFromAMFH265((AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_ENUM)enm->value));
19
+       try {
20
+           ret.push_back(Utility::QualityPresetFromAMFH265((AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_ENUM)enm->value));
21
+       } catch (...) {
22
+           // ignore unknown enum entries
23
+       }
24
    }
25
    return ret;
26
 }
27
@@ -234,7 +242,11 @@
28
 
29
    std::vector<Profile> ret;
30
    for (const amf::AMFEnumDescriptionEntry* enm = var->pEnumDescription; enm->name != nullptr; enm++) {
31
-       ret.push_back(Utility::ProfileFromAMFH265((AMF_VIDEO_ENCODER_HEVC_PROFILE_ENUM)enm->value));
32
+       try {
33
+           ret.push_back(Utility::ProfileFromAMFH265((AMF_VIDEO_ENCODER_HEVC_PROFILE_ENUM)enm->value));
34
+       } catch (...) {
35
+           // ignore unknown enum entries
36
+       }
37
    }
38
    return ret;
39
 }
40
@@ -275,7 +287,11 @@
41
 
42
    std::vector<ProfileLevel> ret;
43
    for (const amf::AMFEnumDescriptionEntry* enm = var->pEnumDescription; enm->name != nullptr; enm++) {
44
-       ret.push_back((ProfileLevel)(enm->value / 3));
45
+       try {
46
+           ret.push_back((ProfileLevel)(enm->value / 3));
47
+       } catch (...) {
48
+           // ignore unknown enum entries
49
+       }
50
    }
51
    return ret;
52
 }
53
@@ -337,7 +353,11 @@
54
 
55
    std::vector<H265::Tier> ret;
56
    for (const amf::AMFEnumDescriptionEntry* enm = var->pEnumDescription; enm->name != nullptr; enm++) {
57
-       ret.push_back(Utility::TierFromAMFH265((AMF_VIDEO_ENCODER_HEVC_TIER_ENUM)enm->value));
58
+       try {
59
+           ret.push_back(Utility::TierFromAMFH265((AMF_VIDEO_ENCODER_HEVC_TIER_ENUM)enm->value));
60
+       } catch (...) {
61
+           // ignore unknown enum entries
62
+       }
63
    }
64
    return ret;
65
 }
66
@@ -413,7 +433,11 @@
67
 
68
    std::vector<CodingType> ret;
69
    for (const amf::AMFEnumDescriptionEntry* enm = var->pEnumDescription; enm->name != nullptr; enm++) {
70
-       ret.push_back(Utility::CodingTypeFromAMFH265((AMF_VIDEO_ENCODER_CODING_ENUM)enm->value));
71
+       try {
72
+           ret.push_back(Utility::CodingTypeFromAMFH265((AMF_VIDEO_ENCODER_CODING_ENUM)enm->value));
73
+       } catch (...) {
74
+           // ignore unknown enum entries
75
+       }
76
    }
77
    return ret;
78
 }
79
@@ -490,8 +514,12 @@
80
 
81
    std::vector<RateControlMethod> ret;
82
    for (const amf::AMFEnumDescriptionEntry* enm = var->pEnumDescription; enm->name != nullptr; enm++) {
83
-       ret.push_back(
84
+       try {
85
+           ret.push_back(
86
            Utility::RateControlMethodFromAMFH265((AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_ENUM)enm->value));
87
+       } catch (...) {
88
+           // ignore unknown enum entries
89
+       }
90
    }
91
    return ret;
92
 }
93
@@ -690,7 +718,11 @@
94
 
95
    std::vector<H265::GOPType> ret;
96
    for (const amf::AMFEnumDescriptionEntry* enm = var->pEnumDescription; enm->name != nullptr; enm++) {
97
-       ret.push_back(Utility::GOPTypeFromAMFH265(enm->value));
98
+       try {
99
+           ret.push_back(Utility::GOPTypeFromAMFH265(enm->value));
100
+       } catch (...) {
101
+           // ignore unknown enum entries
102
+       }
103
    }
104
    return ret;
105
 }
106
obs-studio-26.1.0.tar.xz/plugins/image-source/data/locale/az-AZ.ini Added
38
 
1
@@ -0,0 +1,36 @@
2
+ImageInput="Təsvir"
3
+File="Təsvir faylı"
4
+UnloadWhenNotShowing="Göstərilməyəndə təsviri çıxart"
5
+
6
+SlideShow="Təsvir Slayd Şousu"
7
+SlideShow.TransitionSpeed="Keçid sürəti (millisaniyə)"
8
+SlideShow.SlideTime="Slaydlar arası vaxt (millisaniyə)"
9
+SlideShow.Files="Təsvir faylları"
10
+SlideShow.CustomSize="Məhdudlaşdırıcı ölçü/Əmsal nisbəti"
11
+SlideShow.CustomSize.Auto="Avtomatik"
12
+SlideShow.Randomize="Təsadüfi göstərmə"
13
+SlideShow.Loop="Dövr"
14
+SlideShow.Transition="Keçid"
15
+SlideShow.Transition.Cut="Kəs"
16
+SlideShow.Transition.Fade="Solma"
17
+SlideShow.Transition.Swipe="Swipe"
18
+SlideShow.Transition.Slide="Slide"
19
+SlideShow.PlaybackBehavior="Görünmə Davranışı"
20
+SlideShow.PlaybackBehavior.StopRestart="Görünməyəndə dayandır, görünəndə yenidən başlat"
21
+SlideShow.PlaybackBehavior.PauseUnpause="Görünməyəndə fasilə ver, görünəndə oynat"
22
+SlideShow.PlaybackBehavior.AlwaysPlay="Görünməyəndə belə həmişə oynat"
23
+SlideShow.SlideMode="Slayd rejimi"
24
+SlideShow.SlideMode.Auto="Avtomatik"
25
+SlideShow.SlideMode.Manual="Əllə (slayd şouya nəzarət etmək üçün qısayol düymələrini istifadə et)"
26
+SlideShow.PlayPause="Oynat/Fasilə ver"
27
+SlideShow.Restart="Yenidən başlat"
28
+SlideShow.Stop="Dayandır"
29
+SlideShow.NextSlide="Növbəti slayd"
30
+SlideShow.PreviousSlide="Əvvəlki slayd"
31
+SlideShow.HideWhenDone="Slayd şou hazır olanda gizlət"
32
+
33
+ColorSource="Rəng mənbəsi"
34
+ColorSource.Color="Rəng"
35
+ColorSource.Width="Eni"
36
+ColorSource.Height="Hündürlüyü"
37
+
38
obs-studio-26.0.2.tar.xz/plugins/image-source/data/locale/et-EE.ini -> obs-studio-26.1.0.tar.xz/plugins/image-source/data/locale/et-EE.ini Changed
18
 
1
@@ -14,9 +14,16 @@
2
 SlideShow.Transition.Fade="Hajuv"
3
 SlideShow.Transition.Swipe="Pühkiv"
4
 SlideShow.Transition.Slide="Sisselendav"
5
+SlideShow.PlaybackBehavior="Nähtav käitumine"
6
+SlideShow.PlaybackBehavior.StopRestart="Lõpeta kui nähtamatu, alusta uuesti kui nähtav"
7
+SlideShow.PlaybackBehavior.PauseUnpause="Peata kui nähtamatu, jätka kui nähtav"
8
 SlideShow.PlaybackBehavior.AlwaysPlay="Mängi alati, isegi siis kui pole nähtav"
9
 SlideShow.SlideMode.Auto="Automaatne"
10
 SlideShow.PlayPause="Esita/Peata"
11
+SlideShow.Restart="Taaskäivita"
12
+SlideShow.Stop="Lõpeta"
13
+SlideShow.NextSlide="Järgmine slaid"
14
+SlideShow.PreviousSlide="Eelmine slaid"
15
 
16
 ColorSource="Värvi allikas"
17
 ColorSource.Color="Värv"
18
obs-studio-26.0.2.tar.xz/plugins/image-source/data/locale/fa-IR.ini -> obs-studio-26.1.0.tar.xz/plugins/image-source/data/locale/fa-IR.ini Changed
20
 
1
@@ -6,6 +6,7 @@
2
 SlideShow.TransitionSpeed="سرعت انتقال (میلی ثانیه)"
3
 SlideShow.SlideTime="زمان بین اسلاید (میلی ثانیه)"
4
 SlideShow.Files="پوشه تصاویر"
5
+SlideShow.CustomSize="نسبت اندازه/نسبت ابعاد"
6
 SlideShow.CustomSize.Auto="خودکار"
7
 SlideShow.Randomize="پخش تصادفی"
8
 SlideShow.Loop="چرخه"
9
@@ -17,8 +18,10 @@
10
 SlideShow.PlaybackBehavior="کنش های دیداری"
11
 SlideShow.PlaybackBehavior.StopRestart="توقف زمانی که قابل مشاهده نیست، راه اندازی مجدد زمانی که قابل مشاهده است"
12
 SlideShow.PlaybackBehavior.PauseUnpause="توقف زمانی که قابل مشاهده نیست، راه اندازی مجدد زمانی که قابل مشاهده است"
13
+SlideShow.PlaybackBehavior.AlwaysPlay="همیشه حتی وقتی دیده نمی شود اجرا کنید"
14
 SlideShow.SlideMode="حالت اسلاید"
15
 SlideShow.SlideMode.Auto="خودکار"
16
+SlideShow.SlideMode.Manual="دستی (از کلیدهای میانبر برای کنترل نمایش اسلاید استفاده کنید)"
17
 SlideShow.PlayPause="پخش/توقف"
18
 SlideShow.Restart="راه اندازی مجدد"
19
 SlideShow.Stop="توقف"
20
obs-studio-26.0.2.tar.xz/plugins/image-source/data/locale/he-IL.ini -> obs-studio-26.1.0.tar.xz/plugins/image-source/data/locale/he-IL.ini Changed
21
 
1
@@ -6,15 +6,19 @@
2
 SlideShow.TransitionSpeed="מהירות מעבר (אלפיות שניה)"
3
 SlideShow.SlideTime="זמן בין שקופיות (אלפיות שניה)"
4
 SlideShow.Files="קבצי תמונה"
5
+SlideShow.CustomSize="גודל הצמדה\יחס גובה-רוחב"
6
 SlideShow.CustomSize.Auto="אוטומטי"
7
 SlideShow.Randomize="סדר נגינה אקראי"
8
+SlideShow.Loop="לולאה"
9
 SlideShow.Transition="מעבר"
10
 SlideShow.Transition.Cut="חתוך"
11
 SlideShow.Transition.Fade="עמעום"
12
 SlideShow.Transition.Swipe="החלקה"
13
 SlideShow.Transition.Slide="הסט"
14
 SlideShow.PlaybackBehavior="התנהגות ניראות"
15
+SlideShow.PlaybackBehavior.StopRestart="עצור כאשר אינו נראה, התחל מחדש כאשר נראה"
16
 SlideShow.PlaybackBehavior.PauseUnpause="השהה כאשר אינו נראה, בטל השהייה כאשר נראה"
17
+SlideShow.PlaybackBehavior.AlwaysPlay="נגן תמיד גם כאשר לא נראה"
18
 SlideShow.SlideMode="מצב שקופית"
19
 SlideShow.SlideMode.Auto="אוטומטי"
20
 SlideShow.SlideMode.Manual="ידני (שימוש במקשים חמים לשליטה בהצגת השקופיות)"
21
obs-studio-26.1.0.tar.xz/plugins/image-source/data/locale/kab-KAB.ini Added
38
 
1
@@ -0,0 +1,36 @@
2
+ImageInput="Tugna"
3
+File="Afaylu n tugna"
4
+UnloadWhenNotShowing="Sefsex tugna ticki ur tettwabeqqeḍ ara"
5
+
6
+SlideShow="Askan n tmaccagin n tugna"
7
+SlideShow.TransitionSpeed="Arured n usaka (militasint)"
8
+SlideShow.SlideTime="Akud gar tmaccagin(militasint)"
9
+SlideShow.Files="Ifuyla n tugna"
10
+SlideShow.CustomSize="Tiddi n ugrar/Assaɣ n tmeẓri"
11
+SlideShow.CustomSize.Auto="Awurman"
12
+SlideShow.Randomize="Taɣuri tagacurant"
13
+SlideShow.Loop="Tineddict"
14
+SlideShow.Transition="Asaka"
15
+SlideShow.Transition.Cut="Gzem"
16
+SlideShow.Transition.Fade="Tifsit"
17
+SlideShow.Transition.Swipe="Seḥluceg"
18
+SlideShow.Transition.Slide="Tamaccagt"
19
+SlideShow.PlaybackBehavior="Tikli n twalit"
20
+SlideShow.PlaybackBehavior.StopRestart="Ḥbes ticki ur yettban ara, ales asekker ticki yettban"
21
+SlideShow.PlaybackBehavior.PauseUnpause="Bedd ticki ur yettban ara, kemmel ticki yettban"
22
+SlideShow.PlaybackBehavior.AlwaysPlay="Ad itteddu yalas ɣas ma ur yettban ara"
23
+SlideShow.SlideMode="Askar n tmaccagt"
24
+SlideShow.SlideMode.Auto="Awurman"
25
+SlideShow.SlideMode.Manual="Awfusan (Seqdec inegzumen n unasiw akken ad tsenqdeḍ askan n tmaccagin)"
26
+SlideShow.PlayPause="Ɣer/Bedd"
27
+SlideShow.Restart="Ales asekker"
28
+SlideShow.Stop="Seḥbes"
29
+SlideShow.NextSlide="Tamaccagt tuḍfirt"
30
+SlideShow.PreviousSlide="Tamaccagt tuzwirt"
31
+SlideShow.HideWhenDone="Ffer mi ara ifak uskan n tmaccagin"
32
+
33
+ColorSource="Aɣbalu n yini"
34
+ColorSource.Color="Ini"
35
+ColorSource.Width="Tehri"
36
+ColorSource.Height="Tattayt"
37
+
38
obs-studio-26.0.2.tar.xz/plugins/image-source/data/locale/pt-BR.ini -> obs-studio-26.1.0.tar.xz/plugins/image-source/data/locale/pt-BR.ini Changed
47
 
1
@@ -1,12 +1,12 @@
2
 ImageInput="Imagem"
3
-File="Arquivo de Imagem"
4
+File="Arquivo de imagem"
5
 UnloadWhenNotShowing="Descarregar imagem quando não estiver em exibição"
6
 
7
-SlideShow="Apresentação de Slides"
8
-SlideShow.TransitionSpeed="Velocidade de Transição (em milissegundos)"
9
-SlideShow.SlideTime="Tempo Entre cada Slide (em milissegundos)"
10
-SlideShow.Files="Arquivos de Imagem"
11
-SlideShow.CustomSize="Tamanho Delimitador/Proporção"
12
+SlideShow="Apresentação de imagens"
13
+SlideShow.TransitionSpeed="Velocidade da transição (em milissegundos)"
14
+SlideShow.SlideTime="Tempo entre cada slide (em milissegundos)"
15
+SlideShow.Files="Arquivos de imagem"
16
+SlideShow.CustomSize="Tamanho da tela e proporção"
17
 SlideShow.CustomSize.Auto="Automático"
18
 SlideShow.Randomize="Reprodução aleatória"
19
 SlideShow.Loop="Loop"
20
@@ -15,21 +15,21 @@
21
 SlideShow.Transition.Fade="Esmaecer"
22
 SlideShow.Transition.Swipe="Arrastar"
23
 SlideShow.Transition.Slide="Deslizar"
24
-SlideShow.PlaybackBehavior="Comportamento de Visibilidade"
25
+SlideShow.PlaybackBehavior="Comportamento de visibilidade"
26
 SlideShow.PlaybackBehavior.StopRestart="Parar quando não visível, reiniciar quando visível"
27
 SlideShow.PlaybackBehavior.PauseUnpause="Pausa quando não visível, resumir quando visível"
28
 SlideShow.PlaybackBehavior.AlwaysPlay="Sempre reproduzir, mesmo quando não visível"
29
 SlideShow.SlideMode="Modo de slide"
30
 SlideShow.SlideMode.Auto="Automático"
31
-SlideShow.SlideMode.Manual="Manual (Usar as teclas de atalho para controlar a apresentação)"
32
+SlideShow.SlideMode.Manual="Manual (usar as teclas de atalho para controlar a apresentação)"
33
 SlideShow.PlayPause="Reproduzir/Pausar"
34
 SlideShow.Restart="Reiniciar"
35
 SlideShow.Stop="Parar"
36
-SlideShow.NextSlide="Próximo Slide"
37
-SlideShow.PreviousSlide="Slide Anterior"
38
+SlideShow.NextSlide="Próximo slide"
39
+SlideShow.PreviousSlide="Slide anterior"
40
 SlideShow.HideWhenDone="Esconder quando terminar a apresentação"
41
 
42
-ColorSource="Fonte de Cor"
43
+ColorSource="Fonte de cor"
44
 ColorSource.Color="Cor"
45
 ColorSource.Width="Largura"
46
 ColorSource.Height="Altura"
47
obs-studio-26.0.2.tar.xz/plugins/image-source/data/locale/pt-PT.ini -> obs-studio-26.1.0.tar.xz/plugins/image-source/data/locale/pt-PT.ini Changed
31
 
1
@@ -6,6 +6,7 @@
2
 SlideShow.TransitionSpeed="Velocidade de transição (milissegundos)"
3
 SlideShow.SlideTime="Tempo entre Deslizes (milissegundos)"
4
 SlideShow.Files="Arquivos de Imagem"
5
+SlideShow.CustomSize="Tamanho do ecrã e proporção"
6
 SlideShow.CustomSize.Auto="Automático"
7
 SlideShow.Randomize="Reprodução aleatória"
8
 SlideShow.Loop="Loop"
9
@@ -14,15 +15,21 @@
10
 SlideShow.Transition.Fade="Desvanecer"
11
 SlideShow.Transition.Swipe="Deslizar"
12
 SlideShow.Transition.Slide="Deslize"
13
+SlideShow.PlaybackBehavior="Comportamento de visibilidade"
14
+SlideShow.PlaybackBehavior.StopRestart="Parar quando não está visível, reiniciar quando está visível"
15
+SlideShow.PlaybackBehavior.PauseUnpause="Pausar quando não está visível, retomar quando está visível"
16
 SlideShow.PlaybackBehavior.AlwaysPlay="Reproduzir sempre, mesmo quando não está visível"
17
 SlideShow.SlideMode="Modo de Slide"
18
 SlideShow.SlideMode.Auto="Automático"
19
+SlideShow.SlideMode.Manual="Manual (usar as teclas para controlar a apresentação)"
20
 SlideShow.PlayPause="Play/Pausa"
21
 SlideShow.Restart="Reiniciar"
22
 SlideShow.Stop="Stop"
23
 SlideShow.NextSlide="Próximo Slide"
24
 SlideShow.PreviousSlide="Slide Anterior"
25
+SlideShow.HideWhenDone="Ocultar quando a apresentação terminar"
26
 
27
+ColorSource="Origem de cor"
28
 ColorSource.Color="Cor"
29
 ColorSource.Width="Largura"
30
 ColorSource.Height="Altura"
31
obs-studio-26.0.2.tar.xz/plugins/image-source/data/locale/ro-RO.ini -> obs-studio-26.1.0.tar.xz/plugins/image-source/data/locale/ro-RO.ini Changed
32
 
1
@@ -6,9 +6,9 @@
2
 SlideShow.TransitionSpeed="Viteză de tranziție (milisecunde)"
3
 SlideShow.SlideTime="Timp între diapozitive (milisecunde)"
4
 SlideShow.Files="Fișiere de imagini"
5
-SlideShow.CustomSize="Dimensiunea delimitării/Raport de aspect"
6
-SlideShow.CustomSize.Auto="Automat"
7
-SlideShow.Randomize="Randomizează redarea"
8
+SlideShow.CustomSize="Dimensiunea încadrării/Raport de aspect"
9
+SlideShow.CustomSize.Auto="Automat(ă)"
10
+SlideShow.Randomize="Pune redarea într-o ordine aleatoare"
11
 SlideShow.Loop="Redă în buclă"
12
 SlideShow.Transition="Tranziție"
13
 SlideShow.Transition.Cut="Decupare"
14
@@ -17,7 +17,7 @@
15
 SlideShow.Transition.Slide="Culisare"
16
 SlideShow.PlaybackBehavior="Comportamentul vizibilității"
17
 SlideShow.PlaybackBehavior.StopRestart="Oprește când sursa nu este vizibilă, repornește când este vizibilă"
18
-SlideShow.PlaybackBehavior.PauseUnpause="Pune pe pauză când sursa nu este vizibilă, scoate de pe pauză când este vizibilă"
19
+SlideShow.PlaybackBehavior.PauseUnpause="Pune pe pauză când sursa nu e vizibilă, scoate de pe pauză când e vizibilă"
20
 SlideShow.PlaybackBehavior.AlwaysPlay="Redă întotdeauna chiar și atunci când sursa nu este vizibilă"
21
 SlideShow.SlideMode="Mod de culisare"
22
 SlideShow.SlideMode.Auto="Automat"
23
@@ -27,7 +27,7 @@
24
 SlideShow.Stop="Oprește"
25
 SlideShow.NextSlide="Diapozitivul următor"
26
 SlideShow.PreviousSlide="Diapozitivul anterior"
27
-SlideShow.HideWhenDone="Ascunde când slideshow este terminat"
28
+SlideShow.HideWhenDone="Ascunde când diaporama este terminată"
29
 
30
 ColorSource="Sursă de culoare"
31
 ColorSource.Color="Culoare"
32
obs-studio-26.0.2.tar.xz/plugins/linux-alsa/alsa-input.c -> obs-studio-26.1.0.tar.xz/plugins/linux-alsa/alsa-input.c Changed
32
 
1
@@ -440,9 +440,27 @@
2
        return false;
3
    }
4
 
5
-   data->format = SND_PCM_FORMAT_S16;
6
-   err = snd_pcm_hw_params_set_format(data->handle, hwparams,
7
-                      data->format);
8
+#define FORMAT_SIZE 4
9
+   snd_pcm_format_t formats[FORMAT_SIZE] = {SND_PCM_FORMAT_S16_LE,
10
+                        SND_PCM_FORMAT_S32_LE,
11
+                        SND_PCM_FORMAT_FLOAT_LE,
12
+                        SND_PCM_FORMAT_U8};
13
+   bool format_found = false;
14
+   for (int i = 0; i < FORMAT_SIZE; ++i) {
15
+       data->format = formats[i];
16
+       err = snd_pcm_hw_params_test_format(data->handle, hwparams,
17
+                           data->format);
18
+       if (err == 0) {
19
+           format_found = true;
20
+           break;
21
+       }
22
+   }
23
+#undef FORMAT_SIZE
24
+   if (!format_found) {
25
+       blog(LOG_ERROR, "device doesnt support any OBS formats");
26
+       return false;
27
+   }
28
+   snd_pcm_hw_params_set_format(data->handle, hwparams, data->format);
29
    if (err < 0) {
30
        blog(LOG_ERROR, "snd_pcm_hw_params_set_format failed: %s",
31
             snd_strerror(err));
32
obs-studio-26.1.0.tar.xz/plugins/linux-alsa/data/locale/az-AZ.ini Added
5
 
1
@@ -0,0 +1,3 @@
2
+AlsaInput="Səs Yaxalama Cihazı (ALSA)"
3
+Device="Cihaz"
4
+
5
obs-studio-26.1.0.tar.xz/plugins/linux-alsa/data/locale/kab-KAB.ini Added
5
 
1
@@ -0,0 +1,3 @@
2
+AlsaInput="Ibenk n tuṭṭfa n umeslaw (ALSA)"
3
+Device="Ibenk"
4
+
5
obs-studio-26.0.2.tar.xz/plugins/linux-alsa/data/locale/pt-BR.ini -> obs-studio-26.1.0.tar.xz/plugins/linux-alsa/data/locale/pt-BR.ini Changed
6
 
1
@@ -1,3 +1,3 @@
2
-AlsaInput="Dispositivo de Captura de Áudio (ALSA)"
3
+AlsaInput="Dispositivo de captura de áudio (ALSA)"
4
 Device="Dispositivo"
5
 
6
obs-studio-26.0.2.tar.xz/plugins/linux-capture/data/locale/az-AZ.ini -> obs-studio-26.1.0.tar.xz/plugins/linux-capture/data/locale/az-AZ.ini Changed
18
 
1
@@ -1,2 +1,16 @@
2
+X11SharedMemoryScreenInput="Ekran Yaxalama (XSHM)"
3
+Screen="Ekran"
4
+CaptureCursor="Kursoru Yaxala"
5
+AdvancedSettings="Qabaqcıl Tənzimləmələr"
6
 XServer="X Server"
7
+XCCapture="Pəncərə Yaxalama (Xcomposite)"
8
+Window="Pəncərə"
9
+CropTop="Üstdən Götür (piksel)"
10
+CropLeft="Soldan Götür (piksel)"
11
+CropRight="Sağdan Götür (piksel)"
12
+CropBottom="Altdan Götür (piksel)"
13
+SwapRedBlue="Qırmızı və mavini dəyişdir"
14
+LockX="Yaxalama vaxtı X serveri kilidlə"
15
+IncludeXBorder="X Çərçivəsini daxil et"
16
+ExcludeAlpha="Alfa olmana toxuma formatından istifadə edin (Mesa müvəqqəti həll)"
17
 
18
obs-studio-26.0.2.tar.xz/plugins/linux-capture/data/locale/de-DE.ini -> obs-studio-26.1.0.tar.xz/plugins/linux-capture/data/locale/de-DE.ini Changed
21
 
1
@@ -2,7 +2,7 @@
2
 Screen="Bildschirm"
3
 CaptureCursor="Mauszeiger aufnehmen"
4
 AdvancedSettings="Erweiterte Einstellungen"
5
-XServer="X‐Server"
6
+XServer="X-Server"
7
 XCCapture="Fensteraufnahme (Xcomposite)"
8
 Window="Fenster"
9
 CropTop="Oben abschneiden (Pixel)"
10
@@ -10,7 +10,7 @@
11
 CropRight="Rechts abschneiden (Pixel)"
12
 CropBottom="Unten abschneiden (Pixel)"
13
 SwapRedBlue="Rot und Blau tauschen"
14
-LockX="X‐Server während der Aufnahme sperren"
15
-IncludeXBorder="X‐Rahmen anzeigen"
16
-ExcludeAlpha="Alphaloses Texturformat verwenden (Mesa‐Problemumgehung)"
17
+LockX="X-Server während der Aufnahme sperren"
18
+IncludeXBorder="X-Rahmen anzeigen"
19
+ExcludeAlpha="Alphaloses Texturformat verwenden (Mesa-Problemumgehung)"
20
 
21
obs-studio-26.1.0.tar.xz/plugins/linux-capture/data/locale/kab-KAB.ini Added
18
 
1
@@ -0,0 +1,16 @@
2
+X11SharedMemoryScreenInput="Tuṭṭfa n ugdil (XSHM)"
3
+Screen="Agdil"
4
+CaptureCursor="Ṭṭef taḥnaccaḍt"
5
+AdvancedSettings="Iɣewwaren inaẓiyen"
6
+XServer="Aqeddac X"
7
+XCCapture="Ṭṭef asfaylu (Xcomposite)"
8
+Window="Asfaylu"
9
+CropTop="Ɣeẓ uksawen (ipikslen)"
10
+CropLeft="Ɣeẓ deg uzelmaḍ (ipikslen)"
11
+CropRight="Ɣeẓ deg uyfus (ipikslen)"
12
+CropBottom="Ɣeẓ ukessar (ipikslen)"
13
+SwapRedBlue="Semsekkel azeggaɣ akked unili"
14
+LockX="Sekkeṛ aqeddac X di tuṭṭfa"
15
+IncludeXBorder="Seddu iri X"
16
+ExcludeAlpha="Seqdec amasal n tizḍi war alfa (amselsu i Mesa)"
17
+
18
obs-studio-26.0.2.tar.xz/plugins/linux-capture/data/locale/pt-BR.ini -> obs-studio-26.1.0.tar.xz/plugins/linux-capture/data/locale/pt-BR.ini Changed
13
 
1
@@ -1,9 +1,9 @@
2
 X11SharedMemoryScreenInput="Captura de Tela (XSHM)"
3
 Screen="Tela"
4
-CaptureCursor="Capturar o Cursor"
5
+CaptureCursor="Capturar o cursor"
6
 AdvancedSettings="Configurações Avançadas"
7
 XServer="Servidor x"
8
-XCCapture="Captura de Janela (Xcomposite)"
9
+XCCapture="Captura de janela (Xcomposite)"
10
 Window="Janela"
11
 CropTop="Cortar em Cima (Pixels)"
12
 CropLeft="Cortar à Esquerda (Pixels)"
13
obs-studio-26.1.0.tar.xz/plugins/linux-jack/data/locale/az-AZ.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+StartJACKServer="JACK serveri başlat"
3
+Channels="Kanal sayı"
4
+JACKInput="JACK Giriş Müştərisi"
5
+
6
obs-studio-26.0.2.tar.xz/plugins/linux-jack/data/locale/de-DE.ini -> obs-studio-26.1.0.tar.xz/plugins/linux-jack/data/locale/de-DE.ini Changed
8
 
1
@@ -1,4 +1,4 @@
2
-StartJACKServer="JACK‐Server starten"
3
+StartJACKServer="JACK-Server starten"
4
 Channels="Anzahl der Kanäle"
5
-JACKInput="JACK‐Eingabe‐Client"
6
+JACKInput="JACK-Eingabe-Client"
7
 
8
obs-studio-26.1.0.tar.xz/plugins/linux-jack/data/locale/kab-KAB.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+StartJACKServer="Sekker aqeddac JACK"
3
+Channels="Amḍan n ibuda"
4
+JACKInput="Amsaɣ n unekcum n JACK"
5
+
6
obs-studio-26.1.0.tar.xz/plugins/linux-pulseaudio/data/locale/az-AZ.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+PulseInput="Səs Giriş Yaxalama (PulseAudio)"
3
+PulseOutput="Səs Çıxış Yaxalama (PulseAudio)"
4
+Device="Cihaz"
5
+
6
obs-studio-26.1.0.tar.xz/plugins/linux-pulseaudio/data/locale/kab-KAB.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+PulseInput="Tuṭṭfa n unekcum ameslaw (PulseAudio)"
3
+PulseOutput="Tuṭṭfa n tuffɣa tmeslawt (PulseAudio)"
4
+Device="Ibenk"
5
+
6
obs-studio-26.0.2.tar.xz/plugins/linux-v4l2/CMakeLists.txt -> obs-studio-26.1.0.tar.xz/plugins/linux-v4l2/CMakeLists.txt Changed
9
 
1
@@ -39,6 +39,7 @@
2
    v4l2-controls.c
3
    v4l2-input.c
4
    v4l2-helpers.c
5
+   v4l2-output.c
6
    ${linux-v4l2-udev_SOURCES}
7
 )
8
 
9
obs-studio-26.1.0.tar.xz/plugins/linux-v4l2/data/locale/az-AZ.ini Added
18
 
1
@@ -0,0 +1,16 @@
2
+V4L2Input="Video Yaxalama Cihazı (V4L2)"
3
+Device="Cihaz"
4
+Input="Giriş"
5
+VideoFormat="Video formatı"
6
+VideoStandard="Video standartı"
7
+DVTiming="DV zamanlama"
8
+Resolution="Ölçülər"
9
+FrameRate="Kadr sürəti"
10
+LeaveUnchanged="Dəyişmədən çıx"
11
+UseBuffering="Bufferləməni istifadə et"
12
+ColorRange="Rəng aralığı"
13
+ColorRange.Default="İlkin"
14
+ColorRange.Partial="Hissəli"
15
+ColorRange.Full="Tam"
16
+CameraCtrls="Kamera nəzarəti"
17
+
18
obs-studio-26.0.2.tar.xz/plugins/linux-v4l2/data/locale/de-DE.ini -> obs-studio-26.1.0.tar.xz/plugins/linux-v4l2/data/locale/de-DE.ini Changed
10
 
1
@@ -3,7 +3,7 @@
2
 Input="Eingabe"
3
 VideoFormat="Videoformat"
4
 VideoStandard="Videostandard"
5
-DVTiming="DV‐Timing"
6
+DVTiming="DV-Timing"
7
 Resolution="Auflösung"
8
 FrameRate="Bildrate"
9
 LeaveUnchanged="Unverändert lassen"
10
obs-studio-26.0.2.tar.xz/plugins/linux-v4l2/data/locale/el-GR.ini -> obs-studio-26.1.0.tar.xz/plugins/linux-v4l2/data/locale/el-GR.ini Changed
11
 
1
@@ -8,4 +8,9 @@
2
 FrameRate="Ρυθμός καρέ"
3
 LeaveUnchanged="Αφήστε αμετάβλητο"
4
 UseBuffering="Χρήση ενδιάμεσης μνήμης"
5
+ColorRange="Εύρος Χρωμάτων"
6
+ColorRange.Default="Προεπιλογή"
7
+ColorRange.Partial="Μερικό"
8
+ColorRange.Full="Πλήρες"
9
+CameraCtrls="Έλεγχοι φωτογραφικής μηχανής"
10
 
11
obs-studio-26.0.2.tar.xz/plugins/linux-v4l2/data/locale/et-EE.ini -> obs-studio-26.1.0.tar.xz/plugins/linux-v4l2/data/locale/et-EE.ini Changed
11
 
1
@@ -8,4 +8,9 @@
2
 FrameRate="Kaadrisagedus"
3
 LeaveUnchanged="Jäta muutmata"
4
 UseBuffering="Kasuta puhverdamist"
5
+ColorRange="Värviruumi vahemik"
6
+ColorRange.Default="Vaikeseade"
7
+ColorRange.Partial="Osaline"
8
+ColorRange.Full="Täielik"
9
+CameraCtrls="Kaamera juhtnupud"
10
 
11
obs-studio-26.0.2.tar.xz/plugins/linux-v4l2/data/locale/fa-IR.ini -> obs-studio-26.1.0.tar.xz/plugins/linux-v4l2/data/locale/fa-IR.ini Changed
7
 
1
@@ -12,4 +12,5 @@
2
 ColorRange.Default="پیش فرض"
3
 ColorRange.Partial="جزئی"
4
 ColorRange.Full="کامل"
5
+CameraCtrls="کنترل دوربین"
6
 
7
obs-studio-26.1.0.tar.xz/plugins/linux-v4l2/data/locale/kab-KAB.ini Added
18
 
1
@@ -0,0 +1,16 @@
2
+V4L2Input="Ibenk n tuṭṭfa n uvidyu (V4L2)"
3
+Device="Ibenk"
4
+Input="Anekcum"
5
+VideoFormat="Amasal n uvidyu"
6
+VideoStandard="Alugen n uvidyu"
7
+DVTiming="Akud DV"
8
+Resolution="Tabadut"
9
+FrameRate="Atug n yikataren"
10
+LeaveUnchanged="Eǧǧ-it s war abeddel"
11
+UseBuffering="Seqdec ajmaɛ di tkatut n weḥraz"
12
+ColorRange="Tagrumma n yini"
13
+ColorRange.Default="Amezwar"
14
+ColorRange.Partial="Abruyan"
15
+ColorRange.Full="Ummid"
16
+CameraCtrls="Isenqaden n tkamiṛat"
17
+
18
obs-studio-26.0.2.tar.xz/plugins/linux-v4l2/data/locale/pt-BR.ini -> obs-studio-26.1.0.tar.xz/plugins/linux-v4l2/data/locale/pt-BR.ini Changed
11
 
1
@@ -1,7 +1,7 @@
2
-V4L2Input="Dispositivo de Captura de Vídeo (V4L2)"
3
+V4L2Input="Dispositivo de captura de vídeo (V4L2)"
4
 Device="Dispositivo"
5
 Input="Entrada"
6
-VideoFormat="Formato de Vídeo"
7
+VideoFormat="Formato de vídeo"
8
 VideoStandard="Padrão de vídeo"
9
 DVTiming="Sincronismo DV"
10
 Resolution="Resolução"
11
obs-studio-26.0.2.tar.xz/plugins/linux-v4l2/data/locale/ro-RO.ini -> obs-studio-26.1.0.tar.xz/plugins/linux-v4l2/data/locale/ro-RO.ini Changed
8
 
1
@@ -12,5 +12,5 @@
2
 ColorRange.Default="Implicită"
3
 ColorRange.Partial="Parțială"
4
 ColorRange.Full="Completă"
5
-CameraCtrls="Controale cameră foto"
6
+CameraCtrls="Comenzi pentru cameră"
7
 
8
obs-studio-26.0.2.tar.xz/plugins/linux-v4l2/data/locale/vi-VN.ini -> obs-studio-26.1.0.tar.xz/plugins/linux-v4l2/data/locale/vi-VN.ini Changed
17
 
1
@@ -1,7 +1,15 @@
2
+V4L2Input="Thiết bị quay video (V4L2)"
3
 Device="Thiết bị"
4
+Input="Đầu vào"
5
+VideoFormat="Định dạng video"
6
 VideoStandard="Video Tiêu chuẩn"
7
 Resolution="Độ phân giải"
8
 FrameRate="Tốc độ khung"
9
 LeaveUnchanged="Giữ nguyên"
10
+UseBuffering="Dùng đệm"
11
+ColorRange="Dải màu"
12
+ColorRange.Default="Mặc định"
13
+ColorRange.Partial="Một phần"
14
+ColorRange.Full="Toàn phần"
15
 CameraCtrls="Điều khiển máy quay"
16
 
17
obs-studio-26.0.2.tar.xz/plugins/linux-v4l2/linux-v4l2.c -> obs-studio-26.1.0.tar.xz/plugins/linux-v4l2/linux-v4l2.c Changed
50
 
1
@@ -15,18 +15,47 @@
2
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
3
 */
4
 #include <obs-module.h>
5
+#include <util/platform.h>
6
 
7
 OBS_DECLARE_MODULE()
8
 OBS_MODULE_USE_DEFAULT_LOCALE("linux-v4l2", "en-US")
9
 MODULE_EXPORT const char *obs_module_description(void)
10
 {
11
-   return "Video4Linux2(V4L2) sources";
12
+   return "Video4Linux2(V4L2) sources/virtual camera";
13
 }
14
 
15
 extern struct obs_source_info v4l2_input;
16
+extern struct obs_output_info virtualcam_info;
17
+
18
+static bool v4l2loopback_installed()
19
+{
20
+   bool loaded = false;
21
+
22
+   int ret = system("modinfo v4l2loopback >/dev/null 2>&1");
23
+
24
+   if (ret == 0)
25
+       loaded = true;
26
+
27
+   return loaded;
28
+}
29
 
30
 bool obs_module_load(void)
31
 {
32
    obs_register_source(&v4l2_input);
33
+
34
+   obs_data_t *obs_settings = obs_data_create();
35
+
36
+   if (v4l2loopback_installed()) {
37
+       obs_register_output(&virtualcam_info);
38
+       obs_data_set_bool(obs_settings, "vcamEnabled", true);
39
+   } else {
40
+       obs_data_set_bool(obs_settings, "vcamEnabled", false);
41
+       blog(LOG_WARNING,
42
+            "v4l2loopback not installed, virtual camera disabled");
43
+   }
44
+
45
+   obs_apply_private_data(obs_settings);
46
+   obs_data_release(obs_settings);
47
+
48
    return true;
49
 }
50
obs-studio-26.1.0.tar.xz/plugins/linux-v4l2/v4l2-output.c Added
178
 
1
@@ -0,0 +1,176 @@
2
+#include <obs-module.h>
3
+#include <util/platform.h>
4
+#include <linux/videodev2.h>
5
+#include <sys/ioctl.h>
6
+#include <fcntl.h>
7
+#include <unistd.h>
8
+
9
+#define MAX_DEVICES 64
10
+
11
+struct virtualcam_data {
12
+   obs_output_t *output;
13
+   int device;
14
+   uint32_t frame_size;
15
+};
16
+
17
+static const char *virtualcam_name(void *unused)
18
+{
19
+   UNUSED_PARAMETER(unused);
20
+   return "Virtual Camera Output";
21
+}
22
+
23
+static void virtualcam_destroy(void *data)
24
+{
25
+   struct virtualcam_data *vcam = (struct virtualcam_data *)data;
26
+   close(vcam->device);
27
+   bfree(data);
28
+}
29
+
30
+static bool loopback_module_loaded()
31
+{
32
+   bool loaded = false;
33
+
34
+   char temp[512];
35
+
36
+   FILE *fp = fopen("/proc/modules", "r");
37
+
38
+   if (!fp)
39
+       return false;
40
+
41
+   while (fgets(temp, sizeof(temp), fp)) {
42
+       if (strstr(temp, "v4l2loopback")) {
43
+           loaded = true;
44
+           break;
45
+       }
46
+   }
47
+
48
+   if (fp)
49
+       fclose(fp);
50
+
51
+   return loaded;
52
+}
53
+
54
+static int loopback_module_load()
55
+{
56
+   return system(
57
+       "pkexec modprobe v4l2loopback exclusive_caps=1 card_label='OBS Virtual Camera' && sleep 0.5");
58
+}
59
+
60
+static void *virtualcam_create(obs_data_t *settings, obs_output_t *output)
61
+{
62
+   struct virtualcam_data *vcam =
63
+       (struct virtualcam_data *)bzalloc(sizeof(*vcam));
64
+   vcam->output = output;
65
+
66
+   UNUSED_PARAMETER(settings);
67
+   return vcam;
68
+}
69
+
70
+static bool try_connect(void *data, int device)
71
+{
72
+   struct virtualcam_data *vcam = (struct virtualcam_data *)data;
73
+   struct v4l2_format format;
74
+   struct v4l2_capability capability;
75
+   struct v4l2_streamparm parm;
76
+
77
+   uint32_t width = obs_output_get_width(vcam->output);
78
+   uint32_t height = obs_output_get_height(vcam->output);
79
+
80
+   vcam->frame_size = width * height * 2;
81
+
82
+   char new_device[16];
83
+   sprintf(new_device, "/dev/video%d", device);
84
+
85
+   vcam->device = open(new_device, O_RDWR);
86
+
87
+   if (vcam->device < 0)
88
+       return false;
89
+
90
+   if (ioctl(vcam->device, VIDIOC_QUERYCAP, &capability) < 0)
91
+       return false;
92
+
93
+   format.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
94
+
95
+   if (ioctl(vcam->device, VIDIOC_G_FMT, &format) < 0)
96
+       return false;
97
+
98
+   struct obs_video_info ovi;
99
+   obs_get_video_info(&ovi);
100
+
101
+   memset(&parm, 0, sizeof(parm));
102
+   parm.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
103
+
104
+   parm.parm.output.capability = V4L2_CAP_TIMEPERFRAME;
105
+   parm.parm.output.timeperframe.numerator = ovi.fps_den;
106
+   parm.parm.output.timeperframe.denominator = ovi.fps_num;
107
+
108
+   if (ioctl(vcam->device, VIDIOC_S_PARM, &parm) < 0)
109
+       return false;
110
+
111
+   format.fmt.pix.width = width;
112
+   format.fmt.pix.height = height;
113
+   format.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
114
+   format.fmt.pix.sizeimage = vcam->frame_size;
115
+
116
+   if (ioctl(vcam->device, VIDIOC_S_FMT, &format) < 0)
117
+       return false;
118
+
119
+   struct video_scale_info vsi = {0};
120
+   vsi.format = VIDEO_FORMAT_YUY2;
121
+   vsi.width = width;
122
+   vsi.height = height;
123
+   obs_output_set_video_conversion(vcam->output, &vsi);
124
+
125
+   blog(LOG_INFO, "Virtual camera started");
126
+   obs_output_begin_data_capture(vcam->output, 0);
127
+
128
+   return true;
129
+}
130
+
131
+static bool virtualcam_start(void *data)
132
+{
133
+   struct virtualcam_data *vcam = (struct virtualcam_data *)data;
134
+
135
+   if (!loopback_module_loaded()) {
136
+       if (loopback_module_load() != 0)
137
+           return false;
138
+   }
139
+
140
+   for (int i = 0; i < MAX_DEVICES; i++) {
141
+       if (!try_connect(vcam, i))
142
+           continue;
143
+       else
144
+           return true;
145
+   }
146
+
147
+   blog(LOG_WARNING, "Failed to start virtual camera");
148
+   return false;
149
+}
150
+
151
+static void virtualcam_stop(void *data, uint64_t ts)
152
+{
153
+   struct virtualcam_data *vcam = (struct virtualcam_data *)data;
154
+   obs_output_end_data_capture(vcam->output);
155
+   close(vcam->device);
156
+
157
+   blog(LOG_INFO, "Virtual camera stopped");
158
+
159
+   UNUSED_PARAMETER(ts);
160
+}
161
+
162
+static void virtual_video(void *param, struct video_data *frame)
163
+{
164
+   struct virtualcam_data *vcam = (struct virtualcam_data *)param;
165
+   write(vcam->device, frame->data[0], vcam->frame_size);
166
+}
167
+
168
+struct obs_output_info virtualcam_info = {
169
+   .id = "virtualcam_output",
170
+   .flags = OBS_OUTPUT_VIDEO,
171
+   .get_name = virtualcam_name,
172
+   .create = virtualcam_create,
173
+   .destroy = virtualcam_destroy,
174
+   .start = virtualcam_start,
175
+   .stop = virtualcam_stop,
176
+   .raw_video = virtual_video,
177
+};
178
obs-studio-26.1.0.tar.xz/plugins/mac-avcapture/data/locale/az-AZ.ini Added
16
 
1
@@ -0,0 +1,14 @@
2
+AVCapture="Video Yaxalama Cihazı"
3
+Device="Cihaz"
4
+UsePreset="Hazır tənzimləməni istifadə et"
5
+Preset="Hazır tənzimləmə"
6
+Buffering="Bufferləməni istifadə et"
7
+FrameRate="Kadr sürəti"
8
+InputFormat="Giriş formatı"
9
+ColorSpace="Rəng boşluğu"
10
+VideoRange="Video aralığı"
11
+VideoRange.Partial="Hissəli"
12
+VideoRange.Full="Tam"
13
+Auto="Avtomatik"
14
+Unknown="Bilinmir ($1)"
15
+
16
obs-studio-26.1.0.tar.xz/plugins/mac-avcapture/data/locale/kab-KAB.ini Added
16
 
1
@@ -0,0 +1,14 @@
2
+AVCapture="Ibenk n tuṭṭfa n uvidyu"
3
+Device="Ibenk"
4
+UsePreset="Seqdec aɣewwar uzwir"
5
+Preset="Aseɣwer uzwir"
6
+Buffering="Seqdec ajmaɛ di tkatut n weḥraz"
7
+FrameRate="Atug n yikataren"
8
+InputFormat="Amasal n unekcum"
9
+ColorSpace="Tallunt n yini"
10
+VideoRange="Tagrumma n uvidyu"
11
+VideoRange.Partial="Abruyan"
12
+VideoRange.Full="Ummid"
13
+Auto="Awurman"
14
+Unknown="Arussin ($1)"
15
+
16
obs-studio-26.0.2.tar.xz/plugins/mac-avcapture/data/locale/pt-BR.ini -> obs-studio-26.1.0.tar.xz/plugins/mac-avcapture/data/locale/pt-BR.ini Changed
7
 
1
@@ -1,4 +1,4 @@
2
-AVCapture="Dispositivo de Captura de Vídeo"
3
+AVCapture="Dispositivo de captura de vídeo"
4
 Device="Dispositivo"
5
 UsePreset="Usar Predefinição"
6
 Preset="Predefinição"
7
obs-studio-26.0.2.tar.xz/plugins/mac-avcapture/data/locale/pt-PT.ini -> obs-studio-26.1.0.tar.xz/plugins/mac-avcapture/data/locale/pt-PT.ini Changed
9
 
1
@@ -6,6 +6,7 @@
2
 FrameRate="Taxa de frames (frame rate)"
3
 InputFormat="Formato de entrada"
4
 ColorSpace="Espaço de cor"
5
+VideoRange="Intervalo de vídeo"
6
 VideoRange.Partial="Parcial"
7
 VideoRange.Full="Completo"
8
 Auto="Auto"
9
obs-studio-26.0.2.tar.xz/plugins/mac-avcapture/data/locale/vi-VN.ini -> obs-studio-26.1.0.tar.xz/plugins/mac-avcapture/data/locale/vi-VN.ini Changed
14
 
1
@@ -1,5 +1,12 @@
2
+AVCapture="Thiết bị ghi hình"
3
 Device="Thiết bị"
4
 UsePreset="Dùng mẫu có sẵn"
5
+Preset="Mẫu thiết lập"
6
+Buffering="Dùng đệm"
7
+FrameRate="Tốc độ khung hình"
8
+InputFormat="Định dạng đầu vào"
9
+VideoRange.Partial="Một phần"
10
+VideoRange.Full="Đầy đủ"
11
 Auto="Tự động"
12
 Unknown="Không xác định ($1)"
13
 
14
obs-studio-26.0.2.tar.xz/plugins/mac-capture/CMakeLists.txt -> obs-studio-26.1.0.tar.xz/plugins/mac-capture/CMakeLists.txt Changed
13
 
1
@@ -24,11 +24,6 @@
2
    mac-window-capture.m
3
    window-utils.m)
4
 
5
-set_source_files_properties(mac-display-capture.m
6
-               mac-window-capture.m
7
-               window-utils.m
8
-   PROPERTIES LANGUAGE C)
9
-
10
 add_library(mac-capture MODULE
11
    ${mac-capture_SOURCES}
12
    ${mac-capture_HEADERS})
13
obs-studio-26.0.2.tar.xz/plugins/mac-capture/data/locale/az-AZ.ini -> obs-studio-26.1.0.tar.xz/plugins/mac-capture/data/locale/az-AZ.ini Changed
23
 
1
@@ -1,2 +1,21 @@
2
+CoreAudio.InputCapture="Səs Giriş Yaxalama"
3
+CoreAudio.OutputCapture="Səs Çıxış Yaxalama"
4
+CoreAudio.Device="Cihaz"
5
+CoreAudio.Device.Default="İlkin"
6
+DisplayCapture="Ekran Yaxalama"
7
+DisplayCapture.Display="Ekran"
8
+DisplayCapture.ShowCursor="Kursoru göstər"
9
+WindowCapture="Pəncərə Yaxalama"
10
+WindowCapture.ShowShadow="Pəncərə kölgəsini göstər"
11
+WindowUtils.Window="Pəncərə"
12
+WindowUtils.ShowEmptyNames="Adsız pəncərələri göstər"
13
+CropMode="Götür"
14
 CropMode.None="Heç biri"
15
+CropMode.Manual="Əllə"
16
+CropMode.ToWindow="Pəncərəyə"
17
+CropMode.ToWindowAndManual="Pəncərəyə və əllə"
18
+Crop.origin.x="Soldan götür"
19
+Crop.origin.y="Üstdən götür"
20
+Crop.size.width="Sağdan götür"
21
+Crop.size.height="Altdan götür"
22
 
23
obs-studio-26.1.0.tar.xz/plugins/mac-capture/data/locale/kab-KAB.ini Added
23
 
1
@@ -0,0 +1,21 @@
2
+CoreAudio.InputCapture="Tuṭṭfa n unekcum n umeslaw"
3
+CoreAudio.OutputCapture="Tuṭṭfa n tuffɣa n umeslaw"
4
+CoreAudio.Device="Ibenk"
5
+CoreAudio.Device.Default="Amezwar"
6
+DisplayCapture="Tuṭṭfa n ubeqqeḍ"
7
+DisplayCapture.Display="Beqqeḍ"
8
+DisplayCapture.ShowCursor="Beqqeḍ taḥnaccaḍt"
9
+WindowCapture="Tuṭṭfa n usfaylu"
10
+WindowCapture.ShowShadow="Beqqeḍ tili n usfaylu"
11
+WindowUtils.Window="Asfaylu"
12
+WindowUtils.ShowEmptyNames="Beqqeḍ isfuyla ur nesɛi ara isem"
13
+CropMode="Ɣeẓ"
14
+CropMode.None="Ulac"
15
+CropMode.Manual="S ufus"
16
+CropMode.ToWindow="Ɣer usfaylu"
17
+CropMode.ToWindowAndManual="Ɣer usfaylu yerna s ufus"
18
+Crop.origin.x="Ɣeẓ seg uzelmaḍ"
19
+Crop.origin.y="Ɣeẓ uksawen"
20
+Crop.size.width="Ɣeẓ seg uyfus"
21
+Crop.size.height="Ɣeẓ ukessar"
22
+
23
obs-studio-26.0.2.tar.xz/plugins/mac-capture/data/locale/pt-BR.ini -> obs-studio-26.1.0.tar.xz/plugins/mac-capture/data/locale/pt-BR.ini Changed
18
 
1
@@ -1,12 +1,12 @@
2
-CoreAudio.InputCapture="Captura de Entrada de Áudio"
3
-CoreAudio.OutputCapture="Captura de Saída de Áudio"
4
+CoreAudio.InputCapture="Captura de entrada de áudio"
5
+CoreAudio.OutputCapture="Captura de saída de áudio"
6
 CoreAudio.Device="Dispositivo"
7
 CoreAudio.Device.Default="Padrão"
8
 DisplayCapture="Captura de Exposição"
9
 DisplayCapture.Display="Exposição"
10
-DisplayCapture.ShowCursor="Mostrar o Cursor"
11
+DisplayCapture.ShowCursor="Mostrar o cursor"
12
 WindowCapture="Captura de janela"
13
-WindowCapture.ShowShadow="Mostrar sombra da Janela"
14
+WindowCapture.ShowShadow="Mostrar sombra da janela"
15
 WindowUtils.Window="Janela"
16
 WindowUtils.ShowEmptyNames="Mostrar janelas com nomes vazios"
17
 CropMode="Recortar"
18
obs-studio-26.0.2.tar.xz/plugins/mac-capture/data/locale/vi-VN.ini -> obs-studio-26.1.0.tar.xz/plugins/mac-capture/data/locale/vi-VN.ini Changed
16
 
1
@@ -6,11 +6,14 @@
2
 DisplayCapture.Display="Hiển thị"
3
 DisplayCapture.ShowCursor="Hiển thị con trỏ"
4
 WindowCapture="Quay cửa sổ"
5
+WindowCapture.ShowShadow="Hiện bóng của cửa sổ"
6
 WindowUtils.Window="Cửa sổ"
7
 WindowUtils.ShowEmptyNames="Hiện thị cửa sổ mà không có tên"
8
 CropMode="Cắt"
9
 CropMode.None="Không"
10
 CropMode.Manual="Thủ công"
11
+CropMode.ToWindow="Tới cửa số"
12
+CropMode.ToWindowAndManual="Tới cửa sổ và hướng dẫn"
13
 Crop.origin.x="Cắt trái"
14
 Crop.origin.y="Cắt trên"
15
 Crop.size.width="Cắt phải"
16
obs-studio-26.0.2.tar.xz/plugins/mac-syphon/CMakeLists.txt -> obs-studio-26.1.0.tar.xz/plugins/mac-syphon/CMakeLists.txt Changed
11
 
1
@@ -65,9 +65,6 @@
2
    syphon.m
3
    plugin-main.c)
4
 
5
-set_source_files_properties(${mac-syphon_SOURCES} ${syphon_SOURCES}
6
-   PROPERTIES LANGUAGE C)
7
-
8
 add_definitions(-DSYPHON_UNIQUE_CLASS_NAME_PREFIX=OBS_ -include
9
    ${PROJECT_SOURCE_DIR}/syphon-framework/Syphon_Prefix.pch)
10
 
11
obs-studio-26.1.0.tar.xz/plugins/mac-syphon/data/locale/az-AZ.ini Added
15
 
1
@@ -0,0 +1,13 @@
2
+Syphon="Syphon Müştərisi"
3
+Source="Mənbə"
4
+LaunchSyphonInject="SyphonInject-i başlat"
5
+Inject="Yerit"
6
+Application="Tətbiqetmə"
7
+SyphonLicense="Syphon Lisenziyası"
8
+Crop="Götür"
9
+Crop.origin.x="Soldan götür"
10
+Crop.origin.y="Üstdən götür"
11
+Crop.size.width="Sağdan götür"
12
+Crop.size.height="Altdan götür"
13
+AllowTransparency="Şəffaflığa icazə ver"
14
+
15
obs-studio-26.0.2.tar.xz/plugins/mac-syphon/data/locale/de-DE.ini -> obs-studio-26.1.0.tar.xz/plugins/mac-syphon/data/locale/de-DE.ini Changed
13
 
1
@@ -1,9 +1,9 @@
2
-Syphon="Syphon‐Client"
3
+Syphon="Syphon-Client"
4
 Source="Quelle"
5
 LaunchSyphonInject="SyphonInject starten"
6
 Inject="Injizieren"
7
 Application="Anwendung"
8
-SyphonLicense="Syphon‐Lizenz"
9
+SyphonLicense="Syphon-Lizenz"
10
 Crop="Zuschneiden"
11
 Crop.origin.x="Links abschneiden"
12
 Crop.origin.y="Oben abschneiden"
13
obs-studio-26.0.2.tar.xz/plugins/mac-syphon/data/locale/et-EE.ini -> obs-studio-26.1.0.tar.xz/plugins/mac-syphon/data/locale/et-EE.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
+Syphon="Klient Syphon"
3
 Source="Allikas"
4
 LaunchSyphonInject="Käivita SyphonInject"
5
 Inject="Sisesta"
6
obs-studio-26.1.0.tar.xz/plugins/mac-syphon/data/locale/kab-KAB.ini Added
15
 
1
@@ -0,0 +1,13 @@
2
+Syphon="Amsaɣ Syphon"
3
+Source="Aɣbalu"
4
+LaunchSyphonInject="Sekker SyphonInject"
5
+Inject="Sduffi"
6
+Application="Asnas"
7
+SyphonLicense="Turagt n Syphon"
8
+Crop="Ɣeẓ"
9
+Crop.origin.x="Ɣeẓ seg uzelmaḍ"
10
+Crop.origin.y="Ɣeẓ uksawen"
11
+Crop.size.width="Ɣeẓ seg uyfus"
12
+Crop.size.height="Ɣeẓ ukessar"
13
+AllowTransparency="Sireg tafrawant"
14
+
15
obs-studio-26.0.2.tar.xz/plugins/mac-syphon/data/locale/vi-VN.ini -> obs-studio-26.1.0.tar.xz/plugins/mac-syphon/data/locale/vi-VN.ini Changed
11
 
1
@@ -1,5 +1,9 @@
2
+Syphon="Syphon Khách"
3
 Source="Nguồn"
4
+LaunchSyphonInject="Chạy SyphonInject"
5
+Inject="Chọn"
6
 Application="Ứng dụng"
7
+SyphonLicense="Giấy phép Syphon"
8
 Crop="Cắt"
9
 Crop.origin.x="Cắt trái"
10
 Crop.origin.y="Cắt trên"
11
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam Added
2
 
1
+(directory)
2
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/CMakeLists.txt Added
4
 
1
@@ -0,0 +1,2 @@
2
+add_subdirectory(src/obs-plugin)
3
+add_subdirectory(src/dal-plugin)
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/data Added
2
 
1
+(directory)
2
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/data/locale Added
2
 
1
+(directory)
2
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/data/locale/en-US.ini Added
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src Added
2
 
1
+(directory)
2
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/common Added
2
 
1
+(directory)
2
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/common/MachProtocol.h Added
19
 
1
@@ -0,0 +1,17 @@
2
+//
3
+//  MachProtocol.m
4
+//  obs-mac-virtualcam
5
+//
6
+//  Created by John Boiles  on 5/5/20.
7
+//
8
+
9
+#define MACH_SERVICE_NAME "com.obsproject.obs-mac-virtualcam.server"
10
+
11
+typedef enum {
12
+   //! Initial connect message sent from the client to the server to initate a connection
13
+   MachMsgIdConnect = 1,
14
+   //! Message containing data for a frame
15
+   MachMsgIdFrame = 2,
16
+   //! Indicates the server is going to stop sending frames
17
+   MachMsgIdStop = 3,
18
+} MachMsgId;
19
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/dal-plugin Added
2
 
1
+(directory)
2
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/dal-plugin/CMSampleBufferUtils.h Added
24
 
1
@@ -0,0 +1,22 @@
2
+//
3
+//  CMSampleBufferUtils.h
4
+//  dal-plugin
5
+//
6
+//  Created by John Boiles  on 5/8/20.
7
+//
8
+
9
+#include <CoreMediaIO/CMIOSampleBuffer.h>
10
+
11
+OSStatus CMSampleBufferCreateFromData(NSSize size,
12
+                     CMSampleTimingInfo timingInfo,
13
+                     UInt64 sequenceNumber, NSData *data,
14
+                     CMSampleBufferRef *sampleBuffer);
15
+
16
+OSStatus CMSampleBufferCreateFromDataNoCopy(NSSize size,
17
+                       CMSampleTimingInfo timingInfo,
18
+                       UInt64 sequenceNumber, NSData *data,
19
+                       CMSampleBufferRef *sampleBuffer);
20
+
21
+CMSampleTimingInfo CMSampleTimingInfoForTimestamp(uint64_t timestampNanos,
22
+                         uint32_t fpsNumerator,
23
+                         uint32_t fpsDenominator);
24
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/dal-plugin/CMSampleBufferUtils.mm Added
189
 
1
@@ -0,0 +1,187 @@
2
+//
3
+//  CMSampleBufferUtils.m
4
+//  dal-plugin
5
+//
6
+//  Created by John Boiles  on 5/8/20.
7
+//
8
+
9
+#import "CMSampleBufferUtils.h"
10
+
11
+#include "Logging.h"
12
+
13
+/*!
14
+CMSampleBufferCreateFromData
15
+
16
+Creates a CMSampleBuffer by copying bytes from NSData into a CVPixelBuffer.
17
+*/
18
+OSStatus CMSampleBufferCreateFromData(NSSize size,
19
+                     CMSampleTimingInfo timingInfo,
20
+                     UInt64 sequenceNumber, NSData *data,
21
+                     CMSampleBufferRef *sampleBuffer)
22
+{
23
+   OSStatus err = noErr;
24
+
25
+   // Create an empty pixel buffer
26
+   CVPixelBufferRef pixelBuffer;
27
+   err = CVPixelBufferCreate(kCFAllocatorDefault, size.width, size.height,
28
+                 kCVPixelFormatType_422YpCbCr8, nil,
29
+                 &pixelBuffer);
30
+   if (err != noErr) {
31
+       DLog(@"CVPixelBufferCreate err %d", err);
32
+       return err;
33
+   }
34
+
35
+   // Generate the video format description from that pixel buffer
36
+   CMFormatDescriptionRef format;
37
+   err = CMVideoFormatDescriptionCreateForImageBuffer(NULL, pixelBuffer,
38
+                              &format);
39
+   if (err != noErr) {
40
+       DLog(@"CMVideoFormatDescriptionCreateForImageBuffer err %d",
41
+            err);
42
+       return err;
43
+   }
44
+
45
+   // Copy memory into the pixel buffer
46
+   CVPixelBufferLockBaseAddress(pixelBuffer, 0);
47
+   uint8_t *dest =
48
+       (uint8_t *)CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 0);
49
+   uint8_t *src = (uint8_t *)data.bytes;
50
+
51
+   size_t destBytesPerRow =
52
+       CVPixelBufferGetBytesPerRowOfPlane(pixelBuffer, 0);
53
+   size_t srcBytesPerRow = size.width * 2;
54
+
55
+   // Sometimes CVPixelBufferCreate will create a pixelbuffer that's a different
56
+   // size than necessary to hold the frame (probably for some optimization reason).
57
+   // If that is the case this will do a row-by-row copy into the buffer.
58
+   if (destBytesPerRow == srcBytesPerRow) {
59
+       memcpy(dest, src, data.length);
60
+   } else {
61
+       for (int line = 0; line < size.height; line++) {
62
+           memcpy(dest, src, srcBytesPerRow);
63
+           src += srcBytesPerRow;
64
+           dest += destBytesPerRow;
65
+       }
66
+   }
67
+
68
+   CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
69
+
70
+   err = CMIOSampleBufferCreateForImageBuffer(kCFAllocatorDefault,
71
+                          pixelBuffer, format,
72
+                          &timingInfo, sequenceNumber,
73
+                          0, sampleBuffer);
74
+   CFRelease(format);
75
+   CFRelease(pixelBuffer);
76
+
77
+   if (err != noErr) {
78
+       DLog(@"CMIOSampleBufferCreateForImageBuffer err %d", err);
79
+       return err;
80
+   }
81
+
82
+   return noErr;
83
+}
84
+
85
+static void releaseNSData(void *o, void *block, size_t size)
86
+{
87
+   NSData *data = (__bridge_transfer NSData *)o;
88
+   data = nil; // Assuming ARC is enabled
89
+}
90
+
91
+// From https://stackoverflow.com/questions/26158253/how-to-create-a-cmblockbufferref-from-nsdata
92
+OSStatus createReadonlyBlockBuffer(CMBlockBufferRef *result, NSData *data)
93
+{
94
+   CMBlockBufferCustomBlockSource blockSource = {
95
+       .version = kCMBlockBufferCustomBlockSourceVersion,
96
+       .AllocateBlock = NULL,
97
+       .FreeBlock = &releaseNSData,
98
+       .refCon = (__bridge_retained void *)data,
99
+   };
100
+   return CMBlockBufferCreateWithMemoryBlock(NULL, (void *)data.bytes,
101
+                         data.length, NULL,
102
+                         &blockSource, 0, data.length,
103
+                         0, result);
104
+}
105
+
106
+/*!
107
+ CMSampleBufferCreateFromDataNoCopy
108
+
109
+ Creates a CMSampleBuffer by using the bytes directly from NSData (without copying them).
110
+ Seems to mostly work but does not work at full resolution in OBS for some reason (which prevents loopback testing).
111
+ */
112
+OSStatus CMSampleBufferCreateFromDataNoCopy(NSSize size,
113
+                       CMSampleTimingInfo timingInfo,
114
+                       UInt64 sequenceNumber, NSData *data,
115
+                       CMSampleBufferRef *sampleBuffer)
116
+{
117
+   OSStatus err = noErr;
118
+
119
+   CMBlockBufferRef dataBuffer;
120
+   createReadonlyBlockBuffer(&dataBuffer, data);
121
+
122
+   // Magic format properties snagged from https://github.com/lvsti/CoreMediaIO-DAL-Example/blob/0392cbf27ed33425a1a5bd9f495b2ccec8f20501/Sources/Extras/CoreMediaIO/DeviceAbstractionLayer/Devices/Sample/PlugIn/CMIO_DP_Sample_Stream.cpp#L830
123
+   NSDictionary *extensions = @{
124
+       @"com.apple.cmio.format_extension.video.only_has_i_frames":
125
+           @YES,
126
+       (__bridge NSString *)
127
+       kCMFormatDescriptionExtension_FieldCount: @1,
128
+       (__bridge NSString *)
129
+       kCMFormatDescriptionExtension_ColorPrimaries:
130
+           (__bridge NSString *)
131
+               kCMFormatDescriptionColorPrimaries_SMPTE_C,
132
+       (__bridge NSString *)
133
+       kCMFormatDescriptionExtension_TransferFunction: (
134
+           __bridge NSString *)
135
+           kCMFormatDescriptionTransferFunction_ITU_R_709_2,
136
+       (__bridge NSString *)
137
+       kCMFormatDescriptionExtension_YCbCrMatrix: (__bridge NSString *)
138
+           kCMFormatDescriptionYCbCrMatrix_ITU_R_601_4,
139
+       (__bridge NSString *)
140
+       kCMFormatDescriptionExtension_BytesPerRow: @(size.width * 2),
141
+       (__bridge NSString *)kCMFormatDescriptionExtension_FormatName:
142
+           @"Component Video - CCIR-601 uyvy",
143
+       (__bridge NSString *)kCMFormatDescriptionExtension_Version: @2,
144
+   };
145
+
146
+   CMFormatDescriptionRef format;
147
+   err = CMVideoFormatDescriptionCreate(
148
+       NULL, kCMVideoCodecType_422YpCbCr8, size.width, size.height,
149
+       (__bridge CFDictionaryRef)extensions, &format);
150
+   if (err != noErr) {
151
+       DLog(@"CMVideoFormatDescriptionCreate err %d", err);
152
+       return err;
153
+   }
154
+
155
+   size_t dataSize = data.length;
156
+   err = CMIOSampleBufferCreate(kCFAllocatorDefault, dataBuffer, format, 1,
157
+                    1, &timingInfo, 1, &dataSize,
158
+                    sequenceNumber, 0, sampleBuffer);
159
+   CFRelease(format);
160
+   CFRelease(dataBuffer);
161
+
162
+   if (err != noErr) {
163
+       DLog(@"CMIOSampleBufferCreate err %d", err);
164
+       return err;
165
+   }
166
+
167
+   return noErr;
168
+}
169
+
170
+CMSampleTimingInfo CMSampleTimingInfoForTimestamp(uint64_t timestampNanos,
171
+                         uint32_t fpsNumerator,
172
+                         uint32_t fpsDenominator)
173
+{
174
+   // The timing here is quite important. For frames to be delivered correctly and successfully be recorded by apps
175
+   // like QuickTime Player, we need to be accurate in both our timestamps _and_ have a sensible scale. Using large
176
+   // timestamps and scales like mach_absolute_time() and NSEC_PER_SEC will work for display, but will error out
177
+   // when trying to record.
178
+   //
179
+   // 600 is a commmon default in Apple's docs https://developer.apple.com/documentation/avfoundation/avmutablemovie/1390622-timescale
180
+   CMTimeScale scale = 600;
181
+   CMSampleTimingInfo timing;
182
+   timing.duration =
183
+       CMTimeMake(fpsDenominator * scale, fpsNumerator * scale);
184
+   timing.presentationTimeStamp = CMTimeMake(
185
+       (timestampNanos / (double)NSEC_PER_SEC) * scale, scale);
186
+   timing.decodeTimeStamp = kCMTimeInvalid;
187
+   return timing;
188
+}
189
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/dal-plugin/CMakeLists.txt Added
111
 
1
@@ -0,0 +1,109 @@
2
+# Universal build for Apple Silicon
3
+set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64")
4
+
5
+project(mac-dal-plugin)
6
+
7
+find_library(AVFOUNDATION AVFoundation)
8
+find_library(COCOA Cocoa)
9
+find_library(COREFOUNDATION CoreFoundation)
10
+find_library(COREMEDIA CoreMedia)
11
+find_library(COREVIDEO CoreVideo)
12
+find_library(COCOA Cocoa)
13
+find_library(COREMEDIAIO CoreMediaIO)
14
+find_library(IOSURFACE IOSurface)
15
+find_library(IOKIT IOKit)
16
+
17
+# Possible we could remove osme of these
18
+include_directories(${AVFOUNDATION}
19
+                   ${COCOA}
20
+                   ${COREFOUNDATION}
21
+                   ${COREMEDIA}
22
+                   ${COREVIDEO}
23
+                   ${COREMEDIAIO}
24
+                   ${COCOA}
25
+                   ${IOSURFACE}
26
+                   ./
27
+                   ../common)
28
+
29
+set(mac-dal-plugin_HEADERS
30
+   Defines.h
31
+   Logging.h
32
+   OBSDALPlugInInterface.h
33
+    OBSDALObjectStore.h
34
+   OBSDALPlugIn.h
35
+   OBSDALDevice.h
36
+    OBSDALStream.h
37
+   CMSampleBufferUtils.h
38
+   OBSDALMachClient.h
39
+   ../common/MachProtocol.h)
40
+
41
+set(mac-dal-plugin_SOURCES
42
+   OBSDALPlugInMain.mm
43
+   OBSDALPlugInInterface.mm
44
+   OBSDALObjectStore.mm
45
+   OBSDALPlugIn.mm
46
+   OBSDALDevice.mm
47
+    OBSDALStream.mm
48
+   CMSampleBufferUtils.mm
49
+   OBSDALMachClient.mm)
50
+
51
+add_library(mac-dal-plugin MODULE
52
+   ${mac-dal-plugin_SOURCES}
53
+   ${mac-dal-plugin_HEADERS})
54
+
55
+set_target_properties(mac-dal-plugin PROPERTIES
56
+   FOLDER "plugins"
57
+   BUNDLE TRUE
58
+   OUTPUT_NAME "obs-mac-virtualcam"
59
+   COMPILE_FLAGS "-std=gnu++14 -stdlib=libc++ -fobjc-arc -fobjc-weak")
60
+
61
+if (XCODE)
62
+   set(TARGET_DIR "${CMAKE_CURRENT_BINARY_DIR}/Debug")
63
+else (XCODE)
64
+   set(TARGET_DIR "${CMAKE_CURRENT_BINARY_DIR}")
65
+endif (XCODE)
66
+
67
+target_link_libraries(mac-dal-plugin
68
+   ${AVFOUNDATION}
69
+   ${COCOA}
70
+   ${COREFOUNDATION}
71
+   ${COREMEDIA}
72
+   ${COREVIDEO}
73
+   ${COREMEDIAIO}
74
+   ${IOSURFACE}
75
+   ${IOKIT})
76
+
77
+add_custom_command(TARGET mac-dal-plugin
78
+   POST_BUILD
79
+   COMMAND rm -rf ${TARGET_DIR}/obs-mac-virtualcam.plugin || true
80
+   COMMAND ${CMAKE_COMMAND} -E copy_directory ${TARGET_DIR}/obs-mac-virtualcam.bundle ${TARGET_DIR}/obs-mac-virtualcam.plugin
81
+   COMMENT "Rename bundle to plugin"
82
+)
83
+
84
+# Note: Xcode seems to run a command `builtin-infoPlistUtility` to generate the Info.plist, but I'm
85
+# not sure where to find that binary. If we had access to it, the command would look something like:
86
+# builtin-infoPlistUtility ${PROJECT_SOURCE_DIR}/../common/CoreMediaIO/DeviceAbstractionLayer/Devices/Sample/PlugIn/SampleVCam-Info.plist -producttype com.apple.product-type.bundle -expandbuildsettings -platform macosx -o mac-virtualcam.bundle/Contents/Info.plist
87
+# Instead, just copy in one that was already generated from Xcode.
88
+add_custom_command(TARGET mac-dal-plugin
89
+   POST_BUILD
90
+   COMMAND cp ${PROJECT_SOURCE_DIR}/Info.plist ${TARGET_DIR}/obs-mac-virtualcam.plugin/Contents/Info.plist
91
+    COMMAND mkdir ${TARGET_DIR}/obs-mac-virtualcam.plugin/Contents/Resources
92
+    COMMAND cp ${PROJECT_SOURCE_DIR}/placeholder.png ${TARGET_DIR}/obs-mac-virtualcam.plugin/Contents/Resources/placeholder.png
93
+   COMMAND /usr/bin/plutil -insert CFBundleVersion -string "${OBS_VERSION}" ${TARGET_DIR}/obs-mac-virtualcam.plugin/Contents/Info.plist
94
+   COMMAND /usr/bin/plutil -insert CFBundleShortVersionString -string "${OBS_VERSION}" ${TARGET_DIR}/obs-mac-virtualcam.plugin/Contents/Info.plist
95
+   DEPENDS {PROJECT_SOURCE_DIR}/Info.plist
96
+   COMMENT "Copy in Info.plist"
97
+)
98
+
99
+add_custom_command(TARGET mac-dal-plugin
100
+   POST_BUILD
101
+   COMMAND /usr/bin/codesign --force --deep --sign - --timestamp=none ${TARGET_DIR}/obs-mac-virtualcam.plugin
102
+   COMMENT "Codesign plugin"
103
+)
104
+
105
+add_custom_command(TARGET mac-dal-plugin
106
+   POST_BUILD
107
+   COMMAND rm -rf "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/data/obs-mac-virtualcam.plugin" || true
108
+   COMMAND ${CMAKE_COMMAND} -E copy_directory ${TARGET_DIR}/obs-mac-virtualcam.plugin "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/data/obs-mac-virtualcam.plugin"
109
+   COMMENT "Copy plugin to destination"
110
+)
111
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/dal-plugin/Defines.h Added
23
 
1
@@ -0,0 +1,21 @@
2
+//
3
+//  Defines.h
4
+//  obs-mac-virtualcam
5
+//
6
+//  Created by John Boiles  on 5/27/20.
7
+//
8
+//  obs-mac-virtualcam is free software: you can redistribute it and/or modify
9
+//  it under the terms of the GNU General Public License as published by
10
+//  the Free Software Foundation, either version 2 of the License, or
11
+//  (at your option) any later version.
12
+//
13
+//  obs-mac-virtualcam is distributed in the hope that it will be useful,
14
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+//  GNU General Public License for more details.
17
+//
18
+//  You should have received a copy of the GNU General Public License
19
+//  along with obs-mac-virtualcam. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+#define PLUGIN_NAME @"mac-virtualcam"
22
+#define PLUGIN_VERSION @"1.3.0"
23
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/dal-plugin/Info.plist Added
42
 
1
@@ -0,0 +1,40 @@
2
+<?xml version="1.0" encoding="UTF-8"?>
3
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
4
+<plist version="1.0">
5
+<dict>
6
+   <key>CFBundleDevelopmentRegion</key>
7
+   <string>English</string>
8
+   <key>CFBundleExecutable</key>
9
+   <string>obs-mac-virtualcam</string>
10
+   <key>CFBundleIdentifier</key>
11
+   <string>com.obsproject.obs-mac-virtualcam.dal-plugin</string>
12
+   <key>CFBundleInfoDictionaryVersion</key>
13
+   <string>6.0</string>
14
+   <key>CFBundleName</key>
15
+   <string>OBS Virtual Camera</string>
16
+   <key>CFBundlePackageType</key>
17
+   <string>BNDL</string>
18
+   <key>CFBundleSupportedPlatforms</key>
19
+   <array>
20
+       <string>MacOSX</string>
21
+   </array>
22
+   <key>CFPlugInFactories</key>
23
+   <dict>
24
+       <key>7E950B8C-5E49-4B9E-B7D0-B3608A08E8F6</key>
25
+       <string>PlugInMain</string>
26
+   </dict>
27
+   <key>CFPlugInTypes</key>
28
+   <dict>
29
+       <key>30010C1C-93BF-11D8-8B5B-000A95AF9C6A</key>
30
+       <array>
31
+           <string>7E950B8C-5E49-4B9E-B7D0-B3608A08E8F6</string>
32
+       </array>
33
+   </dict>
34
+   <key>LSMinimumSystemVersion</key>
35
+   <string>10.13</string>
36
+   <key>CMIOHardwareAssistantServiceNames</key>
37
+   <array>
38
+       <string>com.obsproject.obs-mac-virtualcam.server</string>
39
+   </array>
40
+</dict>
41
+</plist>
42
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/dal-plugin/Logging.h Added
34
 
1
@@ -0,0 +1,32 @@
2
+//
3
+//  Logging.h
4
+//  obs-mac-virtualcam
5
+//
6
+//  Created by John Boiles  on 4/10/20.
7
+//
8
+//  obs-mac-virtualcam is free software: you can redistribute it and/or modify
9
+//  it under the terms of the GNU General Public License as published by
10
+//  the Free Software Foundation, either version 2 of the License, or
11
+//  (at your option) any later version.
12
+//
13
+//  obs-mac-virtualcam is distributed in the hope that it will be useful,
14
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+//  GNU General Public License for more details.
17
+//
18
+//  You should have received a copy of the GNU General Public License
19
+//  along with obs-mac-virtualcam. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+#ifndef Logging_h
22
+#define Logging_h
23
+
24
+#include "Defines.h"
25
+
26
+#define DLog(fmt, ...) NSLog((PLUGIN_NAME @"(DAL): " fmt), ##__VA_ARGS__)
27
+#define DLogFunc(fmt, ...) \
28
+   NSLog((PLUGIN_NAME @"(DAL): %s " fmt), __FUNCTION__, ##__VA_ARGS__)
29
+#define VLog(fmt, ...)
30
+#define VLogFunc(fmt, ...)
31
+#define ELog(fmt, ...) DLog(fmt, ##__VA_ARGS__)
32
+
33
+#endif /* Logging_h */
34
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/dal-plugin/OBSDALDevice.h Added
36
 
1
@@ -0,0 +1,34 @@
2
+//
3
+//  Device.h
4
+//  obs-mac-virtualcam
5
+//
6
+//  Created by John Boiles  on 4/10/20.
7
+//
8
+//  obs-mac-virtualcam is free software: you can redistribute it and/or modify
9
+//  it under the terms of the GNU General Public License as published by
10
+//  the Free Software Foundation, either version 2 of the License, or
11
+//  (at your option) any later version.
12
+//
13
+//  obs-mac-virtualcam is distributed in the hope that it will be useful,
14
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+//  GNU General Public License for more details.
17
+//
18
+//  You should have received a copy of the GNU General Public License
19
+//  along with obs-mac-virtualcam. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+#import <Foundation/Foundation.h>
22
+
23
+#import "OBSDALObjectStore.h"
24
+
25
+NS_ASSUME_NONNULL_BEGIN
26
+
27
+@interface OBSDALDevice : NSObject <CMIOObject>
28
+
29
+@property CMIOObjectID objectId;
30
+@property CMIOObjectID pluginId;
31
+@property CMIOObjectID streamId;
32
+
33
+@end
34
+
35
+NS_ASSUME_NONNULL_END
36
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/dal-plugin/OBSDALDevice.mm Added
297
 
1
@@ -0,0 +1,295 @@
2
+//
3
+//  Device.mm
4
+//  obs-mac-virtualcam
5
+//
6
+//  Created by John Boiles  on 4/10/20.
7
+//
8
+//  obs-mac-virtualcam is free software: you can redistribute it and/or modify
9
+//  it under the terms of the GNU General Public License as published by
10
+//  the Free Software Foundation, either version 2 of the License, or
11
+//  (at your option) any later version.
12
+//
13
+//  obs-mac-virtualcam is distributed in the hope that it will be useful,
14
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+//  GNU General Public License for more details.
17
+//
18
+//  You should have received a copy of the GNU General Public License
19
+//  along with obs-mac-virtualcam. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+#import "OBSDALDevice.h"
22
+
23
+#import <CoreFoundation/CoreFoundation.h>
24
+#include <IOKit/audio/IOAudioTypes.h>
25
+
26
+#import "OBSDALPlugin.h"
27
+#import "Logging.h"
28
+
29
+@interface OBSDALDevice ()
30
+@property BOOL excludeNonDALAccess;
31
+@property pid_t masterPid;
32
+@end
33
+
34
+@implementation OBSDALDevice
35
+
36
+// Note that the DAL's API calls HasProperty before calling GetPropertyDataSize. This means that it can be assumed that address is valid for the property involved.
37
+- (UInt32)getPropertyDataSizeWithAddress:(CMIOObjectPropertyAddress)address
38
+              qualifierDataSize:(UInt32)qualifierDataSize
39
+              qualifierData:(nonnull const void *)qualifierData
40
+{
41
+
42
+   switch (address.mSelector) {
43
+   case kCMIOObjectPropertyName:
44
+       return sizeof(CFStringRef);
45
+   case kCMIOObjectPropertyManufacturer:
46
+       return sizeof(CFStringRef);
47
+   case kCMIOObjectPropertyElementCategoryName:
48
+       return sizeof(CFStringRef);
49
+   case kCMIOObjectPropertyElementNumberName:
50
+       return sizeof(CFStringRef);
51
+   case kCMIODevicePropertyPlugIn:
52
+       return sizeof(CMIOObjectID);
53
+   case kCMIODevicePropertyDeviceUID:
54
+       return sizeof(CFStringRef);
55
+   case kCMIODevicePropertyModelUID:
56
+       return sizeof(CFStringRef);
57
+   case kCMIODevicePropertyTransportType:
58
+       return sizeof(UInt32);
59
+   case kCMIODevicePropertyDeviceIsAlive:
60
+       return sizeof(UInt32);
61
+   case kCMIODevicePropertyDeviceHasChanged:
62
+       return sizeof(UInt32);
63
+   case kCMIODevicePropertyDeviceIsRunning:
64
+       return sizeof(UInt32);
65
+   case kCMIODevicePropertyDeviceIsRunningSomewhere:
66
+       return sizeof(UInt32);
67
+   case kCMIODevicePropertyDeviceCanBeDefaultDevice:
68
+       return sizeof(UInt32);
69
+   case kCMIODevicePropertyHogMode:
70
+       return sizeof(pid_t);
71
+   case kCMIODevicePropertyLatency:
72
+       return sizeof(UInt32);
73
+   case kCMIODevicePropertyStreams:
74
+       // Only one stream
75
+       return sizeof(CMIOStreamID) * 1;
76
+   case kCMIODevicePropertyStreamConfiguration:
77
+       // Only one stream
78
+       return sizeof(UInt32) + (sizeof(UInt32) * 1);
79
+   case kCMIODevicePropertyExcludeNonDALAccess:
80
+       return sizeof(UInt32);
81
+   case kCMIODevicePropertyCanProcessAVCCommand:
82
+       return sizeof(Boolean);
83
+   case kCMIODevicePropertyCanProcessRS422Command:
84
+       return sizeof(Boolean);
85
+   case kCMIODevicePropertyLinkedCoreAudioDeviceUID:
86
+       return sizeof(CFStringRef);
87
+   case kCMIODevicePropertyDeviceMaster:
88
+       return sizeof(pid_t);
89
+   default:
90
+       DLog(@"Device unhandled getPropertyDataSizeWithAddress for %@",
91
+            [OBSDALObjectStore
92
+                StringFromPropertySelector:address.mSelector]);
93
+   };
94
+
95
+   return 0;
96
+}
97
+
98
+// Note that the DAL's API calls HasProperty before calling GetPropertyData. This means that it can be assumed that address is valid for the property involved.
99
+- (void)getPropertyDataWithAddress:(CMIOObjectPropertyAddress)address
100
+        qualifierDataSize:(UInt32)qualifierDataSize
101
+            qualifierData:(nonnull const void *)qualifierData
102
+             dataSize:(UInt32)dataSize
103
+             dataUsed:(nonnull UInt32 *)dataUsed
104
+                 data:(nonnull void *)data
105
+{
106
+
107
+   switch (address.mSelector) {
108
+   case kCMIOObjectPropertyName:
109
+       *static_cast<CFStringRef *>(data) = CFSTR("OBS Virtual Camera");
110
+       *dataUsed = sizeof(CFStringRef);
111
+       break;
112
+   case kCMIOObjectPropertyManufacturer:
113
+       *static_cast<CFStringRef *>(data) = CFSTR("John Boiles");
114
+       *dataUsed = sizeof(CFStringRef);
115
+       break;
116
+   case kCMIOObjectPropertyElementCategoryName:
117
+       *static_cast<CFStringRef *>(data) = CFSTR("Virtual Camera");
118
+       *dataUsed = sizeof(CFStringRef);
119
+       break;
120
+   case kCMIOObjectPropertyElementNumberName:
121
+       *static_cast<CFStringRef *>(data) = CFSTR("0001");
122
+       *dataUsed = sizeof(CFStringRef);
123
+       break;
124
+   case kCMIODevicePropertyPlugIn:
125
+       *static_cast<CMIOObjectID *>(data) = self.pluginId;
126
+       *dataUsed = sizeof(CMIOObjectID);
127
+       break;
128
+   case kCMIODevicePropertyDeviceUID:
129
+       *static_cast<CFStringRef *>(data) =
130
+           CFSTR("obs-virtual-cam-device");
131
+       *dataUsed = sizeof(CFStringRef);
132
+       break;
133
+   case kCMIODevicePropertyModelUID:
134
+       *static_cast<CFStringRef *>(data) =
135
+           CFSTR("obs-virtual-cam-model");
136
+       *dataUsed = sizeof(CFStringRef);
137
+       break;
138
+   case kCMIODevicePropertyTransportType:
139
+       *static_cast<UInt32 *>(data) =
140
+           kIOAudioDeviceTransportTypeBuiltIn;
141
+       *dataUsed = sizeof(UInt32);
142
+       break;
143
+   case kCMIODevicePropertyDeviceIsAlive:
144
+       *static_cast<UInt32 *>(data) = 1;
145
+       *dataUsed = sizeof(UInt32);
146
+       break;
147
+   case kCMIODevicePropertyDeviceHasChanged:
148
+       *static_cast<UInt32 *>(data) = 0;
149
+       *dataUsed = sizeof(UInt32);
150
+       break;
151
+   case kCMIODevicePropertyDeviceIsRunning:
152
+       *static_cast<UInt32 *>(data) = 1;
153
+       *dataUsed = sizeof(UInt32);
154
+       break;
155
+   case kCMIODevicePropertyDeviceIsRunningSomewhere:
156
+       *static_cast<UInt32 *>(data) = 1;
157
+       *dataUsed = sizeof(UInt32);
158
+       break;
159
+   case kCMIODevicePropertyDeviceCanBeDefaultDevice:
160
+       *static_cast<UInt32 *>(data) = 1;
161
+       *dataUsed = sizeof(UInt32);
162
+       break;
163
+   case kCMIODevicePropertyHogMode:
164
+       *static_cast<pid_t *>(data) = -1;
165
+       *dataUsed = sizeof(pid_t);
166
+       break;
167
+   case kCMIODevicePropertyLatency:
168
+       *static_cast<UInt32 *>(data) = 0;
169
+       *dataUsed = sizeof(UInt32);
170
+       break;
171
+   case kCMIODevicePropertyStreams:
172
+       *static_cast<CMIOObjectID *>(data) = self.streamId;
173
+       *dataUsed = sizeof(CMIOObjectID);
174
+       break;
175
+   case kCMIODevicePropertyStreamConfiguration:
176
+       DLog(@"TODO kCMIODevicePropertyStreamConfiguration");
177
+       break;
178
+   case kCMIODevicePropertyExcludeNonDALAccess:
179
+       *static_cast<UInt32 *>(data) = self.excludeNonDALAccess ? 1 : 0;
180
+       *dataUsed = sizeof(UInt32);
181
+       break;
182
+   case kCMIODevicePropertyCanProcessAVCCommand:
183
+       *static_cast<Boolean *>(data) = false;
184
+       *dataUsed = sizeof(Boolean);
185
+       break;
186
+   case kCMIODevicePropertyCanProcessRS422Command:
187
+       *static_cast<Boolean *>(data) = false;
188
+       *dataUsed = sizeof(Boolean);
189
+       break;
190
+   case kCMIODevicePropertyDeviceMaster:
191
+       *static_cast<pid_t *>(data) = self.masterPid;
192
+       *dataUsed = sizeof(pid_t);
193
+       break;
194
+   default:
195
+       DLog(@"Device unhandled getPropertyDataWithAddress for %@",
196
+            [OBSDALObjectStore
197
+                StringFromPropertySelector:address.mSelector]);
198
+       *dataUsed = 0;
199
+       break;
200
+   };
201
+}
202
+
203
+- (BOOL)hasPropertyWithAddress:(CMIOObjectPropertyAddress)address
204
+{
205
+   switch (address.mSelector) {
206
+   case kCMIOObjectPropertyName:
207
+   case kCMIOObjectPropertyManufacturer:
208
+   case kCMIOObjectPropertyElementCategoryName:
209
+   case kCMIOObjectPropertyElementNumberName:
210
+   case kCMIODevicePropertyPlugIn:
211
+   case kCMIODevicePropertyDeviceUID:
212
+   case kCMIODevicePropertyModelUID:
213
+   case kCMIODevicePropertyTransportType:
214
+   case kCMIODevicePropertyDeviceIsAlive:
215
+   case kCMIODevicePropertyDeviceHasChanged:
216
+   case kCMIODevicePropertyDeviceIsRunning:
217
+   case kCMIODevicePropertyDeviceIsRunningSomewhere:
218
+   case kCMIODevicePropertyDeviceCanBeDefaultDevice:
219
+   case kCMIODevicePropertyHogMode:
220
+   case kCMIODevicePropertyLatency:
221
+   case kCMIODevicePropertyStreams:
222
+   case kCMIODevicePropertyExcludeNonDALAccess:
223
+   case kCMIODevicePropertyCanProcessAVCCommand:
224
+   case kCMIODevicePropertyCanProcessRS422Command:
225
+   case kCMIODevicePropertyDeviceMaster:
226
+       return true;
227
+   case kCMIODevicePropertyStreamConfiguration:
228
+   case kCMIODevicePropertyLinkedCoreAudioDeviceUID:
229
+       return false;
230
+   default:
231
+       DLog(@"Device unhandled hasPropertyWithAddress for %@",
232
+            [OBSDALObjectStore
233
+                StringFromPropertySelector:address.mSelector]);
234
+       return false;
235
+   };
236
+}
237
+
238
+- (BOOL)isPropertySettableWithAddress:(CMIOObjectPropertyAddress)address
239
+{
240
+   switch (address.mSelector) {
241
+   case kCMIOObjectPropertyName:
242
+   case kCMIOObjectPropertyManufacturer:
243
+   case kCMIOObjectPropertyElementCategoryName:
244
+   case kCMIOObjectPropertyElementNumberName:
245
+   case kCMIODevicePropertyPlugIn:
246
+   case kCMIODevicePropertyDeviceUID:
247
+   case kCMIODevicePropertyModelUID:
248
+   case kCMIODevicePropertyTransportType:
249
+   case kCMIODevicePropertyDeviceIsAlive:
250
+   case kCMIODevicePropertyDeviceHasChanged:
251
+   case kCMIODevicePropertyDeviceIsRunning:
252
+   case kCMIODevicePropertyDeviceIsRunningSomewhere:
253
+   case kCMIODevicePropertyDeviceCanBeDefaultDevice:
254
+   case kCMIODevicePropertyHogMode:
255
+   case kCMIODevicePropertyLatency:
256
+   case kCMIODevicePropertyStreams:
257
+   case kCMIODevicePropertyStreamConfiguration:
258
+   case kCMIODevicePropertyCanProcessAVCCommand:
259
+   case kCMIODevicePropertyCanProcessRS422Command:
260
+   case kCMIODevicePropertyLinkedCoreAudioDeviceUID:
261
+       return false;
262
+   case kCMIODevicePropertyExcludeNonDALAccess:
263
+   case kCMIODevicePropertyDeviceMaster:
264
+       return true;
265
+   default:
266
+       DLog(@"Device unhandled isPropertySettableWithAddress for %@",
267
+            [OBSDALObjectStore
268
+                StringFromPropertySelector:address.mSelector]);
269
+       return false;
270
+   };
271
+}
272
+
273
+- (void)setPropertyDataWithAddress:(CMIOObjectPropertyAddress)address
274
+        qualifierDataSize:(UInt32)qualifierDataSize
275
+            qualifierData:(nonnull const void *)qualifierData
276
+             dataSize:(UInt32)dataSize
277
+                 data:(nonnull const void *)data
278
+{
279
+
280
+   switch (address.mSelector) {
281
+   case kCMIODevicePropertyExcludeNonDALAccess:
282
+       self.excludeNonDALAccess =
283
+           (*static_cast<const UInt32 *>(data) != 0);
284
+       break;
285
+   case kCMIODevicePropertyDeviceMaster:
286
+       self.masterPid = *static_cast<const pid_t *>(data);
287
+       break;
288
+   default:
289
+       DLog(@"Device unhandled setPropertyDataWithAddress for %@",
290
+            [OBSDALObjectStore
291
+                StringFromPropertySelector:address.mSelector]);
292
+       break;
293
+   };
294
+}
295
+
296
+@end
297
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/dal-plugin/OBSDALMachClient.h Added
35
 
1
@@ -0,0 +1,33 @@
2
+//
3
+//  MachClient.h
4
+//  dal-plugin
5
+//
6
+//  Created by John Boiles  on 5/5/20.
7
+//
8
+
9
+#import <Foundation/Foundation.h>
10
+
11
+NS_ASSUME_NONNULL_BEGIN
12
+
13
+@protocol MachClientDelegate
14
+
15
+- (void)receivedFrameWithSize:(NSSize)size
16
+           timestamp:(uint64_t)timestamp
17
+        fpsNumerator:(uint32_t)fpsNumerator
18
+          fpsDenominator:(uint32_t)fpsDenominator
19
+           frameData:(NSData *)frameData;
20
+- (void)receivedStop;
21
+
22
+@end
23
+
24
+@interface OBSDALMachClient : NSObject
25
+
26
+@property (nullable, weak) id<MachClientDelegate> delegate;
27
+
28
+- (BOOL)isServerAvailable;
29
+
30
+- (BOOL)connectToServer;
31
+
32
+@end
33
+
34
+NS_ASSUME_NONNULL_END
35
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/dal-plugin/OBSDALMachClient.mm Added
142
 
1
@@ -0,0 +1,140 @@
2
+//
3
+//  MachClient.m
4
+//  dal-plugin
5
+//
6
+//  Created by John Boiles  on 5/5/20.
7
+//
8
+
9
+#import "OBSDALMachClient.h"
10
+#import "MachProtocol.h"
11
+#import "Logging.h"
12
+
13
+@interface OBSDALMachClient () <NSPortDelegate> {
14
+   NSPort *_receivePort;
15
+}
16
+@end
17
+
18
+@implementation OBSDALMachClient
19
+
20
+- (void)dealloc
21
+{
22
+   DLogFunc(@"");
23
+   _receivePort.delegate = nil;
24
+}
25
+
26
+- (NSPort *)serverPort
27
+{
28
+// See note in MachServer.mm and don't judge me
29
+#pragma clang diagnostic push
30
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
31
+   return [[NSMachBootstrapServer sharedInstance]
32
+       portForName:@MACH_SERVICE_NAME];
33
+#pragma clang diagnostic pop
34
+}
35
+
36
+- (BOOL)isServerAvailable
37
+{
38
+   return [self serverPort] != nil;
39
+}
40
+
41
+- (NSPort *)receivePort
42
+{
43
+   if (_receivePort == nil) {
44
+       NSPort *receivePort = [NSMachPort port];
45
+       _receivePort = receivePort;
46
+       _receivePort.delegate = self;
47
+       __weak __typeof(self) weakSelf = self;
48
+       dispatch_async(
49
+           dispatch_get_global_queue(
50
+               DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
51
+           ^{
52
+               NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
53
+               [runLoop addPort:receivePort
54
+                    forMode:NSDefaultRunLoopMode];
55
+               // weakSelf should become nil when this object gets destroyed
56
+               while (weakSelf) {
57
+                   [[NSRunLoop currentRunLoop]
58
+                       runUntilDate:
59
+                           [NSDate dateWithTimeIntervalSinceNow:
60
+                                   0.1]];
61
+               }
62
+               DLog(@"Shutting down receive run loop");
63
+           });
64
+       DLog(@"Initialized mach port %d for receiving",
65
+            ((NSMachPort *)_receivePort).machPort);
66
+   }
67
+   return _receivePort;
68
+}
69
+
70
+- (BOOL)connectToServer
71
+{
72
+   DLogFunc(@"");
73
+
74
+   NSPort *sendPort = [self serverPort];
75
+   if (sendPort == nil) {
76
+       ELog(@"Unable to connect to server port");
77
+       return NO;
78
+   }
79
+
80
+   NSPortMessage *message = [[NSPortMessage alloc]
81
+       initWithSendPort:sendPort
82
+            receivePort:self.receivePort
83
+             components:nil];
84
+   message.msgid = MachMsgIdConnect;
85
+
86
+   NSDate *timeout = [NSDate dateWithTimeIntervalSinceNow:5.0];
87
+   if (![message sendBeforeDate:timeout]) {
88
+       ELog(@"sendBeforeDate failed");
89
+       return NO;
90
+   }
91
+
92
+   return YES;
93
+}
94
+
95
+- (void)handlePortMessage:(NSPortMessage *)message
96
+{
97
+   VLogFunc(@"");
98
+   NSArray *components = message.components;
99
+   switch (message.msgid) {
100
+   case MachMsgIdConnect:
101
+       DLog(@"Received connect response");
102
+       break;
103
+   case MachMsgIdFrame:
104
+       VLog(@"Received frame message");
105
+       if (components.count >= 6) {
106
+           CGFloat width;
107
+           [components[0] getBytes:&width length:sizeof(width)];
108
+           CGFloat height;
109
+           [components[1] getBytes:&height length:sizeof(height)];
110
+           uint64_t timestamp;
111
+           [components[2] getBytes:&timestamp
112
+                    length:sizeof(timestamp)];
113
+           VLog(@"Received frame data: %fx%f (%llu)", width,
114
+                height, timestamp);
115
+           NSData *frameData = components[3];
116
+           uint32_t fpsNumerator;
117
+           [components[4] getBytes:&fpsNumerator
118
+                    length:sizeof(fpsNumerator)];
119
+           uint32_t fpsDenominator;
120
+           [components[5] getBytes:&fpsDenominator
121
+                    length:sizeof(fpsDenominator)];
122
+           [self.delegate
123
+               receivedFrameWithSize:NSMakeSize(width, height)
124
+                       timestamp:timestamp
125
+                    fpsNumerator:fpsNumerator
126
+                      fpsDenominator:fpsDenominator
127
+                       frameData:frameData];
128
+       }
129
+       break;
130
+   case MachMsgIdStop:
131
+       DLog(@"Received stop message");
132
+       [self.delegate receivedStop];
133
+       break;
134
+   default:
135
+       ELog(@"Received unexpected response msgid %u",
136
+            (unsigned)message.msgid);
137
+       break;
138
+   }
139
+}
140
+
141
+@end
142
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/dal-plugin/OBSDALObjectStore.h Added
64
 
1
@@ -0,0 +1,62 @@
2
+//
3
+//  ObjectStore.h
4
+//  obs-mac-virtualcam
5
+//
6
+//  Created by John Boiles  on 4/10/20.
7
+//
8
+//  obs-mac-virtualcam is free software: you can redistribute it and/or modify
9
+//  it under the terms of the GNU General Public License as published by
10
+//  the Free Software Foundation, either version 2 of the License, or
11
+//  (at your option) any later version.
12
+//
13
+//  obs-mac-virtualcam is distributed in the hope that it will be useful,
14
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+//  GNU General Public License for more details.
17
+//
18
+//  You should have received a copy of the GNU General Public License
19
+//  along with obs-mac-virtualcam. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+#import <Foundation/Foundation.h>
22
+#import <CoreMediaIO/CMIOHardwarePlugIn.h>
23
+
24
+NS_ASSUME_NONNULL_BEGIN
25
+
26
+@protocol CMIOObject
27
+
28
+- (BOOL)hasPropertyWithAddress:(CMIOObjectPropertyAddress)address;
29
+- (BOOL)isPropertySettableWithAddress:(CMIOObjectPropertyAddress)address;
30
+- (UInt32)getPropertyDataSizeWithAddress:(CMIOObjectPropertyAddress)address
31
+              qualifierDataSize:(UInt32)qualifierDataSize
32
+              qualifierData:(const void *)qualifierData;
33
+- (void)getPropertyDataWithAddress:(CMIOObjectPropertyAddress)address
34
+        qualifierDataSize:(UInt32)qualifierDataSize
35
+            qualifierData:(const void *)qualifierData
36
+             dataSize:(UInt32)dataSize
37
+             dataUsed:(UInt32 *)dataUsed
38
+                 data:(void *)data;
39
+- (void)setPropertyDataWithAddress:(CMIOObjectPropertyAddress)address
40
+        qualifierDataSize:(UInt32)qualifierDataSize
41
+            qualifierData:(const void *)qualifierData
42
+             dataSize:(UInt32)dataSize
43
+                 data:(const void *)data;
44
+
45
+@end
46
+
47
+@interface OBSDALObjectStore : NSObject
48
+
49
++ (OBSDALObjectStore *)SharedObjectStore;
50
+
51
++ (NSObject<CMIOObject> *)GetObjectWithId:(CMIOObjectID)objectId;
52
+
53
++ (NSString *)StringFromPropertySelector:(CMIOObjectPropertySelector)selector;
54
+
55
++ (BOOL)IsBridgedTypeForSelector:(CMIOObjectPropertySelector)selector;
56
+
57
+- (NSObject<CMIOObject> *)getObject:(CMIOObjectID)objectID;
58
+
59
+- (void)setObject:(id<CMIOObject>)object forObjectId:(CMIOObjectID)objectId;
60
+
61
+@end
62
+
63
+NS_ASSUME_NONNULL_END
64
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/dal-plugin/OBSDALObjectStore.mm Added
283
 
1
@@ -0,0 +1,281 @@
2
+//
3
+//  ObjectStore.mm
4
+//  obs-mac-virtualcam
5
+//
6
+//  Created by John Boiles  on 4/10/20.
7
+//
8
+//  obs-mac-virtualcam is free software: you can redistribute it and/or modify
9
+//  it under the terms of the GNU General Public License as published by
10
+//  the Free Software Foundation, either version 2 of the License, or
11
+//  (at your option) any later version.
12
+//
13
+//  obs-mac-virtualcam is distributed in the hope that it will be useful,
14
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+//  GNU General Public License for more details.
17
+//
18
+//  You should have received a copy of the GNU General Public License
19
+//  along with obs-mac-virtualcam. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+#import "OBSDALObjectStore.h"
22
+
23
+@interface OBSDALObjectStore ()
24
+@property NSMutableDictionary *objectMap;
25
+@end
26
+
27
+@implementation OBSDALObjectStore
28
+
29
+// 4-byte selectors to string for easy debugging
30
++ (NSString *)StringFromPropertySelector:(CMIOObjectPropertySelector)selector
31
+{
32
+   switch (selector) {
33
+   case kCMIODevicePropertyPlugIn:
34
+       return @"kCMIODevicePropertyPlugIn";
35
+   case kCMIODevicePropertyDeviceUID:
36
+       return @"kCMIODevicePropertyDeviceUID";
37
+   case kCMIODevicePropertyModelUID:
38
+       return @"kCMIODevicePropertyModelUID";
39
+   case kCMIODevicePropertyTransportType:
40
+       return @"kCMIODevicePropertyTransportType";
41
+   case kCMIODevicePropertyDeviceIsAlive:
42
+       return @"kCMIODevicePropertyDeviceIsAlive";
43
+   case kCMIODevicePropertyDeviceHasChanged:
44
+       return @"kCMIODevicePropertyDeviceHasChanged";
45
+   case kCMIODevicePropertyDeviceIsRunning:
46
+       return @"kCMIODevicePropertyDeviceIsRunning";
47
+   case kCMIODevicePropertyDeviceIsRunningSomewhere:
48
+       return @"kCMIODevicePropertyDeviceIsRunningSomewhere";
49
+   case kCMIODevicePropertyDeviceCanBeDefaultDevice:
50
+       return @"kCMIODevicePropertyDeviceCanBeDefaultDevice";
51
+   case kCMIODevicePropertyHogMode:
52
+       return @"kCMIODevicePropertyHogMode";
53
+   case kCMIODevicePropertyLatency:
54
+       return @"kCMIODevicePropertyLatency";
55
+   case kCMIODevicePropertyStreams:
56
+       return @"kCMIODevicePropertyStreams";
57
+   case kCMIODevicePropertyStreamConfiguration:
58
+       return @"kCMIODevicePropertyStreamConfiguration";
59
+   case kCMIODevicePropertyDeviceMaster:
60
+       return @"kCMIODevicePropertyDeviceMaster";
61
+   case kCMIODevicePropertyExcludeNonDALAccess:
62
+       return @"kCMIODevicePropertyExcludeNonDALAccess";
63
+   case kCMIODevicePropertyClientSyncDiscontinuity:
64
+       return @"kCMIODevicePropertyClientSyncDiscontinuity";
65
+   case kCMIODevicePropertySMPTETimeCallback:
66
+       return @"kCMIODevicePropertySMPTETimeCallback";
67
+   case kCMIODevicePropertyCanProcessAVCCommand:
68
+       return @"kCMIODevicePropertyCanProcessAVCCommand";
69
+   case kCMIODevicePropertyAVCDeviceType:
70
+       return @"kCMIODevicePropertyAVCDeviceType";
71
+   case kCMIODevicePropertyAVCDeviceSignalMode:
72
+       return @"kCMIODevicePropertyAVCDeviceSignalMode";
73
+   case kCMIODevicePropertyCanProcessRS422Command:
74
+       return @"kCMIODevicePropertyCanProcessRS422Command";
75
+   case kCMIODevicePropertyLinkedCoreAudioDeviceUID:
76
+       return @"kCMIODevicePropertyLinkedCoreAudioDeviceUID";
77
+   case kCMIODevicePropertyVideoDigitizerComponents:
78
+       return @"kCMIODevicePropertyVideoDigitizerComponents";
79
+   case kCMIODevicePropertySuspendedByUser:
80
+       return @"kCMIODevicePropertySuspendedByUser";
81
+   case kCMIODevicePropertyLinkedAndSyncedCoreAudioDeviceUID:
82
+       return @"kCMIODevicePropertyLinkedAndSyncedCoreAudioDeviceUID";
83
+   case kCMIODevicePropertyIIDCInitialUnitSpace:
84
+       return @"kCMIODevicePropertyIIDCInitialUnitSpace";
85
+   case kCMIODevicePropertyIIDCCSRData:
86
+       return @"kCMIODevicePropertyIIDCCSRData";
87
+   case kCMIODevicePropertyCanSwitchFrameRatesWithoutFrameDrops:
88
+       return @"kCMIODevicePropertyCanSwitchFrameRatesWithoutFrameDrops";
89
+   case kCMIODevicePropertyLocation:
90
+       return @"kCMIODevicePropertyLocation";
91
+   case kCMIODevicePropertyDeviceHasStreamingError:
92
+       return @"kCMIODevicePropertyDeviceHasStreamingError";
93
+   case kCMIODevicePropertyScopeInput:
94
+       return @"kCMIODevicePropertyScopeInput";
95
+   case kCMIODevicePropertyScopeOutput:
96
+       return @"kCMIODevicePropertyScopeOutput";
97
+   case kCMIODevicePropertyScopePlayThrough:
98
+       return @"kCMIODevicePropertyScopePlayThrough";
99
+   case kCMIOObjectPropertyClass:
100
+       return @"kCMIOObjectPropertyClass";
101
+   case kCMIOObjectPropertyOwner:
102
+       return @"kCMIOObjectPropertyOwner";
103
+   case kCMIOObjectPropertyCreator:
104
+       return @"kCMIOObjectPropertyCreator";
105
+   case kCMIOObjectPropertyName:
106
+       return @"kCMIOObjectPropertyName";
107
+   case kCMIOObjectPropertyManufacturer:
108
+       return @"kCMIOObjectPropertyManufacturer";
109
+   case kCMIOObjectPropertyElementName:
110
+       return @"kCMIOObjectPropertyElementName";
111
+   case kCMIOObjectPropertyElementCategoryName:
112
+       return @"kCMIOObjectPropertyElementCategoryName";
113
+   case kCMIOObjectPropertyElementNumberName:
114
+       return @"kCMIOObjectPropertyElementNumberName";
115
+   case kCMIOObjectPropertyOwnedObjects:
116
+       return @"kCMIOObjectPropertyOwnedObjects";
117
+   case kCMIOObjectPropertyListenerAdded:
118
+       return @"kCMIOObjectPropertyListenerAdded";
119
+   case kCMIOObjectPropertyListenerRemoved:
120
+       return @"kCMIOObjectPropertyListenerRemoved";
121
+   case kCMIOStreamPropertyDirection:
122
+       return @"kCMIOStreamPropertyDirection";
123
+   case kCMIOStreamPropertyTerminalType:
124
+       return @"kCMIOStreamPropertyTerminalType";
125
+   case kCMIOStreamPropertyStartingChannel:
126
+       return @"kCMIOStreamPropertyStartingChannel";
127
+   // Same value as kCMIODevicePropertyLatency
128
+   // case kCMIOStreamPropertyLatency:
129
+   //     return @"kCMIOStreamPropertyLatency";
130
+   case kCMIOStreamPropertyFormatDescription:
131
+       return @"kCMIOStreamPropertyFormatDescription";
132
+   case kCMIOStreamPropertyFormatDescriptions:
133
+       return @"kCMIOStreamPropertyFormatDescriptions";
134
+   case kCMIOStreamPropertyStillImage:
135
+       return @"kCMIOStreamPropertyStillImage";
136
+   case kCMIOStreamPropertyStillImageFormatDescriptions:
137
+       return @"kCMIOStreamPropertyStillImageFormatDescriptions";
138
+   case kCMIOStreamPropertyFrameRate:
139
+       return @"kCMIOStreamPropertyFrameRate";
140
+   case kCMIOStreamPropertyMinimumFrameRate:
141
+       return @"kCMIOStreamPropertyMinimumFrameRate";
142
+   case kCMIOStreamPropertyFrameRates:
143
+       return @"kCMIOStreamPropertyFrameRates";
144
+   case kCMIOStreamPropertyFrameRateRanges:
145
+       return @"kCMIOStreamPropertyFrameRateRanges";
146
+   case kCMIOStreamPropertyNoDataTimeoutInMSec:
147
+       return @"kCMIOStreamPropertyNoDataTimeoutInMSec";
148
+   case kCMIOStreamPropertyDeviceSyncTimeoutInMSec:
149
+       return @"kCMIOStreamPropertyDeviceSyncTimeoutInMSec";
150
+   case kCMIOStreamPropertyNoDataEventCount:
151
+       return @"kCMIOStreamPropertyNoDataEventCount";
152
+   case kCMIOStreamPropertyOutputBufferUnderrunCount:
153
+       return @"kCMIOStreamPropertyOutputBufferUnderrunCount";
154
+   case kCMIOStreamPropertyOutputBufferRepeatCount:
155
+       return @"kCMIOStreamPropertyOutputBufferRepeatCount";
156
+   case kCMIOStreamPropertyOutputBufferQueueSize:
157
+       return @"kCMIOStreamPropertyOutputBufferQueueSize";
158
+   case kCMIOStreamPropertyOutputBuffersRequiredForStartup:
159
+       return @"kCMIOStreamPropertyOutputBuffersRequiredForStartup";
160
+   case kCMIOStreamPropertyOutputBuffersNeededForThrottledPlayback:
161
+       return @"kCMIOStreamPropertyOutputBuffersNeededForThrottledPlayback";
162
+   case kCMIOStreamPropertyFirstOutputPresentationTimeStamp:
163
+       return @"kCMIOStreamPropertyFirstOutputPresentationTimeStamp";
164
+   case kCMIOStreamPropertyEndOfData:
165
+       return @"kCMIOStreamPropertyEndOfData";
166
+   case kCMIOStreamPropertyClock:
167
+       return @"kCMIOStreamPropertyClock";
168
+   case kCMIOStreamPropertyCanProcessDeckCommand:
169
+       return @"kCMIOStreamPropertyCanProcessDeckCommand";
170
+   case kCMIOStreamPropertyDeck:
171
+       return @"kCMIOStreamPropertyDeck";
172
+   case kCMIOStreamPropertyDeckFrameNumber:
173
+       return @"kCMIOStreamPropertyDeckFrameNumber";
174
+   case kCMIOStreamPropertyDeckDropness:
175
+       return @"kCMIOStreamPropertyDeckDropness";
176
+   case kCMIOStreamPropertyDeckThreaded:
177
+       return @"kCMIOStreamPropertyDeckThreaded";
178
+   case kCMIOStreamPropertyDeckLocal:
179
+       return @"kCMIOStreamPropertyDeckLocal";
180
+   case kCMIOStreamPropertyDeckCueing:
181
+       return @"kCMIOStreamPropertyDeckCueing";
182
+   case kCMIOStreamPropertyInitialPresentationTimeStampForLinkedAndSyncedAudio:
183
+       return @"kCMIOStreamPropertyInitialPresentationTimeStampForLinkedAndSyncedAudio";
184
+   case kCMIOStreamPropertyScheduledOutputNotificationProc:
185
+       return @"kCMIOStreamPropertyScheduledOutputNotificationProc";
186
+   case kCMIOStreamPropertyPreferredFormatDescription:
187
+       return @"kCMIOStreamPropertyPreferredFormatDescription";
188
+   case kCMIOStreamPropertyPreferredFrameRate:
189
+       return @"kCMIOStreamPropertyPreferredFrameRate";
190
+   case kCMIOControlPropertyScope:
191
+       return @"kCMIOControlPropertyScope";
192
+   case kCMIOControlPropertyElement:
193
+       return @"kCMIOControlPropertyElement";
194
+   case kCMIOControlPropertyVariant:
195
+       return @"kCMIOControlPropertyVariant";
196
+   case kCMIOHardwarePropertyProcessIsMaster:
197
+       return @"kCMIOHardwarePropertyProcessIsMaster";
198
+   case kCMIOHardwarePropertyIsInitingOrExiting:
199
+       return @"kCMIOHardwarePropertyIsInitingOrExiting";
200
+   case kCMIOHardwarePropertyDevices:
201
+       return @"kCMIOHardwarePropertyDevices";
202
+   case kCMIOHardwarePropertyDefaultInputDevice:
203
+       return @"kCMIOHardwarePropertyDefaultInputDevice";
204
+   case kCMIOHardwarePropertyDefaultOutputDevice:
205
+       return @"kCMIOHardwarePropertyDefaultOutputDevice";
206
+   case kCMIOHardwarePropertyDeviceForUID:
207
+       return @"kCMIOHardwarePropertyDeviceForUID";
208
+   case kCMIOHardwarePropertySleepingIsAllowed:
209
+       return @"kCMIOHardwarePropertySleepingIsAllowed";
210
+   case kCMIOHardwarePropertyUnloadingIsAllowed:
211
+       return @"kCMIOHardwarePropertyUnloadingIsAllowed";
212
+   case kCMIOHardwarePropertyPlugInForBundleID:
213
+       return @"kCMIOHardwarePropertyPlugInForBundleID";
214
+   case kCMIOHardwarePropertyUserSessionIsActiveOrHeadless:
215
+       return @"kCMIOHardwarePropertyUserSessionIsActiveOrHeadless";
216
+   case kCMIOHardwarePropertySuspendedBySystem:
217
+       return @"kCMIOHardwarePropertySuspendedBySystem";
218
+   case kCMIOHardwarePropertyAllowScreenCaptureDevices:
219
+       return @"kCMIOHardwarePropertyAllowScreenCaptureDevices";
220
+   case kCMIOHardwarePropertyAllowWirelessScreenCaptureDevices:
221
+       return @"kCMIOHardwarePropertyAllowWirelessScreenCaptureDevices";
222
+   default:
223
+       uint8_t *chars = (uint8_t *)&selector;
224
+       return [NSString stringWithFormat:@"Unknown selector: %c%c%c%c",
225
+                         chars[0], chars[1], chars[2],
226
+                         chars[3]];
227
+   }
228
+}
229
+
230
++ (BOOL)IsBridgedTypeForSelector:(CMIOObjectPropertySelector)selector
231
+{
232
+   switch (selector) {
233
+   case kCMIOObjectPropertyName:
234
+   case kCMIOObjectPropertyManufacturer:
235
+   case kCMIOObjectPropertyElementName:
236
+   case kCMIOObjectPropertyElementCategoryName:
237
+   case kCMIOObjectPropertyElementNumberName:
238
+   case kCMIODevicePropertyDeviceUID:
239
+   case kCMIODevicePropertyModelUID:
240
+   case kCMIOStreamPropertyFormatDescriptions:
241
+   case kCMIOStreamPropertyFormatDescription:
242
+   case kCMIOStreamPropertyClock:
243
+       return YES;
244
+   default:
245
+       return NO;
246
+   }
247
+}
248
+
249
++ (OBSDALObjectStore *)SharedObjectStore
250
+{
251
+   static OBSDALObjectStore *sObjectStore = nil;
252
+   static dispatch_once_t sOnceToken;
253
+   dispatch_once(&sOnceToken, ^{
254
+       sObjectStore = [[self alloc] init];
255
+   });
256
+   return sObjectStore;
257
+}
258
+
259
++ (NSObject<CMIOObject> *)GetObjectWithId:(CMIOObjectID)objectId
260
+{
261
+   return [[OBSDALObjectStore SharedObjectStore] getObject:objectId];
262
+}
263
+
264
+- (id)init
265
+{
266
+   if (self = [super init]) {
267
+       self.objectMap = [[NSMutableDictionary alloc] init];
268
+   }
269
+   return self;
270
+}
271
+
272
+- (NSObject<CMIOObject> *)getObject:(CMIOObjectID)objectID
273
+{
274
+   return self.objectMap[@(objectID)];
275
+}
276
+
277
+- (void)setObject:(id<CMIOObject>)object forObjectId:(CMIOObjectID)objectId
278
+{
279
+   self.objectMap[@(objectId)] = object;
280
+}
281
+
282
+@end
283
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/dal-plugin/OBSDALPlugInInterface.h Added
25
 
1
@@ -0,0 +1,23 @@
2
+//
3
+//  PlugInInterface.h
4
+//  obs-mac-virtualcam
5
+//
6
+//  Created by John Boiles  on 4/9/20.
7
+//
8
+//  obs-mac-virtualcam is free software: you can redistribute it and/or modify
9
+//  it under the terms of the GNU General Public License as published by
10
+//  the Free Software Foundation, either version 2 of the License, or
11
+//  (at your option) any later version.
12
+//
13
+//  obs-mac-virtualcam is distributed in the hope that it will be useful,
14
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+//  GNU General Public License for more details.
17
+//
18
+//  You should have received a copy of the GNU General Public License
19
+//  along with obs-mac-virtualcam. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+#import <CoreMediaIO/CMIOHardwarePlugIn.h>
22
+
23
+// The static singleton of the plugin interface
24
+CMIOHardwarePlugInRef OBSDALPlugInRef();
25
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/dal-plugin/OBSDALPlugInInterface.mm Added
459
 
1
@@ -0,0 +1,457 @@
2
+//
3
+//  PlugInInterface.mm
4
+//  obs-mac-virtualcam
5
+//
6
+//  This file implements the CMIO DAL plugin interface
7
+//
8
+//  Created by John Boiles  on 4/9/20.
9
+//
10
+//  obs-mac-virtualcam is free software: you can redistribute it and/or modify
11
+//  it under the terms of the GNU General Public License as published by
12
+//  the Free Software Foundation, either version 2 of the License, or
13
+//  (at your option) any later version.
14
+//
15
+//  obs-mac-virtualcam is distributed in the hope that it will be useful,
16
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+//  GNU General Public License for more details.
19
+//
20
+//  You should have received a copy of the GNU General Public License
21
+//  along with obs-mac-virtualcam. If not, see <http://www.gnu.org/licenses/>.
22
+
23
+#import "OBSDALPlugInInterface.h"
24
+
25
+#import <CoreFoundation/CFUUID.h>
26
+
27
+#import "OBSDALPlugin.h"
28
+#import "OBSDALDevice.h"
29
+#import "OBSDALStream.h"
30
+#import "Logging.h"
31
+
32
+#pragma mark Plug-In Operations
33
+
34
+static UInt32 sRefCount = 0;
35
+
36
+ULONG HardwarePlugIn_AddRef(CMIOHardwarePlugInRef self)
37
+{
38
+   sRefCount += 1;
39
+   DLogFunc(@"sRefCount now = %d", sRefCount);
40
+   return sRefCount;
41
+}
42
+
43
+ULONG HardwarePlugIn_Release(CMIOHardwarePlugInRef self)
44
+{
45
+   sRefCount -= 1;
46
+   DLogFunc(@"sRefCount now = %d", sRefCount);
47
+   return sRefCount;
48
+}
49
+
50
+HRESULT HardwarePlugIn_QueryInterface(CMIOHardwarePlugInRef self, REFIID uuid,
51
+                     LPVOID *interface)
52
+{
53
+   DLogFunc(@"");
54
+
55
+   if (!interface) {
56
+       DLogFunc(@"Received an empty interface");
57
+       return E_POINTER;
58
+   }
59
+
60
+   // Set the returned interface to NULL in case the UUIDs don't match
61
+   *interface = NULL;
62
+
63
+   // Create a CoreFoundation UUIDRef for the requested interface.
64
+   CFUUIDRef cfUuid = CFUUIDCreateFromUUIDBytes(kCFAllocatorDefault, uuid);
65
+   CFStringRef uuidString = CFUUIDCreateString(NULL, cfUuid);
66
+   CFStringRef hardwarePluginUuid =
67
+       CFUUIDCreateString(NULL, kCMIOHardwarePlugInInterfaceID);
68
+
69
+   if (CFEqual(uuidString, hardwarePluginUuid)) {
70
+       // Return the interface;
71
+       sRefCount += 1;
72
+       *interface = OBSDALPlugInRef();
73
+       return kCMIOHardwareNoError;
74
+   } else {
75
+       DLogFunc(@"ERR Queried for some weird UUID %@", uuidString);
76
+   }
77
+
78
+   return E_NOINTERFACE;
79
+}
80
+
81
+// I think this is deprecated, seems that HardwarePlugIn_InitializeWithObjectID gets called instead
82
+OSStatus HardwarePlugIn_Initialize(CMIOHardwarePlugInRef self)
83
+{
84
+   DLogFunc(@"ERR self=%p", self);
85
+   return kCMIOHardwareUnspecifiedError;
86
+}
87
+
88
+OSStatus HardwarePlugIn_InitializeWithObjectID(CMIOHardwarePlugInRef self,
89
+                          CMIOObjectID objectID)
90
+{
91
+   DLogFunc(@"self=%p", self);
92
+
93
+   OSStatus error = kCMIOHardwareNoError;
94
+
95
+   OBSDALPlugin *plugIn = [OBSDALPlugin SharedPlugIn];
96
+   plugIn.objectId = objectID;
97
+   [[OBSDALObjectStore SharedObjectStore] setObject:plugIn
98
+                        forObjectId:objectID];
99
+
100
+   OBSDALDevice *device = [[OBSDALDevice alloc] init];
101
+   CMIOObjectID deviceId;
102
+   error = CMIOObjectCreate(OBSDALPlugInRef(), kCMIOObjectSystemObject,
103
+                kCMIODeviceClassID, &deviceId);
104
+   if (error != noErr) {
105
+       DLog(@"CMIOObjectCreate Error %d", error);
106
+       return error;
107
+   }
108
+   device.objectId = deviceId;
109
+   device.pluginId = objectID;
110
+   [[OBSDALObjectStore SharedObjectStore] setObject:device
111
+                        forObjectId:deviceId];
112
+
113
+   OBSDALStream *stream = [[OBSDALStream alloc] init];
114
+   CMIOObjectID streamId;
115
+   error = CMIOObjectCreate(OBSDALPlugInRef(), deviceId,
116
+                kCMIOStreamClassID, &streamId);
117
+   if (error != noErr) {
118
+       DLog(@"CMIOObjectCreate Error %d", error);
119
+       return error;
120
+   }
121
+   stream.objectId = streamId;
122
+   [[OBSDALObjectStore SharedObjectStore] setObject:stream
123
+                        forObjectId:streamId];
124
+   device.streamId = streamId;
125
+   plugIn.stream = stream;
126
+
127
+   // Tell the system about the Device
128
+   error = CMIOObjectsPublishedAndDied(
129
+       OBSDALPlugInRef(), kCMIOObjectSystemObject, 1, &deviceId, 0, 0);
130
+   if (error != kCMIOHardwareNoError) {
131
+       DLog(@"CMIOObjectsPublishedAndDied plugin/device Error %d",
132
+            error);
133
+       return error;
134
+   }
135
+
136
+   // Tell the system about the Stream
137
+   error = CMIOObjectsPublishedAndDied(OBSDALPlugInRef(), deviceId, 1,
138
+                       &streamId, 0, 0);
139
+   if (error != kCMIOHardwareNoError) {
140
+       DLog(@"CMIOObjectsPublishedAndDied device/stream Error %d",
141
+            error);
142
+       return error;
143
+   }
144
+
145
+   return error;
146
+}
147
+
148
+OSStatus HardwarePlugIn_Teardown(CMIOHardwarePlugInRef self)
149
+{
150
+   DLogFunc(@"self=%p", self);
151
+
152
+   OSStatus error = kCMIOHardwareNoError;
153
+
154
+   OBSDALPlugin *plugIn = [OBSDALPlugin SharedPlugIn];
155
+   [plugIn teardown];
156
+
157
+   return error;
158
+}
159
+
160
+#pragma mark CMIOObject Operations
161
+
162
+void HardwarePlugIn_ObjectShow(CMIOHardwarePlugInRef self,
163
+                  CMIOObjectID objectID)
164
+{
165
+   DLogFunc(@"self=%p", self);
166
+}
167
+
168
+Boolean
169
+HardwarePlugIn_ObjectHasProperty(CMIOHardwarePlugInRef self,
170
+                CMIOObjectID objectID,
171
+                const CMIOObjectPropertyAddress *address)
172
+{
173
+
174
+   NSObject<CMIOObject> *object =
175
+       [OBSDALObjectStore GetObjectWithId:objectID];
176
+
177
+   if (object == nil) {
178
+       DLogFunc(@"ERR nil object");
179
+       return false;
180
+   }
181
+
182
+   Boolean answer = [object hasPropertyWithAddress:*address];
183
+
184
+   // Disabling Noisy logs
185
+   // DLogFunc(@"%@(%d) %@ self=%p hasProperty=%d", NSStringFromClass([object class]), objectID, [ObjectStore StringFromPropertySelector:address->mSelector], self, answer);
186
+
187
+   return answer;
188
+}
189
+
190
+OSStatus HardwarePlugIn_ObjectIsPropertySettable(
191
+   CMIOHardwarePlugInRef self, CMIOObjectID objectID,
192
+   const CMIOObjectPropertyAddress *address, Boolean *isSettable)
193
+{
194
+
195
+   NSObject<CMIOObject> *object =
196
+       [OBSDALObjectStore GetObjectWithId:objectID];
197
+
198
+   if (object == nil) {
199
+       DLogFunc(@"ERR nil object");
200
+       return kCMIOHardwareBadObjectError;
201
+   }
202
+
203
+   *isSettable = [object isPropertySettableWithAddress:*address];
204
+
205
+   DLogFunc(@"%@(%d) %@ self=%p settable=%d",
206
+        NSStringFromClass([object class]), objectID,
207
+        [OBSDALObjectStore
208
+            StringFromPropertySelector:address->mSelector],
209
+        self, *isSettable);
210
+
211
+   return kCMIOHardwareNoError;
212
+}
213
+
214
+OSStatus HardwarePlugIn_ObjectGetPropertyDataSize(
215
+   CMIOHardwarePlugInRef self, CMIOObjectID objectID,
216
+   const CMIOObjectPropertyAddress *address, UInt32 qualifierDataSize,
217
+   const void *qualifierData, UInt32 *dataSize)
218
+{
219
+
220
+   NSObject<CMIOObject> *object =
221
+       [OBSDALObjectStore GetObjectWithId:objectID];
222
+
223
+   if (object == nil) {
224
+       DLogFunc(@"ERR nil object");
225
+       return kCMIOHardwareBadObjectError;
226
+   }
227
+
228
+   *dataSize = [object getPropertyDataSizeWithAddress:*address
229
+                    qualifierDataSize:qualifierDataSize
230
+                        qualifierData:qualifierData];
231
+
232
+   // Disabling Noisy logs
233
+   // DLogFunc(@"%@(%d) %@ self=%p size=%d", NSStringFromClass([object class]), objectID, [ObjectStore StringFromPropertySelector:address->mSelector], self, *dataSize);
234
+
235
+   return kCMIOHardwareNoError;
236
+}
237
+
238
+OSStatus HardwarePlugIn_ObjectGetPropertyData(
239
+   CMIOHardwarePlugInRef self, CMIOObjectID objectID,
240
+   const CMIOObjectPropertyAddress *address, UInt32 qualifierDataSize,
241
+   const void *qualifierData, UInt32 dataSize, UInt32 *dataUsed,
242
+   void *data)
243
+{
244
+
245
+   NSObject<CMIOObject> *object =
246
+       [OBSDALObjectStore GetObjectWithId:objectID];
247
+
248
+   if (object == nil) {
249
+       DLogFunc(@"ERR nil object");
250
+       return kCMIOHardwareBadObjectError;
251
+   }
252
+
253
+   [object getPropertyDataWithAddress:*address
254
+            qualifierDataSize:qualifierDataSize
255
+                qualifierData:qualifierData
256
+                 dataSize:dataSize
257
+                 dataUsed:dataUsed
258
+                     data:data];
259
+
260
+   // Disabling Noisy logs
261
+   // if ([ObjectStore IsBridgedTypeForSelector:address->mSelector]) {
262
+   //     id dataObj = (__bridge NSObject *)*static_cast<CFTypeRef*>(data);
263
+   //     DLogFunc(@"%@(%d) %@ self=%p data(id)=%@", NSStringFromClass([object class]), objectID, [ObjectStore StringFromPropertySelector:address->mSelector], self, dataObj);
264
+   // } else {
265
+   //     UInt32 *dataInt = (UInt32 *)data;
266
+   //     DLogFunc(@"%@(%d) %@ self=%p data(int)=%d", NSStringFromClass([object class]), objectID, [ObjectStore StringFromPropertySelector:address->mSelector], self, *dataInt);
267
+   // }
268
+
269
+   return kCMIOHardwareNoError;
270
+}
271
+
272
+OSStatus HardwarePlugIn_ObjectSetPropertyData(
273
+   CMIOHardwarePlugInRef self, CMIOObjectID objectID,
274
+   const CMIOObjectPropertyAddress *address, UInt32 qualifierDataSize,
275
+   const void *qualifierData, UInt32 dataSize, const void *data)
276
+{
277
+
278
+   NSObject<CMIOObject> *object =
279
+       [OBSDALObjectStore GetObjectWithId:objectID];
280
+
281
+   if (object == nil) {
282
+       DLogFunc(@"ERR nil object");
283
+       return kCMIOHardwareBadObjectError;
284
+   }
285
+
286
+   UInt32 *dataInt = (UInt32 *)data;
287
+   DLogFunc(@"%@(%d) %@ self=%p data(int)=%d",
288
+        NSStringFromClass([object class]), objectID,
289
+        [OBSDALObjectStore
290
+            StringFromPropertySelector:address->mSelector],
291
+        self, *dataInt);
292
+
293
+   [object setPropertyDataWithAddress:*address
294
+            qualifierDataSize:qualifierDataSize
295
+                qualifierData:qualifierData
296
+                 dataSize:dataSize
297
+                     data:data];
298
+
299
+   return kCMIOHardwareNoError;
300
+}
301
+
302
+#pragma mark CMIOStream Operations
303
+OSStatus HardwarePlugIn_StreamCopyBufferQueue(
304
+   CMIOHardwarePlugInRef self, CMIOStreamID streamID,
305
+   CMIODeviceStreamQueueAlteredProc queueAlteredProc,
306
+   void *queueAlteredRefCon, CMSimpleQueueRef *queue)
307
+{
308
+
309
+   OBSDALStream *stream =
310
+       (OBSDALStream *)[OBSDALObjectStore GetObjectWithId:streamID];
311
+
312
+   if (stream == nil) {
313
+       DLogFunc(@"ERR nil object");
314
+       return kCMIOHardwareBadObjectError;
315
+   }
316
+
317
+   *queue = [stream copyBufferQueueWithAlteredProc:queueAlteredProc
318
+                     alteredRefCon:queueAlteredRefCon];
319
+
320
+   DLogFunc(@"%@ (id=%d) self=%p queue=%@", stream, streamID, self,
321
+        (__bridge NSObject *)*queue);
322
+
323
+   return kCMIOHardwareNoError;
324
+}
325
+
326
+#pragma mark CMIODevice Operations
327
+OSStatus HardwarePlugIn_DeviceStartStream(CMIOHardwarePlugInRef self,
328
+                     CMIODeviceID deviceID,
329
+                     CMIOStreamID streamID)
330
+{
331
+   DLogFunc(@"self=%p device=%d stream=%d", self, deviceID, streamID);
332
+
333
+   OBSDALStream *stream =
334
+       (OBSDALStream *)[OBSDALObjectStore GetObjectWithId:streamID];
335
+
336
+   if (stream == nil) {
337
+       DLogFunc(@"ERR nil object");
338
+       return kCMIOHardwareBadObjectError;
339
+   }
340
+
341
+   [[OBSDALPlugin SharedPlugIn] startStream];
342
+
343
+   return kCMIOHardwareNoError;
344
+}
345
+
346
+OSStatus HardwarePlugIn_DeviceSuspend(CMIOHardwarePlugInRef self,
347
+                     CMIODeviceID deviceID)
348
+{
349
+   DLogFunc(@"self=%p", self);
350
+   return kCMIOHardwareNoError;
351
+}
352
+
353
+OSStatus HardwarePlugIn_DeviceResume(CMIOHardwarePlugInRef self,
354
+                    CMIODeviceID deviceID)
355
+{
356
+   DLogFunc(@"self=%p", self);
357
+   return kCMIOHardwareNoError;
358
+}
359
+
360
+OSStatus HardwarePlugIn_DeviceStopStream(CMIOHardwarePlugInRef self,
361
+                    CMIODeviceID deviceID,
362
+                    CMIOStreamID streamID)
363
+{
364
+   DLogFunc(@"self=%p device=%d stream=%d", self, deviceID, streamID);
365
+
366
+   OBSDALStream *stream =
367
+       (OBSDALStream *)[OBSDALObjectStore GetObjectWithId:streamID];
368
+
369
+   if (stream == nil) {
370
+       DLogFunc(@"ERR nil object");
371
+       return kCMIOHardwareBadObjectError;
372
+   }
373
+
374
+   [[OBSDALPlugin SharedPlugIn] stopStream];
375
+
376
+   return kCMIOHardwareNoError;
377
+}
378
+
379
+OSStatus
380
+HardwarePlugIn_DeviceProcessAVCCommand(CMIOHardwarePlugInRef self,
381
+                      CMIODeviceID deviceID,
382
+                      CMIODeviceAVCCommand *ioAVCCommand)
383
+{
384
+   DLogFunc(@"self=%p", self);
385
+   return kCMIOHardwareNoError;
386
+}
387
+
388
+OSStatus
389
+HardwarePlugIn_DeviceProcessRS422Command(CMIOHardwarePlugInRef self,
390
+                    CMIODeviceID deviceID,
391
+                    CMIODeviceRS422Command *ioRS422Command)
392
+{
393
+   DLogFunc(@"self=%p", self);
394
+   return kCMIOHardwareNoError;
395
+}
396
+
397
+OSStatus HardwarePlugIn_StreamDeckPlay(CMIOHardwarePlugInRef self,
398
+                      CMIOStreamID streamID)
399
+{
400
+   DLogFunc(@"self=%p", self);
401
+   return kCMIOHardwareIllegalOperationError;
402
+}
403
+
404
+OSStatus HardwarePlugIn_StreamDeckStop(CMIOHardwarePlugInRef self,
405
+                      CMIOStreamID streamID)
406
+{
407
+   DLogFunc(@"self=%p", self);
408
+   return kCMIOHardwareIllegalOperationError;
409
+}
410
+
411
+OSStatus HardwarePlugIn_StreamDeckJog(CMIOHardwarePlugInRef self,
412
+                     CMIOStreamID streamID, SInt32 speed)
413
+{
414
+   DLogFunc(@"self=%p", self);
415
+   return kCMIOHardwareIllegalOperationError;
416
+}
417
+
418
+OSStatus HardwarePlugIn_StreamDeckCueTo(CMIOHardwarePlugInRef self,
419
+                   CMIOStreamID streamID,
420
+                   Float64 requestedTimecode,
421
+                   Boolean playOnCue)
422
+{
423
+   DLogFunc(@"self=%p", self);
424
+   return kCMIOHardwareIllegalOperationError;
425
+}
426
+
427
+static CMIOHardwarePlugInInterface sInterface = {
428
+   // Padding for COM
429
+   NULL,
430
+
431
+   // IUnknown Routines
432
+   (HRESULT (*)(void *, CFUUIDBytes,
433
+            void **))HardwarePlugIn_QueryInterface,
434
+   (ULONG(*)(void *))HardwarePlugIn_AddRef,
435
+   (ULONG(*)(void *))HardwarePlugIn_Release,
436
+
437
+   // DAL Plug-In Routines
438
+   HardwarePlugIn_Initialize, HardwarePlugIn_InitializeWithObjectID,
439
+   HardwarePlugIn_Teardown, HardwarePlugIn_ObjectShow,
440
+   HardwarePlugIn_ObjectHasProperty,
441
+   HardwarePlugIn_ObjectIsPropertySettable,
442
+   HardwarePlugIn_ObjectGetPropertyDataSize,
443
+   HardwarePlugIn_ObjectGetPropertyData,
444
+   HardwarePlugIn_ObjectSetPropertyData, HardwarePlugIn_DeviceSuspend,
445
+   HardwarePlugIn_DeviceResume, HardwarePlugIn_DeviceStartStream,
446
+   HardwarePlugIn_DeviceStopStream, HardwarePlugIn_DeviceProcessAVCCommand,
447
+   HardwarePlugIn_DeviceProcessRS422Command,
448
+   HardwarePlugIn_StreamCopyBufferQueue, HardwarePlugIn_StreamDeckPlay,
449
+   HardwarePlugIn_StreamDeckStop, HardwarePlugIn_StreamDeckJog,
450
+   HardwarePlugIn_StreamDeckCueTo};
451
+
452
+static CMIOHardwarePlugInInterface *sInterfacePtr = &sInterface;
453
+static CMIOHardwarePlugInRef sPlugInRef = &sInterfacePtr;
454
+
455
+CMIOHardwarePlugInRef OBSDALPlugInRef()
456
+{
457
+   return sPlugInRef;
458
+}
459
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/dal-plugin/OBSDALPlugin.h Added
53
 
1
@@ -0,0 +1,51 @@
2
+//
3
+//  PlugIn.h
4
+//  obs-mac-virtualcam
5
+//
6
+//  Created by John Boiles  on 4/9/20.
7
+//
8
+//  obs-mac-virtualcam is free software: you can redistribute it and/or modify
9
+//  it under the terms of the GNU General Public License as published by
10
+//  the Free Software Foundation, either version 2 of the License, or
11
+//  (at your option) any later version.
12
+//
13
+//  obs-mac-virtualcam is distributed in the hope that it will be useful,
14
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+//  GNU General Public License for more details.
17
+//
18
+//  You should have received a copy of the GNU General Public License
19
+//  along with obs-mac-virtualcam. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+#import <Foundation/Foundation.h>
22
+#import <CoreMediaIO/CMIOHardwarePlugIn.h>
23
+
24
+#import "OBSDALObjectStore.h"
25
+#import "OBSDALMachClient.h"
26
+#import "OBSDALStream.h"
27
+
28
+#define kTestCardWidthKey @"obs-mac-virtualcam-test-card-width"
29
+#define kTestCardHeightKey @"obs-mac-virtualcam-test-card-height"
30
+#define kTestCardFPSKey @"obs-mac-virtualcam-test-card-fps"
31
+
32
+NS_ASSUME_NONNULL_BEGIN
33
+
34
+@interface OBSDALPlugin : NSObject <CMIOObject>
35
+
36
+@property CMIOObjectID objectId;
37
+@property (readonly) OBSDALMachClient *machClient;
38
+@property OBSDALStream *stream;
39
+
40
++ (OBSDALPlugin *)SharedPlugIn;
41
+
42
+- (void)initialize;
43
+
44
+- (void)teardown;
45
+
46
+- (void)startStream;
47
+
48
+- (void)stopStream;
49
+
50
+@end
51
+
52
+NS_ASSUME_NONNULL_END
53
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/dal-plugin/OBSDALPlugin.mm Added
257
 
1
@@ -0,0 +1,255 @@
2
+//
3
+//  PlugIn.mm
4
+//  obs-mac-virtualcam
5
+//
6
+//  Created by John Boiles  on 4/9/20.
7
+//
8
+//  obs-mac-virtualcam is free software: you can redistribute it and/or modify
9
+//  it under the terms of the GNU General Public License as published by
10
+//  the Free Software Foundation, either version 2 of the License, or
11
+//  (at your option) any later version.
12
+//
13
+//  obs-mac-virtualcam is distributed in the hope that it will be useful,
14
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+//  GNU General Public License for more details.
17
+//
18
+//  You should have received a copy of the GNU General Public License
19
+//  along with obs-mac-virtualcam. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+#import "OBSDALPlugin.h"
22
+
23
+#import <CoreMediaIO/CMIOHardwarePlugin.h>
24
+
25
+#import "Logging.h"
26
+
27
+typedef enum {
28
+   PlugInStateNotStarted = 0,
29
+   PlugInStateWaitingForServer,
30
+   PlugInStateReceivingFrames,
31
+} OBSDALPlugInState;
32
+
33
+@interface OBSDALPlugin () <MachClientDelegate> {
34
+   //! Serial queue for all state changes that need to be concerned with thread safety
35
+   dispatch_queue_t _stateQueue;
36
+
37
+   //! Repeated timer for driving the mach server re-connection
38
+   dispatch_source_t _machConnectTimer;
39
+
40
+   //! Timeout timer when we haven't received frames for 5s
41
+   dispatch_source_t _timeoutTimer;
42
+}
43
+@property OBSDALPlugInState state;
44
+@property OBSDALMachClient *machClient;
45
+
46
+@end
47
+
48
+@implementation OBSDALPlugin
49
+
50
++ (OBSDALPlugin *)SharedPlugIn
51
+{
52
+   static OBSDALPlugin *sPlugIn = nil;
53
+   static dispatch_once_t sOnceToken;
54
+   dispatch_once(&sOnceToken, ^{
55
+       sPlugIn = [[self alloc] init];
56
+   });
57
+   return sPlugIn;
58
+}
59
+
60
+- (instancetype)init
61
+{
62
+   if (self = [super init]) {
63
+       _stateQueue = dispatch_queue_create(
64
+           "com.obsproject.obs-mac-virtualcam.dal.state",
65
+           DISPATCH_QUEUE_SERIAL);
66
+
67
+       _timeoutTimer = dispatch_source_create(
68
+           DISPATCH_SOURCE_TYPE_TIMER, 0, 0, _stateQueue);
69
+       __weak __typeof(self) weakSelf = self;
70
+       dispatch_source_set_event_handler(_timeoutTimer, ^{
71
+           if (weakSelf.state == PlugInStateReceivingFrames) {
72
+               DLog(@"No frames received for 5s, restarting connection");
73
+               [self stopStream];
74
+               [self startStream];
75
+           }
76
+       });
77
+
78
+       _machClient = [[OBSDALMachClient alloc] init];
79
+       _machClient.delegate = self;
80
+
81
+       _machConnectTimer = dispatch_source_create(
82
+           DISPATCH_SOURCE_TYPE_TIMER, 0, 0, _stateQueue);
83
+       dispatch_time_t startTime = dispatch_time(DISPATCH_TIME_NOW, 0);
84
+       uint64_t intervalTime = (int64_t)(1 * NSEC_PER_SEC);
85
+       dispatch_source_set_timer(_machConnectTimer, startTime,
86
+                     intervalTime, 0);
87
+       dispatch_source_set_event_handler(_machConnectTimer, ^{
88
+           if (![[weakSelf machClient] isServerAvailable]) {
89
+               DLog(@"Server is not available");
90
+           } else if (weakSelf.state ==
91
+                  PlugInStateWaitingForServer) {
92
+               DLog(@"Attempting connection");
93
+               [[weakSelf machClient] connectToServer];
94
+           }
95
+       });
96
+   }
97
+   return self;
98
+}
99
+
100
+- (void)startStream
101
+{
102
+   DLogFunc(@"");
103
+   dispatch_async(_stateQueue, ^{
104
+       if (_state == PlugInStateNotStarted) {
105
+           dispatch_resume(_machConnectTimer);
106
+           [self.stream startServingDefaultFrames];
107
+           _state = PlugInStateWaitingForServer;
108
+       }
109
+   });
110
+}
111
+
112
+- (void)stopStream
113
+{
114
+   DLogFunc(@"");
115
+   dispatch_async(_stateQueue, ^{
116
+       if (_state == PlugInStateWaitingForServer) {
117
+           dispatch_suspend(_machConnectTimer);
118
+           [self.stream stopServingDefaultFrames];
119
+       } else if (_state == PlugInStateReceivingFrames) {
120
+           // TODO: Disconnect from the mach server?
121
+           dispatch_suspend(_timeoutTimer);
122
+       }
123
+       _state = PlugInStateNotStarted;
124
+   });
125
+}
126
+
127
+- (void)initialize
128
+{
129
+}
130
+
131
+- (void)teardown
132
+{
133
+}
134
+
135
+#pragma mark - CMIOObject
136
+
137
+- (BOOL)hasPropertyWithAddress:(CMIOObjectPropertyAddress)address
138
+{
139
+   switch (address.mSelector) {
140
+   case kCMIOObjectPropertyName:
141
+       return true;
142
+   default:
143
+       DLog(@"PlugIn unhandled hasPropertyWithAddress for %@",
144
+            [OBSDALObjectStore
145
+                StringFromPropertySelector:address.mSelector]);
146
+       return false;
147
+   };
148
+}
149
+
150
+- (BOOL)isPropertySettableWithAddress:(CMIOObjectPropertyAddress)address
151
+{
152
+   switch (address.mSelector) {
153
+   case kCMIOObjectPropertyName:
154
+       return false;
155
+   default:
156
+       DLog(@"PlugIn unhandled isPropertySettableWithAddress for %@",
157
+            [OBSDALObjectStore
158
+                StringFromPropertySelector:address.mSelector]);
159
+       return false;
160
+   };
161
+}
162
+
163
+- (UInt32)getPropertyDataSizeWithAddress:(CMIOObjectPropertyAddress)address
164
+              qualifierDataSize:(UInt32)qualifierDataSize
165
+              qualifierData:(const void *)qualifierData
166
+{
167
+   switch (address.mSelector) {
168
+   case kCMIOObjectPropertyName:
169
+       return sizeof(CFStringRef);
170
+   default:
171
+       DLog(@"PlugIn unhandled getPropertyDataSizeWithAddress for %@",
172
+            [OBSDALObjectStore
173
+                StringFromPropertySelector:address.mSelector]);
174
+       return 0;
175
+   };
176
+}
177
+
178
+- (void)getPropertyDataWithAddress:(CMIOObjectPropertyAddress)address
179
+        qualifierDataSize:(UInt32)qualifierDataSize
180
+            qualifierData:(nonnull const void *)qualifierData
181
+             dataSize:(UInt32)dataSize
182
+             dataUsed:(nonnull UInt32 *)dataUsed
183
+                 data:(nonnull void *)data
184
+{
185
+   switch (address.mSelector) {
186
+   case kCMIOObjectPropertyName:
187
+       *static_cast<CFStringRef *>(data) =
188
+           CFSTR("OBS Virtual Camera Plugin");
189
+       *dataUsed = sizeof(CFStringRef);
190
+       return;
191
+   default:
192
+       DLog(@"PlugIn unhandled getPropertyDataWithAddress for %@",
193
+            [OBSDALObjectStore
194
+                StringFromPropertySelector:address.mSelector]);
195
+       return;
196
+   };
197
+}
198
+
199
+- (void)setPropertyDataWithAddress:(CMIOObjectPropertyAddress)address
200
+        qualifierDataSize:(UInt32)qualifierDataSize
201
+            qualifierData:(nonnull const void *)qualifierData
202
+             dataSize:(UInt32)dataSize
203
+                 data:(nonnull const void *)data
204
+{
205
+   DLog(@"PlugIn unhandled setPropertyDataWithAddress for %@",
206
+        [OBSDALObjectStore StringFromPropertySelector:address.mSelector]);
207
+}
208
+
209
+#pragma mark - MachClientDelegate
210
+
211
+- (void)receivedFrameWithSize:(NSSize)size
212
+           timestamp:(uint64_t)timestamp
213
+        fpsNumerator:(uint32_t)fpsNumerator
214
+          fpsDenominator:(uint32_t)fpsDenominator
215
+           frameData:(NSData *)frameData
216
+{
217
+   dispatch_sync(_stateQueue, ^{
218
+       if (_state == PlugInStateWaitingForServer) {
219
+           NSUserDefaults *defaults =
220
+               [NSUserDefaults standardUserDefaults];
221
+           [defaults setInteger:size.width
222
+                     forKey:kTestCardWidthKey];
223
+           [defaults setInteger:size.height
224
+                     forKey:kTestCardHeightKey];
225
+           [defaults setDouble:(double)fpsNumerator /
226
+                       (double)fpsDenominator
227
+                    forKey:kTestCardFPSKey];
228
+
229
+           dispatch_suspend(_machConnectTimer);
230
+           [self.stream stopServingDefaultFrames];
231
+           dispatch_resume(_timeoutTimer);
232
+           _state = PlugInStateReceivingFrames;
233
+       }
234
+   });
235
+
236
+   // Add 5 more seconds onto the timeout timer
237
+   dispatch_source_set_timer(
238
+       _timeoutTimer,
239
+       dispatch_time(DISPATCH_TIME_NOW, 5.0 * NSEC_PER_SEC),
240
+       5.0 * NSEC_PER_SEC, (1ull * NSEC_PER_SEC) / 10);
241
+
242
+   [self.stream queueFrameWithSize:size
243
+                 timestamp:timestamp
244
+              fpsNumerator:fpsNumerator
245
+            fpsDenominator:fpsDenominator
246
+                 frameData:frameData];
247
+}
248
+
249
+- (void)receivedStop
250
+{
251
+   DLogFunc(@"Restarting connection");
252
+   [self stopStream];
253
+   [self startStream];
254
+}
255
+
256
+@end
257
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/dal-plugin/OBSDALPluginMain.mm Added
39
 
1
@@ -0,0 +1,37 @@
2
+//
3
+//  PlugInMain.mm
4
+//  obs-mac-virtualcam
5
+//
6
+//  Created by John Boiles  on 4/9/20.
7
+//
8
+//  obs-mac-virtualcam is free software: you can redistribute it and/or modify
9
+//  it under the terms of the GNU General Public License as published by
10
+//  the Free Software Foundation, either version 2 of the License, or
11
+//  (at your option) any later version.
12
+//
13
+//  obs-mac-virtualcam is distributed in the hope that it will be useful,
14
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+//  GNU General Public License for more details.
17
+//
18
+//  You should have received a copy of the GNU General Public License
19
+//  along with obs-mac-virtualcam. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+#import <CoreMediaIO/CMIOHardwarePlugin.h>
22
+
23
+#import "OBSDALPlugInInterface.h"
24
+#import "Logging.h"
25
+#import "Defines.h"
26
+
27
+//! PlugInMain is the entrypoint for the plugin
28
+extern "C" {
29
+void *PlugInMain(CFAllocatorRef allocator, CFUUIDRef requestedTypeUUID)
30
+{
31
+   DLogFunc(@"version=%@", PLUGIN_VERSION);
32
+   if (!CFEqual(requestedTypeUUID, kCMIOHardwarePlugInTypeID)) {
33
+       return 0;
34
+   }
35
+
36
+   return OBSDALPlugInRef();
37
+}
38
+}
39
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/dal-plugin/OBSDALStream.h Added
50
 
1
@@ -0,0 +1,48 @@
2
+//
3
+//  Stream.h
4
+//  obs-mac-virtualcam
5
+//
6
+//  Created by John Boiles  on 4/10/20.
7
+//
8
+//  obs-mac-virtualcam is free software: you can redistribute it and/or modify
9
+//  it under the terms of the GNU General Public License as published by
10
+//  the Free Software Foundation, either version 2 of the License, or
11
+//  (at your option) any later version.
12
+//
13
+//  obs-mac-virtualcam is distributed in the hope that it will be useful,
14
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+//  GNU General Public License for more details.
17
+//
18
+//  You should have received a copy of the GNU General Public License
19
+//  along with obs-mac-virtualcam. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+#import <Foundation/Foundation.h>
22
+
23
+#import "OBSDALObjectStore.h"
24
+
25
+NS_ASSUME_NONNULL_BEGIN
26
+
27
+@interface OBSDALStream : NSObject <CMIOObject>
28
+
29
+@property CMIOStreamID objectId;
30
+
31
+- (instancetype _Nonnull)init;
32
+
33
+- (CMSimpleQueueRef)copyBufferQueueWithAlteredProc:
34
+               (CMIODeviceStreamQueueAlteredProc)alteredProc
35
+                    alteredRefCon:(void *)alteredRefCon;
36
+
37
+- (void)startServingDefaultFrames;
38
+
39
+- (void)stopServingDefaultFrames;
40
+
41
+- (void)queueFrameWithSize:(NSSize)size
42
+        timestamp:(uint64_t)timestamp
43
+         fpsNumerator:(uint32_t)fpsNumerator
44
+       fpsDenominator:(uint32_t)fpsDenominator
45
+        frameData:(NSData *)frameData;
46
+
47
+@end
48
+
49
+NS_ASSUME_NONNULL_END
50
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/dal-plugin/OBSDALStream.mm Added
572
 
1
@@ -0,0 +1,570 @@
2
+//
3
+//  Stream.mm
4
+//  obs-mac-virtualcam
5
+//
6
+//  Created by John Boiles  on 4/10/20.
7
+//
8
+//  obs-mac-virtualcam is free software: you can redistribute it and/or modify
9
+//  it under the terms of the GNU General Public License as published by
10
+//  the Free Software Foundation, either version 2 of the License, or
11
+//  (at your option) any later version.
12
+//
13
+//  obs-mac-virtualcam is distributed in the hope that it will be useful,
14
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+//  GNU General Public License for more details.
17
+//
18
+//  You should have received a copy of the GNU General Public License
19
+//  along with obs-mac-virtualcam. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+#import "OBSDALStream.h"
22
+
23
+#import <AppKit/AppKit.h>
24
+#import <mach/mach_time.h>
25
+#include <CoreMediaIO/CMIOSampleBuffer.h>
26
+
27
+#import "Logging.h"
28
+#import "CMSampleBufferUtils.h"
29
+#import "OBSDALPlugin.h"
30
+
31
+@interface OBSDALStream () {
32
+   CMSimpleQueueRef _queue;
33
+   CFTypeRef _clock;
34
+   NSImage *_testCardImage;
35
+   dispatch_source_t _frameDispatchSource;
36
+   NSSize _testCardSize;
37
+   Float64 _fps;
38
+}
39
+
40
+@property CMIODeviceStreamQueueAlteredProc alteredProc;
41
+@property void *alteredRefCon;
42
+@property (readonly) CMSimpleQueueRef queue;
43
+@property (readonly) CFTypeRef clock;
44
+@property UInt64 sequenceNumber;
45
+@property (readonly) NSImage *testCardImage;
46
+@property (readonly) NSSize testCardSize;
47
+@property (readonly) Float64 fps;
48
+
49
+@end
50
+
51
+@implementation OBSDALStream
52
+
53
+#define DEFAULT_FPS 30.0
54
+#define DEFAULT_WIDTH 1280
55
+#define DEFAULT_HEIGHT 720
56
+
57
+- (instancetype _Nonnull)init
58
+{
59
+   self = [super init];
60
+   if (self) {
61
+       _frameDispatchSource = dispatch_source_create(
62
+           DISPATCH_SOURCE_TYPE_TIMER, 0, 0,
63
+           dispatch_get_global_queue(
64
+               DISPATCH_QUEUE_PRIORITY_DEFAULT, 0));
65
+       __weak __typeof(self) wself = self;
66
+       dispatch_source_set_event_handler(_frameDispatchSource, ^{
67
+           [wself fillFrame];
68
+       });
69
+   }
70
+   return self;
71
+}
72
+
73
+- (void)dealloc
74
+{
75
+   DLog(@"Stream Dealloc");
76
+   CMIOStreamClockInvalidate(_clock);
77
+   CFRelease(_clock);
78
+   _clock = NULL;
79
+   CFRelease(_queue);
80
+   _queue = NULL;
81
+   dispatch_suspend(_frameDispatchSource);
82
+}
83
+
84
+- (void)startServingDefaultFrames
85
+{
86
+   DLogFunc(@"");
87
+   _testCardImage = nil;
88
+   _testCardSize = NSZeroSize;
89
+   _fps = 0;
90
+   dispatch_time_t startTime = dispatch_time(DISPATCH_TIME_NOW, 0);
91
+   uint64_t intervalTime = (int64_t)(NSEC_PER_SEC / self.fps);
92
+   dispatch_source_set_timer(_frameDispatchSource, startTime, intervalTime,
93
+                 0);
94
+   dispatch_resume(_frameDispatchSource);
95
+}
96
+
97
+- (void)stopServingDefaultFrames
98
+{
99
+   DLogFunc(@"");
100
+   dispatch_suspend(_frameDispatchSource);
101
+}
102
+
103
+- (CMSimpleQueueRef)queue
104
+{
105
+   if (_queue == NULL) {
106
+       // Allocate a one-second long queue, which we can use our FPS constant for.
107
+       OSStatus err = CMSimpleQueueCreate(kCFAllocatorDefault,
108
+                          self.fps, &_queue);
109
+       if (err != noErr) {
110
+           DLog(@"Err %d in CMSimpleQueueCreate", err);
111
+       }
112
+   }
113
+   return _queue;
114
+}
115
+
116
+- (CFTypeRef)clock
117
+{
118
+   if (_clock == NULL) {
119
+       OSStatus err = CMIOStreamClockCreate(
120
+           kCFAllocatorDefault,
121
+           CFSTR("obs-mac-virtualcam::Stream::clock"),
122
+           (__bridge void *)self, CMTimeMake(1, 10), 100, 10,
123
+           &_clock);
124
+       if (err != noErr) {
125
+           DLog(@"Error %d from CMIOStreamClockCreate", err);
126
+       }
127
+   }
128
+   return _clock;
129
+}
130
+
131
+- (NSSize)testCardSize
132
+{
133
+   if (NSEqualSizes(_testCardSize, NSZeroSize)) {
134
+       NSUserDefaults *defaults =
135
+           [NSUserDefaults standardUserDefaults];
136
+       int width = [[defaults objectForKey:kTestCardWidthKey]
137
+           integerValue];
138
+       int height = [[defaults objectForKey:kTestCardHeightKey]
139
+           integerValue];
140
+       if (width == 0 || height == 0) {
141
+           _testCardSize =
142
+               NSMakeSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
143
+       } else {
144
+           _testCardSize = NSMakeSize(width, height);
145
+       }
146
+   }
147
+   return _testCardSize;
148
+}
149
+
150
+- (Float64)fps
151
+{
152
+   if (_fps == 0) {
153
+       NSUserDefaults *defaults =
154
+           [NSUserDefaults standardUserDefaults];
155
+       double fps =
156
+           [[defaults objectForKey:kTestCardFPSKey] doubleValue];
157
+       if (fps == 0) {
158
+           _fps = DEFAULT_FPS;
159
+       } else {
160
+           _fps = fps;
161
+       }
162
+   }
163
+   return _fps;
164
+}
165
+
166
+- (NSImage *)testCardImage
167
+{
168
+   if (_testCardImage == nil) {
169
+       NSString *bundlePath = [[NSBundle
170
+           bundleForClass:[OBSDALStream class]] bundlePath];
171
+       NSString *placeHolderPath = [bundlePath
172
+           stringByAppendingString:
173
+               @"/Contents/Resources/placeholder.png"];
174
+       NSImage *placeholderImage = [[NSImage alloc]
175
+           initWithContentsOfFile:placeHolderPath];
176
+
177
+       NSBitmapImageRep *rep = [[NSBitmapImageRep alloc]
178
+           initWithBitmapDataPlanes:NULL
179
+                     pixelsWide:self.testCardSize.width
180
+                     pixelsHigh:self.testCardSize.height
181
+                  bitsPerSample:8
182
+                samplesPerPixel:4
183
+                   hasAlpha:YES
184
+                   isPlanar:NO
185
+                 colorSpaceName:NSCalibratedRGBColorSpace
186
+                    bytesPerRow:0
187
+                   bitsPerPixel:0];
188
+       rep.size = self.testCardSize;
189
+
190
+       float hScale =
191
+           placeholderImage.size.width / self.testCardSize.width;
192
+       float vScale =
193
+           placeholderImage.size.height / self.testCardSize.height;
194
+
195
+       float scaling = fmax(hScale, vScale);
196
+
197
+       float newWidth = placeholderImage.size.width / scaling;
198
+       float newHeight = placeholderImage.size.height / scaling;
199
+
200
+       float leftOffset = (self.testCardSize.width - newWidth) / 2;
201
+       float topOffset = (self.testCardSize.height - newHeight) / 2;
202
+
203
+       [NSGraphicsContext saveGraphicsState];
204
+       [NSGraphicsContext
205
+           setCurrentContext:
206
+               [NSGraphicsContext
207
+                   graphicsContextWithBitmapImageRep:rep]];
208
+
209
+       NSColor *backgroundColor = [NSColor blackColor];
210
+       [backgroundColor set];
211
+       NSRectFill(NSMakeRect(0, 0, self.testCardSize.width,
212
+                     self.testCardSize.height));
213
+
214
+       [placeholderImage drawInRect:NSMakeRect(leftOffset, topOffset,
215
+                           newWidth, newHeight)
216
+                   fromRect:NSZeroRect
217
+                  operation:NSCompositingOperationCopy
218
+                   fraction:1.0];
219
+       [NSGraphicsContext restoreGraphicsState];
220
+
221
+       NSImage *testCardImage =
222
+           [[NSImage alloc] initWithSize:self.testCardSize];
223
+       [testCardImage addRepresentation:rep];
224
+
225
+       _testCardImage = testCardImage;
226
+   }
227
+   return _testCardImage;
228
+}
229
+
230
+- (CMSimpleQueueRef)copyBufferQueueWithAlteredProc:
231
+               (CMIODeviceStreamQueueAlteredProc)alteredProc
232
+                    alteredRefCon:(void *)alteredRefCon
233
+{
234
+   self.alteredProc = alteredProc;
235
+   self.alteredRefCon = alteredRefCon;
236
+
237
+   // Retain this since it's a copy operation
238
+   CFRetain(self.queue);
239
+
240
+   return self.queue;
241
+}
242
+
243
+- (CVPixelBufferRef)createPixelBufferWithTestAnimation
244
+{
245
+   int width = self.testCardSize.width;
246
+   int height = self.testCardSize.height;
247
+
248
+   NSDictionary *options = [NSDictionary
249
+       dictionaryWithObjectsAndKeys:
250
+           [NSNumber numberWithBool:YES],
251
+           kCVPixelBufferCGImageCompatibilityKey,
252
+           [NSNumber numberWithBool:YES],
253
+           kCVPixelBufferCGBitmapContextCompatibilityKey, nil];
254
+   CVPixelBufferRef pxbuffer = NULL;
255
+   CVReturn status = CVPixelBufferCreate(kCFAllocatorDefault, width,
256
+                         height, kCVPixelFormatType_32ARGB,
257
+                         (__bridge CFDictionaryRef)options,
258
+                         &pxbuffer);
259
+
260
+   NSParameterAssert(status == kCVReturnSuccess && pxbuffer != NULL);
261
+
262
+   CVPixelBufferLockBaseAddress(pxbuffer, 0);
263
+   void *pxdata = CVPixelBufferGetBaseAddressOfPlane(pxbuffer, 0);
264
+   NSParameterAssert(pxdata != NULL);
265
+
266
+   CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB();
267
+   CGContextRef context = CGBitmapContextCreate(
268
+       pxdata, width, height, 8,
269
+       CVPixelBufferGetBytesPerRowOfPlane(pxbuffer, 0), rgbColorSpace,
270
+       kCGImageAlphaPremultipliedFirst | kCGImageByteOrder32Big);
271
+   NSParameterAssert(context);
272
+
273
+   NSGraphicsContext *nsContext = [NSGraphicsContext
274
+       graphicsContextWithCGContext:context
275
+                    flipped:NO];
276
+   [NSGraphicsContext setCurrentContext:nsContext];
277
+
278
+   NSRect rect = NSMakeRect(0, 0, self.testCardImage.size.width,
279
+                self.testCardImage.size.height);
280
+   CGImageRef image = [self.testCardImage CGImageForProposedRect:&rect
281
+                                 context:nsContext
282
+                               hints:nil];
283
+   CGContextDrawImage(context,
284
+              CGRectMake(0, 0, CGImageGetWidth(image),
285
+                     CGImageGetHeight(image)),
286
+              image);
287
+
288
+   //  DrawDialWithFrame(
289
+   //      NSMakeRect(0, 0, width, height),
290
+   //      (int(self.fps) - self.sequenceNumber % int(self.fps)) * 360 /
291
+   //          int(self.fps));
292
+
293
+   CGContextRelease(context);
294
+
295
+   CVPixelBufferUnlockBaseAddress(pxbuffer, 0);
296
+
297
+   return pxbuffer;
298
+}
299
+
300
+- (void)fillFrame
301
+{
302
+   if (CMSimpleQueueGetFullness(self.queue) >= 1.0) {
303
+       DLog(@"Queue is full, bailing out");
304
+       return;
305
+   }
306
+
307
+   CVPixelBufferRef pixelBuffer =
308
+       [self createPixelBufferWithTestAnimation];
309
+
310
+   uint64_t hostTime = mach_absolute_time();
311
+   CMSampleTimingInfo timingInfo =
312
+       CMSampleTimingInfoForTimestamp(hostTime, self.fps, 1);
313
+
314
+   OSStatus err = CMIOStreamClockPostTimingEvent(
315
+       timingInfo.presentationTimeStamp, hostTime, true, self.clock);
316
+   if (err != noErr) {
317
+       DLog(@"CMIOStreamClockPostTimingEvent err %d", err);
318
+   }
319
+
320
+   CMFormatDescriptionRef format;
321
+   CMVideoFormatDescriptionCreateForImageBuffer(kCFAllocatorDefault,
322
+                            pixelBuffer, &format);
323
+
324
+   self.sequenceNumber = CMIOGetNextSequenceNumber(self.sequenceNumber);
325
+
326
+   CMSampleBufferRef buffer;
327
+   err = CMIOSampleBufferCreateForImageBuffer(
328
+       kCFAllocatorDefault, pixelBuffer, format, &timingInfo,
329
+       self.sequenceNumber, kCMIOSampleBufferNoDiscontinuities,
330
+       &buffer);
331
+   CFRelease(pixelBuffer);
332
+   CFRelease(format);
333
+   if (err != noErr) {
334
+       DLog(@"CMIOSampleBufferCreateForImageBuffer err %d", err);
335
+   }
336
+
337
+   CMSimpleQueueEnqueue(self.queue, buffer);
338
+
339
+   // Inform the clients that the queue has been altered
340
+   if (self.alteredProc != NULL) {
341
+       (self.alteredProc)(self.objectId, buffer, self.alteredRefCon);
342
+   }
343
+}
344
+
345
+- (void)queueFrameWithSize:(NSSize)size
346
+        timestamp:(uint64_t)timestamp
347
+         fpsNumerator:(uint32_t)fpsNumerator
348
+       fpsDenominator:(uint32_t)fpsDenominator
349
+        frameData:(NSData *)frameData
350
+{
351
+   if (CMSimpleQueueGetFullness(self.queue) >= 1.0) {
352
+       DLog(@"Queue is full, bailing out");
353
+       return;
354
+   }
355
+   OSStatus err = noErr;
356
+
357
+   CMSampleTimingInfo timingInfo = CMSampleTimingInfoForTimestamp(
358
+       timestamp, fpsNumerator, fpsDenominator);
359
+
360
+   err = CMIOStreamClockPostTimingEvent(timingInfo.presentationTimeStamp,
361
+                        mach_absolute_time(), true,
362
+                        self.clock);
363
+   if (err != noErr) {
364
+       DLog(@"CMIOStreamClockPostTimingEvent err %d", err);
365
+   }
366
+
367
+   self.sequenceNumber = CMIOGetNextSequenceNumber(self.sequenceNumber);
368
+
369
+   CMSampleBufferRef sampleBuffer;
370
+   CMSampleBufferCreateFromData(size, timingInfo, self.sequenceNumber,
371
+                    frameData, &sampleBuffer);
372
+   CMSimpleQueueEnqueue(self.queue, sampleBuffer);
373
+
374
+   // Inform the clients that the queue has been altered
375
+   if (self.alteredProc != NULL) {
376
+       (self.alteredProc)(self.objectId, sampleBuffer,
377
+                  self.alteredRefCon);
378
+   }
379
+}
380
+
381
+- (CMVideoFormatDescriptionRef)getFormatDescription
382
+{
383
+   CMVideoFormatDescriptionRef formatDescription;
384
+   OSStatus err = CMVideoFormatDescriptionCreate(
385
+       kCFAllocatorDefault, kCMVideoCodecType_422YpCbCr8,
386
+       self.testCardSize.width, self.testCardSize.height, NULL,
387
+       &formatDescription);
388
+   if (err != noErr) {
389
+       DLog(@"Error %d from CMVideoFormatDescriptionCreate", err);
390
+   }
391
+   return formatDescription;
392
+}
393
+
394
+#pragma mark - CMIOObject
395
+
396
+- (UInt32)getPropertyDataSizeWithAddress:(CMIOObjectPropertyAddress)address
397
+              qualifierDataSize:(UInt32)qualifierDataSize
398
+              qualifierData:(nonnull const void *)qualifierData
399
+{
400
+   switch (address.mSelector) {
401
+   case kCMIOStreamPropertyInitialPresentationTimeStampForLinkedAndSyncedAudio:
402
+       return sizeof(CMTime);
403
+   case kCMIOStreamPropertyOutputBuffersNeededForThrottledPlayback:
404
+       return sizeof(UInt32);
405
+   case kCMIOObjectPropertyName:
406
+       return sizeof(CFStringRef);
407
+   case kCMIOObjectPropertyManufacturer:
408
+       return sizeof(CFStringRef);
409
+   case kCMIOObjectPropertyElementName:
410
+       return sizeof(CFStringRef);
411
+   case kCMIOObjectPropertyElementCategoryName:
412
+       return sizeof(CFStringRef);
413
+   case kCMIOObjectPropertyElementNumberName:
414
+       return sizeof(CFStringRef);
415
+   case kCMIOStreamPropertyDirection:
416
+       return sizeof(UInt32);
417
+   case kCMIOStreamPropertyTerminalType:
418
+       return sizeof(UInt32);
419
+   case kCMIOStreamPropertyStartingChannel:
420
+       return sizeof(UInt32);
421
+   case kCMIOStreamPropertyLatency:
422
+       return sizeof(UInt32);
423
+   case kCMIOStreamPropertyFormatDescriptions:
424
+       return sizeof(CFArrayRef);
425
+   case kCMIOStreamPropertyFormatDescription:
426
+       return sizeof(CMFormatDescriptionRef);
427
+   case kCMIOStreamPropertyFrameRateRanges:
428
+       return sizeof(AudioValueRange);
429
+   case kCMIOStreamPropertyFrameRate:
430
+   case kCMIOStreamPropertyFrameRates:
431
+       return sizeof(Float64);
432
+   case kCMIOStreamPropertyMinimumFrameRate:
433
+       return sizeof(Float64);
434
+   case kCMIOStreamPropertyClock:
435
+       return sizeof(CFTypeRef);
436
+   default:
437
+       DLog(@"Stream unhandled getPropertyDataSizeWithAddress for %@",
438
+            [OBSDALObjectStore
439
+                StringFromPropertySelector:address.mSelector]);
440
+       return 0;
441
+   };
442
+}
443
+
444
+- (void)getPropertyDataWithAddress:(CMIOObjectPropertyAddress)address
445
+        qualifierDataSize:(UInt32)qualifierDataSize
446
+            qualifierData:(nonnull const void *)qualifierData
447
+             dataSize:(UInt32)dataSize
448
+             dataUsed:(nonnull UInt32 *)dataUsed
449
+                 data:(nonnull void *)data
450
+{
451
+   switch (address.mSelector) {
452
+   case kCMIOObjectPropertyName:
453
+       *static_cast<CFStringRef *>(data) = CFSTR("OBS Virtual Camera");
454
+       *dataUsed = sizeof(CFStringRef);
455
+       break;
456
+   case kCMIOObjectPropertyElementName:
457
+       *static_cast<CFStringRef *>(data) =
458
+           CFSTR("OBS Virtual Camera Stream Element");
459
+       *dataUsed = sizeof(CFStringRef);
460
+       break;
461
+   case kCMIOObjectPropertyManufacturer:
462
+   case kCMIOObjectPropertyElementCategoryName:
463
+   case kCMIOObjectPropertyElementNumberName:
464
+   case kCMIOStreamPropertyTerminalType:
465
+   case kCMIOStreamPropertyStartingChannel:
466
+   case kCMIOStreamPropertyLatency:
467
+   case kCMIOStreamPropertyInitialPresentationTimeStampForLinkedAndSyncedAudio:
468
+   case kCMIOStreamPropertyOutputBuffersNeededForThrottledPlayback:
469
+       break;
470
+   case kCMIOStreamPropertyDirection:
471
+       *static_cast<UInt32 *>(data) = 1;
472
+       *dataUsed = sizeof(UInt32);
473
+       break;
474
+   case kCMIOStreamPropertyFormatDescriptions:
475
+       *static_cast<CFArrayRef *>(
476
+           data) = (__bridge_retained CFArrayRef)[NSArray
477
+           arrayWithObject:(__bridge_transfer NSObject *)
478
+                       [self getFormatDescription]];
479
+       *dataUsed = sizeof(CFArrayRef);
480
+       break;
481
+   case kCMIOStreamPropertyFormatDescription:
482
+       *static_cast<CMVideoFormatDescriptionRef *>(data) =
483
+           [self getFormatDescription];
484
+       *dataUsed = sizeof(CMVideoFormatDescriptionRef);
485
+       break;
486
+   case kCMIOStreamPropertyFrameRateRanges:
487
+       AudioValueRange range;
488
+       range.mMinimum = self.fps;
489
+       range.mMaximum = self.fps;
490
+       *static_cast<AudioValueRange *>(data) = range;
491
+       *dataUsed = sizeof(AudioValueRange);
492
+       break;
493
+   case kCMIOStreamPropertyFrameRate:
494
+   case kCMIOStreamPropertyFrameRates:
495
+       *static_cast<Float64 *>(data) = self.fps;
496
+       *dataUsed = sizeof(Float64);
497
+       break;
498
+   case kCMIOStreamPropertyMinimumFrameRate:
499
+       *static_cast<Float64 *>(data) = self.fps;
500
+       *dataUsed = sizeof(Float64);
501
+       break;
502
+   case kCMIOStreamPropertyClock:
503
+       *static_cast<CFTypeRef *>(data) = self.clock;
504
+       // This one was incredibly tricky and cost me many hours to find. It seems that DAL expects
505
+       // the clock to be retained when returned. It's unclear why, and that seems inconsistent
506
+       // with other properties that don't have the same behavior. But this is what Apple's sample
507
+       // code does.
508
+       // https://github.com/lvsti/CoreMediaIO-DAL-Example/blob/0392cb/Sources/Extras/CoreMediaIO/DeviceAbstractionLayer/Devices/DP/Properties/CMIO_DP_Property_Clock.cpp#L75
509
+       CFRetain(*static_cast<CFTypeRef *>(data));
510
+       *dataUsed = sizeof(CFTypeRef);
511
+       break;
512
+   default:
513
+       DLog(@"Stream unhandled getPropertyDataWithAddress for %@",
514
+            [OBSDALObjectStore
515
+                StringFromPropertySelector:address.mSelector]);
516
+       *dataUsed = 0;
517
+   };
518
+}
519
+
520
+- (BOOL)hasPropertyWithAddress:(CMIOObjectPropertyAddress)address
521
+{
522
+   switch (address.mSelector) {
523
+   case kCMIOObjectPropertyName:
524
+   case kCMIOObjectPropertyElementName:
525
+   case kCMIOStreamPropertyFormatDescriptions:
526
+   case kCMIOStreamPropertyFormatDescription:
527
+   case kCMIOStreamPropertyFrameRateRanges:
528
+   case kCMIOStreamPropertyFrameRate:
529
+   case kCMIOStreamPropertyFrameRates:
530
+   case kCMIOStreamPropertyMinimumFrameRate:
531
+   case kCMIOStreamPropertyClock:
532
+       return true;
533
+   case kCMIOObjectPropertyManufacturer:
534
+   case kCMIOObjectPropertyElementCategoryName:
535
+   case kCMIOObjectPropertyElementNumberName:
536
+   case kCMIOStreamPropertyDirection:
537
+   case kCMIOStreamPropertyTerminalType:
538
+   case kCMIOStreamPropertyStartingChannel:
539
+   case kCMIOStreamPropertyLatency:
540
+   case kCMIOStreamPropertyInitialPresentationTimeStampForLinkedAndSyncedAudio:
541
+   case kCMIOStreamPropertyOutputBuffersNeededForThrottledPlayback:
542
+       DLog(@"TODO: %@",
543
+            [OBSDALObjectStore
544
+                StringFromPropertySelector:address.mSelector]);
545
+       return false;
546
+   default:
547
+       DLog(@"Stream unhandled hasPropertyWithAddress for %@",
548
+            [OBSDALObjectStore
549
+                StringFromPropertySelector:address.mSelector]);
550
+       return false;
551
+   };
552
+}
553
+
554
+- (BOOL)isPropertySettableWithAddress:(CMIOObjectPropertyAddress)address
555
+{
556
+   DLog(@"Stream unhandled isPropertySettableWithAddress for %@",
557
+        [OBSDALObjectStore StringFromPropertySelector:address.mSelector]);
558
+   return false;
559
+}
560
+
561
+- (void)setPropertyDataWithAddress:(CMIOObjectPropertyAddress)address
562
+        qualifierDataSize:(UInt32)qualifierDataSize
563
+            qualifierData:(nonnull const void *)qualifierData
564
+             dataSize:(UInt32)dataSize
565
+                 data:(nonnull const void *)data
566
+{
567
+   DLog(@"Stream unhandled setPropertyDataWithAddress for %@",
568
+        [OBSDALObjectStore StringFromPropertySelector:address.mSelector]);
569
+}
570
+
571
+@end
572
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/dal-plugin/placeholder.png Added
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin Added
2
 
1
+(directory)
2
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/CMakeLists.txt Added
61
 
1
@@ -0,0 +1,59 @@
2
+project(mac-virtualcam)
3
+
4
+find_library(AVFOUNDATION AVFoundation)
5
+find_library(APPKIT AppKit)
6
+find_library(COCOA Cocoa)
7
+find_library(COREFOUNDATION CoreFoundation)
8
+find_library(COREMEDIA CoreMedia)
9
+find_library(COREVIDEO CoreVideo)
10
+find_library(COCOA Cocoa)
11
+find_library(COREMEDIAIO CoreMediaIO)
12
+find_library(IOSURFACE IOSurface)
13
+find_library(IOKIT IOKit)
14
+
15
+include_directories(${AVFOUNDATION}
16
+                   ${APPKIT}
17
+                   ${COCOA}
18
+                   ${COREFOUNDATION}
19
+                   ${COREMEDIA}
20
+                   ${COREVIDEO}
21
+                   ${COREMEDIAIO}
22
+                   ${COCOA}
23
+                   ${IOSURFACE}
24
+                   "${CMAKE_SOURCE_DIR}/UI/obs-frontend-api"
25
+                   ../common)
26
+
27
+set(mac-virtualcam_HEADERS
28
+   Defines.h
29
+   OBSDALMachServer.h
30
+   ../common/MachProtocol.h)
31
+
32
+set(mac-virtualcam_SOURCES
33
+   plugin-main.mm
34
+   OBSDALMachServer.mm)
35
+
36
+add_library(mac-virtualcam MODULE
37
+   ${mac-virtualcam_SOURCES}
38
+   ${mac-virtualcam_HEADERS})
39
+
40
+target_link_libraries(mac-virtualcam
41
+   libobs
42
+   obs-frontend-api
43
+   Qt5::Core
44
+   Qt5::Widgets
45
+   ${AVFOUNDATION}
46
+   ${APPKIT}
47
+   ${COCOA}
48
+   ${COREFOUNDATION}
49
+   ${COREMEDIA}
50
+   ${COREVIDEO}
51
+   ${COREMEDIAIO}
52
+   ${IOSURFACE}
53
+   ${IOKIT})
54
+
55
+set_target_properties(mac-virtualcam PROPERTIES
56
+   FOLDER "plugins"
57
+   COMPILE_FLAGS "-std=gnu++14 -stdlib=libc++ -fobjc-arc -fobjc-weak"
58
+)
59
+
60
+install_obs_plugin_with_data(mac-virtualcam data)
61
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/Defines.h Added
26
 
1
@@ -0,0 +1,24 @@
2
+//
3
+//  Defines.h
4
+//  obs-mac-virtualcam
5
+//
6
+//  Created by John Boiles  on 5/27/20.
7
+//
8
+//  obs-mac-virtualcam is free software: you can redistribute it and/or modify
9
+//  it under the terms of the GNU General Public License as published by
10
+//  the Free Software Foundation, either version 2 of the License, or
11
+//  (at your option) any later version.
12
+//
13
+//  obs-mac-virtualcam is distributed in the hope that it will be useful,
14
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+//  GNU General Public License for more details.
17
+//
18
+//  You should have received a copy of the GNU General Public License
19
+//  along with obs-mac-virtualcam. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+#define PLUGIN_NAME "mac-virtualcam"
22
+#define PLUGIN_VERSION "1.3.0"
23
+
24
+#define blog(level, msg, ...) \
25
+   blog(level, "[" PLUGIN_NAME "] " msg, ##__VA_ARGS__)
26
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/OBSDALMachServer.h Added
31
 
1
@@ -0,0 +1,29 @@
2
+//
3
+//  MachServer.h
4
+//  obs-mac-virtualcam
5
+//
6
+//  Created by John Boiles  on 5/5/20.
7
+//
8
+
9
+#import <Foundation/Foundation.h>
10
+
11
+NS_ASSUME_NONNULL_BEGIN
12
+
13
+@interface OBSDALMachServer : NSObject
14
+
15
+- (void)run;
16
+
17
+/*!
18
+ Will eventually be used for sending frames to all connected clients
19
+ */
20
+- (void)sendFrameWithSize:(NSSize)size
21
+       timestamp:(uint64_t)timestamp
22
+        fpsNumerator:(uint32_t)fpsNumerator
23
+      fpsDenominator:(uint32_t)fpsDenominator
24
+          frameBytes:(uint8_t *)frameBytes;
25
+
26
+- (void)stop;
27
+
28
+@end
29
+
30
+NS_ASSUME_NONNULL_END
31
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/OBSDALMachServer.mm Added
180
 
1
@@ -0,0 +1,178 @@
2
+//
3
+//  MachServer.m
4
+//  mac-virtualcam
5
+//
6
+//  Created by John Boiles  on 5/5/20.
7
+//
8
+
9
+#import "OBSDALMachServer.h"
10
+#import <Foundation/Foundation.h>
11
+#include <obs-module.h>
12
+#include "MachProtocol.h"
13
+#include "Defines.h"
14
+
15
+@interface OBSDALMachServer () <NSPortDelegate>
16
+@property NSPort *port;
17
+@property NSMutableSet *clientPorts;
18
+@property NSRunLoop *runLoop;
19
+@end
20
+
21
+@implementation OBSDALMachServer
22
+
23
+- (id)init
24
+{
25
+   if (self = [super init]) {
26
+       self.clientPorts = [[NSMutableSet alloc] init];
27
+   }
28
+   return self;
29
+}
30
+
31
+- (void)dealloc
32
+{
33
+   blog(LOG_DEBUG, "tearing down MachServer");
34
+   [self.runLoop removePort:self.port forMode:NSDefaultRunLoopMode];
35
+   [self.port invalidate];
36
+   self.port.delegate = nil;
37
+}
38
+
39
+- (void)run
40
+{
41
+   if (self.port != nil) {
42
+       blog(LOG_DEBUG, "mach server already running!");
43
+       return;
44
+   }
45
+
46
+// It's a bummer this is deprecated. The replacement, NSXPCConnection, seems to require
47
+// an assistant process that lives inside the .app bundle. This would be more modern, but adds
48
+// complexity and I think makes it impossible to just run the `obs` binary from the commandline.
49
+// So let's stick with NSMachBootstrapServer at least until it fully goes away.
50
+// At that point we can decide between NSXPCConnection and using the CoreFoundation versions of
51
+// these APIs (which are, interestingly, not deprecated)
52
+#pragma clang diagnostic push
53
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
54
+   self.port = [[NSMachBootstrapServer sharedInstance]
55
+       servicePortWithName:@MACH_SERVICE_NAME];
56
+#pragma clang diagnostic pop
57
+   if (self.port == nil) {
58
+       // This probably means another instance is running.
59
+       blog(LOG_ERROR, "Unable to open mach server port.");
60
+       return;
61
+   }
62
+
63
+   self.port.delegate = self;
64
+
65
+   self.runLoop = [NSRunLoop currentRunLoop];
66
+   [self.runLoop addPort:self.port forMode:NSDefaultRunLoopMode];
67
+
68
+   blog(LOG_DEBUG, "mach server running!");
69
+}
70
+
71
+- (void)handlePortMessage:(NSPortMessage *)message
72
+{
73
+   switch (message.msgid) {
74
+   case MachMsgIdConnect:
75
+       if (message.sendPort != nil) {
76
+           blog(LOG_DEBUG,
77
+                "mach server received connect message from port %d!",
78
+                ((NSMachPort *)message.sendPort).machPort);
79
+           [self.clientPorts addObject:message.sendPort];
80
+       }
81
+       break;
82
+   default:
83
+       blog(LOG_ERROR, "Unexpected mach message ID %u",
84
+            (unsigned)message.msgid);
85
+       break;
86
+   }
87
+}
88
+
89
+- (void)sendMessageToClientsWithMsgId:(uint32_t)msgId
90
+              components:(nullable NSArray *)components
91
+{
92
+   if ([self.clientPorts count] <= 0) {
93
+       return;
94
+   }
95
+
96
+   NSMutableSet *removedPorts = [NSMutableSet set];
97
+
98
+   for (NSPort *port in self.clientPorts) {
99
+       @try {
100
+           NSPortMessage *message = [[NSPortMessage alloc]
101
+               initWithSendPort:port
102
+                    receivePort:nil
103
+                     components:components];
104
+           message.msgid = msgId;
105
+           if (![message
106
+                   sendBeforeDate:
107
+                       [NSDate dateWithTimeIntervalSinceNow:
108
+                               1.0]]) {
109
+               blog(LOG_DEBUG,
110
+                    "failed to send message to %d, removing it from the clients!",
111
+                    ((NSMachPort *)port).machPort);
112
+               [removedPorts addObject:port];
113
+           }
114
+       } @catch (NSException *exception) {
115
+           blog(LOG_DEBUG,
116
+                "failed to send message (exception) to %d, removing it from the clients!",
117
+                ((NSMachPort *)port).machPort);
118
+           [removedPorts addObject:port];
119
+       }
120
+   }
121
+
122
+   // Remove dead ports if necessary
123
+   [self.clientPorts minusSet:removedPorts];
124
+}
125
+
126
+- (void)sendFrameWithSize:(NSSize)size
127
+       timestamp:(uint64_t)timestamp
128
+        fpsNumerator:(uint32_t)fpsNumerator
129
+      fpsDenominator:(uint32_t)fpsDenominator
130
+          frameBytes:(uint8_t *)frameBytes
131
+{
132
+   if ([self.clientPorts count] <= 0) {
133
+       return;
134
+   }
135
+
136
+   @autoreleasepool {
137
+       CGFloat width = size.width;
138
+       NSData *widthData = [NSData dataWithBytes:&width
139
+                          length:sizeof(width)];
140
+       CGFloat height = size.height;
141
+       NSData *heightData = [NSData dataWithBytes:&height
142
+                           length:sizeof(height)];
143
+       NSData *timestampData = [NSData
144
+           dataWithBytes:&timestamp
145
+                  length:sizeof(timestamp)];
146
+       NSData *fpsNumeratorData = [NSData
147
+           dataWithBytes:&fpsNumerator
148
+                  length:sizeof(fpsNumerator)];
149
+       NSData *fpsDenominatorData = [NSData
150
+           dataWithBytes:&fpsDenominator
151
+                  length:sizeof(fpsDenominator)];
152
+
153
+       // NOTE: I'm not totally sure about the safety of dataWithBytesNoCopy in this context.
154
+       // Seems like there could potentially be an issue if the frameBuffer went away before the
155
+       // mach message finished sending. But it seems to be working and avoids a memory copy. Alternately
156
+       // we could do something like
157
+       // NSData *frameData = [NSData dataWithBytes:(void *)frameBytes length:size.width * size.height * 2];
158
+       NSData *frameData = [NSData
159
+           dataWithBytesNoCopy:(void *)frameBytes
160
+                    length:size.width * size.height * 2
161
+                  freeWhenDone:NO];
162
+       [self sendMessageToClientsWithMsgId:MachMsgIdFrame
163
+                    components:@[
164
+                        widthData, heightData,
165
+                        timestampData, frameData,
166
+                        fpsNumeratorData,
167
+                        fpsDenominatorData
168
+                    ]];
169
+   }
170
+}
171
+
172
+- (void)stop
173
+{
174
+   blog(LOG_DEBUG, "sending stop message to %lu clients",
175
+        self.clientPorts.count);
176
+   [self sendMessageToClientsWithMsgId:MachMsgIdStop components:nil];
177
+}
178
+
179
+@end
180
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data Added
2
 
1
+(directory)
2
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale Added
2
 
1
+(directory)
2
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/ar-SA.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="كاميرا ويب افتراضية macOS"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/az-AZ.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="macOS Əyani Veb Kamera"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/ca-ES.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="Càmera web virtual del macOS"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/cs-CZ.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="macOS virtuální webkamera"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/da-DK.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="macOS Virtual Webcam"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/de-DE.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="Virtuelle Kamera für macOS"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/en-GB.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="macOS Virtual Webcam"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/en-US.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+Plugin_Name="macOS Virtual Webcam"
3
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/es-ES.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="Cámara Web Virtual macOS"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/et-EE.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="macOS virtuaalne veebikaamera"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/fa-IR.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="وبکم مجازی سیستم عامل مک"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/fi-FI.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="macOS virtuaalinen web-kamera"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/fr-FR.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="Webcam virtuelle macOS"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/gl-ES.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="Cámara Web Virtual do macOS"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/he-IL.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="מצלמת רשת וירטואלית macOS"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/hu-HU.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="macOS Virtuális Webkamera"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/id-ID.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="kamera web Virtual macOS"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/it-IT.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="Webcam Virtuale macOS"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/ja-JP.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="macOS仮想ウェブカメラ"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/ka-GE.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="macOS ვირტუალური კამერა"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/kab-KAB.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="takamiṛat tuhlist macOS"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/ko-KR.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="macOS 가상 웹캠"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/nl-NL.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="macOS Virtual Webcam"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/pl-PL.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="Wirtualna kamera macOS"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/pt-BR.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="Webcam Virtual do macOS"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/pt-PT.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="Webcam Virtual do MacOS"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/ru-RU.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="macOS виртуальная веб-камера"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/sk-SK.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="macOS Virtuálna Webkamera"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/sl-SI.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="macOS virtualna spletna kamera"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/sv-SE.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="macOS virtuell webbkamera"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/tr-TR.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="macOS Sanal Web Kamerası"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/uk-UA.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="Віртуальна вебкамера macOS"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/zh-CN.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="macOS 虚拟摄像头"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/zh-TW.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Plugin_Name="macOS 虛擬攝像機"
3
+
4
obs-studio-26.1.0.tar.xz/plugins/mac-virtualcam/src/obs-plugin/plugin-main.mm Added
210
 
1
@@ -0,0 +1,208 @@
2
+#include <obs-module.h>
3
+#include <obs.hpp>
4
+#include <pthread.h>
5
+#include <QMainWindow.h>
6
+#include <QAction.h>
7
+#include <obs-frontend-api.h>
8
+#include <obs.h>
9
+#include <CoreFoundation/CoreFoundation.h>
10
+#include <AppKit/AppKit.h>
11
+#include "OBSDALMachServer.h"
12
+#include "Defines.h"
13
+
14
+OBS_DECLARE_MODULE()
15
+OBS_MODULE_USE_DEFAULT_LOCALE("mac-virtualcam", "en-US")
16
+MODULE_EXPORT const char *obs_module_description(void)
17
+{
18
+   return "macOS virtual webcam output";
19
+}
20
+
21
+obs_output_t *outputRef;
22
+obs_video_info videoInfo;
23
+static OBSDALMachServer *sMachServer;
24
+
25
+static bool check_dal_plugin()
26
+{
27
+   NSFileManager *fileManager = [NSFileManager defaultManager];
28
+
29
+   NSString *dalPluginDestinationPath =
30
+       @"/Library/CoreMediaIO/Plug-Ins/DAL/";
31
+   NSString *dalPluginFileName = [dalPluginDestinationPath
32
+       stringByAppendingString:@"obs-mac-virtualcam.plugin"];
33
+
34
+   BOOL dalPluginInstalled =
35
+       [fileManager fileExistsAtPath:dalPluginFileName];
36
+   BOOL dalPluginUpdateNeeded = NO;
37
+
38
+   if (dalPluginInstalled) {
39
+       NSString *dalPluginPlistPath = [dalPluginFileName
40
+           stringByAppendingString:@"/Contents/Info.plist"];
41
+       NSDictionary *dalPluginInfoPlist = [NSDictionary
42
+           dictionaryWithContentsOfURL:
43
+               [NSURL fileURLWithPath:dalPluginPlistPath]
44
+                         error:nil];
45
+       NSString *dalPluginVersion = [dalPluginInfoPlist
46
+           valueForKey:@"CFBundleShortVersionString"];
47
+       const char *obsVersion = obs_get_version_string();
48
+
49
+       if (![dalPluginVersion isEqualToString:@(obsVersion)]) {
50
+           dalPluginUpdateNeeded = YES;
51
+       }
52
+   } else {
53
+       dalPluginUpdateNeeded = YES;
54
+   }
55
+
56
+   if (dalPluginUpdateNeeded) {
57
+       NSString *dalPluginSourcePath;
58
+       NSRunningApplication *app =
59
+           [NSRunningApplication currentApplication];
60
+
61
+       if ([app bundleIdentifier] != nil) {
62
+           NSURL *bundleURL = [app bundleURL];
63
+           NSString *pluginPath =
64
+               @"Contents/Resources/data/obs-mac-virtualcam.plugin";
65
+
66
+           NSURL *pluginUrl = [bundleURL
67
+               URLByAppendingPathComponent:pluginPath];
68
+           dalPluginSourcePath = [pluginUrl path];
69
+       } else {
70
+           dalPluginSourcePath = [[[[app executableURL]
71
+               URLByAppendingPathComponent:
72
+                   @"../data/obs-mac-virtualcam.plugin"]
73
+               path]
74
+               stringByReplacingOccurrencesOfString:@"obs/"
75
+                             withString:@""];
76
+       }
77
+
78
+       if ([fileManager fileExistsAtPath:dalPluginSourcePath]) {
79
+           NSString *copyCmd = [NSString
80
+               stringWithFormat:
81
+                   @"do shell script \"cp -R '%@' '%@'\" with administrator privileges",
82
+                   dalPluginSourcePath,
83
+                   dalPluginDestinationPath];
84
+
85
+           NSDictionary *errorDict;
86
+           NSAppleEventDescriptor *returnDescriptor = NULL;
87
+           NSAppleScript *scriptObject =
88
+               [[NSAppleScript alloc] initWithSource:copyCmd];
89
+           returnDescriptor =
90
+               [scriptObject executeAndReturnError:&errorDict];
91
+           if (errorDict != nil) {
92
+               const char *errorMessage = [[errorDict
93
+                   objectForKey:@"NSAppleScriptErrorMessage"]
94
+                   UTF8String];
95
+               blog(LOG_INFO,
96
+                    "[macOS] VirtualCam DAL Plugin Installation status: %s",
97
+                    errorMessage);
98
+               return false;
99
+           }
100
+       } else {
101
+           blog(LOG_INFO,
102
+                "[macOS] VirtualCam DAL Plugin not shipped with OBS");
103
+           return false;
104
+       }
105
+   }
106
+   return true;
107
+}
108
+
109
+static const char *virtualcam_output_get_name(void *type_data)
110
+{
111
+   (void)type_data;
112
+   return obs_module_text("Plugin_Name");
113
+}
114
+
115
+// This is a dummy pointer so we have something to return from virtualcam_output_create
116
+static void *data = &data;
117
+
118
+static void *virtualcam_output_create(obs_data_t *settings,
119
+                     obs_output_t *output)
120
+{
121
+   outputRef = output;
122
+
123
+   blog(LOG_DEBUG, "output_create");
124
+   sMachServer = [[OBSDALMachServer alloc] init];
125
+   return data;
126
+}
127
+
128
+static void virtualcam_output_destroy(void *data)
129
+{
130
+   blog(LOG_DEBUG, "output_destroy");
131
+   sMachServer = nil;
132
+}
133
+
134
+static bool virtualcam_output_start(void *data)
135
+{
136
+   bool hasDalPlugin = check_dal_plugin();
137
+
138
+   if (!hasDalPlugin) {
139
+       return false;
140
+   }
141
+
142
+   blog(LOG_DEBUG, "output_start");
143
+
144
+   [sMachServer run];
145
+
146
+   obs_get_video_info(&videoInfo);
147
+
148
+   struct video_scale_info conversion = {};
149
+   conversion.format = VIDEO_FORMAT_UYVY;
150
+   conversion.width = videoInfo.output_width;
151
+   conversion.height = videoInfo.output_height;
152
+   obs_output_set_video_conversion(outputRef, &conversion);
153
+   if (!obs_output_begin_data_capture(outputRef, 0)) {
154
+       return false;
155
+   }
156
+
157
+   return true;
158
+}
159
+
160
+static void virtualcam_output_stop(void *data, uint64_t ts)
161
+{
162
+   blog(LOG_DEBUG, "output_stop");
163
+   obs_output_end_data_capture(outputRef);
164
+   [sMachServer stop];
165
+}
166
+
167
+static void virtualcam_output_raw_video(void *data, struct video_data *frame)
168
+{
169
+   uint8_t *outData = frame->data[0];
170
+   if (frame->linesize[0] != (videoInfo.output_width * 2)) {
171
+       blog(LOG_ERROR,
172
+            "unexpected frame->linesize (expected:%d actual:%d)",
173
+            (videoInfo.output_width * 2), frame->linesize[0]);
174
+   }
175
+
176
+   CGFloat width = videoInfo.output_width;
177
+   CGFloat height = videoInfo.output_height;
178
+
179
+   [sMachServer sendFrameWithSize:NSMakeSize(width, height)
180
+                timestamp:frame->timestamp
181
+             fpsNumerator:videoInfo.fps_num
182
+           fpsDenominator:videoInfo.fps_den
183
+               frameBytes:outData];
184
+}
185
+
186
+struct obs_output_info virtualcam_output_info = {
187
+   .id = "virtualcam_output",
188
+   .flags = OBS_OUTPUT_VIDEO,
189
+   .get_name = virtualcam_output_get_name,
190
+   .create = virtualcam_output_create,
191
+   .destroy = virtualcam_output_destroy,
192
+   .start = virtualcam_output_start,
193
+   .stop = virtualcam_output_stop,
194
+   .raw_video = virtualcam_output_raw_video,
195
+};
196
+
197
+bool obs_module_load(void)
198
+{
199
+   blog(LOG_INFO, "version=%s", PLUGIN_VERSION);
200
+
201
+   obs_register_output(&virtualcam_output_info);
202
+
203
+   obs_data_t *obs_settings = obs_data_create();
204
+   obs_data_set_bool(obs_settings, "vcamEnabled", true);
205
+   obs_apply_private_data(obs_settings);
206
+   obs_data_release(obs_settings);
207
+
208
+   return true;
209
+}
210
obs-studio-26.0.2.tar.xz/plugins/mac-vth264/data/locale/az-AZ.ini -> obs-studio-26.1.0.tar.xz/plugins/mac-vth264/data/locale/az-AZ.ini Changed
16
 
1
@@ -1,3 +1,14 @@
2
+VTH264EncHW="Apple VT H264 Avadanlıq Təminatı Kodlayıcı"
3
+VTH264EncSW="Apple VT H264 Proqram Təminatı Kodlayıcı"
4
+VTEncoder="VideoToolbox Kodlayıcı"
5
+Bitrate="Bit sürəti"
6
+UseMaxBitrate="Bit sürətini limitlə"
7
+MaxBitrate="Maksimal bit sürəti"
8
+MaxBitrateWindow="Maksimal bit sürəti pəncərəsi (saniyə)"
9
+KeyframeIntervalSec="Açar Kadr Aralığı (saniyə, 0=avtomatik)"
10
+Profile="Profil"
11
 None="(Heç biri)"
12
+DefaultEncoder="(İlkin Kodlayıcı)"
13
+UseBFrames="B Kadrlarını istifadə et"
14
 
15
 
16
obs-studio-26.0.2.tar.xz/plugins/mac-vth264/data/locale/de-DE.ini -> obs-studio-26.1.0.tar.xz/plugins/mac-vth264/data/locale/de-DE.ini Changed
19
 
1
@@ -1,6 +1,6 @@
2
-VTH264EncHW="Apple‐VT‐H264‐Hardwareencoder"
3
-VTH264EncSW="Apple‐VT‐H264‐Softwareencoder"
4
-VTEncoder="VideoToolbox‐Encoder"
5
+VTH264EncHW="Apple-VT-H264-Hardwareencoder"
6
+VTH264EncSW="Apple-VT-H264-Softwareencoder"
7
+VTEncoder="VideoToolbox-Encoder"
8
 Bitrate="Bitrate"
9
 UseMaxBitrate="Limitiere Bitrate"
10
 MaxBitrate="Maximale Bitrate"
11
@@ -9,6 +9,6 @@
12
 Profile="Profil"
13
 None="(Nichts)"
14
 DefaultEncoder="(Standardencoder)"
15
-UseBFrames="B‐Frames verwenden"
16
+UseBFrames="B-Frames verwenden"
17
 
18
 
19
obs-studio-26.0.2.tar.xz/plugins/mac-vth264/data/locale/id-ID.ini -> obs-studio-26.1.0.tar.xz/plugins/mac-vth264/data/locale/id-ID.ini Changed
7
 
1
@@ -1,4 +1,4 @@
2
-VTH264EncHW="Enkoder Hardware Apple VT H264"
3
+VTH264EncHW="Enkoder Perangkat Keras Apple VT H264"
4
 VTH264EncSW="Enkoder Software Apple VT H264"
5
 VTEncoder="Enkoder VideoToolbox"
6
 Bitrate="Bitrate"
7
obs-studio-26.1.0.tar.xz/plugins/mac-vth264/data/locale/kab-KAB.ini Added
16
 
1
@@ -0,0 +1,14 @@
2
+VTH264EncHW="Asettengal n warrum Apple VT H264"
3
+VTH264EncSW="Asettengal n useɣẓan Apple VT H264"
4
+VTEncoder="Asettengal n uvidyu Toolbox"
5
+Bitrate="Aktum"
6
+UseMaxBitrate="Eg tilist i uktum"
7
+MaxBitrate="Aktum afellay"
8
+MaxBitrateWindow="Asfaylu n uktum afellay (tasinin)"
9
+KeyframeIntervalSec="Azilal n yikataren yufraren (tasinin, 0=awurman)"
10
+Profile="Amaɣnu"
11
+None="(Ulac)"
12
+DefaultEncoder="(Asettengal n lexṣas)"
13
+UseBFrames="Seqdec B-Frames"
14
+
15
+
16
obs-studio-26.0.2.tar.xz/plugins/mac-vth264/data/locale/ro-RO.ini -> obs-studio-26.1.0.tar.xz/plugins/mac-vth264/data/locale/ro-RO.ini Changed
9
 
1
@@ -9,6 +9,6 @@
2
 Profile="Profil"
3
 None="(Niciunul)"
4
 DefaultEncoder="(Codificator implicit)"
5
-UseBFrames="Folosește B-frames"
6
+UseBFrames="Folosește cadre B"
7
 
8
 
9
obs-studio-26.0.2.tar.xz/plugins/mac-vth264/data/locale/vi-VN.ini -> obs-studio-26.1.0.tar.xz/plugins/mac-vth264/data/locale/vi-VN.ini Changed
9
 
1
@@ -4,6 +4,7 @@
2
 Bitrate="Bitrate"
3
 UseMaxBitrate="Giới hạn bitrate"
4
 MaxBitrate="Bitrate tối đa"
5
+MaxBitrateWindow="Tốc độ bit tối đa của cửa sổ (giây)"
6
 KeyframeIntervalSec="Thời gian đặt Keyframe (giây, 0=tự động)"
7
 Profile="Hồ sơ"
8
 None="(Không)"
9
obs-studio-26.0.2.tar.xz/plugins/obs-browser/CMakeLists.txt -> obs-studio-26.1.0.tar.xz/plugins/obs-browser/CMakeLists.txt Changed
34
 
1
@@ -181,7 +181,8 @@
2
 endif(APPLE)
3
 
4
 if (WIN32)
5
-   set_target_properties(obs-browser-page PROPERTIES LINK_FLAGS "/SUBSYSTEM:WINDOWS")
6
+   set_target_properties(obs-browser PROPERTIES LINK_FLAGS "/IGNORE:4099")
7
+   set_target_properties(obs-browser-page PROPERTIES LINK_FLAGS "/IGNORE:4099 /SUBSYSTEM:WINDOWS")
8
 endif(WIN32)
9
 
10
 if (UNIX AND NOT APPLE)
11
@@ -217,15 +218,19 @@
12
        "${CEF_ROOT_DIR}/Release/libGLESv2.dll"
13
        "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/obs-plugins/${BITS}bit/"
14
        COMMAND ${CMAKE_COMMAND} -E copy
15
-       "${CEF_ROOT_DIR}/Release/natives_blob.bin"
16
-       "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/obs-plugins/${BITS}bit/"
17
-       COMMAND ${CMAKE_COMMAND} -E copy
18
        "${CEF_ROOT_DIR}/Release/snapshot_blob.bin"
19
        "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/obs-plugins/${BITS}bit/"
20
        COMMAND ${CMAKE_COMMAND} -E copy
21
        "${CEF_ROOT_DIR}/Release/v8_context_snapshot.bin"
22
        "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/obs-plugins/${BITS}bit/"
23
    )
24
+   if(EXISTS "${CEF_ROOT_DIR}/Release/natives_blob.bin")
25
+       add_custom_command(TARGET obs-browser POST_BUILD
26
+           COMMAND ${CMAKE_COMMAND} -E copy
27
+           "${CEF_ROOT_DIR}/Release/natives_blob.bin"
28
+           "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/obs-plugins/${BITS}bit/"
29
+       )
30
+   endif()
31
 endif()
32
 
33
 if (UNIX AND NOT APPLE)
34
obs-studio-26.0.2.tar.xz/plugins/obs-browser/FindCEF.cmake -> obs-studio-26.1.0.tar.xz/plugins/obs-browser/FindCEF.cmake Changed
24
 
1
@@ -67,9 +67,19 @@
2
                debug ${CEFWRAPPER_LIBRARY_DEBUG})
3
    endif()
4
 else()
5
-   set(CEF_LIBRARIES
6
-           ${CEF_LIBRARY}
7
-           ${CEFWRAPPER_LIBRARY})
8
+   # Fixes cmake 3.19.0 commit that added support for modern Xcode build system, but "forgot"
9
+   # to also escape framework names themselves in addition to the framework path:
10
+   # Commit https://gitlab.kitware.com/cmake/cmake/-/commit/ce2dee9e5bae37c8117087bb83add075c3c123b4
11
+   if(${CMAKE_VERSION} VERSION_GREATER "3.19.0" AND XCODE)
12
+       string(REPLACE "Chromium Embedded Framework" "\"Chromium Embedded Framework\"" CEF_LIBRARY_FIXED ${CEF_LIBRARY})
13
+       set(CEF_LIBRARIES
14
+               ${CEF_LIBRARY_FIXED}
15
+               ${CEFWRAPPER_LIBRARY})
16
+   else()
17
+       set(CEF_LIBRARIES
18
+               ${CEF_LIBRARY}
19
+               ${CEFWRAPPER_LIBRARY})
20
+   endif()
21
 endif()
22
 
23
 find_package_handle_standard_args(CEF DEFAULT_MSG CEF_LIBRARY
24
obs-studio-26.0.2.tar.xz/plugins/obs-browser/README.md -> obs-studio-26.1.0.tar.xz/plugins/obs-browser/README.md Changed
30
 
1
@@ -53,8 +53,10 @@
2
 * obsRecordingStopped
3
 * obsReplaybufferStarting
4
 * obsReplaybufferStarted
5
+* obsReplaybufferSaved
6
 * obsReplaybufferStopping
7
 * obsReplaybufferStopped
8
+* obsExit
9
 
10
 ### Get the current scene
11
 
12
@@ -144,7 +146,7 @@
13
 
14
 #### Getting
15
 
16
-*  Download CEF Mac 64 from [http://opensource.spotify.com/cefbuilds/index.html](http://opensource.spotify.com/cefbuilds/index.html)
17
+*  Download CEF Mac 64 from [https://cef-builds.spotifycdn.com/index.html](https://cef-builds.spotifycdn.com/index.html)
18
     *  Use CEF branch 3770
19
 *  Extract and cd into the folder
20
 
21
@@ -193,7 +195,7 @@
22
 
23
 #### Getting
24
 
25
-*  Download CEF Windows 64bit from [http://opensource.spotify.com/cefbuilds/index.html](http://opensource.spotify.com/cefbuilds/index.html)
26
+*  Download CEF Windows 64bit from [https://cef-builds.spotifycdn.com/index.html](https://cef-builds.spotifycdn.com/index.html)
27
   *  Use CEF branch 3770
28
 *  Extract and cd into the folder
29
 
30
obs-studio-26.0.2.tar.xz/plugins/obs-browser/browser-client.cpp -> obs-studio-26.1.0.tar.xz/plugins/obs-browser/browser-client.cpp Changed
98
 
1
@@ -282,7 +282,87 @@
2
    }
3
    return SPEAKERS_UNKNOWN;
4
 }
5
+#endif
6
 
7
+#if CHROME_VERSION_BUILD >= 4103
8
+void BrowserClient::OnAudioStreamStarted(CefRefPtr<CefBrowser> browser,
9
+                    const CefAudioParameters &params_,
10
+                    int channels_)
11
+{
12
+   channels = channels_;
13
+   channel_layout = (ChannelLayout)params_.channel_layout;
14
+   sample_rate = params_.sample_rate;
15
+   frames_per_buffer = params_.frames_per_buffer;
16
+}
17
+
18
+void BrowserClient::OnAudioStreamPacket(CefRefPtr<CefBrowser> browser,
19
+                   const float **data, int frames,
20
+                   int64_t pts)
21
+{
22
+   if (!bs) {
23
+       return;
24
+   }
25
+   struct obs_source_audio audio = {};
26
+   const uint8_t **pcm = (const uint8_t **)data;
27
+   speaker_layout speakers = GetSpeakerLayout(channel_layout);
28
+   int speaker_count = get_audio_channels(speakers);
29
+   for (int i = 0; i < speaker_count; i++)
30
+       audio.data[i] = pcm[i];
31
+   audio.samples_per_sec = sample_rate;
32
+   audio.frames = frames;
33
+   audio.format = AUDIO_FORMAT_FLOAT_PLANAR;
34
+   audio.speakers = speakers;
35
+   audio.timestamp = (uint64_t)pts * 1000000LLU;
36
+   obs_source_output_audio(bs->source, &audio);
37
+}
38
+
39
+void BrowserClient::OnAudioStreamStopped(CefRefPtr<CefBrowser> browser)
40
+{
41
+   if (!bs) {
42
+       return;
43
+   }
44
+}
45
+
46
+void BrowserClient::OnAudioStreamError(CefRefPtr<CefBrowser> browser,
47
+                      const CefString &message)
48
+{
49
+   if (!bs) {
50
+       return;
51
+   }
52
+}
53
+
54
+static CefAudioHandler::ChannelLayout Convert2CEFSpeakerLayout(int channels)
55
+{
56
+   switch (channels) {
57
+   case 1:
58
+       return CEF_CHANNEL_LAYOUT_MONO;
59
+   case 2:
60
+       return CEF_CHANNEL_LAYOUT_STEREO;
61
+   case 3:
62
+       return CEF_CHANNEL_LAYOUT_2_1;
63
+   case 4:
64
+       return CEF_CHANNEL_LAYOUT_4_0;
65
+   case 5:
66
+       return CEF_CHANNEL_LAYOUT_4_1;
67
+   case 6:
68
+       return CEF_CHANNEL_LAYOUT_5_1;
69
+   case 8:
70
+       return CEF_CHANNEL_LAYOUT_7_1;
71
+   default:
72
+       return CEF_CHANNEL_LAYOUT_UNSUPPORTED;
73
+   }
74
+}
75
+
76
+bool BrowserClient::GetAudioParameters(CefRefPtr<CefBrowser> browser,
77
+                      CefAudioParameters &params)
78
+{
79
+   int channels = (int)audio_output_get_channels(obs_get_audio());
80
+   params.channel_layout = Convert2CEFSpeakerLayout(channels);
81
+   params.sample_rate = (int)audio_output_get_sample_rate(obs_get_audio());
82
+   params.frames_per_buffer = kFramesPerBuffer;
83
+   return true;
84
+}
85
+#elif CHROME_VERSION_BUILD >= 3683 && CHROME_VERSION_BUILD < 4103
86
 void BrowserClient::OnAudioStreamStarted(CefRefPtr<CefBrowser> browser, int id,
87
                     int, ChannelLayout channel_layout,
88
                     int sample_rate, int)
89
@@ -366,7 +446,7 @@
90
        return;
91
    }
92
 
93
-   if (frame->IsMain()) {
94
+   if (frame->IsMain() && bs->css.length()) {
95
        std::string uriEncodedCSS =
96
            CefURIEncode(bs->css, false).ToString();
97
 
98
obs-studio-26.0.2.tar.xz/plugins/obs-browser/browser-client.hpp -> obs-studio-26.1.0.tar.xz/plugins/obs-browser/browser-client.hpp Changed
46
 
1
@@ -50,6 +50,12 @@
2
    CefRect popupRect;
3
    CefRect originalPopupRect;
4
 
5
+#if CHROME_VERSION_BUILD >= 4103
6
+   int sample_rate;
7
+   int channels;
8
+   ChannelLayout channel_layout;
9
+   int frames_per_buffer;
10
+#endif
11
    inline BrowserClient(BrowserSource *bs_, bool sharing_avail,
12
                 bool reroute_audio_)
13
        : bs(bs_),
14
@@ -126,7 +132,22 @@
15
                    const RectList &dirtyRects,
16
                    void *shared_handle) override;
17
 #endif
18
-#if CHROME_VERSION_BUILD >= 3683
19
+#if CHROME_VERSION_BUILD >= 4103
20
+   virtual void OnAudioStreamPacket(CefRefPtr<CefBrowser> browser,
21
+                    const float **data, int frames,
22
+                    int64_t pts) override;
23
+
24
+   virtual void OnAudioStreamStopped(CefRefPtr<CefBrowser> browser);
25
+
26
+   virtual void OnAudioStreamStarted(CefRefPtr<CefBrowser> browser,
27
+                     const CefAudioParameters &params,
28
+                     int channels) override;
29
+   virtual void OnAudioStreamError(CefRefPtr<CefBrowser> browser,
30
+                   const CefString &message) override;
31
+   const int kFramesPerBuffer = 1024;
32
+   virtual bool GetAudioParameters(CefRefPtr<CefBrowser> browser,
33
+                   CefAudioParameters &params);
34
+#elif CHROME_VERSION_BUILD >= 3683
35
    virtual void OnAudioStreamPacket(CefRefPtr<CefBrowser> browser,
36
                     int audio_stream_id,
37
                     const float **data, int frames,
38
@@ -140,7 +161,6 @@
39
                      ChannelLayout channel_layout,
40
                      int sample_rate,
41
                      int frames_per_buffer) override;
42
-
43
 #endif
44
    /* CefLoadHandler */
45
    virtual void OnLoadEnd(CefRefPtr<CefBrowser> browser,
46
obs-studio-26.0.2.tar.xz/plugins/obs-browser/browser-version.h -> obs-studio-26.1.0.tar.xz/plugins/obs-browser/browser-version.h Changed
12
 
1
@@ -1,8 +1,8 @@
2
 #pragma once
3
 
4
 #define OBS_BROWSER_VERSION_MAJOR 2
5
-#define OBS_BROWSER_VERSION_MINOR 8
6
-#define OBS_BROWSER_VERSION_PATCH 7
7
+#define OBS_BROWSER_VERSION_MINOR 9
8
+#define OBS_BROWSER_VERSION_PATCH 1
9
 
10
 #ifndef MAKE_SEMANTIC_VERSION
11
 #define MAKE_SEMANTIC_VERSION(major, minor, patch) \
12
obs-studio-26.0.2.tar.xz/plugins/obs-browser/cef-headers.hpp -> obs-studio-26.1.0.tar.xz/plugins/obs-browser/cef-headers.hpp Changed
10
 
1
@@ -37,7 +37,7 @@
2
 #include <include/cef_render_process_handler.h>
3
 #include <include/cef_request_context_handler.h>
4
 
5
-#if CHROME_VERSION_BUILD < 3507
6
+#if CHROME_VERSION_BUILD < 3507 || CHROME_VERSION_BUILD >= 4183
7
 #define ENABLE_WASHIDDEN 1
8
 #else
9
 #define ENABLE_WASHIDDEN 0
10
obs-studio-26.0.2.tar.xz/plugins/obs-browser/obs-browser-plugin.cpp -> obs-studio-26.1.0.tar.xz/plugins/obs-browser/obs-browser-plugin.cpp Changed
40
 
1
@@ -260,7 +260,9 @@
2
    CefString(&settings.locale) = obs_get_locale();
3
    CefString(&settings.accept_language_list) = accepted_languages;
4
    CefString(&settings.cache_path) = conf_path_abs;
5
-   CefString(&settings.browser_subprocess_path) = path;
6
+   char *abs_path = os_get_abs_path_ptr(path.c_str());
7
+   CefString(&settings.browser_subprocess_path) = abs_path;
8
+   bfree(abs_path);
9
 
10
    bool tex_sharing_avail = false;
11
 
12
@@ -368,7 +370,7 @@
13
    info.video_render = [](void *data, gs_effect_t *) {
14
        static_cast<BrowserSource *>(data)->Render();
15
    };
16
-#if CHROME_VERSION_BUILD >= 3683
17
+#if CHROME_VERSION_BUILD >= 3683 && CHROME_VERSION_BUILD < 4103
18
    info.audio_mix = [](void *data, uint64_t *ts_out,
19
                struct audio_output_data *audio_output,
20
                size_t channels, size_t sample_rate) {
21
@@ -466,6 +468,9 @@
22
    case OBS_FRONTEND_EVENT_REPLAY_BUFFER_STARTED:
23
        DispatchJSEvent("obsReplaybufferStarted", "");
24
        break;
25
+   case OBS_FRONTEND_EVENT_REPLAY_BUFFER_SAVED:
26
+       DispatchJSEvent("obsReplaybufferSaved", "");
27
+       break;
28
    case OBS_FRONTEND_EVENT_REPLAY_BUFFER_STOPPING:
29
        DispatchJSEvent("obsReplaybufferStopping", "");
30
        break;
31
@@ -567,7 +572,7 @@
32
 bool obs_module_load(void)
33
 {
34
    blog(LOG_INFO, "[obs-browser]: Version %s", OBS_BROWSER_VERSION_STRING);
35
-
36
+   blog(LOG_INFO, "[obs-browser]: CEF Version %s", CEF_VERSION);
37
 #ifdef USE_QT_LOOP
38
    qRegisterMetaType<MessageTask>("MessageTask");
39
 #endif
40
obs-studio-26.0.2.tar.xz/plugins/obs-browser/obs-browser-source-audio.cpp -> obs-studio-26.1.0.tar.xz/plugins/obs-browser/obs-browser-source-audio.cpp Changed
15
 
1
@@ -16,7 +16,7 @@
2
  ******************************************************************************/
3
 
4
 #include "obs-browser-source.hpp"
5
-
6
+#if CHROME_VERSION_BUILD < 4103 && CHROME_VERSION_BUILD >= 3683
7
 void BrowserSource::EnumAudioStreams(obs_source_enum_proc_t cb, void *param)
8
 {
9
    std::lock_guard<std::mutex> lock(audio_sources_mutex);
10
@@ -86,3 +86,4 @@
11
    *ts_out = timestamp;
12
    return true;
13
 }
14
+#endif
15
obs-studio-26.0.2.tar.xz/plugins/obs-browser/obs-browser-source.cpp -> obs-studio-26.1.0.tar.xz/plugins/obs-browser/obs-browser-source.cpp Changed
29
 
1
@@ -215,7 +215,7 @@
2
 
3
    cefBrowser = nullptr;
4
 }
5
-
6
+#if CHROME_VERSION_BUILD < 4103 && CHROME_VERSION_BUILD >= 3683
7
 void BrowserSource::ClearAudioStreams()
8
 {
9
    QueueCEFTask([this]() {
10
@@ -224,7 +224,7 @@
11
        audio_sources.clear();
12
    });
13
 }
14
-
15
+#endif
16
 void BrowserSource::SendMouseClick(const struct obs_mouse_event *event,
17
                   int32_t type, bool mouse_up,
18
                   uint32_t click_count)
19
@@ -504,7 +504,9 @@
20
 
21
    DestroyBrowser(true);
22
    DestroyTextures();
23
+#if CHROME_VERSION_BUILD < 4103 && CHROME_VERSION_BUILD >= 3683
24
    ClearAudioStreams();
25
+#endif
26
    if (!shutdown_on_invisible || obs_source_showing(source))
27
        create_browser = true;
28
 
29
obs-studio-26.0.2.tar.xz/plugins/obs-browser/obs-browser-source.hpp -> obs-studio-26.1.0.tar.xz/plugins/obs-browser/obs-browser-source.hpp Changed
73
 
1
@@ -19,28 +19,30 @@
2
 #pragma once
3
 
4
 #include <obs-module.h>
5
-#include <obs.hpp>
6
 
7
 #include "cef-headers.hpp"
8
 #include "browser-config.h"
9
 #include "browser-app.hpp"
10
+#include <functional>
11
+#include <string>
12
 
13
+#if CHROME_VERSION_BUILD < 4103 && CHROME_VERSION_BUILD >= 3683
14
+#include <obs.hpp>
15
 #include <unordered_map>
16
-#include <functional>
17
 #include <vector>
18
-#include <string>
19
 #include <mutex>
20
 
21
-#if EXPERIMENTAL_SHARED_TEXTURE_SUPPORT_ENABLED
22
-extern bool hwaccel;
23
-#endif
24
-
25
 struct AudioStream {
26
    OBSSource source;
27
    speaker_layout speakers;
28
    int channels;
29
    int sample_rate;
30
 };
31
+#endif
32
+
33
+#if EXPERIMENTAL_SHARED_TEXTURE_SUPPORT_ENABLED
34
+extern bool hwaccel;
35
+#endif
36
 
37
 struct BrowserSource {
38
    BrowserSource **p_prev_next = nullptr;
39
@@ -83,7 +85,6 @@
40
 
41
    bool CreateBrowser();
42
    void DestroyBrowser(bool async = false);
43
-   void ClearAudioStreams();
44
    void ExecuteOnBrowser(BrowserFunc func, bool async = false);
45
 
46
    /* ---------------------------- */
47
@@ -94,9 +95,15 @@
48
    void Update(obs_data_t *settings = nullptr);
49
    void Tick();
50
    void Render();
51
+#if CHROME_VERSION_BUILD < 4103 && CHROME_VERSION_BUILD >= 3683
52
+   void ClearAudioStreams();
53
    void EnumAudioStreams(obs_source_enum_proc_t cb, void *param);
54
    bool AudioMix(uint64_t *ts_out, struct audio_output_data *audio_output,
55
              size_t channels, size_t sample_rate);
56
+   std::mutex audio_sources_mutex;
57
+   std::vector<obs_source_t *> audio_sources;
58
+   std::unordered_map<int, AudioStream> audio_streams;
59
+#endif
60
    void SendMouseClick(const struct obs_mouse_event *event, int32_t type,
61
                bool mouse_up, uint32_t click_count);
62
    void SendMouseMove(const struct obs_mouse_event *event,
63
@@ -112,9 +119,4 @@
64
 #if EXPERIMENTAL_SHARED_TEXTURE_SUPPORT_ENABLED
65
    inline void SignalBeginFrame();
66
 #endif
67
-
68
-   std::mutex audio_sources_mutex;
69
-   std::vector<obs_source_t *> audio_sources;
70
-
71
-   std::unordered_map<int, AudioStream> audio_streams;
72
 };
73
obs-studio-26.0.2.tar.xz/plugins/obs-browser/panel/browser-panel.cpp -> obs-studio-26.1.0.tar.xz/plugins/obs-browser/panel/browser-panel.cpp Changed
36
 
1
@@ -33,6 +33,10 @@
2
 }
3
 #endif
4
 
5
+#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
6
+#define SUPPORTS_FRACTIONAL_SCALING
7
+#endif
8
+
9
 class CookieCheck : public CefCookieVisitor {
10
 public:
11
    QCefCookieManager::cookie_exists_cb callback;
12
@@ -227,7 +231,11 @@
13
 
14
        QSize size = this->size();
15
 #ifdef _WIN32
16
+#ifdef SUPPORTS_FRACTIONAL_SCALING
17
+       size *= devicePixelRatioF();
18
+#elif
19
        size *= devicePixelRatio();
20
+#endif
21
        RECT rc = {0, 0, size.width(), size.height()};
22
        windowInfo.SetAsChild((HWND)id, rc);
23
 #elif __APPLE__
24
@@ -263,7 +271,11 @@
25
 void QCefWidgetInternal::Resize()
26
 {
27
 #ifdef _WIN32
28
+#ifdef SUPPORTS_FRACTIONAL_SCALING
29
+   QSize size = this->size() * devicePixelRatioF();
30
+#elif
31
    QSize size = this->size() * devicePixelRatio();
32
+#endif
33
 
34
    QueueCEFTask([this, size]() {
35
        if (!cefBrowser)
36
obs-studio-26.0.2.tar.xz/plugins/obs-ffmpeg/CMakeLists.txt -> obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/CMakeLists.txt Changed
20
 
1
@@ -20,8 +20,9 @@
2
    "${CMAKE_CURRENT_BINARY_DIR}/obs-ffmpeg-config.h")
3
 
4
 set(obs-ffmpeg_HEADERS
5
+   obs-ffmpeg-compat.h
6
    obs-ffmpeg-formats.h
7
-   obs-ffmpeg-compat.h)
8
+   obs-ffmpeg-mux.h)
9
 
10
 set(obs-ffmpeg_SOURCES
11
    obs-ffmpeg.c
12
@@ -29,6 +30,7 @@
13
    obs-ffmpeg-nvenc.c
14
    obs-ffmpeg-output.c
15
    obs-ffmpeg-mux.c
16
+   obs-ffmpeg-hls-mux.c
17
    obs-ffmpeg-source.c)
18
 
19
 if(UNIX AND NOT APPLE)
20
obs-studio-26.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/de-DE.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/de-DE.ini Changed
69
 
1
@@ -1,6 +1,6 @@
2
-FFmpegOutput="FFmpeg‐Ausgabe"
3
-FFmpegAAC="FFmpeg‐Standard‐AAC‐Encoder"
4
-FFmpegOpus="FFmpeg‐Opus‐Encoder"
5
+FFmpegOutput="FFmpeg-Ausgabe"
6
+FFmpegAAC="FFmpeg-Standard-AAC-Encoder"
7
+FFmpegOpus="FFmpeg-Opus-Encoder"
8
 Bitrate="Bitrate"
9
 MaxBitrate="Max. Bitrate"
10
 Preset="Voreinstellung"
11
@@ -9,9 +9,9 @@
12
 KeyframeIntervalSec="Keyframeintervall in Sek. (0 = automatisch)"
13
 Lossless="Verlustfrei"
14
 
15
-BFrames="Max. B‐Frames"
16
+BFrames="Max. B-Frames"
17
 
18
-NVENC.Use2Pass="Two‐Pass‐Codierung verwenden"
19
+NVENC.Use2Pass="Two-Pass-Codierung verwenden"
20
 NVENC.Preset.default="Leistung"
21
 NVENC.Preset.hq="Qualität"
22
 NVENC.Preset.hp="Max. Leistung"
23
@@ -20,10 +20,10 @@
24
 NVENC.Preset.llhq="Niedrige Latenz und Qualität"
25
 NVENC.Preset.llhp="Niedrige Latenz und Leistung"
26
 NVENC.LookAhead="Lookahead"
27
-NVENC.LookAhead.ToolTip="Aktiviert dynamische B‐Frames.\n\nWenn deaktiviert, wird der Encoder immer die Anzahl der B‐Frames verwenden, die in der Einstellung „Max. B‐Frames“ angegeben sind.\n\nWenn aktiviert, wird die visuelle Qualität erhöht, indem nur so viele B‐Frames bis zum Maximum verwendet werden, wie benötigt.\n(Resultiert in eine höhere GPU‐Nutzung.)"
28
+NVENC.LookAhead.ToolTip="Aktiviert dynamische B-Frames.\n\nWenn deaktiviert, wird der Encoder immer die Anzahl der B-Frames verwenden, die in der Einstellung „Max. B-Frames“ angegeben sind.\n\nWenn aktiviert, wird die visuelle Qualität erhöht, indem nur so viele B-Frames bis zum Maximum verwendet werden, wie benötigt.\n(Resultiert in eine höhere GPU-Nutzung.)"
29
 NVENC.PsychoVisualTuning="Psycho Visual Tuning"
30
-NVENC.PsychoVisualTuning.ToolTip="Aktiviert Encodereinstellungen, die die Verwendung der Bitrate für eine erhöhte wahrgenommene visuelle Qualität optimieren,\ninsbesondere in Situationen mit hoher Bewegung.\n(Resultiert in eine höhere GPU‐Nutzung.)"
31
-NVENC.CQLevel="CQ‐Level"
32
+NVENC.PsychoVisualTuning.ToolTip="Aktiviert Encodereinstellungen, die die Verwendung der Bitrate für eine erhöhte wahrgenommene visuelle Qualität optimieren,\ninsbesondere in Situationen mit hoher Bewegung.\n(Resultiert in eine höhere GPU-Nutzung.)"
33
+NVENC.CQLevel="CQ-Level"
34
 
35
 FFmpegSource="Medienquelle"
36
 LocalFile="Lokale Datei"
37
@@ -37,7 +37,7 @@
38
 RestartWhenActivated="Wiedergabe bei Quellenaktivierung erneut starten"
39
 CloseFileWhenInactive="Datei schließen, wenn inaktiv"
40
 CloseFileWhenInactive.ToolTip="Schließt die Datei, wenn die Quelle im Stream oder in der Aufnahme nicht angezeigt wird.\nDies ermöglicht Änderungen an der Datei vorzunehmen,\nwas aber zu Reaktivierungsverzögerungen führen kann."
41
-ColorRange="YUV‐Farbbereich"
42
+ColorRange="YUV-Farbbereich"
43
 ColorRange.Auto="Automatisch"
44
 ColorRange.Partial="Teilweise"
45
 ColorRange.Full="Voll"
46
@@ -56,16 +56,16 @@
47
 ReplayBuffer="Wiederholungspuffer"
48
 ReplayBuffer.Save="Wiederholung speichern"
49
 
50
-HelperProcessFailed="Der Aufnahme‐Helfer‐Prozess kann nicht gestartet werden. Überprüfen Sie, ob OBS‐Dateien nicht von einer Drittanbieter‐Antiviren‐/Sicherheitssoftware blockiert oder entfernt werden."
51
+HelperProcessFailed="Der Aufnahme-Helfer-Prozess kann nicht gestartet werden. Überprüfen Sie, ob OBS-Dateien nicht von einer Drittanbieter-Antiviren-/Sicherheitssoftware blockiert oder entfernt werden."
52
 UnableToWritePath="Kann nicht zu %1 schreiben. Vergewissern Sie sich, dass Sie einen Aufnahmepfad verwenden, für den Ihr Benutzerkonto Schreibrechte hat und dass genügend Speicherplatz zur Verfügung steht."
53
-WarnWindowsDefender="Wenn Windows‐10‐Ransomware‐Schutz aktiviert ist, kann dies auch den Fehler auslösen. Versuchen Sie, den überwachten Ordnerzugriff in „Windows‐Sicherheit“ → „Viren‐ & Bedrohungsschutz“ auszuschalten."
54
+WarnWindowsDefender="Wenn Windows-10-Ransomware-Schutz aktiviert ist, kann dies auch den Fehler verursachen. Versuchen Sie, den überwachten Ordnerzugriff in Windows-Sicherheit → Viren- & Bedrohungsschutz auszuschalten."
55
 
56
-NVENC.Error="Fehler beim Öffnen des NVENC‐Codecs: %1"
57
+NVENC.Error="Fehler beim Öffnen des NVENC-Codecs: %1"
58
 NVENC.GenericError="Überprüfen Sie, ob Ihre Grafiktreiber aktuell sind. Versuchen Sie, andere Aufnahmesoftware wie NVIDIA Shadowplay oder Windows 10 Game DVR zu schließen, welche NVENC möglicherweise verwendet."
59
 NVENC.BadGPUIndex="Sie haben die GPU %1 in Ihren Ausgabeencodereinstellungen ausgewählt. Setzen Sie diesen Wert wieder auf 0 und versuchen Sie es erneut."
60
-NVENC.OutdatedDriver="Ihr aktueller Grafikkartentreiber unterstützt diese NVENC‐Version nicht. Bitte aktualisieren Sie Ihre Treiber."
61
-NVENC.UnsupportedDevice="NVENC‐Fehler: Nicht unterstütztes Gerät. Überprüfen Sie, ob Ihre Grafikkarte NVENC unterstützt und Ihre Treiber aktuell sind."
62
-NVENC.TooManySessions="NVENC‐Fehler: Zu viele gleichzeitige Sitzungen. Versuchen Sie, andere Aufnahmesoftware wie NVIDIA Shadowplay oder Windows 10 Game DVR zu schließen, welche NVENC möglicherweise verwendet."
63
+NVENC.OutdatedDriver="Ihr aktueller Grafikkartentreiber unterstützt diese NVENC-Version nicht. Bitte aktualisieren Sie Ihre Treiber."
64
+NVENC.UnsupportedDevice="NVENC-Fehler: Nicht unterstütztes Gerät. Überprüfen Sie, ob Ihre Grafikkarte NVENC unterstützt und Ihre Treiber aktuell sind."
65
+NVENC.TooManySessions="NVENC-Fehler: Zu viele gleichzeitige Sitzungen. Versuchen Sie, andere Aufnahmesoftware wie NVIDIA Shadowplay oder Windows 10 Game DVR zu schließen, welche NVENC möglicherweise verwendet."
66
 NVENC.CheckDrivers="Bitte überprüfen Sie, ob Ihre Grafiktreiber aktuell sind."
67
 
68
 ReconnectDelayTime="Wiederverbindungsverzögerung"
69
obs-studio-26.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/el-GR.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/el-GR.ini Changed
57
 
1
@@ -2,14 +2,22 @@
2
 FFmpegAAC="FFmpeg προεπιλεγμένος κωδικοποιητής AAC"
3
 FFmpegOpus="FFmpeg Opus κωδικοποιητής"
4
 Bitrate="Ρυθμός μετάδοσης bit"
5
+MaxBitrate="Μέγιστος ρυθμός μετάδοσης bit"
6
 Preset="Προκαθορισμένο στυλ"
7
+Profile="Προφίλ"
8
 RateControl="Έλεγχος ρυθμού"
9
 KeyframeIntervalSec="Συχνότητα Καρέ-Κλειδιού (δευτερόλεπτα, 0=αυτόματο)"
10
 Lossless="Χωρίς απώλειες"
11
 
12
 
13
 NVENC.Use2Pass="Χρήση κωδικοποίησης δύο περασμάτων"
14
+NVENC.Preset.default="Επιδόσεις"
15
+NVENC.Preset.hq="Ποιότητα"
16
+NVENC.Preset.hp="Μέγιστες Επιδόσεις"
17
+NVENC.Preset.mq="Μέγιστη Ποιότητα"
18
 NVENC.Preset.ll="Χαμηλή Καθυστέρηση"
19
+NVENC.Preset.llhq="Ποιότητα Χαμηλής Καθυστέρησης"
20
+NVENC.Preset.llhp="Απόδοση Χαμηλής Καθυστέρησης"
21
 
22
 FFmpegSource="Πηγή Πολυμέσων"
23
 LocalFile="Τοπικό αρχείο"
24
@@ -17,6 +25,7 @@
25
 Input="Είσοδος"
26
 InputFormat="Μορφή Εισόδου"
27
 HardwareDecode="Χρήση αποκωδικοποίησης υλικού όταν είναι διαθέσιμη"
28
+ClearOnMediaEnd="Μη δείχνεις τίποτα όταν τελειώνει η αναπαραγωγή"
29
 Advanced="Σύνθετες επιλογές"
30
 RestartWhenActivated="Επανεκκίνηση της αναπαραγωγής όταν η πηγή γίνεται ξανά ενεργή"
31
 CloseFileWhenInactive="Κλείσιμο του αρχείου όταν η πηγή είναι ανενεργή"
32
@@ -25,7 +34,12 @@
33
 ColorRange.Auto="Αυτόματο"
34
 ColorRange.Partial="Μερικός"
35
 ColorRange.Full="Πλήρης"
36
+RestartMedia="Επανέναρξη"
37
+SpeedPercentage="Ταχύτητα"
38
 Seekable="Παρεχόμενη"
39
+Play="Αναπαραγωγή"
40
+Pause="Παύση"
41
+Stop="Διακοπή"
42
 
43
 MediaFileFilter.AllMediaFiles="Όλα τα αρχεία πολυμέσων"
44
 MediaFileFilter.VideoFiles="Αρχεία Βίντεο"
45
@@ -38,5 +52,11 @@
46
 HelperProcessFailed="Αδυναμία έναρξης τού βοηθού της διαδικασίας εγγραφής. Ελέγξτε ότι τα αρχεία OBS δεν έχουν αποκλειστεί η καταργηθεί από ένα τρίτο antivirus / λογισμικό ασφαλείας."
47
 UnableToWritePath="Αδυναμία εγγραφής %1. Βεβαιωθείτε ότι χρησιμοποιείτε μια διαδρομή εγγραφής που επιτρέπεται για εγγραφή τού λογαριασμού χρήστη και ότι υπάρχει επαρκής χώρος στον σκληρό δίσκο."
48
 
49
+NVENC.GenericError="Βεβαιωθείτε ότι οι οδηγοί βίντεο είναι ενημερωμένοι. Δοκιμάστε να κλείσετε άλλα λογισμικά βιντεοσκόπησης που μπορεί να χρησιμοποιούν το λογισμικό NVENC όπως το NVIDIA Shadowplay ή το Windows 10 Game DVR."
50
+NVENC.BadGPUIndex="'Έχετε επιλέξει τη συσκευή GPU %1 στις ρυθμίσεις του αποκωδικοποιητή εξόδου. Αλλάξτε τη ρύθμιση στο 0 και ξαναδοκιμάστε."
51
+NVENC.OutdatedDriver="Ο τρέχων οδηγός της κάρτας βίντεο δεν υποστηρίζει αυτή την έκδοση του λογισμικού NVENC, παρακαλώ ενημερώστε τους οδηγούς σας."
52
+NVENC.UnsupportedDevice="Σφάλμα NVENC: Μη υποστηριζόμενη συσκευή. Ελέγξτε εάν η κάρτα γραφικών σας υποστηρίζει το λογισμικό NVENC και ότι οι οδηγοί της συσκευής είναι ενημερωμένοι."
53
+NVENC.TooManySessions="Σφάλμα NVENC: Πάρα πολλές ταυτόχρονες χρήσεις. Δοκιμάστε να κλείσετε άλλα λογισμικά βιντεοσκόπησης που μπορεί να χρησιμοποιούν το λογισμικό NVENC όπως το NVIDIA Shadowplay ή το Windows 10 Game DVR."
54
+NVENC.CheckDrivers="Παρακαλώ βεβαιωθείτε ότι οι οδηγοί βίντεο είναι ενημερωμένοι."
55
 
56
 
57
obs-studio-26.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/fa-IR.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/fa-IR.ini Changed
61
 
1
@@ -4,6 +4,7 @@
2
 Bitrate="نرخ بیت"
3
 MaxBitrate="حداکثر میزان نرخ بیت"
4
 Preset="پیش فرض"
5
+Profile="پروفایل"
6
 RateControl="کنترل نرخ"
7
 KeyframeIntervalSec="فاصله Keyframe (ثانیه 0 = خودکار)"
8
 Lossless="بدون تلف"
9
@@ -19,15 +20,33 @@
10
 NVENC.Preset.llhq="کیفیت پایین و زمان تاخیر"
11
 NVENC.Preset.llhp="زمان تاخیر کم عملکرد"
12
 NVENC.LookAhead="پیش رو نگاه"
13
+NVENC.LookAhead.ToolTip="فریم های B پویا را فعال می کند.\n\nاگر غیرفعال باشد، رمزگذار همیشه از تعداد فریم های B مشخص شده در تنظیمات \"حداکثر فریم B\" استفاده خواهد کرد.\n\nدر صورت فعال بودن، فقط با استفاده از تعداد زیادی کیفیت بصری فریم B حداکثر افزایش می یابد،\n مقدار استفاده از گرافیک افزایش می یابد."
14
+NVENC.PsychoVisualTuning="تنظیم بصری روانی"
15
+NVENC.PsychoVisualTuning.ToolTip="تنظیمات رمزگذار را که بهینه سازی استفاده از میزان بیت برای افزایش کیفیت بصری درک شده را امکان پذیر می کند، \nخصوصاً در شرایط با حرکت بالا، با استفاده بیشتر از گرافیک."
16
+NVENC.CQLevel="سطح تدریج ثابت"
17
 
18
+FFmpegSource="منبع رسانه"
19
 LocalFile="فایل محلی"
20
 Looping="چرخه"
21
 Input="ورودی"
22
 InputFormat="فرمت های ورودی"
23
+BufferingMB="بافر شبکه"
24
+HardwareDecode="در صورت وجود از رمزگشایی سخت افزاری استفاده کنید"
25
+ClearOnMediaEnd="با پایان پخش، چیزی نشان داده نشود"
26
+Advanced="پیشرفته"
27
+RestartWhenActivated="با فعال شدن منبع پخش را دوباره شروع کنید"
28
+CloseFileWhenInactive="بستن پرونده در صورت غیرفعال بودن"
29
+CloseFileWhenInactive.ToolTip="وقتی منبع در جریان نمایش داده نمی شود یا\n ضبط نمی شود، پرونده را می بندد. این اجازه می دهد تا پرونده هنگام فعال نبودن منبع تغییر کند، \n اما ممکن است هنگام فعال شدن مجدد منبع، تأخیر در شروع وجود داشته باشد."
30
+ColorRange="فضای رنگی YUV"
31
 ColorRange.Auto="خودکار"
32
 ColorRange.Partial="جزئی"
33
 ColorRange.Full="کامل"
34
+RestartMedia="اجرا مجدد"
35
+SpeedPercentage="سرعت"
36
 Seekable="جستجوگر"
37
+Play="پخش"
38
+Pause="مکث"
39
+Stop="توقف"
40
 
41
 MediaFileFilter.AllMediaFiles="تمامی فایل های رسانه"
42
 MediaFileFilter.VideoFiles="فایلهای ویدئویی"
43
@@ -37,6 +56,17 @@
44
 ReplayBuffer="پخش مجدد بافر"
45
 ReplayBuffer.Save="ذخیره پخش مجدد"
46
 
47
+HelperProcessFailed="فرآیند راهنمای ضبط شروع نمی شود. بررسی کنید که فایلهای OBS توسط هیچ یک از آنتی ویروس ها/نرم افزارهای امنیتی شخص ثالث مسدود یا حذف نشده باشند."
48
+UnableToWritePath="نوشتن در%1 امکان پذیر نیست. اطمینان حاصل کنید که از یک مسیر ضبط استفاده می کنید که حساب کاربری شما مجاز به نوشتن آن است و فضای دیسک کافی وجود دارد."
49
+WarnWindowsDefender="اگر محافظت در برابر باج افزار ویندوز 10 فعال باشد نیز می تواند باعث این خطا شود. دسترسی به پوشه کنترل شده را در امنیت ویندوز/تنظیمات محافظت در برابر تهدید خاموش کنید."
50
 
51
+NVENC.Error="کدک NVENC باز نشد: %1"
52
+NVENC.GenericError="بررسی کنید که درایورهای ویدیویی شما به روز هستند. سایر نرم افزارهای ضبط را که ممکن است از NVENC مانند NVIDIA Shadowplay یا DVR بازی Windows 10 استفاده کنند، ببندید."
53
+NVENC.BadGPUIndex="شما گرافیک %1 را در تنظیمات رمزگذار خروجی خود انتخاب کرده اید. دوباره روی 0 تنظیم کنید و امتحان کنید."
54
+NVENC.OutdatedDriver="درایور کارت ویدیویی فعلی شما از این نسخه NVENC پشتیبانی نمی کند، لطفاً درایورهای خود را به روز کنید."
55
+NVENC.UnsupportedDevice="خطای NVENC: دستگاه پشتیبانی نمی شود. بررسی کنید کارت ویدیوی شما از NVENC پشتیبانی می کند و آیا درایورها به روز هستند."
56
+NVENC.TooManySessions="خطای NVENC: جلسات همزمان بسیار زیاد است. سایر نرم افزارهای ضبط را که ممکن است از NVENC مانند NVIDIA Shadowplay یا DVR بازی Windows 10 استفاده کنند، ببندید."
57
+NVENC.CheckDrivers="لطفاً به روز بودن درایورهای ویدیویی خود را بررسی کنید."
58
 
59
+ReconnectDelayTime="تأخیر اتصال دوباره"
60
 
61
obs-studio-26.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/fil-PH.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/fil-PH.ini Changed
31
 
1
@@ -9,13 +9,20 @@
2
 
3
 
4
 NVENC.Use2Pass="Gamitin ang Two-Pass Encoding"
5
+NVENC.Preset.hq="Kalidad"
6
+NVENC.Preset.hp="Pinakamalakas na Pagganap"
7
+NVENC.Preset.mq="Pinakamalakas na Kalidad"
8
 NVENC.Preset.ll="Mababa na Latency"
9
+NVENC.Preset.llhq="Mababang-Latency na Kalidad"
10
+NVENC.Preset.llhp="Mababang-Latency na Pagganap"
11
+NVENC.CQLevel="CQ na Antas"
12
 
13
 FFmpegSource="Pagkunan ng Media"
14
 LocalFile="Ang File na lokal"
15
 Looping="I-Loop"
16
 Input="Ang Input"
17
 InputFormat="Ang Format ng Input"
18
+BufferingMB="Pag-buffer ng Network"
19
 HardwareDecode="Gamitin ang hardware decoding kapag magagamit"
20
 Advanced="I-Advanced"
21
 RestartWhenActivated="Simulan mulang ang playback kapag aktibo ang pinagmulan"
22
@@ -43,5 +50,8 @@
23
 HelperProcessFailed="Hindi pwedeng simulan ang pag proseso ng recording helper. Tingan kung OBS file ay hindi hinarangan o tinanggal ng anumang 3rd part antivirus / security software."
24
 UnableToWritePath="Hindi pwedeng sumulat sa %1. Siguraduhin na gamit ang recording path kung saan ang user account mo ay tanggap ang pagsulat at mayroon sapat na espasyo sa disk."
25
 
26
+NVENC.OutdatedDriver="Ang iyong kasalakuyang video card driver ay hindi sinu-suporta ang itong NVENC na bersyon, mangyaring i-update ang iyong drivers."
27
+NVENC.UnsupportedDevice="Pagkakamali ng NVENC: Hindi supportadong aparato. Tignan mo ang iyong video card kung sinu-suporta nila ang NVENC at kung yung drivers ay bago."
28
+NVENC.CheckDrivers="Mangyaring tignan mo ang iyong video drivers kung ay bago sila."
29
 
30
 
31
obs-studio-26.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/id-ID.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/id-ID.ini Changed
10
 
1
@@ -31,7 +31,7 @@
2
 Input="Masukan"
3
 InputFormat="Format Masukan"
4
 BufferingMB="Buffering Jaringan"
5
-HardwareDecode="Gunakan dekoder hardware jika tersedia"
6
+HardwareDecode="Gunakan dekoder perangkat keras jika tersedia"
7
 ClearOnMediaEnd="Tidak muncul apapun saat pemutaran berakhir"
8
 Advanced="Tingkat lanjut"
9
 RestartWhenActivated="Mulai ulang pemutaran ketika sumber sudah aktif"
10
obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/kab-KAB.ini Added
55
 
1
@@ -0,0 +1,53 @@
2
+FFmpegOutput="Tuffɣa n FFmpeg"
3
+FFmpegAAC="Asettengal n lexṣas AAC n FFmpeg"
4
+FFmpegOpus="Asettengal Opus n FFmpeg"
5
+Bitrate="Aktum"
6
+MaxBitrate="Aktum afellay"
7
+Preset="Aseɣwer uzwir"
8
+Profile="Amaɣnu"
9
+RateControl="Asenqed n uktum"
10
+KeyframeIntervalSec="Azilal n yikataren yufraren (tasinin, 0=awurman)"
11
+Lossless="War asṛuḥu"
12
+
13
+BFrames="Amḍan afellay n yikataren B"
14
+
15
+NVENC.Use2Pass="Seqdec asettengel n sin isuka"
16
+NVENC.Preset.default="Tamellit"
17
+NVENC.Preset.hq="Taɣara"
18
+NVENC.Preset.hp="Tamellit tafellayt"
19
+NVENC.Preset.mq="Taɣara tafellayt"
20
+NVENC.CQLevel="Aswir CQ"
21
+
22
+FFmpegSource="Aɣbalu amidya"
23
+LocalFile="Afaylu adigan"
24
+Looping="Tineddict"
25
+Input="Anekcum"
26
+InputFormat="Amasal n unekcum"
27
+BufferingMB="Ajmaɛ di tkatut n uḥraz n uzeḍḍa"
28
+HardwareDecode="Seqdec amakkas n usettengel n warrum ma yewjed"
29
+ClearOnMediaEnd="Ur beqqeḍ acemma mi ara tfak tɣuri"
30
+Advanced="Anaẓi"
31
+RestartWhenActivated="Kemmel si tazwara ticki iqel uɣbalu-agi d urmid"
32
+CloseFileWhenInactive="Mdel afaylu ticki ur yermid ara"
33
+ColorRange="Tagrumma n yini YUV"
34
+ColorRange.Auto="Awurman"
35
+ColorRange.Partial="Abruyan"
36
+ColorRange.Full="Ummid"
37
+RestartMedia="Ales asekker"
38
+SpeedPercentage="Arured"
39
+Play="Taɣuri"
40
+Pause="Bedd"
41
+Stop="Seḥbes"
42
+
43
+MediaFileFilter.AllMediaFiles="Akk ifuyla imidyaten"
44
+MediaFileFilter.VideoFiles="Ifuyla n uvidyu"
45
+MediaFileFilter.AudioFiles="Ifuyla imeslawen"
46
+MediaFileFilter.AllFiles="Akk ifuyla"
47
+
48
+ReplayBuffer="Tallunt n weḥraz n tulsa n tɣuri"
49
+ReplayBuffer.Save="Sekles tulsa n tɣuri"
50
+
51
+
52
+
53
+ReconnectDelayTime="Amenḍar n tulsa n tɣuri"
54
+
55
obs-studio-26.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/ko-KR.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/ko-KR.ini Changed
12
 
1
@@ -63,8 +63,8 @@
2
 NVENC.Error="NVENC 코덱을 여는데 실패함: %1"
3
 NVENC.GenericError="드라이버가 최신 버전인지 확인하세요. NVIDIA Shadowplay 혹은 Windows 10 게임 바 캡처 기능과 같이 NVENC를 사용하고 있는 다른 녹화 프로그램을 꺼보세요."
4
 NVENC.BadGPUIndex="출력 설정 내 인코더 항목에서 GPU %1 (을)를 지정했습니다. 이 항목을 0으로 되돌린 다음 다시 시도해보세요."
5
-NVENC.OutdatedDriver="현재 사용하고 있는 비디오 카드 드라이버가 이 NVENC 버전을 지원하지 않습니다. 드라이버를 판올림하여 주세요."
6
-NVENC.UnsupportedDevice="NVENC 오류: 지원하지 않는 장치입니다. 비디오 카드가 NVENC를 지원하고 있고 최신 버전으로 판올림 되어 있는지 확인하여 주세요."
7
+NVENC.OutdatedDriver="현재 사용하고 있는 비디오 카드 드라이버가 이 NVENC 버전을 지원하지 않습니다. 드라이버를 업데이트 해주세요."
8
+NVENC.UnsupportedDevice="NVENC 오류: 지원하지 않는 장치입니다. 비디오 카드가 NVENC를 지원하고 있고 최신 버전으로 업데이트되어 있는지 확인해주세요."
9
 NVENC.TooManySessions="NVENC 오류: 너무 많은 세션을 동시에 처리하고 있습니다. NVIDIA Shadowplay 혹은 Windows 10 게임 바 캡처 기능과 같이 NVENC를 사용하고 있는 다른 녹화 프로그램을 꺼보세요."
10
 NVENC.CheckDrivers="사용 중인 그래픽 드라이버가 최신 버전인지 확인하여 주세요."
11
 
12
obs-studio-26.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/nb-NO.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/nb-NO.ini Changed
15
 
1
@@ -4,6 +4,7 @@
2
 Bitrate="Bitrate"
3
 MaxBitrate="Maks bitrate"
4
 Preset="Forhåndsinnstilling"
5
+Profile="Profil"
6
 RateControl="Hastighetskontroll"
7
 KeyframeIntervalSec="Nøkkelbildeintervall (sekunder, 0 = automatisk)"
8
 Lossless="Tapsfri"
9
@@ -67,4 +68,5 @@
10
 NVENC.TooManySessions="NVENC Feil: For mange samtidige økter. Prøv å lukke annen opptaksprogramvare at bruker kanskje NVENC, som NVIDIA Shadowplay eller Windows 10 Game DVR."
11
 NVENC.CheckDrivers="Vennligst sjekk at videosjåførene dine er oppdatert."
12
 
13
+ReconnectDelayTime="Gjenoppkoblingsforsinkelse"
14
 
15
obs-studio-26.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/pt-BR.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/pt-BR.ini Changed
32
 
1
@@ -26,7 +26,7 @@
2
 NVENC.CQLevel="Nível de CQ"
3
 
4
 FFmpegSource="Fonte de mídia"
5
-LocalFile="Arquivo Local"
6
+LocalFile="Arquivo local"
7
 Looping="Loop"
8
 Input="Entrada"
9
 InputFormat="Formato de entrada"
10
@@ -37,7 +37,7 @@
11
 RestartWhenActivated="Reiniciar reprodução quando a fonte se tornar ativa"
12
 CloseFileWhenInactive="Fechar arquivo quando inativo"
13
 CloseFileWhenInactive.ToolTip="Fechar o arquivo quando a fonte não estiver sendo exibida na transmissão\n ou gravação. Isto permite alterar o arquivo quando a fonte não está ativa,\nmas pode ter algum atraso de inicialização quando a fonte for reativada."
14
-ColorRange="Intervalo de Cores YUV"
15
+ColorRange="Intervalo de cores YUV"
16
 ColorRange.Auto="Auto"
17
 ColorRange.Partial="Parcial"
18
 ColorRange.Full="Completo"
19
@@ -48,10 +48,10 @@
20
 Pause="Pausar"
21
 Stop="Parar"
22
 
23
-MediaFileFilter.AllMediaFiles="Todos Arquivos de Mídia"
24
+MediaFileFilter.AllMediaFiles="Todos os arquivos de mídia"
25
 MediaFileFilter.VideoFiles="Arquivos de Vídeo"
26
 MediaFileFilter.AudioFiles="Arquivos de Áudio"
27
-MediaFileFilter.AllFiles="Todos os Arquivos"
28
+MediaFileFilter.AllFiles="Todos os arquivos"
29
 
30
 ReplayBuffer="Buffer do Replay"
31
 ReplayBuffer.Save="Salvar Replay"
32
obs-studio-26.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/pt-PT.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/pt-PT.ini Changed
9
 
1
@@ -4,6 +4,7 @@
2
 Bitrate="Bitrate"
3
 MaxBitrate="Bitrate Máximo"
4
 Preset="Predefinição"
5
+Profile="Perfil"
6
 RateControl="Controle de Taxa"
7
 KeyframeIntervalSec="Intervalo do keyframe (segundos, 0=automático)"
8
 Lossless="Sem perdas"
9
obs-studio-26.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/ro-RO.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/ro-RO.ini Changed
70
 
1
@@ -9,7 +9,7 @@
2
 KeyframeIntervalSec="Interval de cadre cheie (secunde, 0=auto)"
3
 Lossless="Fără pierderi"
4
 
5
-BFrames="Max B-frames"
6
+BFrames="Cadre B maxime"
7
 
8
 NVENC.Use2Pass="Folosește codificarea în doi pași"
9
 NVENC.Preset.default="Performanță"
10
@@ -19,9 +19,9 @@
11
 NVENC.Preset.ll="Latență redusă"
12
 NVENC.Preset.llhq="Calitate cu latență redusă"
13
 NVENC.Preset.llhp="Performanță cu latență redusă"
14
-NVENC.LookAhead="Privire"
15
-NVENC.LookAhead.ToolTip="Activează B-frames dinamic.\n\nDacă este dezactivat, encoder-ul va utiliza întotdeauna numărul de B-frames specificat în setările 'Max B-frames'.\n\nDacă este activat, va crește calitatea vizuală utilizând doar cât de multe cadre B sunt necesare, până la maximum,\nla costul unei utilizări crescute a GPU."
16
-NVENC.PsychoVisualTuning="Aranjare vizuală Psycho"
17
+NVENC.LookAhead="Look-ahead"
18
+NVENC.LookAhead.ToolTip="Activează cadre B dinamice.\n\nDacă este dezactivat, codificatorul va folosi întotdeauna numărul de cadre B specificat în setarea „Cadre B maxime”.\n\nDacă este activat, va crește calitatea vizuală folosind doar cât de multe cadre B sunt necesare, până la maximum,\ncu costul utilizării crescute a GPU-ului."
19
+NVENC.PsychoVisualTuning="Psycho Visual Tuning"
20
 NVENC.PsychoVisualTuning.ToolTip="Activează setările de codificare care optimizează utilizarea ratei de biți pentru creșterea calității vizuale percepute,\nîn special în situații cu mișcare mare, cu prețul unei utilizări mai mari a GPU."
21
 NVENC.CQLevel="Nivel CQ"
22
 
23
@@ -31,21 +31,21 @@
24
 Input="Input"
25
 InputFormat="Formatul inputului"
26
 BufferingMB="Buffer Rețea"
27
-HardwareDecode="Folosește decodarea hardware când este disponibilă"
28
+HardwareDecode="Folosește decodificarea hardware când este disponibilă"
29
 ClearOnMediaEnd="Nu afișa nimic la terminarea redării"
30
 Advanced="Avansat"
31
 RestartWhenActivated="Repornește redarea când sursa devine activă"
32
 CloseFileWhenInactive="Închide fișierul când este inactiv"
33
-CloseFileWhenInactive.ToolTip="Închide fișierul atunci când sursa nu este afișată pe transmisiune sau\nînregistrare. Acest lucru permite fișierului să fie schimbat în momentul în care sursa nu este activă,\nînsă poate exista o întârziere la pornire în momentul reactivării sursei."
34
+CloseFileWhenInactive.ToolTip="Închide fișierul atunci când sursa nu este afișată pe transmisiune sau înregistrare.\nAcest lucru permite fișierului să fie schimbat în momentul în care sursa nu este\nactivă, însă poate exista o întârziere la pornire în momentul reactivării sursei."
35
 ColorRange="Gamă de culori YUV"
36
 ColorRange.Auto="Automată"
37
 ColorRange.Partial="Parțială"
38
 ColorRange.Full="Completă"
39
 RestartMedia="Repornește"
40
 SpeedPercentage="Viteză"
41
-Seekable="Vizulizare"
42
+Seekable="Navigabil"
43
 Play="Redare"
44
-Pause="Pauzează"
45
+Pause="Pune pe pauză"
46
 Stop="Stop"
47
 
48
 MediaFileFilter.AllMediaFiles="Toate fișierele media"
49
@@ -53,17 +53,17 @@
50
 MediaFileFilter.AudioFiles="Fișiere audio"
51
 MediaFileFilter.AllFiles="Toate fișierele"
52
 
53
-ReplayBuffer="Reluare Buffer"
54
+ReplayBuffer="Buffer de reluări"
55
 ReplayBuffer.Save="Salvează reluarea"
56
 
57
 HelperProcessFailed="Nu se poate porni procesul ajutător de înregistrare. Verifică dacă fișierele OBS nu au fost blocate sau eliminate de orice software terț antivirus / de securitate."
58
-UnableToWritePath="Imposibil de scris la %1. Asigurați-vă că folosiți o cale de înregistrare pe care contul dvs. de utilizator poate să o scrie și că există suficient spațiu pe disc."
59
+UnableToWritePath="Nu se poate scrie în %1. Asigură-te că folosești o cale de înregistrare în care contul tău de utilizator are permisiunea de a scrie și că există suficient spațiu pe disc."
60
 WarnWindowsDefender="Dacă este activată protecţia Ransomware Windows 10 poate cauza şi această eroare. Încercați să dezactivați accesul la dosarele controlate în setările de securitate / Virus și protecție împotriva amenințării."
61
 
62
 NVENC.Error="Deschiderea codecului NVENC a eșuat: %1"
63
 NVENC.GenericError="Verifică dacă driverele video sunt actualizate. Încercați să închideți alte programe de înregistrare care ar putea utiliza NVENC, cum ar fi NVIDIA Shadowplay sau Windows 10 Game DVR."
64
 NVENC.BadGPUIndex="Ai selectat GPU-ul %1 în setările codificatorului de output. Setează acest lucru înapoi la 0 și încearcă din nou."
65
-NVENC.OutdatedDriver="Driver-ul dvs. actual de pe cardul video nu acceptă această versiune NVENC, vă rugăm să vă actualizați driverele."
66
+NVENC.OutdatedDriver="Driverul actual al plăcii tale video nu suportă această versiune NVENC, te rugăm să actualizezi driverele."
67
 NVENC.UnsupportedDevice="Eroare NVENC. Dispozitivul nu este acceptat. Verificați dacă cardul video suportă NVENC și dacă driverele sunt actualizate."
68
 NVENC.TooManySessions="Eroare NVENC: Prea multe sesiuni concurente. Încercați să închideți alte programe de înregistrare care ar putea folosi NVENC, cum ar fi NVIDIA Shadowplay sau Windows 10 Game DVR."
69
 NVENC.CheckDrivers="Te rugăm să verifici dacă driverele video sunt actualizate."
70
obs-studio-26.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/sl-SI.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/sl-SI.ini Changed
9
 
1
@@ -4,6 +4,7 @@
2
 Bitrate="Bitna hitrost"
3
 MaxBitrate="Največja bitna hitrost"
4
 Preset="Prednastavitev"
5
+Profile="Profil"
6
 RateControl="Nadzor hitrosti"
7
 KeyframeIntervalSec="Razmik med ključnimi sličicami (ssekunde, 0=samodejno)"
8
 Lossless="Brezizgubno"
9
obs-studio-26.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/sv-SE.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/sv-SE.ini Changed
10
 
1
@@ -31,7 +31,7 @@
2
 Input="Infoga"
3
 InputFormat="Inmatningsformat"
4
 BufferingMB="Nätverksbuffring"
5
-HardwareDecode="Använda hårdvareavkodning när tillgängligt"
6
+HardwareDecode="Använd hårdvaruavkodning när det är tillgängligt"
7
 ClearOnMediaEnd="Visa ingenting när uppspelningen slutar"
8
 Advanced="Avancerat"
9
 RestartWhenActivated="Starta om uppspelning när källa blir aktiv"
10
obs-studio-26.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/vi-VN.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/vi-VN.ini Changed
24
 
1
@@ -1,5 +1,6 @@
2
 FFmpegOutput="FFmpeg đầu ra"
3
 FFmpegAAC="FFmpeg AAC Encoder mặc định"
4
+FFmpegOpus="Bộ mã hóa FFmpeg Opus"
5
 Bitrate="Bitrate"
6
 MaxBitrate="'Tốc độ bit' tối đa"
7
 Preset="Mẫu thiết lập"
8
@@ -8,6 +9,7 @@
9
 KeyframeIntervalSec="Thời gian đặt Keyframe (giây, 0=tự động)"
10
 Lossless="Lossless"
11
 
12
+BFrames="Khung-B tối đa"
13
 
14
 NVENC.Use2Pass="Sử dụng 2-Pass Encoding"
15
 NVENC.Preset.default="Hiệu suất"
16
@@ -17,6 +19,7 @@
17
 NVENC.Preset.ll="Độ trễ thấp"
18
 NVENC.Preset.llhq="Chất lượng \"độ trễ thấp\""
19
 NVENC.Preset.llhp="Hiệu suất \"độ trễ thấp\""
20
+NVENC.LookAhead="Look-ahead"
21
 
22
 FFmpegSource="Nguồn media"
23
 LocalFile="Tập tin cục bộ"
24
obs-studio-26.0.2.tar.xz/plugins/obs-ffmpeg/ffmpeg-mux/CMakeLists.txt -> obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/ffmpeg-mux/CMakeLists.txt Changed
19
 
1
@@ -1,5 +1,9 @@
2
 project(obs-ffmpeg-mux)
3
 
4
+if(DEBUG_FFMPEG_MUX)
5
+   add_definitions(-DDEBUG_FFMPEG)
6
+endif()
7
+
8
 find_package(FFmpeg REQUIRED
9
    COMPONENTS avcodec avutil avformat)
10
 include_directories(${FFMPEG_INCLUDE_DIRS})
11
@@ -15,6 +19,7 @@
12
    ${obs-ffmpeg-mux_HEADERS})
13
 
14
 target_link_libraries(obs-ffmpeg-mux
15
+   libobs
16
    ${FFMPEG_LIBRARIES})
17
 
18
 set_target_properties(obs-ffmpeg-mux PROPERTIES FOLDER "plugins/obs-ffmpeg")
19
obs-studio-26.0.2.tar.xz/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c -> obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c Changed
210
 
1
@@ -22,13 +22,17 @@
2
 
3
 #endif
4
 
5
-#include <stdbool.h>
6
 #include <stdio.h>
7
 #include <stdlib.h>
8
 #include "ffmpeg-mux.h"
9
 
10
+#include <util/dstr.h>
11
 #include <libavformat/avformat.h>
12
 
13
+#define ANSI_COLOR_RED "\x1b[0;91m"
14
+#define ANSI_COLOR_MAGENTA "\x1b[0;95m"
15
+#define ANSI_COLOR_RESET "\x1b[0m"
16
+
17
 #if LIBAVCODEC_VERSION_MAJOR >= 58
18
 #define CODEC_FLAG_GLOBAL_H AV_CODEC_FLAG_GLOBAL_HEADER
19
 #else
20
@@ -37,6 +41,8 @@
21
 
22
 /* ------------------------------------------------------------------------- */
23
 
24
+static char *global_stream_key = "";
25
+
26
 struct resize_buf {
27
    uint8_t *buf;
28
    size_t size;
29
@@ -70,6 +76,8 @@
30
 
31
 struct main_params {
32
    char *file;
33
+   /* printable_file is file with any stream key information removed */
34
+   struct dstr printable_file;
35
    int has_video;
36
    int tracks;
37
    char *vcodec;
38
@@ -172,6 +180,8 @@
39
        free(ffm->audio);
40
    }
41
 
42
+   dstr_free(&ffm->params.printable_file);
43
+
44
    memset(ffm, 0, sizeof(*ffm));
45
 }
46
 
47
@@ -218,6 +228,44 @@
48
    return true;
49
 }
50
 
51
+static void ffmpeg_log_callback(void *param, int level, const char *format,
52
+               va_list args)
53
+{
54
+#ifdef DEBUG_FFMPEG
55
+   char out_buffer[4096];
56
+   struct dstr out = {0};
57
+
58
+   vsnprintf(out_buffer, sizeof(out_buffer), format, args);
59
+   dstr_copy(&out, out_buffer);
60
+   dstr_replace(&out, global_stream_key, "{stream_key}");
61
+
62
+   switch (level) {
63
+   case AV_LOG_INFO:
64
+       fprintf(stdout, "info: [ffmpeg_muxer] %s", out.array);
65
+       fflush(stdout);
66
+       break;
67
+
68
+   case AV_LOG_WARNING:
69
+       fprintf(stdout, "%swarning: [ffmpeg_muxer] %s%s",
70
+           ANSI_COLOR_MAGENTA, out.array, ANSI_COLOR_RESET);
71
+       fflush(stdout);
72
+       break;
73
+
74
+   case AV_LOG_ERROR:
75
+       fprintf(stderr, "%serror: [ffmpeg_muxer] %s%s", ANSI_COLOR_RED,
76
+           out.array, ANSI_COLOR_RESET);
77
+       fflush(stderr);
78
+   }
79
+
80
+   dstr_free(&out);
81
+#else
82
+   UNUSED_PARAMETER(level);
83
+   UNUSED_PARAMETER(format);
84
+   UNUSED_PARAMETER(args);
85
+#endif
86
+   UNUSED_PARAMETER(param);
87
+}
88
+
89
 static bool init_params(int *argc, char ***argv, struct main_params *params,
90
            struct audio_params **p_audio)
91
 {
92
@@ -287,6 +335,16 @@
93
 
94
    *p_audio = audio;
95
 
96
+   dstr_copy(&params->printable_file, params->file);
97
+
98
+   get_opt_str(argc, argv, &global_stream_key, "stream key");
99
+   if (strcmp(global_stream_key, "") != 0) {
100
+       dstr_replace(&params->printable_file, global_stream_key,
101
+                "{stream_key}");
102
+   }
103
+
104
+   av_log_set_callback(ffmpeg_log_callback);
105
+
106
    get_opt_str(argc, argv, &params->muxer_settings, "muxer settings");
107
 
108
    return true;
109
@@ -353,6 +411,10 @@
110
        (AVRational){ffm->params.fps_den, ffm->params.fps_num};
111
 
112
    ffm->video_stream->time_base = context->time_base;
113
+#if LIBAVFORMAT_VERSION_MAJOR < 59
114
+   // codec->time_base may still be used if LIBAVFORMAT_VERSION_MAJOR < 59
115
+   ffm->video_stream->codec->time_base = context->time_base;
116
+#endif
117
    ffm->video_stream->avg_frame_rate = av_inv_q(context->time_base);
118
 
119
    if (ffm->output->oformat->flags & AVFMT_GLOBALHEADER)
120
@@ -521,7 +583,8 @@
121
                AVIO_FLAG_WRITE);
122
        if (ret < 0) {
123
            fprintf(stderr, "Couldn't open '%s', %s\n",
124
-               ffm->params.file, av_err2str(ret));
125
+               ffm->params.printable_file.array,
126
+               av_err2str(ret));
127
            return FFM_ERROR;
128
        }
129
    }
130
@@ -548,8 +611,8 @@
131
 
132
    ret = avformat_write_header(ffm->output, &dict);
133
    if (ret < 0) {
134
-       fprintf(stderr, "Error opening '%s': %s\n", ffm->params.file,
135
-           av_err2str(ret));
136
+       fprintf(stderr, "Error opening '%s': %s",
137
+           ffm->params.printable_file.array, av_err2str(ret));
138
 
139
        av_dict_free(&dict);
140
 
141
@@ -564,29 +627,43 @@
142
 #define SRT_PROTO "srt"
143
 #define UDP_PROTO "udp"
144
 #define TCP_PROTO "tcp"
145
+#define HTTP_PROTO "http"
146
+
147
+static bool ffmpeg_mux_is_network(struct ffmpeg_mux *ffm)
148
+{
149
+   return !strncmp(ffm->params.file, SRT_PROTO, sizeof(SRT_PROTO) - 1) ||
150
+          !strncmp(ffm->params.file, UDP_PROTO, sizeof(UDP_PROTO) - 1) ||
151
+          !strncmp(ffm->params.file, TCP_PROTO, sizeof(TCP_PROTO) - 1) ||
152
+          !strncmp(ffm->params.file, HTTP_PROTO, sizeof(HTTP_PROTO) - 1);
153
+}
154
 
155
 static int ffmpeg_mux_init_context(struct ffmpeg_mux *ffm)
156
 {
157
    AVOutputFormat *output_format;
158
    int ret;
159
-   bool isNetwork = false;
160
-   if (strncmp(ffm->params.file, SRT_PROTO, sizeof(SRT_PROTO) - 1) == 0 ||
161
-       strncmp(ffm->params.file, UDP_PROTO, sizeof(UDP_PROTO) - 1) == 0 ||
162
-       strncmp(ffm->params.file, TCP_PROTO, sizeof(TCP_PROTO) - 1) == 0)
163
-       isNetwork = true;
164
+   bool is_http = false;
165
+   is_http = (strncmp(ffm->params.file, HTTP_PROTO,
166
+              sizeof(HTTP_PROTO) - 1) == 0);
167
+
168
+   bool is_network = ffmpeg_mux_is_network(ffm);
169
 
170
-   if (isNetwork) {
171
+   if (is_network) {
172
        avformat_network_init();
173
+   }
174
+
175
+   if (is_network && !is_http)
176
        output_format = av_guess_format("mpegts", NULL, "video/M2PT");
177
-   } else {
178
+   else
179
        output_format = av_guess_format(NULL, ffm->params.file, NULL);
180
-   }
181
 
182
    if (output_format == NULL) {
183
        fprintf(stderr, "Couldn't find an appropriate muxer for '%s'\n",
184
-           ffm->params.file);
185
+           ffm->params.printable_file.array);
186
        return FFM_ERROR;
187
    }
188
+   printf("info: Output format name and long_name: %s, %s\n",
189
+          output_format->name ? output_format->name : "unknown",
190
+          output_format->long_name ? output_format->long_name : "unknown");
191
 
192
    ret = avformat_alloc_output_context2(&ffm->output, output_format, NULL,
193
                         ffm->params.file);
194
@@ -726,8 +803,13 @@
195
    int ret = av_interleaved_write_frame(ffm->output, &packet);
196
 
197
    if (ret < 0) {
198
-       fprintf(stderr, "av_interleaved_write_frame failed: %s\n",
199
-           av_err2str(ret));
200
+       fprintf(stderr, "av_interleaved_write_frame failed: %d: %s\n",
201
+           ret, av_err2str(ret));
202
+   }
203
+
204
+   /* Treat "Invalid data found when processing input" and "Invalid argument" as non-fatal */
205
+   if (ret == AVERROR_INVALIDDATA || ret == EINVAL) {
206
+       return true;
207
    }
208
 
209
    return ret >= 0;
210
obs-studio-26.0.2.tar.xz/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.h -> obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.h Changed
9
 
1
@@ -16,6 +16,7 @@
2
 
3
 #pragma once
4
 
5
+#include <stdbool.h>
6
 #include <stdint.h>
7
 
8
 enum ffm_packet_type {
9
obs-studio-26.0.2.tar.xz/plugins/obs-ffmpeg/jim-nvenc.c -> obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/jim-nvenc.c Changed
16
 
1
@@ -426,6 +426,14 @@
2
    config->gopLength = gop_size;
3
    config->frameIntervalP = 1 + bf;
4
    h264_config->idrPeriod = gop_size;
5
+
6
+   bool repeat_headers = obs_data_get_bool(settings, "repeat_headers");
7
+   if (repeat_headers) {
8
+       h264_config->repeatSPSPPS = 1;
9
+       h264_config->disableSPSPPS = 0;
10
+       h264_config->outputAUD = 1;
11
+   }
12
+
13
    vui_params->videoSignalTypePresentFlag = 1;
14
    vui_params->videoFullRangeFlag = (voi->range == VIDEO_RANGE_FULL);
15
    vui_params->colourDescriptionPresentFlag = 1;
16
obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-hls-mux.c Added
334
 
1
@@ -0,0 +1,332 @@
2
+#include "obs-ffmpeg-mux.h"
3
+
4
+#define do_log(level, format, ...)                      \
5
+   blog(level, "[ffmpeg hls muxer: '%s'] " format, \
6
+        obs_output_get_name(stream->output), ##__VA_ARGS__)
7
+
8
+#define warn(format, ...) do_log(LOG_WARNING, format, ##__VA_ARGS__)
9
+#define info(format, ...) do_log(LOG_INFO, format, ##__VA_ARGS__)
10
+
11
+const char *ffmpeg_hls_mux_getname(void *type)
12
+{
13
+   UNUSED_PARAMETER(type);
14
+   return obs_module_text("FFmpegHlsMuxer");
15
+}
16
+
17
+int hls_stream_dropped_frames(void *data)
18
+{
19
+   struct ffmpeg_muxer *stream = data;
20
+   return stream->dropped_frames;
21
+}
22
+
23
+void ffmpeg_hls_mux_destroy(void *data)
24
+{
25
+   struct ffmpeg_muxer *stream = data;
26
+
27
+   if (stream) {
28
+       deactivate(stream, 0);
29
+
30
+       pthread_mutex_destroy(&stream->write_mutex);
31
+       os_sem_destroy(stream->write_sem);
32
+       os_event_destroy(stream->stop_event);
33
+
34
+       da_free(stream->mux_packets);
35
+       circlebuf_free(&stream->packets);
36
+
37
+       os_process_pipe_destroy(stream->pipe);
38
+       dstr_free(&stream->path);
39
+       dstr_free(&stream->printable_path);
40
+       dstr_free(&stream->stream_key);
41
+       dstr_free(&stream->muxer_settings);
42
+       bfree(data);
43
+   }
44
+}
45
+
46
+void *ffmpeg_hls_mux_create(obs_data_t *settings, obs_output_t *output)
47
+{
48
+   struct ffmpeg_muxer *stream = bzalloc(sizeof(*stream));
49
+   pthread_mutex_init_value(&stream->write_mutex);
50
+   stream->output = output;
51
+
52
+   /* init mutex, semaphore and event */
53
+   if (pthread_mutex_init(&stream->write_mutex, NULL) != 0)
54
+       goto fail;
55
+   if (os_event_init(&stream->stop_event, OS_EVENT_TYPE_AUTO) != 0)
56
+       goto fail;
57
+   if (os_sem_init(&stream->write_sem, 0) != 0)
58
+       goto fail;
59
+
60
+   UNUSED_PARAMETER(settings);
61
+   return stream;
62
+
63
+fail:
64
+   ffmpeg_hls_mux_destroy(stream);
65
+   return NULL;
66
+}
67
+
68
+static bool process_packet(struct ffmpeg_muxer *stream)
69
+{
70
+   struct encoder_packet packet;
71
+   bool has_packet = false;
72
+   bool ret = true;
73
+
74
+   pthread_mutex_lock(&stream->write_mutex);
75
+
76
+   if (stream->packets.size) {
77
+       circlebuf_pop_front(&stream->packets, &packet, sizeof(packet));
78
+       has_packet = true;
79
+   }
80
+
81
+   pthread_mutex_unlock(&stream->write_mutex);
82
+
83
+   if (has_packet) {
84
+       ret = write_packet(stream, &packet);
85
+       obs_encoder_packet_release(&packet);
86
+   }
87
+   return ret;
88
+}
89
+
90
+static void *write_thread(void *data)
91
+{
92
+   struct ffmpeg_muxer *stream = data;
93
+
94
+   while (os_sem_wait(stream->write_sem) == 0) {
95
+       if (os_event_try(stream->stop_event) == 0)
96
+           return NULL;
97
+
98
+       if (!process_packet(stream))
99
+           break;
100
+   }
101
+
102
+   obs_output_signal_stop(stream->output, OBS_OUTPUT_ERROR);
103
+   deactivate(stream, 0);
104
+   return NULL;
105
+}
106
+
107
+bool ffmpeg_hls_mux_start(void *data)
108
+{
109
+   struct ffmpeg_muxer *stream = data;
110
+   obs_service_t *service;
111
+   const char *path_str;
112
+   const char *stream_key;
113
+   struct dstr path = {0};
114
+   obs_encoder_t *vencoder;
115
+   obs_data_t *settings;
116
+   int keyint_sec;
117
+
118
+   if (!obs_output_can_begin_data_capture(stream->output, 0))
119
+       return false;
120
+   if (!obs_output_initialize_encoders(stream->output, 0))
121
+       return false;
122
+
123
+   service = obs_output_get_service(stream->output);
124
+   if (!service)
125
+       return false;
126
+   path_str = obs_service_get_url(service);
127
+   stream_key = obs_service_get_key(service);
128
+   dstr_copy(&stream->stream_key, stream_key);
129
+   dstr_copy(&path, path_str);
130
+   dstr_replace(&path, "{stream_key}", stream_key);
131
+   dstr_copy(&stream->muxer_settings,
132
+         "method=PUT http_persistent=1 ignore_io_errors=1 ");
133
+   dstr_catf(&stream->muxer_settings, "http_user_agent=libobs/%s",
134
+         OBS_VERSION);
135
+
136
+   vencoder = obs_output_get_video_encoder(stream->output);
137
+   settings = obs_encoder_get_settings(vencoder);
138
+   keyint_sec = (int)obs_data_get_int(settings, "keyint_sec");
139
+   if (keyint_sec) {
140
+       dstr_catf(&stream->muxer_settings, " hls_time=%d", keyint_sec);
141
+       stream->keyint_sec = keyint_sec;
142
+   }
143
+
144
+   obs_data_release(settings);
145
+
146
+   start_pipe(stream, path.array);
147
+   dstr_free(&path);
148
+
149
+   if (!stream->pipe) {
150
+       obs_output_set_last_error(
151
+           stream->output, obs_module_text("HelperProcessFailed"));
152
+       warn("Failed to create process pipe");
153
+       return false;
154
+   }
155
+   stream->mux_thread_joinable = pthread_create(&stream->mux_thread, NULL,
156
+                            write_thread, stream) == 0;
157
+   if (!stream->mux_thread_joinable)
158
+       return false;
159
+
160
+   /* write headers and start capture */
161
+   os_atomic_set_bool(&stream->active, true);
162
+   os_atomic_set_bool(&stream->capturing, true);
163
+   stream->is_hls = true;
164
+   stream->total_bytes = 0;
165
+   stream->dropped_frames = 0;
166
+   stream->min_priority = 0;
167
+
168
+   obs_output_begin_data_capture(stream->output, 0);
169
+
170
+   dstr_copy(&stream->printable_path, path_str);
171
+   info("Writing to path '%s'...", stream->printable_path.array);
172
+   return true;
173
+}
174
+
175
+static bool write_packet_to_buf(struct ffmpeg_muxer *stream,
176
+               struct encoder_packet *packet)
177
+{
178
+   circlebuf_push_back(&stream->packets, packet,
179
+               sizeof(struct encoder_packet));
180
+   return true;
181
+}
182
+
183
+static void drop_frames(struct ffmpeg_muxer *stream, int highest_priority)
184
+{
185
+   struct circlebuf new_buf = {0};
186
+   int num_frames_dropped = 0;
187
+
188
+   circlebuf_reserve(&new_buf, sizeof(struct encoder_packet) * 8);
189
+
190
+   while (stream->packets.size) {
191
+       struct encoder_packet packet;
192
+       circlebuf_pop_front(&stream->packets, &packet, sizeof(packet));
193
+
194
+       /* do not drop audio data or video keyframes */
195
+       if (packet.type == OBS_ENCODER_AUDIO ||
196
+           packet.drop_priority >= highest_priority) {
197
+           circlebuf_push_back(&new_buf, &packet, sizeof(packet));
198
+       } else {
199
+           num_frames_dropped++;
200
+           obs_encoder_packet_release(&packet);
201
+       }
202
+   }
203
+
204
+   circlebuf_free(&stream->packets);
205
+   stream->packets = new_buf;
206
+
207
+   if (stream->min_priority < highest_priority)
208
+       stream->min_priority = highest_priority;
209
+
210
+   stream->dropped_frames += num_frames_dropped;
211
+}
212
+
213
+static bool find_first_video_packet(struct ffmpeg_muxer *stream,
214
+                   struct encoder_packet *first)
215
+{
216
+   size_t count = stream->packets.size / sizeof(*first);
217
+
218
+   for (size_t i = 0; i < count; i++) {
219
+       struct encoder_packet *cur =
220
+           circlebuf_data(&stream->packets, i * sizeof(*first));
221
+       if (cur->type == OBS_ENCODER_VIDEO && !cur->keyframe) {
222
+           *first = *cur;
223
+           return true;
224
+       }
225
+   }
226
+   return false;
227
+}
228
+
229
+void check_to_drop_frames(struct ffmpeg_muxer *stream, bool pframes)
230
+{
231
+   struct encoder_packet first;
232
+   int64_t buffer_duration_usec;
233
+   int priority = pframes ? OBS_NAL_PRIORITY_HIGHEST
234
+                  : OBS_NAL_PRIORITY_HIGH;
235
+   int keyint_sec = stream->keyint_sec;
236
+   int64_t drop_threshold_sec = keyint_sec ? 2 * keyint_sec : 10;
237
+
238
+   if (!find_first_video_packet(stream, &first))
239
+       return;
240
+
241
+   buffer_duration_usec = stream->last_dts_usec - first.dts_usec;
242
+
243
+   if (buffer_duration_usec > drop_threshold_sec * 1000000)
244
+       drop_frames(stream, priority);
245
+}
246
+
247
+static bool add_video_packet(struct ffmpeg_muxer *stream,
248
+                struct encoder_packet *packet)
249
+{
250
+   check_to_drop_frames(stream, false);
251
+   check_to_drop_frames(stream, true);
252
+
253
+   /* if currently dropping frames, drop packets until it reaches the
254
+    * desired priority */
255
+   if (packet->drop_priority < stream->min_priority) {
256
+       stream->dropped_frames++;
257
+       return false;
258
+   } else {
259
+       stream->min_priority = 0;
260
+   }
261
+
262
+   stream->last_dts_usec = packet->dts_usec;
263
+   return write_packet_to_buf(stream, packet);
264
+}
265
+
266
+void ffmpeg_hls_mux_data(void *data, struct encoder_packet *packet)
267
+{
268
+   struct ffmpeg_muxer *stream = data;
269
+   struct encoder_packet new_packet;
270
+   struct encoder_packet tmp_packet;
271
+   bool added_packet = false;
272
+
273
+   if (!active(stream))
274
+       return;
275
+
276
+   /* encoder failure */
277
+   if (!packet) {
278
+       deactivate(stream, OBS_OUTPUT_ENCODE_ERROR);
279
+       return;
280
+   }
281
+
282
+   if (!stream->sent_headers) {
283
+       if (!send_headers(stream))
284
+           return;
285
+       stream->sent_headers = true;
286
+   }
287
+
288
+   if (stopping(stream)) {
289
+       if (packet->sys_dts_usec >= stream->stop_ts) {
290
+           deactivate(stream, 0);
291
+           return;
292
+       }
293
+   }
294
+
295
+   if (packet->type == OBS_ENCODER_VIDEO) {
296
+       obs_parse_avc_packet(&tmp_packet, packet);
297
+       packet->drop_priority = tmp_packet.priority;
298
+       obs_encoder_packet_release(&tmp_packet);
299
+   }
300
+   obs_encoder_packet_ref(&new_packet, packet);
301
+
302
+   pthread_mutex_lock(&stream->write_mutex);
303
+
304
+   if (active(stream)) {
305
+       added_packet =
306
+           (packet->type == OBS_ENCODER_VIDEO)
307
+               ? add_video_packet(stream, &new_packet)
308
+               : write_packet_to_buf(stream, &new_packet);
309
+   }
310
+
311
+   pthread_mutex_unlock(&stream->write_mutex);
312
+
313
+   if (added_packet)
314
+       os_sem_post(stream->write_sem);
315
+   else
316
+       obs_encoder_packet_release(&new_packet);
317
+}
318
+
319
+struct obs_output_info ffmpeg_hls_muxer = {
320
+   .id = "ffmpeg_hls_muxer",
321
+   .flags = OBS_OUTPUT_AV | OBS_OUTPUT_ENCODED | OBS_OUTPUT_MULTI_TRACK |
322
+        OBS_OUTPUT_SERVICE,
323
+   .encoded_video_codecs = "h264",
324
+   .encoded_audio_codecs = "aac",
325
+   .get_name = ffmpeg_hls_mux_getname,
326
+   .create = ffmpeg_hls_mux_create,
327
+   .destroy = ffmpeg_hls_mux_destroy,
328
+   .start = ffmpeg_hls_mux_start,
329
+   .stop = ffmpeg_mux_stop,
330
+   .encoded_packet = ffmpeg_hls_mux_data,
331
+   .get_total_bytes = ffmpeg_mux_total_bytes,
332
+   .get_dropped_frames = hls_stream_dropped_frames,
333
+};
334
obs-studio-26.0.2.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-mux.c -> obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-mux.c Changed
242
 
1
@@ -14,17 +14,8 @@
2
     You should have received a copy of the GNU General Public License
3
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
4
 ******************************************************************************/
5
-
6
-#include <obs-module.h>
7
-#include <obs-hotkey.h>
8
-#include <obs-avc.h>
9
-#include <util/dstr.h>
10
-#include <util/pipe.h>
11
-#include <util/darray.h>
12
-#include <util/platform.h>
13
-#include <util/circlebuf.h>
14
-#include <util/threading.h>
15
 #include "ffmpeg-mux/ffmpeg-mux.h"
16
+#include "obs-ffmpeg-mux.h"
17
 
18
 #ifdef _WIN32
19
 #include "util/windows/win-version.h"
20
@@ -39,35 +30,6 @@
21
 #define warn(format, ...) do_log(LOG_WARNING, format, ##__VA_ARGS__)
22
 #define info(format, ...) do_log(LOG_INFO, format, ##__VA_ARGS__)
23
 
24
-struct ffmpeg_muxer {
25
-   obs_output_t *output;
26
-   os_process_pipe_t *pipe;
27
-   int64_t stop_ts;
28
-   uint64_t total_bytes;
29
-   struct dstr path;
30
-   bool sent_headers;
31
-   volatile bool active;
32
-   volatile bool stopping;
33
-   volatile bool capturing;
34
-
35
-   /* replay buffer */
36
-   struct circlebuf packets;
37
-   int64_t cur_size;
38
-   int64_t cur_time;
39
-   int64_t max_size;
40
-   int64_t max_time;
41
-   int64_t save_ts;
42
-   int keyframes;
43
-   obs_hotkey_id hotkey;
44
-
45
-   DARRAY(struct encoder_packet) mux_packets;
46
-   pthread_t mux_thread;
47
-   bool mux_thread_joinable;
48
-   volatile bool muxing;
49
-
50
-   bool is_network;
51
-};
52
-
53
 static const char *ffmpeg_mux_getname(void *type)
54
 {
55
    UNUSED_PARAMETER(type);
56
@@ -105,9 +67,13 @@
57
    if (stream->mux_thread_joinable)
58
        pthread_join(stream->mux_thread, NULL);
59
    da_free(stream->mux_packets);
60
+   circlebuf_free(&stream->packets);
61
 
62
    os_process_pipe_destroy(stream->pipe);
63
    dstr_free(&stream->path);
64
+   dstr_free(&stream->printable_path);
65
+   dstr_free(&stream->stream_key);
66
+   dstr_free(&stream->muxer_settings);
67
    bfree(stream);
68
 }
69
 
70
@@ -134,12 +100,12 @@
71
    return os_atomic_load_bool(&stream->capturing);
72
 }
73
 
74
-static inline bool stopping(struct ffmpeg_muxer *stream)
75
+bool stopping(struct ffmpeg_muxer *stream)
76
 {
77
    return os_atomic_load_bool(&stream->stopping);
78
 }
79
 
80
-static inline bool active(struct ffmpeg_muxer *stream)
81
+bool active(struct ffmpeg_muxer *stream)
82
 {
83
    return os_atomic_load_bool(&stream->active);
84
 }
85
@@ -236,17 +202,30 @@
86
    av_dict_free(&dict);
87
 }
88
 
89
+static void add_stream_key(struct dstr *cmd, struct ffmpeg_muxer *stream)
90
+{
91
+   dstr_catf(cmd, "\"%s\" ",
92
+         dstr_is_empty(&stream->stream_key)
93
+             ? ""
94
+             : stream->stream_key.array);
95
+}
96
+
97
 static void add_muxer_params(struct dstr *cmd, struct ffmpeg_muxer *stream)
98
 {
99
-   obs_data_t *settings = obs_output_get_settings(stream->output);
100
    struct dstr mux = {0};
101
 
102
-   dstr_copy(&mux, obs_data_get_string(settings, "muxer_settings"));
103
+   if (dstr_is_empty(&stream->muxer_settings)) {
104
+       obs_data_t *settings = obs_output_get_settings(stream->output);
105
+       dstr_copy(&mux,
106
+             obs_data_get_string(settings, "muxer_settings"));
107
+       obs_data_release(settings);
108
+   } else {
109
+       dstr_copy(&mux, stream->muxer_settings.array);
110
+   }
111
 
112
    log_muxer_params(stream, mux.array);
113
 
114
    dstr_replace(&mux, "\"", "\\\"");
115
-   obs_data_release(settings);
116
 
117
    dstr_catf(cmd, "\"%s\" ", mux.array ? mux.array : "");
118
 
119
@@ -291,10 +270,11 @@
120
        }
121
    }
122
 
123
+   add_stream_key(cmd, stream);
124
    add_muxer_params(cmd, stream);
125
 }
126
 
127
-static inline void start_pipe(struct ffmpeg_muxer *stream, const char *path)
128
+void start_pipe(struct ffmpeg_muxer *stream, const char *path)
129
 {
130
    struct dstr cmd;
131
    build_command_line(stream, &cmd, path);
132
@@ -381,10 +361,19 @@
133
    return true;
134
 }
135
 
136
-static int deactivate(struct ffmpeg_muxer *stream, int code)
137
+int deactivate(struct ffmpeg_muxer *stream, int code)
138
 {
139
    int ret = -1;
140
 
141
+   if (stream->is_hls) {
142
+       if (stream->mux_thread_joinable) {
143
+           os_event_signal(stream->stop_event);
144
+           os_sem_post(stream->write_sem);
145
+           pthread_join(stream->mux_thread, NULL);
146
+           stream->mux_thread_joinable = false;
147
+       }
148
+   }
149
+
150
    if (active(stream)) {
151
        ret = os_process_pipe_destroy(stream->pipe);
152
        stream->pipe = NULL;
153
@@ -392,7 +381,10 @@
154
        os_atomic_set_bool(&stream->active, false);
155
        os_atomic_set_bool(&stream->sent_headers, false);
156
 
157
-       info("Output of file '%s' stopped", stream->path.array);
158
+       info("Output of file '%s' stopped",
159
+            dstr_is_empty(&stream->printable_path)
160
+                ? stream->path.array
161
+                : stream->printable_path.array);
162
    }
163
 
164
    if (code) {
165
@@ -401,11 +393,24 @@
166
        obs_output_end_data_capture(stream->output);
167
    }
168
 
169
+   if (stream->is_hls) {
170
+       pthread_mutex_lock(&stream->write_mutex);
171
+
172
+       while (stream->packets.size) {
173
+           struct encoder_packet packet;
174
+           circlebuf_pop_front(&stream->packets, &packet,
175
+                       sizeof(packet));
176
+           obs_encoder_packet_release(&packet);
177
+       }
178
+
179
+       pthread_mutex_unlock(&stream->write_mutex);
180
+   }
181
+
182
    os_atomic_set_bool(&stream->stopping, false);
183
    return ret;
184
 }
185
 
186
-static void ffmpeg_mux_stop(void *data, uint64_t ts)
187
+void ffmpeg_mux_stop(void *data, uint64_t ts)
188
 {
189
    struct ffmpeg_muxer *stream = data;
190
 
191
@@ -451,8 +456,7 @@
192
    os_atomic_set_bool(&stream->capturing, false);
193
 }
194
 
195
-static bool write_packet(struct ffmpeg_muxer *stream,
196
-            struct encoder_packet *packet)
197
+bool write_packet(struct ffmpeg_muxer *stream, struct encoder_packet *packet)
198
 {
199
    bool is_video = packet->type == OBS_ENCODER_VIDEO;
200
    size_t ret;
201
@@ -505,7 +509,7 @@
202
    return write_packet(stream, &packet);
203
 }
204
 
205
-static bool send_headers(struct ffmpeg_muxer *stream)
206
+bool send_headers(struct ffmpeg_muxer *stream)
207
 {
208
    obs_encoder_t *aencoder;
209
    size_t idx = 0;
210
@@ -567,7 +571,7 @@
211
    return props;
212
 }
213
 
214
-static uint64_t ffmpeg_mux_total_bytes(void *data)
215
+uint64_t ffmpeg_mux_total_bytes(void *data)
216
 {
217
    struct ffmpeg_muxer *stream = data;
218
    return stream->total_bytes;
219
@@ -646,6 +650,12 @@
220
            return;
221
        }
222
 
223
+       calldata_t cd = {0};
224
+
225
+       signal_handler_t *sh =
226
+           obs_output_get_signal_handler(stream->output);
227
+       signal_handler_signal(sh, "saved", &cd);
228
+
229
        stream->save_ts = os_gettime_ns() / 1000LL;
230
    }
231
 }
232
@@ -679,6 +689,9 @@
233
    proc_handler_add(ph, "void get_last_replay(out string path)",
234
             get_last_replay, stream);
235
 
236
+   signal_handler_t *sh = obs_output_get_signal_handler(output);
237
+   signal_handler_add(sh, "void saved()");
238
+
239
    return stream;
240
 }
241
 
242
obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-mux.h Added
65
 
1
@@ -0,0 +1,63 @@
2
+#pragma once
3
+
4
+#include <obs-avc.h>
5
+#include <obs-module.h>
6
+#include <obs-hotkey.h>
7
+#include <util/circlebuf.h>
8
+#include <util/darray.h>
9
+#include <util/dstr.h>
10
+#include <util/pipe.h>
11
+#include <util/platform.h>
12
+#include <util/threading.h>
13
+
14
+struct ffmpeg_muxer {
15
+   obs_output_t *output;
16
+   os_process_pipe_t *pipe;
17
+   int64_t stop_ts;
18
+   uint64_t total_bytes;
19
+   bool sent_headers;
20
+   volatile bool active;
21
+   volatile bool capturing;
22
+   volatile bool stopping;
23
+   struct dstr path;
24
+   struct dstr printable_path;
25
+   struct dstr muxer_settings;
26
+   struct dstr stream_key;
27
+
28
+   /* replay buffer */
29
+   int64_t cur_size;
30
+   int64_t cur_time;
31
+   int64_t max_size;
32
+   int64_t max_time;
33
+   int64_t save_ts;
34
+   int keyframes;
35
+   obs_hotkey_id hotkey;
36
+   volatile bool muxing;
37
+   DARRAY(struct encoder_packet) mux_packets;
38
+
39
+   /* these are accessed both by replay buffer and by HLS */
40
+   pthread_t mux_thread;
41
+   bool mux_thread_joinable;
42
+   struct circlebuf packets;
43
+
44
+   /* HLS only */
45
+   int keyint_sec;
46
+   pthread_mutex_t write_mutex;
47
+   os_sem_t *write_sem;
48
+   os_event_t *stop_event;
49
+   bool is_hls;
50
+   int dropped_frames;
51
+   int min_priority;
52
+   int64_t last_dts_usec;
53
+
54
+   bool is_network;
55
+};
56
+
57
+bool stopping(struct ffmpeg_muxer *stream);
58
+bool active(struct ffmpeg_muxer *stream);
59
+void start_pipe(struct ffmpeg_muxer *stream, const char *path);
60
+bool write_packet(struct ffmpeg_muxer *stream, struct encoder_packet *packet);
61
+bool send_headers(struct ffmpeg_muxer *stream);
62
+int deactivate(struct ffmpeg_muxer *stream, int code);
63
+void ffmpeg_mux_stop(void *data, uint64_t ts);
64
+uint64_t ffmpeg_mux_total_bytes(void *data);
65
obs-studio-26.0.2.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c -> obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c Changed
19
 
1
@@ -477,6 +477,7 @@
2
    obs_data_set_default_bool(settings, "psycho_aq", true);
3
    obs_data_set_default_int(settings, "gpu", 0);
4
    obs_data_set_default_int(settings, "bf", 2);
5
+   obs_data_set_default_bool(settings, "repeat_headers", false);
6
 }
7
 
8
 static bool rate_control_modified(obs_properties_t *ppts, obs_property_t *p,
9
@@ -576,6 +577,9 @@
10
            obs_module_text("NVENC.PsychoVisualTuning"));
11
        obs_property_set_long_description(
12
            p, obs_module_text("NVENC.PsychoVisualTuning.ToolTip"));
13
+       p = obs_properties_add_bool(props, "repeat_headers",
14
+                       "repeat_headers");
15
+       obs_property_set_visible(p, false);
16
    }
17
 
18
    obs_properties_add_int(props, "gpu", obs_module_text("GPU"), 0, 8, 1);
19
obs-studio-26.0.2.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg.c -> obs-studio-26.1.0.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg.c Changed
25
 
1
@@ -24,6 +24,7 @@
2
 extern struct obs_output_info ffmpeg_muxer;
3
 extern struct obs_output_info ffmpeg_mpegts_muxer;
4
 extern struct obs_output_info replay_buffer;
5
+extern struct obs_output_info ffmpeg_hls_muxer;
6
 extern struct obs_encoder_info aac_encoder_info;
7
 extern struct obs_encoder_info opus_encoder_info;
8
 extern struct obs_encoder_info nvenc_encoder_info;
9
@@ -81,6 +82,7 @@
10
    0x1d11, // GP108M [GeForce MX230]
11
    0x1d13, // GP108M [GeForce MX250]
12
    0x1d52, // GP108BM [GeForce MX250]
13
+   0x1c94, // GP107 [GeForce MX350]
14
    0x137b, // GM108GLM [Quadro M520 Mobile]
15
    0x1d33, // GP108GLM [Quadro P500 Mobile]
16
    0x137a, // GM108GLM [Quadro K620M / Quadro M500M]
17
@@ -231,6 +233,7 @@
18
    obs_register_output(&ffmpeg_output);
19
    obs_register_output(&ffmpeg_muxer);
20
    obs_register_output(&ffmpeg_mpegts_muxer);
21
+   obs_register_output(&ffmpeg_hls_muxer);
22
    obs_register_output(&replay_buffer);
23
    obs_register_encoder(&aac_encoder_info);
24
    obs_register_encoder(&opus_encoder_info);
25
obs-studio-26.0.2.tar.xz/plugins/obs-filters/CMakeLists.txt -> obs-studio-26.1.0.tar.xz/plugins/obs-filters/CMakeLists.txt Changed
11
 
1
@@ -20,6 +20,9 @@
2
        "rnnoise/src/*.h"
3
        "rnnoise/include/*.h")
4
    add_definitions(-DCOMPILE_OPUS)
5
+   if("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
6
+       set_property(SOURCE ${rnnoise_SOURCES} PROPERTY COMPILE_FLAGS "-fvisibility=protected")
7
+   endif()
8
    include_directories("rnnoise/include")
9
    source_group("rnnoise" FILES ${rnnoise_SOURCES})
10
    set(LIBRNNOISE_FOUND TRUE)
11
obs-studio-26.0.2.tar.xz/plugins/obs-filters/data/locale/de-DE.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-filters/data/locale/de-DE.ini Changed
69
 
1
@@ -1,6 +1,6 @@
2
 ColorFilter="Farbkorrektur"
3
 ColorGradeFilter="LUT anwenden"
4
-MaskFilter="Bildmaske/‐vermischung"
5
+MaskFilter="Bildmaske/-vermischung"
6
 AsyncDelayFilter="Videoverzögerung (asynchron)"
7
 CropFilter="Zuschneiden/Pad"
8
 ScrollFilter="Bewegung"
9
@@ -30,11 +30,11 @@
10
 Gamma="Gamma"
11
 BrowsePath.Images="Alle Bilddateien"
12
 BrowsePath.AllFiles="Alle Dateien"
13
-KeyColorType="Key‐Farbtyp"
14
-KeyColor="Key‐Farbe"
15
+KeyColorType="Key-Farbtyp"
16
+KeyColor="Key-Farbe"
17
 Similarity="Ähnlichkeit (1–1000)"
18
 Smoothness="Glätte (1–1000)"
19
-ColorSpillReduction="Key‐Farbe‐Spill‐Reduzierung (1–1000)"
20
+ColorSpillReduction="Key-Farbe-Spill-Reduzierung (1–1000)"
21
 Crop.Left="Links"
22
 Crop.Right="Rechts"
23
 Crop.Top="Oben"
24
@@ -54,13 +54,13 @@
25
 Magenta="Magenta"
26
 NoiseGate.OpenThreshold="Öffnungsschwellwert"
27
 NoiseGate.CloseThreshold="Schließschwellwert"
28
-NoiseGate.AttackTime="Attack‐Zeit"
29
-NoiseGate.HoldTime="Hold‐Zeit"
30
-NoiseGate.ReleaseTime="Release‐Zeit"
31
+NoiseGate.AttackTime="Attack-Zeit"
32
+NoiseGate.HoldTime="Hold-Zeit"
33
+NoiseGate.ReleaseTime="Release-Zeit"
34
 Gain.GainDB="Verstärkung"
35
 StretchImage="Bild strecken (Bildseitenverhältnis verwerfen)"
36
 Resolution="Auflösung"
37
-Base.Canvas="Basis‐(Leinwand‐)Auflösung"
38
+Base.Canvas="Basis-(Leinwand-)Auflösung"
39
 None="Keine"
40
 ScaleFiltering="Skalierungsfilterung"
41
 ScaleFiltering.Point="Point"
42
@@ -70,7 +70,7 @@
43
 ScaleFiltering.Area="Area"
44
 NoiseSuppress.SuppressLevel="Unterdrückungspegel"
45
 NoiseSuppress.Method="Methode"
46
-NoiseSuppress.Method.Speex="Speex (niedrigere CPU‐Auslastung)"
47
+NoiseSuppress.Method.Speex="Speex (niedrigere CPU-Auslastung)"
48
 NoiseSuppress.Method.RNNoise="RNNoise (höhere Qualität)"
49
 Saturation="Sättigung"
50
 HueShift="Farbtonverschiebung"
51
@@ -81,7 +81,7 @@
52
 Compressor.AttackTime="Attack"
53
 Compressor.ReleaseTime="Release"
54
 Compressor.OutputGain="Ausgabeverstärkung"
55
-Compressor.SidechainSource="Sidechain‐/Ducking‐Quelle"
56
+Compressor.SidechainSource="Sidechain-/Ducking-Quelle"
57
 Limiter="Limiter"
58
 Limiter.Threshold="Schwellwert"
59
 Limiter.ReleaseTime="Release"
60
@@ -101,6 +101,6 @@
61
 LumaKeyFilter="Luma Key"
62
 Luma.LumaMax="Max. Luma"
63
 Luma.LumaMin="Min. Luma"
64
-Luma.LumaMaxSmooth="Max. Luma‐Glätte"
65
-Luma.LumaMinSmooth="Min. Luma‐Glätte"
66
+Luma.LumaMaxSmooth="Max. Luma-Glätte"
67
+Luma.LumaMinSmooth="Min. Luma-Glätte"
68
 
69
obs-studio-26.0.2.tar.xz/plugins/obs-filters/data/locale/el-GR.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-filters/data/locale/el-GR.ini Changed
68
 
1
@@ -7,11 +7,13 @@
2
 ChromaKeyFilter="Κλειδί Chroma"
3
 ColorKeyFilter="Κλειδί Χρώματος"
4
 SharpnessFilter="Όξυνση"
5
+Sharpness="Οξύτητα"
6
 ScaleFilter="Κλιμάκωση/αναλογίες"
7
 GPUDelayFilter="Καταστήσει καθυστέρηση"
8
 UndistortCenter="Undistort κέντρο της εικόνας κατά την κλιμάκωση από ultrawide"
9
 NoiseGate="Πύλη θορύβου"
10
 NoiseSuppress="Καταστολή θορύβου"
11
+InvertPolarity="Αντιστροφή Φάσης"
12
 Gain="Απολαβή"
13
 DelayMs="Καθυστέρηση"
14
 Type="Τύπος"
15
@@ -44,6 +46,7 @@
16
 ScrollFilter.SpeedY="Κατακόρυφη Ταχύτητα"
17
 ScrollFilter.LimitWidth="Περιορισμός Πλάτους"
18
 ScrollFilter.LimitHeight="Περιορισμός Ύψους"
19
+ScrollFilter.Loop="Επανάληψη"
20
 CustomColor="Προσαρμοσμένο χρώμα"
21
 Red="Κόκκινο"
22
 Green="Πράσινο"
23
@@ -57,13 +60,18 @@
24
 Gain.GainDB="Απολαβή"
25
 StretchImage="Τέντωση εικόνας (απόρριψη αναλογίας εικόνας)"
26
 Resolution="Ανάλυση"
27
+Base.Canvas="Βασική Ανάλυση (Καμβάς)"
28
 None="Καμία"
29
 ScaleFiltering="Κλίμακα φιλτραρίσματος"
30
 ScaleFiltering.Point="Σημείο"
31
 ScaleFiltering.Bilinear="Διγραμμικές"
32
 ScaleFiltering.Bicubic="Δικυβική"
33
 ScaleFiltering.Lanczos="Lanczos"
34
+ScaleFiltering.Area="Περιοχή"
35
 NoiseSuppress.SuppressLevel="Καταστολή επιπέδου"
36
+NoiseSuppress.Method="Μέθοδος"
37
+NoiseSuppress.Method.Speex="Speex (χαμηλότερη χρήση CPU)"
38
+NoiseSuppress.Method.RNNoise="RNNoise (υψηλότερη ποιότητα)"
39
 Saturation="Κορεσμός"
40
 HueShift="Μετατόπιση Απόχρωσης"
41
 Amount="Ποσό"
42
@@ -74,4 +82,25 @@
43
 Compressor.ReleaseTime="Απελευθέρωση"
44
 Compressor.OutputGain="Εξόδου κέρδος"
45
 Compressor.SidechainSource="Πηγή sidechain/βουτιά"
46
+Limiter="Περιοριστής"
47
+Limiter.Threshold="Όριο"
48
+Limiter.ReleaseTime="Απελευθέρωση"
49
+Expander="Επέκταση"
50
+Expander.Ratio="Λόγος"
51
+Expander.Threshold="Όριο"
52
+Expander.AttackTime="Επίθεση"
53
+Expander.ReleaseTime="Απελευθέρωση"
54
+Expander.OutputGain="Ένταση Εξόδου"
55
+Expander.Detector="Ανίχνευση"
56
+Expander.RMS="RMS"
57
+Expander.Peak="Peak"
58
+Expander.None="Καμία"
59
+Expander.Presets="Προεπιλογές"
60
+Expander.Presets.Expander="Επέκταση"
61
+Expander.Presets.Gate="Πύλη"
62
+LumaKeyFilter="Κλειδί Luma"
63
+Luma.LumaMax="Μέγιστο Luma"
64
+Luma.LumaMin="Ελάχιστο Luma"
65
+Luma.LumaMaxSmooth="Απαλό Μέγιστο Luma"
66
+Luma.LumaMinSmooth="Απαλό Ελάχιστο Luma"
67
 
68
obs-studio-26.0.2.tar.xz/plugins/obs-filters/data/locale/fa-IR.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-filters/data/locale/fa-IR.ini Changed
11
 
1
@@ -69,6 +69,9 @@
2
 ScaleFiltering.Lanczos="لانچوس"
3
 ScaleFiltering.Area="ناحیه"
4
 NoiseSuppress.SuppressLevel="سطح کاهش"
5
+NoiseSuppress.Method="روش"
6
+NoiseSuppress.Method.Speex="Speex (استفاده کمتر از پردازنده)"
7
+NoiseSuppress.Method.RNNoise="RNNoise (کیفیت بالاتر)"
8
 Saturation="اشباع"
9
 HueShift="تغییر مکان رنگ"
10
 Amount="میزان"
11
obs-studio-26.0.2.tar.xz/plugins/obs-filters/data/locale/fil-PH.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-filters/data/locale/fil-PH.ini Changed
25
 
1
@@ -65,6 +65,7 @@
2
 ScaleFiltering.Lanczos="Lankzos"
3
 ScaleFiltering.Area="Laki"
4
 NoiseSuppress.SuppressLevel="Antas ng Pagpigil"
5
+NoiseSuppress.Method="Paraan"
6
 Saturation="Pagbababad"
7
 HueShift="Kulay ng pagririlyebo"
8
 Amount="Halaga"
9
@@ -75,7 +76,15 @@
10
 Compressor.ReleaseTime="Paglabas"
11
 Compressor.OutputGain="Makakuha ng Awput"
12
 Compressor.SidechainSource="Saydcheyn/Pinagmulan ng Daking"
13
+Expander.Threshold="Halaga"
14
 Expander.AttackTime="Atake"
15
 Expander.ReleaseTime="Paglabas"
16
+Expander.Detector="Pagtuklas"
17
+Expander.RMS="RMS"
18
+Expander.Peak="Pinakamataas"
19
 Expander.None="Wala"
20
+Expander.Presets="Mga preset"
21
+LumaKeyFilter="Luma na Susi"
22
+Luma.LumaMax="Luma na Pinakamalakas"
23
+Luma.LumaMin="Luma na Pinakamaliit"
24
 
25
obs-studio-26.0.2.tar.xz/plugins/obs-filters/data/locale/he-IL.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-filters/data/locale/he-IL.ini Changed
21
 
1
@@ -41,6 +41,7 @@
2
 ScrollFilter.SpeedY="מהירות אנכית"
3
 ScrollFilter.LimitWidth="מגבלת רוחב"
4
 ScrollFilter.LimitHeight="מגבלת גובה"
5
+ScrollFilter.Loop="לולאה"
6
 CustomColor="צבע מותאם אישית"
7
 Red="אדום"
8
 Green="ירוק"
9
@@ -62,9 +63,11 @@
10
 ScaleFiltering.Lanczos="לנזוס"
11
 ScaleFiltering.Area="אזור"
12
 NoiseSuppress.Method="שיטה"
13
+Amount="כמות"
14
 Compressor.ReleaseTime="שחרור"
15
 Expander.ReleaseTime="שחרור"
16
 Expander.Detector="זיהוי"
17
 Expander.None="ללא"
18
+Expander.Presets.Gate="שער"
19
 LumaKeyFilter="מפתח Luma"
20
 
21
obs-studio-26.1.0.tar.xz/plugins/obs-filters/data/locale/kab-KAB.ini Added
57
 
1
@@ -0,0 +1,55 @@
2
+ColorFilter="Aseɣti n yini"
3
+ScrollFilter="Adrudem"
4
+SharpnessFilter="Semsed"
5
+NoiseSuppress="Tukksa n usxerxec"
6
+DelayMs="Asemmezger"
7
+Type="Anaw"
8
+MaskBlendType.MaskColor="Tagelmust alfa (abadu n yini)"
9
+MaskBlendType.MaskAlpha="Tagelmust alfa (abadu alfa)"
10
+Path="Abrid"
11
+Color="Ini"
12
+Opacity="Tiḍullest"
13
+Contrast="Amyeẓli"
14
+Brightness="Tifawit"
15
+Gamma="Gama"
16
+BrowsePath.Images="Akk ifuyla n tugna"
17
+BrowsePath.AllFiles="Akk ifuyla"
18
+KeyColorType="Anaw n yini yufraren"
19
+KeyColor="Ini yufraren"
20
+Crop.Left="Azelmaḍ"
21
+Crop.Right="Ayfus"
22
+Crop.Top="Ukessawen"
23
+Crop.Bottom="Ukessar"
24
+Crop.Width="Tehri"
25
+Crop.Height="Tattayt"
26
+Crop.Relative="Amassaɣ"
27
+ScrollFilter.SpeedX="Arured aglawan"
28
+ScrollFilter.SpeedY="Arured ubdid"
29
+ScrollFilter.Loop="Tineddict"
30
+CustomColor="Ini yugnen"
31
+Red="Azeggaɣ"
32
+Green="Azegzaw"
33
+Blue="Anili"
34
+NoiseGate.OpenThreshold="Amnaṛ n welday"
35
+NoiseGate.CloseThreshold="Amnaṛ n wemdal"
36
+Resolution="Tabadut"
37
+Base.Canvas="Tabadut tazadurant (Taɣzut n usuneɣ)"
38
+None="Ulac"
39
+ScaleFiltering.Point="Tenqiḍin"
40
+ScaleFiltering.Area="Taɣzut"
41
+NoiseSuppress.SuppressLevel="Aswir n tukksa"
42
+NoiseSuppress.Method="Tarrayt"
43
+NoiseSuppress.Method.RNNoise="RNNoise (taɣara ifazen)"
44
+Saturation="Tawant"
45
+HueShift="Asekḥer n tiɣmi"
46
+Amount="Tasmekta"
47
+Compressor.Ratio="Assaɣ"
48
+Compressor.ReleaseTime="Aserreḥ"
49
+Limiter.Threshold="Amnaṛ"
50
+Limiter.ReleaseTime="Aserreḥ"
51
+Expander.Ratio="Assaɣ"
52
+Expander.Threshold="Amnaṛ"
53
+Expander.ReleaseTime="Aserreḥ"
54
+Expander.Detector="Tifin"
55
+Expander.None="Ulac"
56
+
57
obs-studio-26.0.2.tar.xz/plugins/obs-filters/data/locale/nb-NO.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-filters/data/locale/nb-NO.ini Changed
11
 
1
@@ -69,6 +69,9 @@
2
 ScaleFiltering.Lanczos="Lanczos"
3
 ScaleFiltering.Area="Område"
4
 NoiseSuppress.SuppressLevel="Dempelse Nivå"
5
+NoiseSuppress.Method="Metode"
6
+NoiseSuppress.Method.Speex="Speex (lavere CPU-Bruk)"
7
+NoiseSuppress.Method.RNNoise="RNNoise (høyere kvalitet)"
8
 Saturation="Metning"
9
 HueShift="Fargetone Skifte"
10
 Amount="Mengde"
11
obs-studio-26.0.2.tar.xz/plugins/obs-filters/data/locale/pt-BR.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-filters/data/locale/pt-BR.ini Changed
12
 
1
@@ -28,8 +28,8 @@
2
 Contrast="Contraste"
3
 Brightness="Brilho"
4
 Gamma="Gama"
5
-BrowsePath.Images="Todos Arquivos de Imagem"
6
-BrowsePath.AllFiles="Todos os Arquivos"
7
+BrowsePath.Images="Todos os arquivos de imagem"
8
+BrowsePath.AllFiles="Todos os arquivos"
9
 KeyColorType="Tipo de Key Color"
10
 KeyColor="Key Color"
11
 Similarity="Similaridade (1-1000)"
12
obs-studio-26.0.2.tar.xz/plugins/obs-filters/data/locale/pt-PT.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-filters/data/locale/pt-PT.ini Changed
9
 
1
@@ -66,6 +66,7 @@
2
 ScaleFiltering.Lanczos="Lanczos"
3
 ScaleFiltering.Area="Área"
4
 NoiseSuppress.SuppressLevel="Nível de Supressão"
5
+NoiseSuppress.Method="Método"
6
 Saturation="Saturação"
7
 Amount="Montante"
8
 Compressor="Compressor"
9
obs-studio-26.0.2.tar.xz/plugins/obs-filters/data/locale/sl-SI.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-filters/data/locale/sl-SI.ini Changed
11
 
1
@@ -69,6 +69,9 @@
2
 ScaleFiltering.Lanczos="Lanczos"
3
 ScaleFiltering.Area="Območje"
4
 NoiseSuppress.SuppressLevel="Raven dušenja"
5
+NoiseSuppress.Method="Metoda"
6
+NoiseSuppress.Method.Speex="Speex (manjša poraba procesorja)"
7
+NoiseSuppress.Method.RNNoise="RNNoise (višja kakovost)"
8
 Saturation="Nasičenost"
9
 HueShift="Zamik odtenka"
10
 Amount="Količina"
11
obs-studio-26.0.2.tar.xz/plugins/obs-filters/rnnoise/src/denoise.c -> obs-studio-26.1.0.tar.xz/plugins/obs-filters/rnnoise/src/denoise.c Changed
114
 
1
@@ -172,12 +172,12 @@
2
   if (common.init) return;
3
   common.kfft = opus_fft_alloc_twiddles(2*FRAME_SIZE, NULL, NULL, NULL, 0);
4
   for (i=0;i<FRAME_SIZE;i++)
5
-    common.half_window[i] = sin(.5*M_PI*sin(.5*M_PI*(i+.5)/FRAME_SIZE) * sin(.5*M_PI*(i+.5)/FRAME_SIZE));
6
+    common.half_window[i] = (float)sin(.5*M_PI*sin(.5*M_PI*(i+.5)/FRAME_SIZE) * sin(.5*M_PI*(i+.5)/FRAME_SIZE));
7
   for (i=0;i<NB_BANDS;i++) {
8
     int j;
9
     for (j=0;j<NB_BANDS;j++) {
10
-      common.dct_table[i*NB_BANDS + j] = cos((i+.5)*j*M_PI/NB_BANDS);
11
-      if (j==0) common.dct_table[i*NB_BANDS + j] *= sqrt(.5);
12
+      common.dct_table[i*NB_BANDS + j] = (float)cos((i+.5)*j*M_PI/NB_BANDS);
13
+      if (j==0) common.dct_table[i*NB_BANDS + j] *= (float)sqrt(.5);
14
     }
15
   }
16
   common.init = 1;
17
@@ -192,7 +192,7 @@
18
     for (j=0;j<NB_BANDS;j++) {
19
       sum += in[j] * common.dct_table[j*NB_BANDS + i];
20
     }
21
-    out[i] = sum*sqrt(2./22);
22
+    out[i] = (float)(sum*sqrt(2./22));
23
   }
24
 }
25
 
26
@@ -206,7 +206,7 @@
27
     for (j=0;j<NB_BANDS;j++) {
28
       sum += in[j] * common.dct_table[i*NB_BANDS + j];
29
     }
30
-    out[i] = sum*sqrt(2./22);
31
+    out[i] = (float)(sum*sqrt(2./22));
32
   }
33
 }
34
 #endif
35
@@ -338,19 +338,19 @@
36
   forward_transform(P, p);
37
   compute_band_energy(Ep, P);
38
   compute_band_corr(Exp, X, P);
39
-  for (i=0;i<NB_BANDS;i++) Exp[i] = Exp[i]/sqrt(.001+Ex[i]*Ep[i]);
40
+  for (i=0;i<NB_BANDS;i++) Exp[i] = (float)(Exp[i]/sqrt(.001+Ex[i]*Ep[i]));
41
   dct(tmp, Exp);
42
   for (i=0;i<NB_DELTA_CEPS;i++) features[NB_BANDS+2*NB_DELTA_CEPS+i] = tmp[i];
43
-  features[NB_BANDS+2*NB_DELTA_CEPS] -= 1.3;
44
-  features[NB_BANDS+2*NB_DELTA_CEPS+1] -= 0.9;
45
-  features[NB_BANDS+3*NB_DELTA_CEPS] = .01*(pitch_index-300);
46
+  features[NB_BANDS+2*NB_DELTA_CEPS] -= 1.3f;
47
+  features[NB_BANDS+2*NB_DELTA_CEPS+1] -= 0.9f;
48
+  features[NB_BANDS+3*NB_DELTA_CEPS] = (float)(.01*(pitch_index-300));
49
   logMax = -2;
50
   follow = -2;
51
   for (i=0;i<NB_BANDS;i++) {
52
-    Ly[i] = log10(1e-2+Ex[i]);
53
-    Ly[i] = MAX16(logMax-7, MAX16(follow-1.5, Ly[i]));
54
+    Ly[i] = (float)log10(1e-2+Ex[i]);
55
+    Ly[i] = (float)MAX16(logMax-7, MAX16(follow-1.5, Ly[i]));
56
     logMax = MAX16(logMax, Ly[i]);
57
-    follow = MAX16(follow-1.5, Ly[i]);
58
+    follow = (float)MAX16(follow-1.5, Ly[i]);
59
     E += Ex[i];
60
   }
61
   if (!TRAINING && E < 0.04) {
62
@@ -392,7 +392,7 @@
63
     }
64
     spec_variability += mindist;
65
   }
66
-  features[NB_BANDS+3*NB_DELTA_CEPS+1] = spec_variability/CEPS_MEM-2.1;
67
+  features[NB_BANDS+3*NB_DELTA_CEPS+1] = (float)(spec_variability/CEPS_MEM-2.1);
68
   return TRAINING && E < 0.1;
69
 }
70
 
71
@@ -411,8 +411,8 @@
72
     float xi, yi;
73
     xi = x[i];
74
     yi = x[i] + mem[0];
75
-    mem[0] = mem[1] + (b[0]*(double)xi - a[0]*(double)yi);
76
-    mem[1] = (b[1]*(double)xi - a[1]*(double)yi);
77
+    mem[0] = (float)(mem[1] + (b[0]*(double)xi - a[0]*(double)yi));
78
+    mem[1] = (float)((b[1]*(double)xi - a[1]*(double)yi));
79
     y[i] = yi;
80
   }
81
 }
82
@@ -429,10 +429,10 @@
83
     r[i] = MIN16(1, MAX16(0, r[i]));
84
 #else
85
     if (Exp[i]>g[i]) r[i] = 1;
86
-    else r[i] = SQUARE(Exp[i])*(1-SQUARE(g[i]))/(.001 + SQUARE(g[i])*(1-SQUARE(Exp[i])));
87
-    r[i] = sqrt(MIN16(1, MAX16(0, r[i])));
88
+    else r[i] = (float)(SQUARE(Exp[i])*(1-SQUARE(g[i]))/(.001 + SQUARE(g[i])*(1-SQUARE(Exp[i]))));
89
+    r[i] = (float)sqrt(MIN16(1, MAX16(0, r[i])));
90
 #endif
91
-    r[i] *= sqrt(Ex[i]/(1e-8+Ep[i]));
92
+    r[i] *= (float)sqrt(Ex[i]/(1e-8+Ep[i]));
93
   }
94
   interp_band_gain(rf, r);
95
   for (i=0;i<FREQ_SIZE;i++) {
96
@@ -444,7 +444,7 @@
97
   float norm[NB_BANDS];
98
   float normf[FREQ_SIZE]={0};
99
   for (i=0;i<NB_BANDS;i++) {
100
-    norm[i] = sqrt(Ex[i]/(1e-8+newE[i]));
101
+    norm[i] = (float)(sqrt(Ex[i]/(1e-8+newE[i])));
102
   }
103
   interp_band_gain(normf, norm);
104
   for (i=0;i<FREQ_SIZE;i++) {
105
@@ -465,7 +465,7 @@
106
   float gf[FREQ_SIZE]={1};
107
   float vad_prob = 0;
108
   int silence;
109
-  static const float a_hp[2] = {-1.99599, 0.99600};
110
+  static const float a_hp[2] = {-1.99599f, 0.99600f};
111
   static const float b_hp[2] = {-2, 1};
112
   biquad(x, st->mem_hp_x, in, b_hp, a_hp, FRAME_SIZE);
113
   silence = compute_frame_features(st, X, P, Ex, Ep, Exp, features, x);
114
obs-studio-26.0.2.tar.xz/plugins/obs-filters/rnnoise/src/pitch.c -> obs-studio-26.1.0.tar.xz/plugins/obs-filters/rnnoise/src/pitch.c Changed
10
 
1
@@ -419,7 +419,7 @@
2
 #else
3
 static opus_val16 compute_pitch_gain(opus_val32 xy, opus_val32 xx, opus_val32 yy)
4
 {
5
-   return xy/sqrt(1+xx*yy);
6
+   return (opus_val16)(xy/sqrt(1.0+xx*yy));
7
 }
8
 #endif
9
 
10
obs-studio-26.0.2.tar.xz/plugins/obs-filters/rnnoise/src/rnn.c -> obs-studio-26.1.0.tar.xz/plugins/obs-filters/rnnoise/src/rnn.c Changed
10
 
1
@@ -68,7 +68,7 @@
2
 
3
 static OPUS_INLINE float sigmoid_approx(float x)
4
 {
5
-   return .5 + .5*tansig_approx(.5*x);
6
+   return (float)(.5 + .5*tansig_approx(.5f*x));
7
 }
8
 
9
 static OPUS_INLINE float relu(float x)
10
obs-studio-26.0.2.tar.xz/plugins/obs-libfdk/data/locale/de-DE.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-libfdk/data/locale/de-DE.ini Changed
8
 
1
@@ -1,4 +1,4 @@
2
-LibFDK="libfdk‐AAC‐Encoder"
3
+LibFDK="libfdk-AAC-Encoder"
4
 Bitrate="Bitrate"
5
-Afterburner="AAC‐Afterburner aktivieren"
6
+Afterburner="AAC-Afterburner aktivieren"
7
 
8
obs-studio-26.0.2.tar.xz/plugins/obs-libfdk/data/locale/fa-IR.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-libfdk/data/locale/fa-IR.ini Changed
7
 
1
@@ -1,4 +1,4 @@
2
-LibFDK="کتابخانه رمزگذار AAC"
3
+LibFDK="libfdk رمزگذار AAC"
4
 Bitrate="نرخ بیت"
5
 Afterburner="فعال سازی رمزگذاری AAC خروجی"
6
 
7
obs-studio-26.1.0.tar.xz/plugins/obs-libfdk/data/locale/kab-KAB.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+LibFDK="asettengal libfdk AAC"
3
+Bitrate="Aktum"
4
+Afterburner="Sermed AAC Afterburner"
5
+
6
obs-studio-26.0.2.tar.xz/plugins/obs-libfdk/data/locale/ur-PK.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-libfdk/data/locale/ur-PK.ini Changed
6
 
1
@@ -1,4 +1,3 @@
2
-LibFDK="لابفدک AAC انکوڈر"
3
 Bitrate="بٹ شرح"
4
 Afterburner="بٹرا قابل اطلاق AAC بعدبورنر"
5
 
6
obs-studio-26.0.2.tar.xz/plugins/obs-outputs/data/locale/ar-SA.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-outputs/data/locale/ar-SA.ini Changed
13
 
1
@@ -5,5 +5,11 @@
2
 Default="Default"
3
 
4
 ConnectionTimedOut="انتهت مهلة الاتصال. تأكد من أن قمت بتكوين خدمة البث صالحة ولا جدار الحماية بحظر الاتصال."
5
+PermissionDenied="تم حظر الاتصال. تحقق من جدار الحماية/إعدادات مكافحة الفيروسات للتأكد من السماح لـ OBS بالوصول الكامل للإنترنت."
6
+ConnectionAborted="تم إحباط الاتصال. وهذا يشير عادة إلى مشاكل في الاتصال بالإنترنت بينك وبين خدمة البث."
7
 ConnectionReset="The connection was reset by the peer. This usually indicates internet connection problems between you and the streaming service."
8
+HostNotFound="لم يتم العثور على اسم المضيف. تأكد من إدخال خادم بث صالح والاتصال بالإنترنت / DNS يعمل بشكل صحيح."
9
+NoData="تم العثور على اسم المضيف، ولكن لا توجد بيانات من النوع المطلوب. يمكن أن يحدث هذا إذا كنت مرتبطة بعنوان IPv6 وخدمة البث الخاصة بك تحتوي فقط على عناوين IPv4 (انظر الإعدادات ← المتقدمة)."
10
+AddressNotAvailable="العنوان غير متوفر. ربما كنت قد حاولت ربط عنوان IP غير صالح (انظر الإعدادات ← المتقدم)."
11
+SSLCertVerifyFailed="أرسل خادم RTMP شهادة SSL غير صالحة."
12
 
13
obs-studio-26.0.2.tar.xz/plugins/obs-outputs/data/locale/de-DE.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-outputs/data/locale/de-DE.ini Changed
27
 
1
@@ -1,15 +1,15 @@
2
-RTMPStream="RTMP‐Stream"
3
-RTMPStream.DropThreshold="Drop‐Schwellwert (Millisekunden)"
4
-FLVOutput="FLV‐Dateiausgabe"
5
+RTMPStream="RTMP-Stream"
6
+RTMPStream.DropThreshold="Drop-Schwellwert (Millisekunden)"
7
+FLVOutput="FLV-Dateiausgabe"
8
 FLVOutput.FilePath="Dateipfad"
9
 Default="Standard"
10
 
11
-ConnectionTimedOut="Zeitüberschreitung bei der Verbindung. Stellen Sie sicher, dass Sie einen gültigen Streamingdienst konfiguriert haben und keine Firewall die Verbindung blockiert."
12
-PermissionDenied="Die Verbindung wurde blockiert. Überprüfen Sie Ihre Firewall‐/Anti‐Virus‐Einstellungen, um sicherzustellen, dass OBS vollen Internetzugang hat."
13
-ConnectionAborted="Die Verbindung wurde abgebrochen. Dies bedeutet in der Regel Probleme mit der Internetverbindung zwischen Ihnen und dem Streamingdienst."
14
-ConnectionReset="Die Verbindung wurde durch den Kommunikationspartner zurückgesetzt. Dies bedeutet in der Regel Probleme mit der Internetverbindung zwischen Ihnen und dem Streamingdienst."
15
+ConnectionTimedOut="Zeitüberschreitung bei der Verbindung. Stellen Sie sicher, dass Sie eine gültige Streamingplattform konfiguriert haben und keine Firewall die Verbindung blockiert."
16
+PermissionDenied="Die Verbindung wurde blockiert. Überprüfen Sie Ihre Firewall-/Anti-Virus-Einstellungen, um sicherzustellen, dass OBS vollen Internetzugang hat."
17
+ConnectionAborted="Die Verbindung wurde abgebrochen. Dies bedeutet in der Regel Probleme mit der Internetverbindung zwischen Ihnen und der Streamingplattform."
18
+ConnectionReset="Die Verbindung wurde durch den Kommunikationspartner zurückgesetzt. Dies bedeutet in der Regel Probleme mit der Internetverbindung zwischen Ihnen und der Streamingplattform."
19
 HostNotFound="Hostname nicht gefunden. Stellen Sie sicher, dass Sie einen gültigen Streamingserver eingegeben haben und Ihr(e) Internetverbindung/DNS korrekt arbeiten."
20
-NoData="Hostname gefunden, aber keine Daten des angeforderten Typs vorhanden. Dies kann auftreten, wenn Sie eine IPv6‐Adresse verwenden, aber Ihr Streamingdienst nur über IPv4‐Adressen verfügt. (siehe „Einstellungen“ → „Erweitert“)"
21
-AddressNotAvailable="Adresse nicht verfügbar. Sie haben möglicherweise eine ungültige IP‐Adresse versucht zu verwenden. (siehe „Einstellungen“ → „Erweitert“)"
22
-SSLCertVerifyFailed="Der RTMP‐Server hat ein ungültiges SSL‐Zertifikat gesendet."
23
+NoData="Hostname gefunden, aber keine Daten des angeforderten Typs vorhanden. Dies kann auftreten, wenn Sie eine IPv6-Adresse verwenden, aber Ihre Streamingplattform nur über IPv4-Adressen verfügt. (siehe Einstellungen → Erweitert)"
24
+AddressNotAvailable="Adresse nicht verfügbar. Sie haben möglicherweise eine ungültige IP-Adresse versucht zu verwenden. (siehe Einstellungen → Erweitert)"
25
+SSLCertVerifyFailed="Der RTMP-Server hat ein ungültiges SSL-Zertifikat gesendet."
26
 
27
obs-studio-26.0.2.tar.xz/plugins/obs-outputs/data/locale/el-GR.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-outputs/data/locale/el-GR.ini Changed
9
 
1
@@ -9,4 +9,7 @@
2
 ConnectionAborted="Η σύνδεση ματαιώθηκε. Αυτό συνήθως υποδεικνύει προβλήματα σύνδεσης στο διαδίκτυο ανάμεσα σε εσάς και την υπηρεσία συνεχούς ροής."
3
 ConnectionReset="Η σύνδεση ήταν επαναφέρθηκε στον ομότιμο υπολογιστή. Αυτό συνήθως υποδεικνύει προβλήματα σύνδεσης στο διαδίκτυο ανάμεσα σε εσάς και την υπηρεσία συνεχούς ροής."
4
 HostNotFound="Το όνομα του κεντρικού υπολογιστή δεν βρέθηκε. Βεβαιωθείτε ότι πληκτρολογήσατε έναν έγκυρο διακομιστή συνεχούς ροής και η σύνδεση στο διαδίκτυο / DNS λειτουργεί σωστά."
5
+NoData="Το όνομα του κεντρικού υπολογιστή βρέθηκε, αλλά χωρίς δεδομένα του ζητούμενου τύπου. Αυτό μπορεί να συμβεί αν έχετε δεσμεύσει μια διεύθυνση IPv6 και για η υπηρεσία συνεχούς ροής διαθέτει μόνο διευθύνσεις IPv4 (ανατρέξτε στην ενότητα Ρυθμίσεις → Για Προχωρημένους)."
6
+AddressNotAvailable="Η διεύθυνση δεν είναι διαθέσιμη. Μπορεί να Δοκιμάσατε να συνδεθείτε σε μια άκυρη διεύθυνση IP (ανατρέξτε στην ενότητα Ρυθμίσεις → Για Προχωρημένους)."
7
+SSLCertVerifyFailed="Ο διακομιστής RTMP έστειλε ένα άκυρο πιστοποιητικό SSL."
8
 
9
obs-studio-26.1.0.tar.xz/plugins/obs-outputs/data/locale/kab-KAB.ini Added
16
 
1
@@ -0,0 +1,14 @@
2
+RTMPStream="Asuddem n RTMP"
3
+FLVOutput="Tuffɣa ɣer ufaylu FLV"
4
+FLVOutput.FilePath="Abrid n ufaylu"
5
+Default="Amezwar"
6
+
7
+ConnectionTimedOut="Tuqqna tfut. Tḥeq belli tesɣewreḍ ameẓlu n usuddem ameɣtu yerna ulac aɣrab b tmes i yesswaḥlen tuqqna."
8
+PermissionDenied="Tuqqna tettusewḥel. Selken iɣewwaren n uɣrab n tmes neɣ nuseɣẓan mgalavirus akken ad tetḥeqqeḍ belli OBS yesɛa adduf ummid ɣer internet."
9
+ConnectionAborted="Tuqqna tegzem. Ayagi immal di tegti ugur n tuqqna ɣer internet gar-ak m akked umeẓlu n usuddem."
10
+ConnectionReset="Tuqqna tules awennez. Ayagi immal di tegti ugur n tuqqna ɣer internet gar-ak m akked umeẓlu n usuddem."
11
+HostNotFound="Isem n usneftaɣ ur yettwaf ara. Tḥeq belli tsekcmeḍ aqeddac ameɣtu n usuddem yerna tuqqna-inek ɣer internet / DNS tteddun akken iwata."
12
+NoData="Isem n usneftaɣ yettwaf, maca ulac isefka n wanaw i tsutreḍ. Ayagi yezmer ad d-iḍru ma tesqedceḍ tansa IPv6 yerna ameẓlu n usuddem yesɛa kan tansiwin IPv4 (ẓer Iɣewwaren → Anaẓi)."
13
+AddressNotAvailable="Tansa ur tewjid ara. Ahat tɛerḍeḍ ad tt-tarzeḍ ɣer tansa IP tarmeɣtut (ẓer Iɣewwaren→ Anaẓi)."
14
+SSLCertVerifyFailed="Aqeddac RTMP yuzen-d aselkin SSL armeɣtu."
15
+
16
obs-studio-26.0.2.tar.xz/plugins/obs-outputs/data/locale/ro-RO.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-outputs/data/locale/ro-RO.ini Changed
15
 
1
@@ -6,10 +6,10 @@
2
 
3
 ConnectionTimedOut="Conexiunea a expirat. Asigură-te că ai configurat un serviciu de streaming valid și că nici un firewall nu blochează conexiunea."
4
 PermissionDenied="Conexiunea a fost blocată. Verificați setările firewall-ului / anti-virus pentru a vă asigura că OBS are acces complet la internet."
5
-ConnectionAborted="Conexiunea a fost întreruptă. Acest lucru indică de obicei probleme de conexiune la internet între dvs. și serviciul de streaming."
6
-ConnectionReset="Conexiunea a fost întreruptă. Acest lucru indică de obicei probleme de conexiune la internet între dvs. și serviciul de streaming."
7
+ConnectionAborted="Conexiunea a fost întreruptă. Acest lucru indică de obicei probleme de conexiune la internet între tine și serviciul de transmisiune."
8
+ConnectionReset="Conexiunea a fost resetată de partener. Acest lucru indică de obicei probleme de conexiune la internet între tine și serviciul de transmisiune."
9
 HostNotFound="Hostname nu a fost găsit. Asigură-te că ai introdus un server valid de streaming și că conexiunea la internet/DNS funcționează corect."
10
-NoData="A fost găsit numele gazdei, dar nu există date de tipul solicitat. Acest lucru poate apărea dacă aveți o adresă IPv6 și serviciul dvs. de streaming are doar adrese IPv4 (vezi Setări → Avansat)."
11
+NoData="A fost găsit numele gazdei, dar nu există date de tipul solicitat. Acest lucru se poate întâmpla dacă ai o adresă IPv6 și serviciul de transmisiune are doar adrese IPv4 (vezi Setări → Avansate)."
12
 AddressNotAvailable="Adresa nu este disponibilă. Este posibil să fi încercat conectarea la o adresă IP invalidă (vezi Setări → Avansat)."
13
 SSLCertVerifyFailed="Serverul RTMP a trimis un certificat SSL nevalid."
14
 
15
obs-studio-26.0.2.tar.xz/plugins/obs-outputs/librtmp/rtmp.c -> obs-studio-26.1.0.tar.xz/plugins/obs-outputs/librtmp/rtmp.c Changed
39
 
1
@@ -348,6 +348,12 @@
2
             "/etc/ssl/certs");
3
         goto error;
4
     }
5
+#elif defined(__OpenBSD__)
6
+    if (mbedtls_x509_crt_parse_file(chain, "/etc/ssl/cert.pem") < 0) {
7
+        RTMP_Log(RTMP_LOGERROR, "mbedtls_x509_crt_parse_file: Couldn't parse "
8
+            "/etc/ssl/cert.pem");
9
+        goto error;
10
+    }
11
 #endif
12
 
13
     mbedtls_ssl_conf_ca_chain(&r->RTMP_TLS_ctx->conf, chain, NULL);
14
@@ -814,8 +820,10 @@
15
         *socket_error = WSANO_DATA;
16
 #elif __FreeBSD__
17
         *socket_error = ENOATTR;
18
-#else
19
+#elif defined(ENODATA)
20
         *socket_error = ENODATA;
21
+#else
22
+        *socket_error = EAFNOSUPPORT;
23
 #endif
24
 
25
         RTMP_Log(RTMP_LOGERROR, "Could not resolve server '%s': no valid address found", hostname);
26
@@ -3382,10 +3390,9 @@
27
 
28
         else
29
         {
30
+            RTMP_Log(RTMP_LOGWARNING, "Unhandled: %s:\n%s", r->Link.tcUrl.av_val, code.av_val);
31
             if (description.av_len)
32
-                RTMP_Log(RTMP_LOGWARNING, "Unhandled: %s:\n%s (%s)", r->Link.tcUrl.av_val, code.av_val, description.av_val);
33
-            else
34
-                RTMP_Log(RTMP_LOGWARNING, "Unhandled: %s:\n%s", r->Link.tcUrl.av_val, code.av_val);
35
+                RTMP_Log(RTMP_LOGDEBUG, "Description: %s", description.av_val);
36
         }
37
     }
38
     else if (AVMATCH(&method, &av_playlist_ready))
39
obs-studio-26.0.2.tar.xz/plugins/obs-qsv11/data/locale/de-DE.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-qsv11/data/locale/de-DE.ini Changed
12
 
1
@@ -6,8 +6,8 @@
2
 Profile="Profil"
3
 Accuracy="Genauigkeit"
4
 Convergence="Konvergenz"
5
-ICQQuality="ICQ‐Qualität"
6
+ICQQuality="ICQ-Qualität"
7
 Latency="Latenz"
8
-Latency.ToolTip="Es gibt einen Kompromiss zwischen Latenz und Qualität.\nWenn Sie für Ihren Fall Qualität bevorzugen, wählen Sie den Modus „normal“ aus, durch den eine End‐zu‐End‐Latenz von mehr als 2 s auftreten kann.\nFalls Sie aber eine Latenz von weniger als 500 ms benötigen, wählen Sie bitte den Modus „ultra-low“."
9
+Latency.ToolTip="Es gibt einen Kompromiss zwischen Latenz und Qualität.\nWenn Sie für Ihren Fall Qualität bevorzugen, wählen Sie den Modus „normal“ aus, durch den eine End-zu-End-Latenz von mehr als 2 s auftreten kann.\nFalls Sie aber eine Latenz von weniger als 500 ms benötigen, wählen Sie bitte den Modus „ultra-low“."
10
 SubjectiveVideoEnhancements="Subjektive Videoverbesserungen"
11
 
12
obs-studio-26.0.2.tar.xz/plugins/obs-qsv11/data/locale/el-GR.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-qsv11/data/locale/el-GR.ini Changed
9
 
1
@@ -7,4 +7,7 @@
2
 Accuracy="Ακρίβεια"
3
 Convergence="Σύγκλιση"
4
 ICQQuality="Ποιότητα ICQ"
5
+Latency="Καθυστέρηση"
6
+Latency.ToolTip="Υπάρχει αλληλεξάρτηση της καθυστέρησης με την ποιότητα.\nΑν προτιμάτε υψηλή ποιότητα, επιλέξτε την 'κανονική' λειτουργία, η οποία μπορεί να έχει καθυστέρηση πάνω από 2 δευτερόλεπτα.\nΑν χρειάζεστε καθυστέρηση μικρότερη των 500 χιλιοστών του δευτερολέπτου, παρακαλώ επιλέξτε την 'εξαιρετικά χαμηλή' λειτουργία."
7
+SubjectiveVideoEnhancements="Υποκειμενικές Βελτιώσεις Βίντεο"
8
 
9
obs-studio-26.0.2.tar.xz/plugins/obs-qsv11/data/locale/fa-IR.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-qsv11/data/locale/fa-IR.ini Changed
12
 
1
@@ -4,6 +4,10 @@
2
 RateControl="کنترل نرخ"
3
 KeyframeIntervalSec="فاصله Keyframe (ثانیه 0 = خودکار)"
4
 Profile="پروفایل"
5
+Accuracy="دقت"
6
 Convergence="همگرایی"
7
 ICQQuality="کیفیت ICQ"
8
+Latency="تأخیر"
9
+Latency.ToolTip="معامله بین تأخیر و کیفیت وجود دارد. \nاگر پرونده شما کیفیت را ترجیح می دهد، لطفاً حالت \"عادی\" را انتخاب کنید که ممکن است تاخیر پایان به پایان> 2 ثانیه داشته باشد. \n اگر پرونده شما به <500 میلی ثانیه تاخیر پایان به پایان نیاز دارد، لطفاً حالت \"خیلی کم\" را انتخاب کنید."
10
+SubjectiveVideoEnhancements="پیشرفت های ویدئویی ذهنی"
11
 
12
obs-studio-26.1.0.tar.xz/plugins/obs-qsv11/data/locale/kab-KAB.ini Added
10
 
1
@@ -0,0 +1,8 @@
2
+Bitrate="Aktum"
3
+MaxBitrate="Aktum afellay"
4
+RateControl="Asenqed n uktum"
5
+KeyframeIntervalSec="Azilal n yikataren yufraren (tasinin, 0=awurman)"
6
+Profile="Amaɣnu"
7
+Accuracy="Tiseddi"
8
+ICQQuality="Taɣara ICQ"
9
+
10
obs-studio-26.0.2.tar.xz/plugins/obs-qsv11/data/locale/nb-NO.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-qsv11/data/locale/nb-NO.ini Changed
9
 
1
@@ -7,4 +7,7 @@
2
 Accuracy="Nøyaktighet"
3
 Convergence="Konvergens"
4
 ICQQuality="ICQ-kvalitet"
5
+Latency="Latens"
6
+Latency.ToolTip="Der er et kompromiss mellom latens og kvalitet.\nHvis du foretrekker kvalitet for ditt scenario, vennligst velg 'normal' modus som kan forårsake > 2s ende til ende latens.\nHvis scenarioet ditt krever < 500ms ende til ende latens, vennligst velg 'ultra-lav' modus."
7
+SubjectiveVideoEnhancements="Subjektive videoforbedringer"
8
 
9
obs-studio-26.0.2.tar.xz/plugins/obs-qsv11/data/locale/sk-SK.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-qsv11/data/locale/sk-SK.ini Changed
9
 
1
@@ -8,6 +8,6 @@
2
 Convergence="Konvergencia"
3
 ICQQuality="ICQ Kvalita"
4
 Latency="Odozva"
5
-Latency.ToolTip="Medzi latenciou a kvalitou existuje kompromis. \nlf váš prípad uprednostňuje kvalitu, vyberte prosím 'normálny' režim, ktorý môže dostať> 2s latenciu. \nlf váš prípad vyžaduje <500ms end-to-end latenciu, vyberte režim „ultra nízky“."
6
+Latency.ToolTip="Medzi odozvou a kvalitou existuje kompromis. \nAk uprednostňujete kvalitu, vyberte prosím 'normálny' režim, ktorý môže mať > 2s odozvu. \nAk potrebujete odozvu < 500ms, vyberte režim 'nízka odozva'."
7
 SubjectiveVideoEnhancements="Subjektívne vylepšenia videa"
8
 
9
obs-studio-26.0.2.tar.xz/plugins/obs-text/data/locale/de-DE.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-text/data/locale/de-DE.ini Changed
10
 
1
@@ -2,7 +2,7 @@
2
 Font="Schriftart"
3
 Text="Text"
4
 ReadFromFile="Aus Datei lesen"
5
-TextFile="Textdatei (UTF‐8)"
6
+TextFile="Textdatei (UTF-8)"
7
 Filter.TextFiles="Textdateien"
8
 Filter.AllFiles="Alle Dateien"
9
 Color="Farbe"
10
obs-studio-26.0.2.tar.xz/plugins/obs-text/data/locale/el-GR.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-text/data/locale/el-GR.ini Changed
12
 
1
@@ -31,4 +31,10 @@
2
 UseCustomExtents.Wrap="Αναδίπλωση"
3
 Width="Πλάτος"
4
 Height="Ύψος"
5
+Transform="Μετασχηματισμός Κειμένου"
6
+Transform.None="Κανένας"
7
+Transform.Uppercase="Κεφαλαία"
8
+Transform.Lowercase="Πεζά"
9
+Transform.Startcase="Το πρώτο γράμμα Κεφαλαίο"
10
+Antialiasing="Ενεργοποίηση Εξομάλυνσης"
11
 
12
obs-studio-26.0.2.tar.xz/plugins/obs-text/data/locale/et-EE.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-text/data/locale/et-EE.ini Changed
20
 
1
@@ -7,6 +7,7 @@
2
 Filter.AllFiles="Kõik failid"
3
 Color="Värv"
4
 Opacity="Läbipaistvus"
5
+Gradient="Gradient"
6
 BkOpacity="Tausta läbipaistvus"
7
 Alignment="Joondus"
8
 Alignment.Left="Vasakule"
9
@@ -20,6 +21,10 @@
10
 Outline.Size="Kontuuri suurus"
11
 Outline.Color="Kontuuri värv"
12
 Outline.Opacity="Kontuuri läbipaistvus"
13
+UseCustomExtents.Wrap="Ümbris"
14
 Width="Laius"
15
 Height="Kõrgus"
16
+Transform.None="Puudub"
17
+Transform.Uppercase="Suurtähed"
18
+Transform.Lowercase="Väiketähed"
19
 
20
obs-studio-26.0.2.tar.xz/plugins/obs-text/data/locale/fa-IR.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-text/data/locale/fa-IR.ini Changed
8
 
1
@@ -35,4 +35,6 @@
2
 Transform.None="هیچکدام"
3
 Transform.Uppercase="حروف بزرگ"
4
 Transform.Lowercase="حروف کوچک"
5
+Transform.Startcase="شروع مورد"
6
+Antialiasing="فعال کردن ضد لبه"
7
 
8
obs-studio-26.0.2.tar.xz/plugins/obs-text/data/locale/he-IL.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-text/data/locale/he-IL.ini Changed
26
 
1
@@ -17,16 +17,24 @@
2
 Alignment.Left="שמאל"
3
 Alignment.Center="מרכז"
4
 Alignment.Right="ימין"
5
+Vertical="אנכי"
6
+VerticalAlignment="יישור אנכי"
7
 VerticalAlignment.Top="עליון"
8
 VerticalAlignment.Bottom="תחתון"
9
 Outline="קו מתאר"
10
 Outline.Size="גודל קו מתאר"
11
 Outline.Color="צבע קו מתאר"
12
 Outline.Opacity="אטימות קו מתאר"
13
+ChatlogMode="מצב צ'אט"
14
+ChatlogMode.Lines="הגבלת זמן צ'אט"
15
+UseCustomExtents="השתמש בגבולות המותאמים אישית"
16
+UseCustomExtents.Wrap="עטוף"
17
 Width="רוחב"
18
 Height="גובה"
19
 Transform="אותיות גדולות/קטנות"
20
 Transform.None="ללא"
21
 Transform.Uppercase="אותיות גדולות"
22
 Transform.Lowercase="אותיות קטנות"
23
+Transform.Startcase="אות גדולה ראשונה בכל מילה"
24
+Antialiasing="הפעל החלקת קצוות"
25
 
26
obs-studio-26.1.0.tar.xz/plugins/obs-text/data/locale/kab-KAB.ini Added
36
 
1
@@ -0,0 +1,34 @@
2
+TextGDIPlus="Aḍris (GDI+)"
3
+Font="Tasefsit"
4
+Text="Aḍris"
5
+ReadFromFile="Ɣer-d seg ufaylu"
6
+TextFile="Afaylu aḍris (UTF-8)"
7
+Filter.TextFiles="Ifuyla iḍrisen"
8
+Filter.AllFiles="Akk ifuyla"
9
+Color="Ini"
10
+Opacity="Tiḍullest"
11
+Gradient="Afesnaw"
12
+Gradient.Color="Ini n ufesnaw"
13
+Gradient.Opacity="Tiḍullest n ufesnaw"
14
+Gradient.Direction="Tanila n ufesnaw"
15
+BkColor="Ini n ugilal"
16
+BkOpacity="Tiḍullest n ugilal"
17
+Alignment.Left="Azelmaḍ"
18
+Alignment.Center="Alemmas"
19
+Alignment.Right="Ayfus"
20
+Vertical="Ubdid"
21
+VerticalAlignment.Top="Ukessawen"
22
+VerticalAlignment.Bottom="Ukessar"
23
+Outline="Azizdew"
24
+Outline.Size="Tiddi n uzizdew"
25
+Outline.Color="Ini n uzizdew"
26
+Outline.Opacity="Tiḍullet n uzizdew"
27
+ChatlogMode="Askar n umeslay"
28
+Width="Tehri"
29
+Height="Tattayt"
30
+Transform="Aselket n uḍris"
31
+Transform.None="Ulac"
32
+Transform.Uppercase="Asekkil ameqran"
33
+Transform.Lowercase="Asekkil ameẓyan"
34
+Antialiasing="Sermed amzay"
35
+
36
obs-studio-26.0.2.tar.xz/plugins/obs-text/data/locale/nb-NO.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-text/data/locale/nb-NO.ini Changed
7
 
1
@@ -36,4 +36,5 @@
2
 Transform.Uppercase="Store bokstaver"
3
 Transform.Lowercase="Små bokstaver"
4
 Transform.Startcase="Stor forbokstav i alle ord"
5
+Antialiasing="Aktiver antialiasing"
6
 
7
obs-studio-26.0.2.tar.xz/plugins/obs-text/data/locale/pt-BR.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-text/data/locale/pt-BR.ini Changed
61
 
1
@@ -1,40 +1,40 @@
2
 TextGDIPlus="Texto (GDI+)"
3
 Font="Fonte"
4
 Text="Texto"
5
-ReadFromFile="Carregar do Arquivo"
6
-TextFile="Arquivo de Texto (UTF-8)"
7
-Filter.TextFiles="Arquivos de Texto"
8
-Filter.AllFiles="Todos os Arquivos"
9
+ReadFromFile="Carregar do arquivo"
10
+TextFile="Arquivo de texto (UTF-8)"
11
+Filter.TextFiles="Arquivos de texto"
12
+Filter.AllFiles="Todos os arquivos"
13
 Color="Cor"
14
 Opacity="Opacidade"
15
 Gradient="Gradiente"
16
-Gradient.Color="Cor do Gradiente"
17
-Gradient.Opacity="Opacidade do Gradiente"
18
-Gradient.Direction="Direção do Gradiente"
19
-BkColor="Cor de Fundo"
20
-BkOpacity="Opacidade de Fundo"
21
+Gradient.Color="Cor do gradiente"
22
+Gradient.Opacity="Opacidade do gradiente"
23
+Gradient.Direction="Direção do gradiente"
24
+BkColor="Cor do fundo"
25
+BkOpacity="Opacidade do fundo"
26
 Alignment="Alinhamento"
27
 Alignment.Left="Esquerda"
28
 Alignment.Center="Centralizado"
29
 Alignment.Right="Direita"
30
 Vertical="Vertical"
31
-VerticalAlignment="Alinhamento Vertical"
32
+VerticalAlignment="Alinhamento vertical"
33
 VerticalAlignment.Top="Em cima"
34
 VerticalAlignment.Bottom="Em baixo"
35
 Outline="Contorno"
36
-Outline.Size="Tamanho do Contorno"
37
-Outline.Color="Cor do Contorno"
38
-Outline.Opacity="Opacidade do Contorno"
39
-ChatlogMode="Modo de Chat"
40
-ChatlogMode.Lines="Limite de Linhas do Chat"
41
+Outline.Size="Tamanho do contorno"
42
+Outline.Color="Cor do contorno"
43
+Outline.Opacity="Opacidade do contorno"
44
+ChatlogMode="Modo de chat"
45
+ChatlogMode.Lines="Limite de linhas do chat"
46
 UseCustomExtents="Usar extensões de texto personalizadas"
47
 UseCustomExtents.Wrap="Ajustar"
48
 Width="Largura"
49
 Height="Altura"
50
 Transform="Transformação"
51
 Transform.None="Nenhuma"
52
-Transform.Uppercase="Letras Maiúsculas"
53
-Transform.Lowercase="Letras Minúsculas"
54
-Transform.Startcase="Capitular"
55
-Antialiasing="Ativar Anti-Aliasing"
56
+Transform.Uppercase="Letras maiúsculas"
57
+Transform.Lowercase="Letras minúsculas"
58
+Transform.Startcase="Capitalizar"
59
+Antialiasing="Ativar anti-aliasing"
60
 
61
obs-studio-26.0.2.tar.xz/plugins/obs-text/data/locale/ro-RO.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-text/data/locale/ro-RO.ini Changed
40
 
1
@@ -7,10 +7,10 @@
2
 Filter.AllFiles="Toate fișierele"
3
 Color="Culoare"
4
 Opacity="Opacitate"
5
-Gradient="Degradeu"
6
-Gradient.Color="Culoare Gradient"
7
-Gradient.Opacity="Opacitate Gradient"
8
-Gradient.Direction="Direcție Gradient"
9
+Gradient="Gradient"
10
+Gradient.Color="Culoarea gradientului"
11
+Gradient.Opacity="Opacitatea gradientului"
12
+Gradient.Direction="Direcția gradientului"
13
 BkColor="Culoarea fundalului"
14
 BkOpacity="Opacitatea fundalului"
15
 Alignment="Aliniere"
16
@@ -25,15 +25,16 @@
17
 Outline.Size="Dimensiunea conturului"
18
 Outline.Color="Culoarea conturului"
19
 Outline.Opacity="Opacitatea conturului"
20
-ChatlogMode="Mod Chatlog"
21
-ChatlogMode.Lines="Limită linie chatlog"
22
-UseCustomExtents="Utilizaţi extensii personalizate ale textului"
23
-UseCustomExtents.Wrap="Infașoară"
24
+ChatlogMode="Mod pentru jurnal de chat"
25
+ChatlogMode.Lines="Limită pentru liniile jurnalului de chat"
26
+UseCustomExtents="Folosește extinderi personalizate ale textului"
27
+UseCustomExtents.Wrap="Încadrează textul"
28
 Width="Lățime"
29
 Height="Înălțime"
30
-Transform="Transformare text"
31
+Transform="Transformare de text"
32
 Transform.None="Niciuna"
33
-Transform.Uppercase="Majuscule"
34
+Transform.Uppercase="Litere mari"
35
 Transform.Lowercase="Litere mici"
36
-Transform.Startcase="Pornire Caz"
37
+Transform.Startcase="Majuscule numai la prima literă a fiecărui cuvânt"
38
+Antialiasing="Activează antialiasingul"
39
 
40
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/ar-SA.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/ar-SA.ini Changed
28
 
1
@@ -1,5 +1,7 @@
2
 FadeTransition="تلاشي"
3
 CutTransition="قطع"
4
+SwipeTransition="تمرير"
5
+SlideTransition="انزلاق"
6
 FadeToColorTransition="تلاشي إلى لون"
7
 Direction="الإتجاه"
8
 Direction.Left="يسار"
9
@@ -7,4 +9,17 @@
10
 Direction.Up="أعلى"
11
 Direction.Down="أسفل"
12
 Color="اللون"
13
-
14
+TransitionPointTypeFrame="الإطار"
15
+TransitionPointTypeTime="الوقت (بالمللي ثانية)"
16
+AudioFadeStyle="نمط تلاشي الصوت"
17
+LumaWipe.Image="الصورة"
18
+LumaWipe.Invert="عكس"
19
+LumaWipe.Type.BoxBottomLeft="الصندوق بالوسط يسار"
20
+LumaWipe.Type.BoxBottomRight="الصندوق بالوسط يمين"
21
+LumaWipe.Type.BoxTopLeft="الصندوق بالاعلى يسار"
22
+LumaWipe.Type.BoxTopRight="الصندوق بالاعلى يمين"
23
+LumaWipe.Type.Circles="الدوائر"
24
+LumaWipe.Type.Clock="الساعة"
25
+LumaWipe.Type.Cloud="سحابة"
26
+LumaWipe.Type.Curtain="ستار"
27
+HardwareDecode="استخدم فك تشفير الأجهزة عند توفرها"
28
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/ba-RU.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/ba-RU.ini Changed
6
 
1
@@ -6,4 +6,3 @@
2
 LumaWipe.Image="Һүрәт"
3
 LumaWipe.Type.Clock="Сәғәт"
4
 LumaWipe.Type.Cloud="Болот"
5
-
6
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/bg-BG.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/bg-BG.ini Changed
6
 
1
@@ -27,4 +27,3 @@
2
 LumaWipe.Type.Watercolor="Воден цвят"
3
 LumaWipe.Type.ZigzagHorizontal="Водоравен зигзаг"
4
 LumaWipe.Type.ZigzagVertical="Отвесен зигзаг"
5
-
6
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/bn-BD.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/bn-BD.ini Changed
6
 
1
@@ -8,4 +8,3 @@
2
 LumaWipe.Image="ছবি"
3
 LumaWipe.Invert="বিপরীতমুখী"
4
 LumaWipe.Softness="তারল্য"
5
-
6
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/ca-ES.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/ca-ES.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="Monitorització desactivada"
3
 AudioMonitoring.MonitorOnly="Només monitorització (sortida silenciosa)"
4
 AudioMonitoring.Both="Monitorització i sortida"
5
-
6
+HardwareDecode="Usa la descodificació per maquinari si és disponible"
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/cs-CZ.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/cs-CZ.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="Sledování vypnuto"
3
 AudioMonitoring.MonitorOnly="Pouze sledovat (ztlumit výstup)"
4
 AudioMonitoring.Both="Sledovat i odesílat na výstup"
5
-
6
+HardwareDecode="Použít hardwarové dekódování, pokud je k dispozici"
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/da-DK.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/da-DK.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="Monitering Fra"
3
 AudioMonitoring.MonitorOnly="Kun monitering (forstum output)"
4
 AudioMonitoring.Both="Monitorering og output"
5
-
6
+HardwareDecode="Benyt hardwareafkodning, når tilgængelig"
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/de-DE.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/de-DE.ini Changed
36
 
1
@@ -18,7 +18,7 @@
2
 TransitionPointTypeFrame="Frame"
3
 TransitionPointTypeTime="Zeit (Millisekunden)"
4
 AudioFadeStyle="Audioübergangsstil"
5
-AudioFadeStyle.FadeOutFadeIn="Zu Übergangspunkt aus‐ und dann einblenden"
6
+AudioFadeStyle.FadeOutFadeIn="Zu Übergangspunkt aus- und dann einblenden"
7
 AudioFadeStyle.CrossFade="Überblendung"
8
 SwitchPoint="Farbhöhepunkt"
9
 LumaWipeTransition="Luma Wipe"
10
@@ -47,8 +47,8 @@
11
 LumaWipe.Type.LinearTopLeft="Linear oben links"
12
 LumaWipe.Type.LinearTopRight="Linear oben rechts"
13
 LumaWipe.Type.LinearVertical="Linear vertikal"
14
-LumaWipe.Type.ParallelZigzagHorizontal="Parallel Zick‐Zack horizontal"
15
-LumaWipe.Type.ParallelZigzagVertical="Parallel Zick‐Zack vertikal"
16
+LumaWipe.Type.ParallelZigzagHorizontal="Parallel Zick-Zack horizontal"
17
+LumaWipe.Type.ParallelZigzagVertical="Parallel Zick-Zack vertikal"
18
 LumaWipe.Type.Sinus9="Sinus 9"
19
 LumaWipe.Type.Spiral="Spirale"
20
 LumaWipe.Type.Square="Quadrat"
21
@@ -57,10 +57,10 @@
22
 LumaWipe.Type.StripsHorizontal="Horizontale Streifen"
23
 LumaWipe.Type.StripsVertical="Vertikale Streifen"
24
 LumaWipe.Type.Watercolor="Aquarell"
25
-LumaWipe.Type.ZigzagHorizontal="Zick‐Zack horizontal"
26
-LumaWipe.Type.ZigzagVertical="Zick‐Zack vertikal"
27
-AudioMonitoring="Audio‐Monitoring"
28
+LumaWipe.Type.ZigzagHorizontal="Zick-Zack horizontal"
29
+LumaWipe.Type.ZigzagVertical="Zick-Zack vertikal"
30
+AudioMonitoring="Audio-Monitoring"
31
 AudioMonitoring.None="Monitor aus"
32
 AudioMonitoring.MonitorOnly="Nur Monitor (Ausgabe stummschalten)"
33
 AudioMonitoring.Both="Monitor und Ausgabe"
34
-
35
+HardwareDecode="Hardwaredecodierung verwenden, falls verfügbar"
36
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/el-GR.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/el-GR.ini Changed
23
 
1
@@ -12,6 +12,7 @@
2
 SwipeIn="Σύρετε προς τα επάνω"
3
 Color="Χρώμα"
4
 VideoFile="Αρχείο Βίντεο"
5
+TransitionPoint="Σημείο Μετάβασης"
6
 TransitionPointFrame="Σημείο μετάβασης (πλαίσιο)"
7
 TransitionPointType="Τύπος σημείου μετάβασης"
8
 TransitionPointTypeFrame="Καρέ"
9
@@ -19,6 +20,7 @@
10
 AudioFadeStyle="Στυλ ήχου Fade"
11
 AudioFadeStyle.FadeOutFadeIn="Fade out στο σημείο μετάβασης στη συνέχεια, fade in"
12
 AudioFadeStyle.CrossFade="Σταδιακή Εξασθένιση"
13
+SwitchPoint="Κορυφή Χρώματος"
14
 LumaWipeTransition="Luma Wipe"
15
 LumaWipe.Image="Εικόνα"
16
 LumaWipe.Invert="Αντιστροφή"
17
@@ -61,4 +63,4 @@
18
 AudioMonitoring.None="Monitor Off"
19
 AudioMonitoring.MonitorOnly="Μόνο η οθόνη (σίγαση εξόδου)"
20
 AudioMonitoring.Both="Παρακολούθηση και έξοδος"
21
-
22
+HardwareDecode="Χρήση αποκωδικοποίησης υλικού όταν είναι διαθέσιμη"
23
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/en-GB.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/en-GB.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="Monitor Off"
3
 AudioMonitoring.MonitorOnly="Monitor Only (mute output)"
4
 AudioMonitoring.Both="Monitor and Output"
5
-
6
+HardwareDecode="Use hardware decoding when available"
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/en-US.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/en-US.ini Changed
7
 
1
@@ -63,3 +63,4 @@
2
 AudioMonitoring.None="Monitor Off"
3
 AudioMonitoring.MonitorOnly="Monitor Only (mute output)"
4
 AudioMonitoring.Both="Monitor and Output"
5
+HardwareDecode="Use hardware decoding when available"
6
\ No newline at end of file
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/es-ES.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/es-ES.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="Monitoreo apagado"
3
 AudioMonitoring.MonitorOnly="Solo monitoreo (salida silenciosa)"
4
 AudioMonitoring.Both="Monitoreo y salida"
5
-
6
+HardwareDecode="Usar decodificación por hardware cuando esté disponible"
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/et-EE.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/et-EE.ini Changed
6
 
1
@@ -26,4 +26,3 @@
2
 LumaWipe.Type.Stripes="Triibud"
3
 LumaWipe.Type.StripsHorizontal="Horisontaalsed triibud"
4
 LumaWipe.Type.StripsVertical="Vertikaalsed triibud"
5
-
6
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/eu-ES.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/eu-ES.ini Changed
6
 
1
@@ -63,4 +63,3 @@
2
 AudioMonitoring.None="Ez monitorizatu"
3
 AudioMonitoring.MonitorOnly="Monitorea bakarrik (irteera mututua)"
4
 AudioMonitoring.Both="Monitorea eta irteera"
5
-
6
obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/fa-IR.ini Added
68
 
1
@@ -0,0 +1,66 @@
2
+FadeTransition="محو شدن"
3
+CutTransition="برش"
4
+SwipeTransition="کشیدن"
5
+SlideTransition="اسلاید"
6
+StingerTransition="استینگر"
7
+FadeToColorTransition="محو شدن به رنگ"
8
+Direction="جهت"
9
+Direction.Left="چپ"
10
+Direction.Right="راست"
11
+Direction.Up="بالا"
12
+Direction.Down="پایین"
13
+SwipeIn="کشیدن داخل"
14
+Color="رنگ"
15
+VideoFile="فایل ویدئو"
16
+TransitionPoint="نقطه انتقال"
17
+TransitionPointFrame="نقطه انتقال (قاب)"
18
+TransitionPointType="نوع نقطه انتقال"
19
+TransitionPointTypeFrame="قاب"
20
+TransitionPointTypeTime="زمان (میلی ثانیه)"
21
+AudioFadeStyle="سبک محو صدا"
22
+AudioFadeStyle.FadeOutFadeIn="محو شدن در نقطه انتقال و سپس ظاهر شدن"
23
+AudioFadeStyle.CrossFade="ضربدری"
24
+SwitchPoint="نقطه اوج رنگ"
25
+LumaWipeTransition="پاک کردن لوما"
26
+LumaWipe.Image="تصویر"
27
+LumaWipe.Invert="معکوس"
28
+LumaWipe.Softness="نرمی"
29
+LumaWipe.Type.BarndoorBottomLeft="درب انبار پایین سمت چپ"
30
+LumaWipe.Type.BarndoorHorizontal="انبار درب افقی"
31
+LumaWipe.Type.BarndoorTopLeft="درب انبار بالا سمت چپ"
32
+LumaWipe.Type.BarndoorVertical="عمودی درب انبار"
33
+LumaWipe.Type.BlindsHorizontal="پرده افقی"
34
+LumaWipe.Type.BoxBottomLeft="جعبه پایین سمت چپ"
35
+LumaWipe.Type.BoxBottomRight="جعبه پایین سمت راست"
36
+LumaWipe.Type.BoxTopLeft="جعبه بالا سمت چپ"
37
+LumaWipe.Type.BoxTopRight="جعبه بالا سمت راست"
38
+LumaWipe.Type.Burst="ترکیدن"
39
+LumaWipe.Type.CheckerboardSmall="شطرنجی کوچک"
40
+LumaWipe.Type.Circles="دایرهها"
41
+LumaWipe.Type.Clock="ساعت"
42
+LumaWipe.Type.Cloud="ابر"
43
+LumaWipe.Type.Curtain="پرده"
44
+LumaWipe.Type.Fan="فن"
45
+LumaWipe.Type.Fractal="فراکتال"
46
+LumaWipe.Type.Iris="قوس"
47
+LumaWipe.Type.LinearHorizontal="خطی افقی"
48
+LumaWipe.Type.LinearTopLeft="چپ بالا خطی"
49
+LumaWipe.Type.LinearTopRight="بالا سمت راست خطی"
50
+LumaWipe.Type.LinearVertical="عمودی خطی"
51
+LumaWipe.Type.ParallelZigzagHorizontal="زیگزاگ موازی افقی"
52
+LumaWipe.Type.ParallelZigzagVertical="زیگزاگ عمودی موازی"
53
+LumaWipe.Type.Sinus9="سینوس 9"
54
+LumaWipe.Type.Spiral="مارپیچ"
55
+LumaWipe.Type.Square="مربع"
56
+LumaWipe.Type.Squares="مربعها"
57
+LumaWipe.Type.Stripes="نوارها"
58
+LumaWipe.Type.StripsHorizontal="نوارهای افقی"
59
+LumaWipe.Type.StripsVertical="نوارهای عمودی"
60
+LumaWipe.Type.Watercolor="آب رنگ"
61
+LumaWipe.Type.ZigzagHorizontal="زیگزاگ افقی"
62
+LumaWipe.Type.ZigzagVertical="زیگ زاگ عمودی"
63
+AudioMonitoring="نظارت صوتی"
64
+AudioMonitoring.None="نمایش خاموش"
65
+AudioMonitoring.MonitorOnly="فقط نمایش (خروجی بیصدا)"
66
+AudioMonitoring.Both="نمایش و خروجی"
67
+HardwareDecode="در صورت وجود از رمزگشایی سخت افزاری استفاده کنید"
68
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/fi-FI.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/fi-FI.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="Monitorointi pois"
3
 AudioMonitoring.MonitorOnly="Vain monitorointi (hiljennä ulostulo)"
4
 AudioMonitoring.Both="Monitorointi ja ulostulo"
5
-
6
+HardwareDecode="Käytä laitteistotason purkua, kun mahdollista"
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/fil-PH.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/fil-PH.ini Changed
6
 
1
@@ -61,4 +61,3 @@
2
 AudioMonitoring.None="I-off ang Pagsubaybay"
3
 AudioMonitoring.MonitorOnly="Magsubaybay lang (i-mute ang output)"
4
 AudioMonitoring.Both="Subaybayan at Output"
5
-
6
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/fr-FR.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/fr-FR.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="Pas de Monitoring"
3
 AudioMonitoring.MonitorOnly="Monitoring seul (sortie coupée)"
4
 AudioMonitoring.Both="Monotoring et sortie"
5
-
6
+HardwareDecode="Utiliser le décodage matériel (si disponible)"
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/gd-GB.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/gd-GB.ini Changed
6
 
1
@@ -23,4 +23,3 @@
2
 AudioMonitoring.None="Gun sgrùdadh"
3
 AudioMonitoring.MonitorOnly="Sgrùdadh a-mhàin (mùch an t-às-chur)"
4
 AudioMonitoring.Both="Sgrùdadh is às-chur"
5
-
6
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/gl-ES.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/gl-ES.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="Monitor apagado"
3
 AudioMonitoring.MonitorOnly="Só o monitor (silenciar a saída)"
4
 AudioMonitoring.Both="Monitor e saída"
5
-
6
+HardwareDecode="Usar a descodificación por hardware cando estea dispoñíbel"
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/he-IL.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/he-IL.ini Changed
6
 
1
@@ -23,4 +23,3 @@
2
 LumaWipe.Type.Squares="ריבועים"
3
 LumaWipe.Type.Stripes="פסים"
4
 LumaWipe.Type.Watercolor="צבע מים"
5
-
6
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/hr-HR.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/hr-HR.ini Changed
6
 
1
@@ -48,4 +48,3 @@
2
 LumaWipe.Type.Watercolor="Vodene bojice"
3
 LumaWipe.Type.ZigzagHorizontal="Cik-cak horizontalno"
4
 LumaWipe.Type.ZigzagVertical="Cik-cak vertikalno"
5
-
6
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/hu-HU.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/hu-HU.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="Figyelés kikapcsolása"
3
 AudioMonitoring.MonitorOnly="Csak figyelés (kimenet némítása)"
4
 AudioMonitoring.Both="Figyelés és kimenet"
5
-
6
+HardwareDecode="Hardveres dekódolás használata, ha rendelkezésre áll"
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/id-ID.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/id-ID.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="Monitor Mati"
3
 AudioMonitoring.MonitorOnly="Monitor Saja (bisukan output)"
4
 AudioMonitoring.Both="Monitor dan Output"
5
-
6
+HardwareDecode="Gunakan decoding perangkat keras saat tersedia"
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/it-IT.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/it-IT.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="Disattivato"
3
 AudioMonitoring.MonitorOnly="Solo monitoraggio (uscita audio nel file disattivata)"
4
 AudioMonitoring.Both="Monitora l'audio e invia all'uscita"
5
-
6
+HardwareDecode="Utilizza l'accellerazione hardware quando disponibile"
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/ja-JP.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/ja-JP.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="モニターオフ"
3
 AudioMonitoring.MonitorOnly="モニターのみ (出力はミュート)"
4
 AudioMonitoring.Both="モニターと出力"
5
-
6
+HardwareDecode="利用可能な場合はハードウェアデコードを使用する"
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/ka-GE.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/ka-GE.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="მოსმენის გარეშე"
3
 AudioMonitoring.MonitorOnly="მხოლოდ მოსმენა (უხმო გამოტანა)"
4
 AudioMonitoring.Both="მოსმენა და გამოტანა"
5
-
6
+HardwareDecode="აპარატურული გაშიფვრის გამოყენება, როცა ხელმისაწვდომია"
7
obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/kab-KAB.ini Added
26
 
1
@@ -0,0 +1,24 @@
2
+CutTransition="Gzem"
3
+SlideTransition="Tamaccagt"
4
+Direction="Tanila"
5
+Direction.Left="Azelmaḍ"
6
+Direction.Right="Ayfus"
7
+Direction.Up="Asawen"
8
+Direction.Down="Akessar"
9
+Color="Ini"
10
+VideoFile="Ifuyla n uvidyu"
11
+TransitionPoint="Tanqiḍt n usaka"
12
+TransitionPointFrame="Tanqiḍt n usaka (akatar)"
13
+TransitionPointType="Anaw n tenqiḍt n usaka"
14
+TransitionPointTypeFrame="Akatar"
15
+TransitionPointTypeTime="Akud (militasinin)"
16
+LumaWipe.Image="Tugna"
17
+LumaWipe.Invert="Tti"
18
+LumaWipe.Type.BoxBottomRight="Tankult ukessar s ayfus"
19
+LumaWipe.Type.BoxTopLeft="Tankult ukessawen s azelmaḍ"
20
+LumaWipe.Type.BoxTopRight="Tankult ukessawen s ayfus"
21
+LumaWipe.Type.Circles="Tiwinas"
22
+LumaWipe.Type.Clock="Tamrint"
23
+LumaWipe.Type.Cloud="Asigna"
24
+LumaWipe.Type.Square="Amkuẓ"
25
+LumaWipe.Type.Squares="Imkuẓen"
26
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/ko-KR.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/ko-KR.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="감시 끄기"
3
 AudioMonitoring.MonitorOnly="감시만 하기 (출력은 음소거)"
4
 AudioMonitoring.Both="감시와 출력 모두"
5
-
6
+HardwareDecode="가능한 경우 하드웨어 디코딩 사용"
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/nb-NO.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/nb-NO.ini Changed
6
 
1
@@ -63,4 +63,3 @@
2
 AudioMonitoring.None="Av for skjermen"
3
 AudioMonitoring.MonitorOnly="Kun skjermen (Demp utdataen)"
4
 AudioMonitoring.Both="Både skjermen og utdataen"
5
-
6
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/nl-NL.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/nl-NL.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="Niet monitoren"
3
 AudioMonitoring.MonitorOnly="Alleen monitoren (uitvoer gedempt)"
4
 AudioMonitoring.Both="Monitoren en uitvoeren"
5
-
6
+HardwareDecode="Gebruik hardware-decoding wanneer mogelijk"
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/pl-PL.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/pl-PL.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="Wyłączone"
3
 AudioMonitoring.MonitorOnly="Tylko monitorowanie (wyjście wyłączone)"
4
 AudioMonitoring.Both="Monitorowanie i przekazywanie na wyjście"
5
-
6
+HardwareDecode="Użyj dekodowania sprzętowego, gdy jest dostępne"
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/pt-BR.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/pt-BR.ini Changed
47
 
1
@@ -3,7 +3,7 @@
2
 SwipeTransition="Deslizar"
3
 SlideTransition="Deslizar"
4
 StingerTransition="Stinger"
5
-FadeToColorTransition="Esmaecer para a Cor"
6
+FadeToColorTransition="Esmaecer para cor"
7
 Direction="Direção"
8
 Direction.Left="Esquerda"
9
 Direction.Right="Direita"
10
@@ -14,21 +14,21 @@
11
 VideoFile="Arquivo de Vídeo"
12
 TransitionPoint="Ponto de transição"
13
 TransitionPointFrame="Ponto de transição (quadro)"
14
-TransitionPointType="Tipo de Ponto de Transição"
15
+TransitionPointType="Tipo de ponto de transição"
16
 TransitionPointTypeFrame="Quadro"
17
 TransitionPointTypeTime="Tempo (milissegundos)"
18
 AudioFadeStyle="Estilo de Esmaecimento de Áudio"
19
 AudioFadeStyle.FadeOutFadeIn="Esmaecer imagem até o ponto de transição e depois aparecer"
20
-AudioFadeStyle.CrossFade="Transição Suave"
21
+AudioFadeStyle.CrossFade="Transição suave"
22
 SwitchPoint="Ponto de cor do pico"
23
 LumaWipeTransition="Luma Wipe"
24
 LumaWipe.Image="Imagem"
25
 LumaWipe.Invert="Inverso"
26
 LumaWipe.Softness="Suavidade"
27
 LumaWipe.Type.BarndoorBottomLeft="Barndoor inferior esquerdo"
28
-LumaWipe.Type.BarndoorHorizontal="Barndoor Horizontal"
29
+LumaWipe.Type.BarndoorHorizontal="Barndoor horizontal"
30
 LumaWipe.Type.BarndoorTopLeft="Barndoor inferior esquerdo"
31
-LumaWipe.Type.BarndoorVertical="Barndoor Vertical"
32
+LumaWipe.Type.BarndoorVertical="Barndoor vertical"
33
 LumaWipe.Type.BlindsHorizontal="Persianas horizontais"
34
 LumaWipe.Type.BoxBottomLeft="Caixa Inferior Esquerda"
35
 LumaWipe.Type.BoxBottomRight="Caixa Inferior Direita"
36
@@ -59,8 +59,8 @@
37
 LumaWipe.Type.Watercolor="Aquarela"
38
 LumaWipe.Type.ZigzagHorizontal="Zigue-zague Horizontal"
39
 LumaWipe.Type.ZigzagVertical="Zigue-zague Vertical"
40
-AudioMonitoring="Monitoramento de Áudio"
41
+AudioMonitoring="Monitoramento de áudio"
42
 AudioMonitoring.None="Não Monitorar"
43
 AudioMonitoring.MonitorOnly="Apenas Monitorar (saída muda)"
44
 AudioMonitoring.Both="Monitorar e Enviar Áudio"
45
-
46
+HardwareDecode="Utilizar decodificação de hardware quando disponível"
47
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/pt-PT.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/pt-PT.ini Changed
6
 
1
@@ -36,4 +36,3 @@
2
 AudioMonitoring.None="Não Monitorar"
3
 AudioMonitoring.MonitorOnly="Único Monitor (saída muda)"
4
 AudioMonitoring.Both="Monitor e Saída"
5
-
6
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/ro-RO.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/ro-RO.ini Changed
6
 
1
@@ -29,4 +29,3 @@
2
 AudioMonitoring.None="Monitorizare dezactivată"
3
 AudioMonitoring.MonitorOnly="Numai monitorizare (amuțește outputul)"
4
 AudioMonitoring.Both="Monitorizare și output"
5
-
6
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/ru-RU.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/ru-RU.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="Выключить прослушивание"
3
 AudioMonitoring.MonitorOnly="Только прослушивание (заглушить вывод)"
4
 AudioMonitoring.Both="Прослушивание и вывод"
5
-
6
+HardwareDecode="По возможности использовать аппаратное декодирование"
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/sk-SK.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/sk-SK.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="Vypnuté monitorovanie"
3
 AudioMonitoring.MonitorOnly="Iba monitorovanie (žiaden výstup)"
4
 AudioMonitoring.Both="Monitorovanie a výstup"
5
-
6
+HardwareDecode="Použiť hardvérové dekódovanie podľa dostupnosti"
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/sl-SI.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/sl-SI.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="Nadzor je izklopljen"
3
 AudioMonitoring.MonitorOnly="Samo nadziraj (utišaj izhod)"
4
 AudioMonitoring.Both="Nadzor in izhod"
5
-
6
+HardwareDecode="Uporabi strojno dekodiranje, če je na voljo"
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/sr-CS.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/sr-CS.ini Changed
6
 
1
@@ -61,4 +61,3 @@
2
 AudioMonitoring.None="Monitor je isključen"
3
 AudioMonitoring.MonitorOnly="Uključen je samo monitor (isključen je zvuk)"
4
 AudioMonitoring.Both="Uključeni su i monitor i zvuk"
5
-
6
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/sr-SP.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/sr-SP.ini Changed
6
 
1
@@ -61,4 +61,3 @@
2
 AudioMonitoring.None="Монитор је искључен"
3
 AudioMonitoring.MonitorOnly="Укључен је само монитор (искључен је звук)"
4
 AudioMonitoring.Both="Укључени су и монитор и звук"
5
-
6
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/sv-SE.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/sv-SE.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="Övervaka inte"
3
 AudioMonitoring.MonitorOnly="Övervaka endast (tysta utgång)"
4
 AudioMonitoring.Both="Övervaka och mata ut"
5
-
6
+HardwareDecode="Använd hårdvaruavkodning när det är tillgängligt"
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/ta-IN.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/ta-IN.ini Changed
6
 
1
@@ -17,4 +17,3 @@
2
 LumaWipe.Type.Fan="மின்விசிறி"
3
 LumaWipe.Type.Square="சதுரம்"
4
 LumaWipe.Type.Squares="சதுரன்கள்"
5
-
6
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/tl-PH.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/tl-PH.ini Changed
6
 
1
@@ -61,4 +61,3 @@
2
 AudioMonitoring.None="Patayin ang Monitor"
3
 AudioMonitoring.MonitorOnly="Monitor lamang (i-mute ang output)"
4
 AudioMonitoring.Both="Monitor at Output"
5
-
6
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/tr-TR.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/tr-TR.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="Ekran Kapalı"
3
 AudioMonitoring.MonitorOnly="Sadece Ekran (sessiz çıkış)"
4
 AudioMonitoring.Both="Ekran ve Çıkış"
5
-
6
+HardwareDecode="Kullanılabilir olduğunda donanım çözümlemeyi kullan"
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/uk-UA.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/uk-UA.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="Прослуховування вимкнено"
3
 AudioMonitoring.MonitorOnly="Тільки прослуховування (заглушити вивід)"
4
 AudioMonitoring.Both="Прослуховування та вивід"
5
-
6
+HardwareDecode="Використовувати апаратне декодування при наявності"
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/vi-VN.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/vi-VN.ini Changed
39
 
1
@@ -2,6 +2,7 @@
2
 CutTransition="Cắt"
3
 SwipeTransition="Vuốt"
4
 SlideTransition="Trượt"
5
+FadeToColorTransition="Phai màu"
6
 Direction="Hướng"
7
 Direction.Left="Trái"
8
 Direction.Right="Phải"
9
@@ -10,11 +11,28 @@
10
 SwipeIn="Trượt lên"
11
 Color="Màu"
12
 VideoFile="Tập tin video"
13
+TransitionPoint="Điểm chuyển cảnh"
14
+TransitionPointFrame="Điểm chuyển cảnh (khung hình)"
15
+TransitionPointType="Loại điểm chuyển cảnh"
16
 TransitionPointTypeFrame="Khung hình"
17
+TransitionPointTypeTime="Thời gian (mili giây)"
18
+AudioFadeStyle="Hiệu ứng làm mờ âm thanh"
19
+AudioFadeStyle.FadeOutFadeIn="Mờ dần đến điểm chuyển cảnh sau đó rõ lại"
20
 AudioFadeStyle.CrossFade="Làm mờ ảnh"
21
+SwitchPoint="Cao điểm màu"
22
 LumaWipe.Image="Hình ảnh"
23
 LumaWipe.Invert="Đảo ngược"
24
+LumaWipe.Softness="Độ mềm"
25
+LumaWipe.Type.Burst="Nổ"
26
+LumaWipe.Type.Circles="Vòng tròn"
27
+LumaWipe.Type.Clock="Đồng hồ"
28
+LumaWipe.Type.Cloud="Mây"
29
+LumaWipe.Type.Curtain="Màn che"
30
+LumaWipe.Type.Fan="Quạt"
31
+LumaWipe.Type.Fractal="Chiết hình"
32
+LumaWipe.Type.Spiral="Xoắn ốc"
33
 LumaWipe.Type.Square="Vuông"
34
 LumaWipe.Type.Squares="Vuông"
35
 LumaWipe.Type.Stripes="Sọc"
36
-
37
+LumaWipe.Type.ZigzagHorizontal="Dích-dắc ngang"
38
+LumaWipe.Type.ZigzagVertical="Dích-dắc dọc"
39
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/zh-CN.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/zh-CN.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="关闭监听"
3
 AudioMonitoring.MonitorOnly="仅监听(不输出音频)"
4
 AudioMonitoring.Both="监听并输出"
5
-
6
+HardwareDecode="优先使用硬件解码"
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/data/locale/zh-TW.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/data/locale/zh-TW.ini Changed
7
 
1
@@ -63,4 +63,4 @@
2
 AudioMonitoring.None="關閉監測"
3
 AudioMonitoring.MonitorOnly="僅監測(輸出靜音)"
4
 AudioMonitoring.Both="監測並輸出"
5
-
6
+HardwareDecode="盡可能使用硬體解碼"
7
obs-studio-26.0.2.tar.xz/plugins/obs-transitions/transition-stinger.c -> obs-studio-26.1.0.tar.xz/plugins/obs-transitions/transition-stinger.c Changed
44
 
1
@@ -42,9 +42,11 @@
2
 {
3
    struct stinger_info *s = data;
4
    const char *path = obs_data_get_string(settings, "path");
5
+   bool hw_decode = obs_data_get_bool(settings, "hw_decode");
6
 
7
    obs_data_t *media_settings = obs_data_create();
8
    obs_data_set_string(media_settings, "local_file", path);
9
+   obs_data_set_bool(media_settings, "hw_decode", hw_decode);
10
 
11
    obs_source_release(s->media_source);
12
    struct dstr name;
13
@@ -105,6 +107,11 @@
14
    bfree(s);
15
 }
16
 
17
+static void stinger_defaults(obs_data_t *settings)
18
+{
19
+   obs_data_set_default_bool(settings, "hw_decode", true);
20
+}
21
+
22
 static void stinger_video_render(void *data, gs_effect_t *effect)
23
 {
24
    struct stinger_info *s = data;
25
@@ -322,6 +329,10 @@
26
    obs_property_t *p = obs_properties_add_list(
27
        ppts, "tp_type", obs_module_text("TransitionPointType"),
28
        OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
29
+#ifndef __APPLE__
30
+   obs_properties_add_bool(ppts, "hw_decode",
31
+               obs_module_text("HardwareDecode"));
32
+#endif
33
    obs_property_list_add_int(p, obs_module_text("TransitionPointTypeTime"),
34
                  TIMING_TIME);
35
    obs_property_list_add_int(
36
@@ -368,6 +379,7 @@
37
    .create = stinger_create,
38
    .destroy = stinger_destroy,
39
    .update = stinger_update,
40
+   .get_defaults = stinger_defaults,
41
    .video_render = stinger_video_render,
42
    .audio_render = stinger_audio_render,
43
    .get_properties = stinger_properties,
44
obs-studio-26.0.2.tar.xz/plugins/obs-x264/data/locale/de-DE.ini -> obs-studio-26.1.0.tar.xz/plugins/obs-x264/data/locale/de-DE.ini Changed
14
 
1
@@ -4,10 +4,10 @@
2
 RateControl="Qualitätsregulierungsmethode"
3
 CRF="CRF"
4
 KeyframeIntervalSec="Keyframeintervall in Sek. (0 = automatisch)"
5
-CPUPreset="CPU‐Auslastungsvoreinstellung (höher = niedrigere CPU‐Auslastung)"
6
+CPUPreset="CPU-Auslastungsvoreinstellung (höher = niedrigere CPU-Auslastung)"
7
 Profile="Profil"
8
 Tune="Tune"
9
 None="(Nichts)"
10
-EncoderOptions="x264‐Optionen (durch Leerzeichen getrennt)"
11
+EncoderOptions="x264-Optionen (durch Leerzeichen getrennt)"
12
 VFR="Variable Framerate (VFR)"
13
 
14
obs-studio-26.1.0.tar.xz/plugins/obs-x264/data/locale/kab-KAB.ini Added
15
 
1
@@ -0,0 +1,13 @@
2
+Bitrate="Aktum"
3
+CustomBufsize="Seqdec tiddi yugnen i tkatut n weḥraz"
4
+BufferSize="Tiddi n tkatut n uḥraz"
5
+RateControl="Asenqed n uktum"
6
+CRF="CRF"
7
+KeyframeIntervalSec="Azilal n yikataren yufraren (tasinin, 0=awurman)"
8
+CPUPreset="Azwirɣewwar n useqdec n CPU (afellay= drus n CPU)"
9
+Profile="Amaɣnu"
10
+Tune="Gerrez"
11
+None="(Ulac)"
12
+EncoderOptions="tinefrunin x264 (berzent s tallunt)"
13
+VFR="Aktum n yikataren ameskil (VFR)"
14
+
15
obs-studio-26.0.2.tar.xz/plugins/obs-x264/obs-x264.c -> obs-studio-26.1.0.tar.xz/plugins/obs-x264/obs-x264.c Changed
58
 
1
@@ -110,6 +110,7 @@
2
    obs_data_set_default_string(settings, "profile", "");
3
    obs_data_set_default_string(settings, "tune", "");
4
    obs_data_set_default_string(settings, "x264opts", "");
5
+   obs_data_set_default_bool(settings, "repeat_headers", false);
6
 }
7
 
8
 static inline void add_strings(obs_property_t *list, const char *const *strings)
9
@@ -172,6 +173,7 @@
10
    obs_properties_t *props = obs_properties_create();
11
    obs_property_t *list;
12
    obs_property_t *p;
13
+   obs_property_t *headers;
14
 
15
    list = obs_properties_add_list(props, "rate_control", TEXT_RATE_CONTROL,
16
                       OBS_COMBO_TYPE_LIST,
17
@@ -222,6 +224,10 @@
18
    obs_properties_add_text(props, "x264opts", TEXT_X264_OPTS,
19
                OBS_TEXT_DEFAULT);
20
 
21
+   headers = obs_properties_add_bool(props, "repeat_headers",
22
+                     "repeat_headers");
23
+   obs_property_set_visible(headers, false);
24
+
25
    return props;
26
 }
27
 
28
@@ -583,6 +589,7 @@
29
    char *tune = bstrdup(obs_data_get_string(settings, "tune"));
30
    struct obs_x264_options options = obs_x264_parse_options(
31
        obs_data_get_string(settings, "x264opts"));
32
+   bool repeat_headers = obs_data_get_bool(settings, "repeat_headers");
33
 
34
    bool success = true;
35
 
36
@@ -603,6 +610,12 @@
37
        success = reset_x264_params(obsx264, preset, tune);
38
    }
39
 
40
+   if (repeat_headers) {
41
+       obsx264->params.b_repeat_headers = 1;
42
+       obsx264->params.b_annexb = 1;
43
+       obsx264->params.b_aud = 1;
44
+   }
45
+
46
    if (success) {
47
        update_params(obsx264, settings, &options, update);
48
        if (!update) {
49
@@ -613,8 +626,6 @@
50
            apply_x264_profile(obsx264, profile);
51
    }
52
 
53
-   obsx264->params.b_repeat_headers = false;
54
-
55
    obs_x264_free_options(options);
56
    bfree(preset);
57
    bfree(profile);
58
obs-studio-26.1.0.tar.xz/plugins/oss-audio/data/locale/ar-SA.ini Added
11
 
1
@@ -0,0 +1,9 @@
2
+OSSInput="التقاط إدخال الصوت (OSS)"
3
+DSP="DSP"
4
+CustomDSPPath="مسار DSP مخصص"
5
+SampleRate="معدل العينة"
6
+Channels="القنوات"
7
+SampleFormat="تنسيق العينة"
8
+Default="افتراضي"
9
+Custom="مخصص"
10
+
11
obs-studio-26.0.2.tar.xz/plugins/oss-audio/data/locale/de-DE.ini -> obs-studio-26.1.0.tar.xz/plugins/oss-audio/data/locale/de-DE.ini Changed
9
 
1
@@ -1,6 +1,6 @@
2
 OSSInput="Audioeingabeaufnahme (OSS)"
3
 DSP="DSP"
4
-CustomDSPPath="Benutzerdefinierter DSP‐Pfad"
5
+CustomDSPPath="Benutzerdefinierter DSP-Pfad"
6
 SampleRate="Sample Rate"
7
 Channels="Kanäle"
8
 SampleFormat="Beispielformat"
9
obs-studio-26.1.0.tar.xz/plugins/oss-audio/data/locale/el-GR.ini Added
11
 
1
@@ -0,0 +1,9 @@
2
+OSSInput="Ηχογράφηση Εισόδου (OSS)"
3
+DSP="DSP"
4
+CustomDSPPath="Προσαρμοσμένη διαδρομή DSP"
5
+SampleRate="Ρυθμός Δειγματοληψίας"
6
+Channels="Κανάλια"
7
+SampleFormat="Ενδεικτική μορφοποίηση"
8
+Default="Προεπιλογή"
9
+Custom="Προσαρμοσμένη"
10
+
11
obs-studio-26.1.0.tar.xz/plugins/oss-audio/data/locale/et-EE.ini Added
11
 
1
@@ -0,0 +1,9 @@
2
+OSSInput="Helisisendi hõive (OSS)"
3
+DSP="DSP"
4
+CustomDSPPath="Kohandatud DSP aadress"
5
+SampleRate="Hetkeväärtus"
6
+Channels="Kanalid"
7
+SampleFormat="Näidisvorming"
8
+Default="Vaikimisi"
9
+Custom="Kohandatud"
10
+
11
obs-studio-26.1.0.tar.xz/plugins/oss-audio/data/locale/fa-IR.ini Added
11
 
1
@@ -0,0 +1,9 @@
2
+OSSInput="ضبط ورودی صوتی (س ص ب)"
3
+DSP="پ س د"
4
+CustomDSPPath="مسیر پ س د سفارشی"
5
+SampleRate="نرخ نمونه"
6
+Channels="کانالها"
7
+SampleFormat="فرمت نمونه"
8
+Default="پیش فرض"
9
+Custom="سفارشی"
10
+
11
obs-studio-26.0.2.tar.xz/plugins/oss-audio/data/locale/fil-PH.ini -> obs-studio-26.1.0.tar.xz/plugins/oss-audio/data/locale/fil-PH.ini Changed
9
 
1
@@ -1,5 +1,7 @@
2
+OSSInput="Daming Input Capture (DSS)"
3
 DSP="DSP"
4
 CustomDSPPath="Pasadyang DSP Path"
5
 Channels="Mga Channel"
6
+Default="Orihinal"
7
 Custom="Pasadya"
8
 
9
obs-studio-26.0.2.tar.xz/plugins/oss-audio/data/locale/ka-GE.ini -> obs-studio-26.1.0.tar.xz/plugins/oss-audio/data/locale/ka-GE.ini Changed
13
 
1
@@ -1,9 +1,9 @@
2
 OSSInput="შემავალი ხმის ჩაწერა (OSS)"
3
 DSP="DSP"
4
 CustomDSPPath="მითითებული DSP-მდებარეობა"
5
-SampleRate="შერჩევის სიხშირე"
6
+SampleRate="დაყოფის სიხშირე"
7
 Channels="არხები"
8
-SampleFormat="შერჩევის სახეობა"
9
+SampleFormat="დაყოფის სახეობა"
10
 Default="ნაგულისხმევი"
11
 Custom="მითითებული"
12
 
13
obs-studio-26.1.0.tar.xz/plugins/oss-audio/data/locale/kab-KAB.ini Added
11
 
1
@@ -0,0 +1,9 @@
2
+OSSInput="Tuṭṭfa n unekcum n umeslaw (OSS)"
3
+DSP="DSP"
4
+CustomDSPPath="Abrid n DSP yugnen"
5
+SampleRate="Atug n ulemmec"
6
+Channels="Ibuda"
7
+SampleFormat="Amasal n ulemmec"
8
+Default="Amezwar"
9
+Custom="Yugen"
10
+
11
obs-studio-26.0.2.tar.xz/plugins/oss-audio/data/locale/pt-BR.ini -> obs-studio-26.1.0.tar.xz/plugins/oss-audio/data/locale/pt-BR.ini Changed
7
 
1
@@ -1,4 +1,4 @@
2
-OSSInput="Captura de Entrada de Áudio (OSS)"
3
+OSSInput="Captura de entrada de áudio (OSS)"
4
 DSP="DSP"
5
 CustomDSPPath="Caminho Personalizado do DSP"
6
 SampleRate="Taxa de Amostragem"
7
obs-studio-26.1.0.tar.xz/plugins/oss-audio/data/locale/pt-PT.ini Added
7
 
1
@@ -0,0 +1,5 @@
2
+DSP="DSP"
3
+Channels="Canais"
4
+Default="Padrão"
5
+Custom="Personalizado"
6
+
7
obs-studio-26.0.2.tar.xz/plugins/oss-audio/data/locale/ro-RO.ini -> obs-studio-26.1.0.tar.xz/plugins/oss-audio/data/locale/ro-RO.ini Changed
13
 
1
@@ -1,9 +1,9 @@
2
 OSSInput="Captură de input audio (OSS)"
3
 DSP="DSP"
4
 CustomDSPPath="Cale personalizată DSP"
5
-SampleRate="Rata de eşantionare"
6
+SampleRate="Rată de eşantionare"
7
 Channels="Canale"
8
-SampleFormat="Mostră format"
9
+SampleFormat="Format de eșantionare"
10
 Default="Implicită"
11
 Custom="Personalizat"
12
 
13
obs-studio-26.0.2.tar.xz/plugins/rtmp-services/data/locale/ar-SA.ini -> obs-studio-26.1.0.tar.xz/plugins/rtmp-services/data/locale/ar-SA.ini Changed
9
 
1
@@ -2,6 +2,7 @@
2
 CustomStreamingServer="سيرفر بث مخصص"
3
 Service="خدمة"
4
 Server="سيرفر"
5
+Server.Auto="تلقائي (مستحسن)"
6
 StreamKey="مفتاح البث"
7
 UseAuth="استخدام المصادقة"
8
 Username="اسم المستخدم"
9
obs-studio-26.1.0.tar.xz/plugins/rtmp-services/data/locale/kab-KAB.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+StreamingServices="Imeẓluyen n usuddem"
3
+CustomStreamingServer="Aqeddac n usuddem yugnen"
4
+Service="Imeẓluyen"
5
+Server="Aqeddac"
6
+Server.Auto="Awurman (Yettwasemter)"
7
+StreamKey="Tasarut n usuddem"
8
+UseAuth="Seqdec asesteb"
9
+Username="Isem n useqdac"
10
+Password="Awal uffir"
11
+ShowAll="Sken akk imeẓluyen"
12
+
13
obs-studio-26.0.2.tar.xz/plugins/rtmp-services/data/locale/sv-SE.ini -> obs-studio-26.1.0.tar.xz/plugins/rtmp-services/data/locale/sv-SE.ini Changed
8
 
1
@@ -1,5 +1,5 @@
2
 StreamingServices="Strömtjänster"
3
-CustomStreamingServer="Anpassad streamningsserver"
4
+CustomStreamingServer="Anpassad strömningsserver"
5
 Service="Tjänst"
6
 Server="Server"
7
 Server.Auto="Auto (rekommenderad)"
8
obs-studio-26.0.2.tar.xz/plugins/rtmp-services/data/package.json -> obs-studio-26.1.0.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": 148,
5
+   "version": 161,
6
    "files": [
7
        {
8
            "name": "services.json",
9
-           "version": 148
10
+           "version": 161
11
        }
12
    ]
13
 }
14
obs-studio-26.0.2.tar.xz/plugins/rtmp-services/data/services.json -> obs-studio-26.1.0.tar.xz/plugins/rtmp-services/data/services.json Changed
163
 
1
@@ -1,5 +1,5 @@
2
 {
3
-    "format_version": 2,
4
+    "format_version": 3,
5
     "services": [
6
         {
7
             "name": "Twitch",
8
@@ -193,13 +193,37 @@
9
             "recommended": {
10
                 "keyint": 2,
11
                 "max video bitrate": 6000,
12
-                "max audio bitrate": 160,
13
+                "max audio bitrate": 320,
14
                 "x264opts": "scenecut=0"
15
             }
16
         },
17
         {
18
-            "name": "YouTube / YouTube Gaming",
19
+            "name": "YouTube - HLS",
20
+            "common": false,
21
+            "more_info_link": "https://developers.google.com/youtube/v3/live/guides/ingestion-protocol-comparison",
22
+            "servers": [
23
+                {
24
+                    "name": "Primary YouTube ingest server",
25
+                    "url": "https://a.upload.youtube.com/http_upload_hls?cid={stream_key}&copy=0&file=out.m3u8"
26
+                },
27
+                {
28
+                    "name": "Backup YouTube ingest server",
29
+                    "url": "https://b.upload.youtube.com/http_upload_hls?cid={stream_key}&copy=1&file=out.m3u8"
30
+                }
31
+            ],
32
+            "recommended": {
33
+                "keyint": 2,
34
+                "output": "ffmpeg_hls_muxer",
35
+                "max video bitrate": 51000,
36
+                "max audio bitrate": 160
37
+            }
38
+        },
39
+        {
40
+            "name": "YouTube - RTMP",
41
             "common": true,
42
+            "alt_names": [
43
+                "YouTube / YouTube Gaming"
44
+            ],
45
             "servers": [
46
                 {
47
                     "name": "Primary YouTube ingest server",
48
@@ -217,6 +241,25 @@
49
             }
50
         },
51
         {
52
+            "name": "YouTube - RTMPS (Beta)",
53
+            "common": true,
54
+            "servers": [
55
+                {
56
+                    "name": "Primary YouTube ingest server",
57
+                    "url": "rtmps://a.rtmps.youtube.com:443/live2"
58
+                },
59
+                {
60
+                    "name": "Backup YouTube ingest server",
61
+                    "url": "rtmps://b.rtmps.youtube.com:443/live2"
62
+                }
63
+            ],
64
+            "recommended": {
65
+                "keyint": 2,
66
+                "max video bitrate": 51000,
67
+                "max audio bitrate": 160
68
+            }
69
+        },
70
+        {
71
             "name": "VIMM",
72
             "servers": [
73
                 {
74
@@ -434,6 +477,12 @@
75
             "recommended": {
76
                 "keyint": 2,
77
                 "profile": "main",
78
+                "supported resolutions": [
79
+                    "1280x720",
80
+                    "852x480",
81
+                    "480x360"
82
+                ],
83
+                "max fps": 30,
84
                 "max video bitrate": 6000,
85
                 "max audio bitrate": 128
86
             }
87
@@ -1409,52 +1458,8 @@
88
             "common": false,
89
             "servers": [
90
                 {
91
-                    "name": "Chicago, US",
92
-                    "url": "rtmp://ingest-any-ord1.broadcast.steamcontent.com/app"
93
-                },
94
-                {
95
-                    "name": "Seattle, US",
96
-                    "url": "rtmp://ingest-any-sea1.broadcast.steamcontent.com/app"
97
-                },
98
-                {
99
-                    "name": "Los Angeles, US",
100
-                    "url": "rtmp://ingest-any-lax1.broadcast.steamcontent.com/app"
101
-                },
102
-                {
103
-                    "name": "Washington DC, US",
104
-                    "url": "rtmp://ingest-any-iad1.broadcast.steamcontent.com/app"
105
-                },
106
-                {
107
-                    "name": "Frankfurt, DE",
108
-                    "url": "rtmp://ingest-any-fra1.broadcast.steamcontent.com/app"
109
-                },
110
-                {
111
-                    "name": "London, UK",
112
-                    "url": "rtmp://ingest-any-lhr1.broadcast.steamcontent.com/app"
113
-                },
114
-                {
115
-                    "name": "Stockholm, SE",
116
-                    "url": "rtmp://ingest-any-sto1.broadcast.steamcontent.com/app"
117
-                },
118
-                {
119
-                    "name": "Tokyo, JP",
120
-                    "url": "rtmp://ingest-any-tyo1.broadcast.steamcontent.com/app"
121
-                },
122
-                {
123
-                    "name": "Hong Kong, HK",
124
-                    "url": "rtmp://ingest-any-hkg1.broadcast.steamcontent.com/app"
125
-                },
126
-                {
127
-                    "name": "Singapore, SG",
128
-                    "url": "rtmp://ingest-any-sgp1.broadcast.steamcontent.com/app"
129
-                },
130
-                {
131
-                    "name": "Sydney, AU",
132
-                    "url": "rtmp://ingest-any-syd1.broadcast.steamcontent.com/app"
133
-                },
134
-                {
135
-                    "name": "São Paulo, BR",
136
-                    "url": "rtmp://ingest-any-gru1.broadcast.steamcontent.com/app"
137
+                    "name": "Default",
138
+                    "url": "rtmp://ingest-rtmp.broadcast.steamcontent.com/app"
139
                 }
140
             ],
141
             "recommended": {
142
@@ -1792,6 +1797,20 @@
143
                 "max video bitrate": 5000,
144
                 "max audio bitrate": 160
145
             }
146
+        },
147
+        {
148
+            "name": "Viloud",
149
+            "servers": [
150
+                {
151
+                    "name": "Default",
152
+                    "url": "rtmp://live.viloud.tv:5222/app"
153
+                }
154
+            ],
155
+            "recommended": {
156
+                "keyint": 2,
157
+                "max video bitrate": 5000,
158
+                "max audio bitrate": 160
159
+            }
160
         }
161
     ]
162
 }
163
obs-studio-26.0.2.tar.xz/plugins/rtmp-services/rtmp-common.c -> obs-studio-26.1.0.tar.xz/plugins/rtmp-services/rtmp-common.c Changed
199
 
1
@@ -16,6 +16,9 @@
2
    char *key;
3
 
4
    char *output;
5
+   struct obs_service_resolution *supported_resolutions;
6
+   size_t supported_resolutions_count;
7
+   int max_fps;
8
 
9
    bool supports_additional_audio_track;
10
 };
11
@@ -31,6 +34,7 @@
12
                   const char **p_new_name);
13
 static inline bool get_bool_val(json_t *service, const char *key);
14
 static inline const char *get_string_val(json_t *service, const char *key);
15
+static inline int get_int_val(json_t *service, const char *key);
16
 
17
 extern void twitch_ingests_refresh(int seconds);
18
 
19
@@ -67,6 +71,43 @@
20
    }
21
 }
22
 
23
+static void update_recommendations(struct rtmp_common *service, json_t *rec)
24
+{
25
+   const char *out = get_string_val(rec, "output");
26
+   if (out)
27
+       service->output = bstrdup(out);
28
+
29
+   json_t *sr = json_object_get(rec, "supported resolutions");
30
+   if (sr && json_is_array(sr)) {
31
+       DARRAY(struct obs_service_resolution) res_list;
32
+       json_t *res_obj;
33
+       size_t index;
34
+
35
+       da_init(res_list);
36
+
37
+       json_array_foreach (sr, index, res_obj) {
38
+           if (!json_is_string(res_obj))
39
+               continue;
40
+
41
+           const char *res_str = json_string_value(res_obj);
42
+           struct obs_service_resolution res;
43
+           if (sscanf(res_str, "%dx%d", &res.cx, &res.cy) != 2)
44
+               continue;
45
+           if (res.cx <= 0 || res.cy <= 0)
46
+               continue;
47
+
48
+           da_push_back(res_list, &res);
49
+       }
50
+
51
+       if (res_list.num) {
52
+           service->supported_resolutions = res_list.array;
53
+           service->supported_resolutions_count = res_list.num;
54
+       }
55
+   }
56
+
57
+   service->max_fps = get_int_val(rec, "max fps");
58
+}
59
+
60
 static void rtmp_common_update(void *data, obs_data_t *settings)
61
 {
62
    struct rtmp_common *service = data;
63
@@ -75,12 +116,16 @@
64
    bfree(service->server);
65
    bfree(service->output);
66
    bfree(service->key);
67
+   bfree(service->supported_resolutions);
68
 
69
    service->service = bstrdup(obs_data_get_string(settings, "service"));
70
    service->server = bstrdup(obs_data_get_string(settings, "server"));
71
    service->key = bstrdup(obs_data_get_string(settings, "key"));
72
    service->supports_additional_audio_track = false;
73
    service->output = NULL;
74
+   service->supported_resolutions = NULL;
75
+   service->supported_resolutions_count = 0;
76
+   service->max_fps = 0;
77
 
78
    json_t *root = open_services_file();
79
    if (root) {
80
@@ -95,9 +140,7 @@
81
        if (serv) {
82
            json_t *rec = json_object_get(serv, "recommended");
83
            if (json_is_object(rec)) {
84
-               const char *out = get_string_val(rec, "output");
85
-               if (out)
86
-                   service->output = bstrdup(out);
87
+               update_recommendations(service, rec);
88
            }
89
 
90
            service->supports_additional_audio_track = get_bool_val(
91
@@ -115,6 +158,7 @@
92
 {
93
    struct rtmp_common *service = data;
94
 
95
+   bfree(service->supported_resolutions);
96
    bfree(service->service);
97
    bfree(service->server);
98
    bfree(service->output);
99
@@ -370,6 +414,15 @@
100
    }
101
 }
102
 
103
+static void fill_more_info_link(json_t *service, obs_data_t *settings)
104
+{
105
+   const char *more_info_link;
106
+
107
+   more_info_link = get_string_val(service, "more_info_link");
108
+   if (more_info_link)
109
+       obs_data_set_string(settings, "more_info_link", more_info_link);
110
+}
111
+
112
 static inline json_t *find_service(json_t *root, const char *name,
113
                   const char **p_new_name)
114
 {
115
@@ -432,7 +485,7 @@
116
    }
117
 
118
    fill_servers(obs_properties_get(props, "server"), service, name);
119
-
120
+   fill_more_info_link(service, settings);
121
    return true;
122
 }
123
 
124
@@ -516,7 +569,7 @@
125
 
126
    item = json_object_get(recommended, "bframes");
127
    if (json_is_integer(item)) {
128
-       int bframes = json_integer_value(item);
129
+       int bframes = (int)json_integer_value(item);
130
        obs_data_set_int(settings, "bf", bframes);
131
    }
132
 
133
@@ -654,6 +707,57 @@
134
    return service->supports_additional_audio_track;
135
 }
136
 
137
+static void rtmp_common_get_supported_resolutions(
138
+   void *data, struct obs_service_resolution **resolutions, size_t *count)
139
+{
140
+   struct rtmp_common *service = data;
141
+   *count = service->supported_resolutions_count;
142
+   *resolutions = bmemdup(service->supported_resolutions,
143
+                  *count * sizeof(struct obs_service_resolution));
144
+}
145
+
146
+static void rtmp_common_get_max_fps(void *data, int *fps)
147
+{
148
+   struct rtmp_common *service = data;
149
+   *fps = service->max_fps;
150
+}
151
+
152
+static void rtmp_common_get_max_bitrate(void *data, int *video_bitrate,
153
+                   int *audio_bitrate)
154
+{
155
+   struct rtmp_common *service = data;
156
+   json_t *root = open_services_file();
157
+   json_t *item;
158
+
159
+   if (!root)
160
+       return;
161
+
162
+   json_t *json_service = find_service(root, service->service, NULL);
163
+   if (!json_service) {
164
+       goto fail;
165
+   }
166
+
167
+   json_t *recommended = json_object_get(json_service, "recommended");
168
+   if (!recommended) {
169
+       goto fail;
170
+   }
171
+
172
+   if (audio_bitrate) {
173
+       item = json_object_get(recommended, "max audio bitrate");
174
+       if (json_is_integer(item))
175
+           *audio_bitrate = (int)json_integer_value(item);
176
+   }
177
+
178
+   if (video_bitrate) {
179
+       item = json_object_get(recommended, "max video bitrate");
180
+       if (json_is_integer(item))
181
+           *video_bitrate = (int)json_integer_value(item);
182
+   }
183
+
184
+fail:
185
+   json_decref(root);
186
+}
187
+
188
 struct obs_service_info rtmp_common_service = {
189
    .id = "rtmp_common",
190
    .get_name = rtmp_common_getname,
191
@@ -665,4 +769,7 @@
192
    .get_key = rtmp_common_key,
193
    .apply_encoder_settings = rtmp_common_apply_settings,
194
    .get_output_type = rtmp_common_get_output_type,
195
+   .get_supported_resolutions = rtmp_common_get_supported_resolutions,
196
+   .get_max_fps = rtmp_common_get_max_fps,
197
+   .get_max_bitrate = rtmp_common_get_max_bitrate,
198
 };
199
obs-studio-26.0.2.tar.xz/plugins/rtmp-services/rtmp-custom.c -> obs-studio-26.1.0.tar.xz/plugins/rtmp-services/rtmp-custom.c Changed
33
 
1
@@ -1,4 +1,5 @@
2
 #include <obs-module.h>
3
+#include <util/dstr.h>
4
 
5
 struct rtmp_custom {
6
    char *server, *key;
7
@@ -109,6 +110,19 @@
8
    return service->password;
9
 }
10
 
11
+#define RTMP_PROTOCOL "rtmp"
12
+
13
+static void rtmp_custom_apply_settings(void *data, obs_data_t *video_settings,
14
+                      obs_data_t *audio_settings)
15
+{
16
+   struct rtmp_custom *service = data;
17
+   if (service->server != NULL && video_settings != NULL &&
18
+       strncmp(service->server, RTMP_PROTOCOL, strlen(RTMP_PROTOCOL)) !=
19
+           0) {
20
+       obs_data_set_bool(video_settings, "repeat_headers", true);
21
+   }
22
+}
23
+
24
 struct obs_service_info rtmp_custom_service = {
25
    .id = "rtmp_custom",
26
    .get_name = rtmp_custom_name,
27
@@ -120,4 +134,5 @@
28
    .get_key = rtmp_custom_key,
29
    .get_username = rtmp_custom_username,
30
    .get_password = rtmp_custom_password,
31
+   .apply_encoder_settings = rtmp_custom_apply_settings,
32
 };
33
obs-studio-26.0.2.tar.xz/plugins/rtmp-services/rtmp-format-ver.h -> obs-studio-26.1.0.tar.xz/plugins/rtmp-services/rtmp-format-ver.h Changed
6
 
1
@@ -1,3 +1,3 @@
2
 #pragma once
3
 
4
-#define RTMP_SERVICES_FORMAT_VERSION 2
5
+#define RTMP_SERVICES_FORMAT_VERSION 3
6
obs-studio-26.1.0.tar.xz/plugins/sndio Added
2
 
1
+(directory)
2
obs-studio-26.1.0.tar.xz/plugins/sndio/CMakeLists.txt Added
37
 
1
@@ -0,0 +1,35 @@
2
+project(sndio)
3
+
4
+if(DISABLE_SNDIO)
5
+   message(STATUS "Sndio support disabled")
6
+   return()
7
+endif()
8
+
9
+find_package(Sndio)
10
+if(NOT Sndio_FOUND AND ENABLE_SNDIO)
11
+   message(FATAL_ERROR "Sndio not found but set as enabled")
12
+elseif(NOT Sndio_FOUND)
13
+   message(STATUS "Sndio not found, disabling Sndio plugin")
14
+   return()
15
+endif()
16
+
17
+include_directories(
18
+   SYSTEM "${CMAKE_SOURCE_DIR}/libobs" SYSTEM "${CMAKE_SOURCE_DIR}/../../libobs"
19
+   ${Sndio_INCLUDE_DIRS}
20
+)
21
+
22
+set(sndio_SOURCES
23
+   sndio.c
24
+   sndio-input.c
25
+)
26
+
27
+add_library(sndio MODULE
28
+   ${sndio_SOURCES}
29
+)
30
+target_link_libraries(sndio
31
+   libobs
32
+   ${Sndio_LIBRARIES}
33
+)
34
+set_target_properties(sndio PROPERTIES FOLDER "plugins")
35
+
36
+install_obs_plugin_with_data(sndio data)
37
obs-studio-26.1.0.tar.xz/plugins/sndio/data Added
2
 
1
+(directory)
2
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale Added
2
 
1
+(directory)
2
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/ar-SA.ini Added
8
 
1
@@ -0,0 +1,6 @@
2
+Channels="عدد القنوات"
3
+Device="جهاز"
4
+BitsPerSample="بت لكل عينة"
5
+Rate="معدل"
6
+
7
+
8
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/ca-ES.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="Número de canals"
3
+Device="Dispositiu"
4
+BitsPerSample="Bits per mostra"
5
+Rate="Taxa"
6
+SndioInput="Client d’entrada Sndio"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/cs-CZ.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="Počet kanálů"
3
+Device="Zařízení"
4
+BitsPerSample="Bitů na vzorek"
5
+Rate="Frekvence"
6
+SndioInput="Sndio klient"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/da-DK.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="Antal kanaler"
3
+Device="Enhed"
4
+BitsPerSample="Bits pr. sample"
5
+Rate="Hastighed"
6
+SndioInput="Sndio-inputklient"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/de-DE.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="Anzahl der Kanäle"
3
+Device="Gerät"
4
+BitsPerSample="Bits pro Sample"
5
+Rate="Rate"
6
+SndioInput="Sndio-Eingabeclient"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/el-GR.ini Added
8
 
1
@@ -0,0 +1,6 @@
2
+Channels="Αριθμός καναλιών"
3
+Device="Συσκευή"
4
+BitsPerSample="Bits ανά δείγμα"
5
+Rate="Ρυθμός"
6
+
7
+
8
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/en-GB.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="Number of channels"
3
+Device="Device"
4
+BitsPerSample="Bits per sample"
5
+Rate="Rate"
6
+SndioInput="Sndio input client"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/en-US.ini Added
8
 
1
@@ -0,0 +1,6 @@
2
+Channels="Number of channels"
3
+Device="Device"
4
+BitsPerSample="Bits per sample"
5
+Rate="Rate"
6
+SndioInput="Sndio input client"
7
+
8
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/es-ES.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="Número de canales"
3
+Device="Dispositivo"
4
+BitsPerSample="Bits por muestra"
5
+Rate="Tasa"
6
+SndioInput="Cliente de entrada Sndio"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/et-EE.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="Kanalite arv"
3
+Device="Seade"
4
+BitsPerSample="Bitti proovi"
5
+Rate="Hinnang"
6
+SndioInput="Sndio sisendklient"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/fa-IR.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="تعداد کانال ها"
3
+Device="دستگاه"
4
+BitsPerSample="بیت در هر نمونه"
5
+Rate="نرخ"
6
+SndioInput="کلاینت ورودی Sndio"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/fi-FI.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="Kanavien määrä"
3
+Device="Laite"
4
+BitsPerSample="Bittiä per näyte"
5
+Rate="Näytteenottotaajuus"
6
+SndioInput="Sndio sisääntulon asiakas"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/fr-FR.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="Nombre de canaux"
3
+Device="Appareil"
4
+BitsPerSample="Bits par échantillon"
5
+Rate="Taux"
6
+SndioInput="Entrée client Sndio"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/gl-ES.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="Número de canles"
3
+Device="Dispositivo"
4
+BitsPerSample="Bits por mostra"
5
+Rate="Taxa"
6
+SndioInput="Cliente de entrada «sndio»"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/hu-HU.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+Channels="Csatornák száma"
3
+Device="Eszköz"
4
+
5
+
6
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/id-ID.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="Jumlah saluran"
3
+Device="Perangkat"
4
+BitsPerSample="Bit per sampel"
5
+Rate="Nilai"
6
+SndioInput="Input klien Sndio"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/it-IT.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="Numero di canali"
3
+Device="Dispositivo"
4
+BitsPerSample="Bit per campione"
5
+Rate="Velocità"
6
+SndioInput="Client di ingresso sndio"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/ja-JP.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="チャネル数"
3
+Device="デバイス"
4
+BitsPerSample="ビット毎サンプル"
5
+Rate="レート"
6
+SndioInput="Sndio入力クライアント"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/ka-GE.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="არხების რაოდენობა"
3
+Device="მოწყობილობა"
4
+BitsPerSample="ბიტი დანაყოფში"
5
+Rate="სიხშირე"
6
+SndioInput="Sndio-შეტანის კლიენტი"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/kab-KAB.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="Amḍan n ibuda"
3
+Device="Ibenk"
4
+BitsPerSample="Ibiten i tlemmict"
5
+Rate="Atug"
6
+SndioInput="Anekcum Sndio n umsaɣ"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/ko-KR.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="채널 수"
3
+Device="장치"
4
+BitsPerSample="샘플 당 비트 수"
5
+Rate="샘플링 레이트"
6
+SndioInput="입력 클라이언트"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/nl-NL.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="Aantal kanalen"
3
+Device="Apparaat"
4
+BitsPerSample="Bits per sample"
5
+Rate="Rate"
6
+SndioInput="Sndio input client"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/pl-PL.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="Liczba kanałów"
3
+Device="Urządzenie"
4
+BitsPerSample="Bity na próbkę"
5
+Rate="Częstotliwość próbkowania"
6
+SndioInput="Klient Sndio - wejście"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/pt-BR.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="Número de canais"
3
+Device="Dispositivo"
4
+BitsPerSample="Bits por amostra"
5
+Rate="Taxa"
6
+SndioInput="Cliente de inserção sndio"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/pt-PT.ini Added
7
 
1
@@ -0,0 +1,5 @@
2
+Channels="Número de canais"
3
+Device="Dispositivo"
4
+BitsPerSample="Bits por amostra"
5
+
6
+
7
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/ru-RU.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="Количество каналов"
3
+Device="Устройство"
4
+BitsPerSample="Биты на образец"
5
+Rate="Ставка"
6
+SndioInput="Клиент ввода Sndio"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/sk-SK.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="Počet kanálov"
3
+Device="Zariadenie"
4
+BitsPerSample="Bitov na vzorku"
5
+Rate="Frekvencia"
6
+SndioInput="Sndio klient vstupu"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/sl-SI.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="Število kanalov"
3
+Device="Naprava"
4
+BitsPerSample="Bitov na vzorec"
5
+Rate="Stopnja"
6
+SndioInput="Vhodni zvočni odjemalec"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/sv-SE.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="Antal kanaler"
3
+Device="Enhet"
4
+BitsPerSample="Bitar per sampling"
5
+Rate="Hastighet"
6
+SndioInput="Sndio-inmatningsklient"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/tr-TR.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="Kanal sayısı"
3
+Device="Aygıt"
4
+BitsPerSample="Örnek başına bit"
5
+Rate="Oran"
6
+SndioInput="Sndio giriş istemcisi"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/uk-UA.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="Кількість каналів"
3
+Device="Пристрій"
4
+BitsPerSample="Біт на зразок"
5
+Rate="Частота"
6
+SndioInput="Клієнт введення Sndio"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/zh-CN.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="通道数量"
3
+Device="设备"
4
+BitsPerSample="采样位数"
5
+Rate="采样率"
6
+SndioInput="Sndio 输入端"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/data/locale/zh-TW.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Channels="聲道數目"
3
+Device="裝置"
4
+BitsPerSample="每樣本位元"
5
+Rate="頻率"
6
+SndioInput="Sndio 輸入裝置"
7
+
8
+
9
obs-studio-26.1.0.tar.xz/plugins/sndio/sndio-input.c Added
420
 
1
@@ -0,0 +1,418 @@
2
+/*
3
+Copyright (C) 2020 by Vadim Zhukov <zhuk@openbsd.org>
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 <sys/types.h>
20
+#include <sys/socket.h>
21
+#include <errno.h>
22
+#include <poll.h>
23
+#include <pthread.h>
24
+#include <sndio.h>
25
+#include <string.h>
26
+#include <unistd.h>
27
+
28
+#include <util/bmem.h>
29
+#include <util/platform.h>
30
+#include <util/threading.h>
31
+#include <util/util_uint64.h>
32
+#include <obs.h>
33
+#include <obs-module.h>
34
+
35
+#include "sndio-input.h"
36
+
37
+#define blog(level, msg, ...) \
38
+   blog(level, "sndio-input: %s: " msg, __func__, ##__VA_ARGS__);
39
+
40
+#define berr(level, msg, ...)                                   \
41
+   do {                                                    \
42
+       const char *errstr = strerror(errno);           \
43
+       blog(level, msg ": %s", ##__VA_ARGS__, errstr); \
44
+   } while (0)
45
+
46
+#define NSEC_PER_SEC 1000000000LL
47
+
48
+/**
49
+ * Returns the name of the plugin
50
+ */
51
+static const char *sndio_input_getname(void *unused)
52
+{
53
+   UNUSED_PARAMETER(unused);
54
+   return obs_module_text("SndioInput");
55
+}
56
+
57
+static enum speaker_layout sndio_channels_to_obs_speakers(int channels)
58
+{
59
+   switch (channels) {
60
+   case 1:
61
+       return SPEAKERS_MONO;
62
+   case 2:
63
+       return SPEAKERS_STEREO;
64
+   case 3:
65
+       return SPEAKERS_2POINT1;
66
+   case 4:
67
+       return SPEAKERS_4POINT0;
68
+   case 5:
69
+       return SPEAKERS_4POINT1;
70
+   case 6:
71
+       return SPEAKERS_5POINT1;
72
+   case 8:
73
+       return SPEAKERS_7POINT1;
74
+   }
75
+   return SPEAKERS_UNKNOWN;
76
+}
77
+
78
+static enum audio_format sndio_to_obs_audio_format(const struct sio_par *par)
79
+{
80
+   switch (par->bits) {
81
+   case 8:
82
+       return AUDIO_FORMAT_U8BIT;
83
+   case 16:
84
+       return AUDIO_FORMAT_16BIT;
85
+   case 32:
86
+       return AUDIO_FORMAT_32BIT;
87
+   }
88
+   return AUDIO_FORMAT_UNKNOWN;
89
+}
90
+
91
+/**
92
+ * Runs sndio tasks on a pre-opened audio device.
93
+ * Whenever user chooses another device, this thread gets signalled to exit,
94
+ * and another one starts immediately, without waiting for the previous.
95
+ */
96
+static void *sndio_thread(void *attr)
97
+{
98
+   struct sndio_thr_data *thrdata = attr;
99
+   size_t msgread = 0; // msg bytes read from socket
100
+   size_t nsiofds = sio_nfds(thrdata->hdl);
101
+   struct pollfd pfd[1 + nsiofds];
102
+   struct sio_par par;
103
+   uint64_t ts;
104
+   ssize_t nread;
105
+   int pollres;
106
+   uint8_t *buf;
107
+   size_t bufsz;
108
+
109
+   ts = os_gettime_ns();
110
+
111
+   bufsz = thrdata->par.appbufsz * thrdata->par.bps * 2;
112
+   if ((buf = bmalloc(bufsz * 2)) == NULL) {
113
+       blog(LOG_ERROR, "could not allocate record buffer of %zu bytes",
114
+            bufsz);
115
+       goto finish;
116
+   }
117
+
118
+   memset(pfd, 0, sizeof(pfd));
119
+   pfd[0].fd = thrdata->sock;
120
+
121
+   for (;;) {
122
+       for (size_t i = 0; i <= nsiofds; i++)
123
+           pfd[i].revents = 0;
124
+       pfd[0].events = POLLIN;
125
+       sio_pollfd(thrdata->hdl, pfd + 1, POLLIN);
126
+
127
+       if (poll(pfd, 1 + nsiofds, /*INFTIM*/ -1) == -1) {
128
+           if (errno == EINTR)
129
+               continue;
130
+           berr(LOG_ERROR, "exiting due to poll error");
131
+           goto finish;
132
+       }
133
+
134
+       if ((pfd[0].revents & POLLHUP) == POLLHUP) {
135
+           blog(LOG_INFO,
136
+                "exiting upon receiving EOF at IPC socket");
137
+           goto finish;
138
+       }
139
+       if ((pfd[0].revents & POLLIN) == POLLIN) {
140
+           nread = read(pfd[0].fd, ((uint8_t *)&par) + msgread,
141
+                    sizeof(par) - msgread);
142
+           switch (nread) {
143
+           case -1:
144
+               if (errno == EAGAIN)
145
+                   goto proceed_sio;
146
+               berr(LOG_ERROR,
147
+                    "reading from IPC socket failed");
148
+               goto finish;
149
+
150
+           case 0:
151
+               blog(LOG_INFO,
152
+                    "exiting upon receiving EOF at IPC socket");
153
+               goto finish;
154
+
155
+           default:
156
+               msgread += (size_t)nread;
157
+               if (msgread == sizeof(struct sio_par)) {
158
+                   size_t tbufsz;
159
+                   uint8_t *tbuf;
160
+
161
+                   msgread = 0;
162
+                   sio_stop(thrdata->hdl);
163
+                   if (!sio_setpar(thrdata->hdl, &par)) {
164
+                       blog(LOG_WARNING,
165
+                            "sio_setpar failed, keeping old params");
166
+                   }
167
+                   blog(LOG_INFO,
168
+                        "after sio_setpar(): appbufsz=%u bps=%u",
169
+                        par.appbufsz, par.bps);
170
+                   memcpy(&thrdata->par, &par,
171
+                          sizeof(struct sio_par));
172
+
173
+                   tbufsz = thrdata->par.appbufsz *
174
+                        thrdata->par.bps * 2;
175
+                   if ((tbuf = brealloc(buf, tbufsz)) ==
176
+                       NULL) {
177
+                       blog(LOG_ERROR,
178
+                            "could not reallocate record buffer of %zu bytes",
179
+                            tbufsz);
180
+                       goto finish;
181
+                   }
182
+                   buf = tbuf;
183
+                   bufsz = tbufsz;
184
+
185
+                   if (!sio_start(thrdata->hdl)) {
186
+                       blog(LOG_ERROR,
187
+                            "sio_start failed, exiting");
188
+                       goto finish;
189
+                   }
190
+                   ts = os_gettime_ns();
191
+                   // Since we restarted recording,
192
+                   // do not try to handle events we lost.
193
+                   continue;
194
+               }
195
+           }
196
+       }
197
+
198
+   proceed_sio:
199
+       pollres = sio_revents(thrdata->hdl, pfd + 1);
200
+       if ((pollres & POLLHUP) == POLLHUP) {
201
+           blog(LOG_ERROR, "sndio device error happened, exiting");
202
+           goto finish;
203
+       }
204
+       if ((pollres & POLLIN) == POLLIN) {
205
+           struct obs_source_audio out;
206
+           unsigned int nframes;
207
+
208
+           nread = (ssize_t)sio_read(thrdata->hdl, buf, bufsz);
209
+           if (nread == 0) {
210
+               if (sio_eof(thrdata->hdl)) {
211
+                   blog(LOG_ERROR,
212
+                        "sndio device EOF happened, exiting");
213
+                   goto finish;
214
+               }
215
+               continue;
216
+           }
217
+           nframes = (unsigned int)nread / thrdata->par.bps;
218
+           //blog(LOG_INFO, "sio_read returned %u, nframes = %u", nread, nframes);
219
+
220
+           memset(&out, 0, sizeof(struct obs_source_audio));
221
+           out.data[0] = buf;
222
+           out.frames = nframes;
223
+           out.format = sndio_to_obs_audio_format(&thrdata->par);
224
+           out.speakers = sndio_channels_to_obs_speakers(
225
+               thrdata->par.rchan);
226
+           out.samples_per_sec = thrdata->par.rate;
227
+           out.timestamp = ts;
228
+
229
+           ts += util_mul_div64(nframes, NSEC_PER_SEC,
230
+                        thrdata->par.rate);
231
+
232
+           obs_source_output_audio(thrdata->source, &out);
233
+       }
234
+   }
235
+
236
+finish:
237
+   sio_close(thrdata->hdl);
238
+   close(thrdata->sock);
239
+   bfree(buf);
240
+   bfree(thrdata);
241
+   return NULL;
242
+}
243
+
244
+/**
245
+ * Destroy the plugin object and free all memory
246
+ */
247
+static void sndio_destroy(void *vptr)
248
+{
249
+   struct sndio_data *data = vptr;
250
+
251
+   if (!data)
252
+       return;
253
+   close(data->sock);
254
+   data->sock = -1;
255
+   pthread_attr_destroy(&data->attr);
256
+   bfree(data);
257
+}
258
+
259
+/**
260
+ * Tries to apply the input settings.
261
+ * Must be called on stopped device.
262
+ */
263
+static void sndio_apply(struct sndio_data *data, obs_data_t *settings)
264
+{
265
+   struct sndio_thr_data *thrdata;
266
+   pthread_t thread;
267
+   int ec;
268
+   int socks[2] = {-1, -1};
269
+   const char *devname = obs_data_get_string(settings, "device");
270
+
271
+   if ((thrdata = bzalloc(sizeof(struct sndio_thr_data))) == NULL) {
272
+       blog(LOG_ERROR, "malloc");
273
+       return;
274
+   }
275
+   if (socketpair(AF_UNIX, SOCK_STREAM | SOCK_NONBLOCK | SOCK_CLOEXEC, 0,
276
+              socks) == -1) {
277
+       berr(LOG_ERROR, "socketpair");
278
+       goto error;
279
+   }
280
+
281
+   if (data->sock != -1)
282
+       close(data->sock);
283
+   data->sock = socks[0];
284
+   thrdata->sock = socks[1];
285
+   thrdata->source = data->source;
286
+
287
+   thrdata->hdl = sio_open(devname, SIO_REC, 0);
288
+   if (!thrdata->hdl) {
289
+       berr(LOG_ERROR, "could not open %s sndio device", devname);
290
+       goto error;
291
+   }
292
+
293
+   sio_initpar(&thrdata->par);
294
+   thrdata->par.bits = obs_data_get_int(settings, "bits");
295
+   thrdata->par.bps = SIO_BPS(thrdata->par.bits);
296
+   thrdata->par.sig = thrdata->par.bits > 8;
297
+   thrdata->par.le = 1;
298
+   thrdata->par.rate = obs_data_get_int(settings, "rate");
299
+   thrdata->par.rchan = obs_data_get_int(settings, "channels");
300
+   thrdata->par.xrun = SIO_SYNC; // makes timestamping easy
301
+   if (!sio_setpar(thrdata->hdl, &thrdata->par)) {
302
+       berr(LOG_ERROR, "could not set parameters for %s sndio device",
303
+            devname);
304
+       goto error;
305
+   }
306
+   blog(LOG_INFO, "after initial sio_setpar(): appbufsz=%u bps=%u",
307
+        thrdata->par.appbufsz, thrdata->par.bps);
308
+
309
+   if (!sio_start(thrdata->hdl)) {
310
+       berr(LOG_ERROR, "could not start recording on %s sndio device",
311
+            devname);
312
+       goto error;
313
+   }
314
+
315
+   ec = pthread_create(&thread, &data->attr, sndio_thread, thrdata);
316
+   if (ec != 0) {
317
+       blog(LOG_ERROR, "could not start thread");
318
+       goto error;
319
+   }
320
+
321
+   return;
322
+
323
+error:
324
+   if (thrdata->hdl != NULL)
325
+       sio_close(thrdata->hdl);
326
+   close(socks[0]);
327
+   close(socks[1]);
328
+   bfree(thrdata);
329
+}
330
+
331
+/**
332
+ * Update the input settings.
333
+ */
334
+static void sndio_update(void *vptr, obs_data_t *settings)
335
+{
336
+   struct sndio_data *data = vptr;
337
+   sndio_apply(data, settings);
338
+}
339
+
340
+/**
341
+ * Create the plugin object
342
+ */
343
+static void *sndio_create(obs_data_t *settings, obs_source_t *source)
344
+{
345
+   struct sndio_data *data = bzalloc(sizeof(struct sndio_data));
346
+   pthread_attr_init(&data->attr);
347
+   pthread_attr_setdetachstate(&data->attr, PTHREAD_CREATE_DETACHED);
348
+   data->source = source;
349
+   data->sock = -1;
350
+   sndio_apply(data, settings);
351
+   return data;
352
+}
353
+
354
+/**
355
+ * Get plugin defaults
356
+ */
357
+static void sndio_input_defaults(obs_data_t *settings)
358
+{
359
+   obs_data_set_default_string(settings, "device", SIO_DEVANY);
360
+   obs_data_set_default_int(settings, "rate", 48000);
361
+   obs_data_set_default_int(settings, "bits", 16);
362
+   obs_data_set_default_int(settings, "channels", 2);
363
+}
364
+
365
+/**
366
+ * Get plugin properties
367
+ */
368
+static obs_properties_t *sndio_input_properties(void *unused)
369
+{
370
+   obs_property_t *rate, *bits;
371
+
372
+   UNUSED_PARAMETER(unused);
373
+
374
+   obs_properties_t *props = obs_properties_create();
375
+
376
+   obs_properties_add_text(props, "device", obs_module_text("Device"),
377
+               OBS_TEXT_DEFAULT);
378
+
379
+   rate = obs_properties_add_list(props, "rate", obs_module_text("Rate"),
380
+                      OBS_COMBO_TYPE_LIST,
381
+                      OBS_COMBO_FORMAT_INT);
382
+   obs_property_list_add_int(rate, "11025 Hz", 11025);
383
+   obs_property_list_add_int(rate, "22050 Hz", 22050);
384
+   obs_property_list_add_int(rate, "32000 Hz", 32000);
385
+   obs_property_list_add_int(rate, "44100 Hz", 44100);
386
+   obs_property_list_add_int(rate, "48000 Hz", 48000);
387
+   obs_property_list_add_int(rate, "96000 Hz", 96000);
388
+   obs_property_list_add_int(rate, "192000 Hz", 192000);
389
+
390
+   bits = obs_properties_add_list(props, "bits",
391
+                      obs_module_text("BitsPerSample"),
392
+                      OBS_COMBO_TYPE_LIST,
393
+                      OBS_COMBO_FORMAT_INT);
394
+   obs_property_list_add_int(bits, "8", 8);
395
+   obs_property_list_add_int(bits, "16", 16);
396
+   obs_property_list_add_int(bits, "32", 32);
397
+
398
+   obs_properties_add_int(props, "channels", obs_module_text("Channels"),
399
+                  1, 8, 1);
400
+
401
+   return props;
402
+}
403
+
404
+struct obs_source_info sndio_output_capture = {
405
+   .id = "sndio_output_capture",
406
+   .type = OBS_SOURCE_TYPE_INPUT,
407
+   .output_flags = OBS_SOURCE_AUDIO,
408
+   .get_name = sndio_input_getname,
409
+   .create = sndio_create,
410
+   .destroy = sndio_destroy,
411
+#if SHUTDOWN_ON_DEACTIVATE
412
+   .activate = sndio_activate,
413
+   .deactivate = sndio_deactivate,
414
+#endif
415
+   .update = sndio_update,
416
+   .get_defaults = sndio_input_defaults,
417
+   .get_properties = sndio_input_properties,
418
+   .icon_type = OBS_ICON_TYPE_AUDIO_OUTPUT,
419
+};
420
obs-studio-26.1.0.tar.xz/plugins/sndio/sndio-input.h Added
20
 
1
@@ -0,0 +1,18 @@
2
+#ifndef OBS_SNDIO_INPUT_H
3
+#define OBS_SNDIO_INPUT_H
4
+
5
+struct sndio_thr_data {
6
+   obs_source_t *source;
7
+   struct obs_source_audio out;
8
+   struct sio_hdl *hdl;
9
+   struct sio_par par;
10
+   int sock;
11
+};
12
+
13
+struct sndio_data {
14
+   obs_source_t *source;
15
+   pthread_attr_t attr;
16
+   int sock;
17
+};
18
+
19
+#endif // OBS_SNDIO_INPUT_H
20
obs-studio-26.1.0.tar.xz/plugins/sndio/sndio.c Added
34
 
1
@@ -0,0 +1,32 @@
2
+/*
3
+Copyright (C) 2020 by Vadim Zhukov <zhuk@openbsd.org>
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
+#include <obs-module.h>
19
+
20
+OBS_DECLARE_MODULE()
21
+OBS_MODULE_USE_DEFAULT_LOCALE("sndio", "en-US")
22
+MODULE_EXPORT const char *obs_module_description(void)
23
+{
24
+   return "sndio output capture";
25
+}
26
+
27
+extern struct obs_source_info sndio_output_capture;
28
+
29
+bool obs_module_load(void)
30
+{
31
+   obs_register_source(&sndio_output_capture);
32
+   return true;
33
+}
34
obs-studio-26.0.2.tar.xz/plugins/text-freetype2/CMakeLists.txt -> obs-studio-26.1.0.tar.xz/plugins/text-freetype2/CMakeLists.txt Changed
11
 
1
@@ -42,9 +42,6 @@
2
    set(text-freetype2_PLATFORM_DEPS
3
        ${COCOA}
4
        ${ICONV_LIBRARIES})
5
-
6
-   set_source_files_properties(find-font-cocoa.m
7
-       PROPERTIES LANGUAGE C)
8
 else()
9
    find_package(Fontconfig QUIET)
10
    if(NOT FONTCONFIG_FOUND AND ENABLE_FREETYPE)
11
obs-studio-26.0.2.tar.xz/plugins/text-freetype2/data/locale/ar-SA.ini -> obs-studio-26.1.0.tar.xz/plugins/text-freetype2/data/locale/ar-SA.ini Changed
10
 
1
@@ -3,6 +3,8 @@
2
 Text="النص"
3
 TextFile="ملف نص (UTF-8 أو UTF-16)"
4
 TextFileFilter="ملفات نصية (*.txt);;"
5
+ChatLogMode="وضع سجل الدردشة"
6
+ChatLogLines="خطوط سجل الدردشة"
7
 Color1="اللون الأول"
8
 Color2="اللون الثاني"
9
 Outline="حدود"
10
obs-studio-26.0.2.tar.xz/plugins/text-freetype2/data/locale/de-DE.ini -> obs-studio-26.1.0.tar.xz/plugins/text-freetype2/data/locale/de-DE.ini Changed
10
 
1
@@ -1,7 +1,7 @@
2
 TextFreetype2="Text (FreeType 2)"
3
 Font="Schriftart"
4
 Text="Text"
5
-TextFile="Textdatei (UTF‐8 oder UTF‐16)"
6
+TextFile="Textdatei (UTF-8 oder UTF-16)"
7
 TextFileFilter="Textdateien (*.txt);;"
8
 ChatLogMode="Chatlogmodus"
9
 ChatLogLines="Chatlogzeilen"
10
obs-studio-26.0.2.tar.xz/plugins/text-freetype2/data/locale/el-GR.ini -> obs-studio-26.1.0.tar.xz/plugins/text-freetype2/data/locale/el-GR.ini Changed
7
 
1
@@ -10,4 +10,5 @@
2
 ReadFromFile="Ανάγνωση από αρχείο"
3
 CustomWidth="Προσαρμοσμένο πλάτος κειμένου"
4
 WordWrap="Αναδίπλωση Λέξεων"
5
+Antialiasing="Ενεργοποίηση Εξομάλυνσης"
6
 
7
obs-studio-26.0.2.tar.xz/plugins/text-freetype2/data/locale/fa-IR.ini -> obs-studio-26.1.0.tar.xz/plugins/text-freetype2/data/locale/fa-IR.ini Changed
7
 
1
@@ -12,4 +12,5 @@
2
 ReadFromFile="از فایل بخوان"
3
 CustomWidth="رنگ متن سفارشی"
4
 WordWrap="بسته بندی کلمات"
5
+Antialiasing="فعال کردن ضد لبه"
6
 
7
obs-studio-26.1.0.tar.xz/plugins/text-freetype2/data/locale/kab-KAB.ini Added
18
 
1
@@ -0,0 +1,16 @@
2
+TextFreetype2="Aḍris (FreeType 2)"
3
+Font="Tasefsit"
4
+Text="Aḍris"
5
+TextFile="Afaylu aḍris (UTF-8 neɣ UTF-16)"
6
+TextFileFilter="Ifuyla iḍrisen (*.txt);;"
7
+ChatLogMode="Askar n uɣmis n umeslay"
8
+ChatLogLines="Ijerriḍen n uɣmis n umeslay"
9
+Color1="Ini 1"
10
+Color2="Ini 2"
11
+Outline="Azizdew"
12
+DropShadow="Tili"
13
+ReadFromFile="Ɣer-d seg ufaylu"
14
+CustomWidth="Tehri n uḍris yugnen"
15
+WordWrap="Tuɣalin tawurmant s ajerriḍ"
16
+Antialiasing="Sermed amzay"
17
+
18
obs-studio-26.0.2.tar.xz/plugins/text-freetype2/data/locale/pt-BR.ini -> obs-studio-26.1.0.tar.xz/plugins/text-freetype2/data/locale/pt-BR.ini Changed
23
 
1
@@ -1,16 +1,16 @@
2
 TextFreetype2="Texto (FreeType 2)"
3
 Font="Fonte"
4
 Text="Texto"
5
-TextFile="Arquivo de Texto (UTF-8 ou UTF-16)"
6
+TextFile="Arquivo de texto (UTF-8 ou UTF-16)"
7
 TextFileFilter="Arquivos de texto (*.txt);;"
8
-ChatLogMode="Modo de Bate-Papo"
9
-ChatLogLines="Linhas de Bate-Papo"
10
+ChatLogMode="Modo de chat"
11
+ChatLogLines="Linhas do chat"
12
 Color1="Cor 1"
13
 Color2="Cor 2"
14
 Outline="Contorno"
15
 DropShadow="Sombra"
16
 ReadFromFile="Ler de arquivo"
17
 CustomWidth="Largura do texto personalizada"
18
-WordWrap="Quebra de Linha"
19
-Antialiasing="Ativar Anti-Aliasing"
20
+WordWrap="Quebra de linha"
21
+Antialiasing="Ativar anti-aliasing"
22
 
23
obs-studio-26.0.2.tar.xz/plugins/text-freetype2/data/locale/ro-RO.ini -> obs-studio-26.1.0.tar.xz/plugins/text-freetype2/data/locale/ro-RO.ini Changed
19
 
1
@@ -3,8 +3,8 @@
2
 Text="Text"
3
 TextFile="Fișier text (UTF-8 sau UTF-16)"
4
 TextFileFilter="Fișiere text (*.txt);;"
5
-ChatLogMode="Mod jurnal chat"
6
-ChatLogLines="Linii jurnal chat"
7
+ChatLogMode="Mod pentru jurnal de chat"
8
+ChatLogLines="Linii pentru jurnal de chat"
9
 Color1="Culoarea 1"
10
 Color2="Culoarea 2"
11
 Outline="Contur"
12
@@ -12,5 +12,5 @@
13
 ReadFromFile="Citește din fișier"
14
 CustomWidth="Lățime de text personalizată"
15
 WordWrap="Încadrare pentru cuvinte"
16
-Antialiasing="Activează antialiasing"
17
+Antialiasing="Activează antialiasingul"
18
 
19
obs-studio-26.0.2.tar.xz/plugins/vlc-video/data/locale/de-DE.ini -> obs-studio-26.1.0.tar.xz/plugins/vlc-video/data/locale/de-DE.ini Changed
7
 
1
@@ -1,4 +1,4 @@
2
-VLCSource="VLC‐Videoquelle"
3
+VLCSource="VLC-Videoquelle"
4
 Playlist="Playlist"
5
 LoopPlaylist="Playlist wiederholen"
6
 Shuffle="Playlist zufällig wiedergeben"
7
obs-studio-26.0.2.tar.xz/plugins/vlc-video/data/locale/el-GR.ini -> obs-studio-26.1.0.tar.xz/plugins/vlc-video/data/locale/el-GR.ini Changed
9
 
1
@@ -12,4 +12,7 @@
2
 Stop="Διακοπή"
3
 PlaylistNext="Επόμενο"
4
 PlaylistPrev="Προηγούμενο"
5
+AudioTrack="Κομμάτι Ήχου"
6
+SubtitleTrack="Κομμάτι Υποτίτλων"
7
+SubtitleEnable="Ενεργοποίηση Υποτίτλων"
8
 
9
obs-studio-26.0.2.tar.xz/plugins/vlc-video/data/locale/et-EE.ini -> obs-studio-26.1.0.tar.xz/plugins/vlc-video/data/locale/et-EE.ini Changed
17
 
1
@@ -1,8 +1,15 @@
2
 VLCSource="VLC Video allikas"
3
 Playlist="Esitusloend"
4
 LoopPlaylist="Korda esitusloendit"
5
+Shuffle="Juhuesita esitlusloend"
6
 PlaybackBehavior="Käitumine"
7
 PlaybackBehavior.StopRestart="Lõpeta kui nähtamatu, alusta uuesti kui nähtav"
8
 PlaybackBehavior.PauseUnpause="Peata kui nähtamatu, jätka kui nähtav"
9
 PlaybackBehavior.AlwaysPlay="Mängi alati, isegi siis kui pole nähtav"
10
+PlayPause="Esita/Peata"
11
+Restart="Taaskäivita"
12
+Stop="Lõpeta"
13
+PlaylistNext="Edasi"
14
+PlaylistPrev="Eelmine"
15
+AudioTrack="Helirada"
16
 
17
obs-studio-26.0.2.tar.xz/plugins/vlc-video/data/locale/fa-IR.ini -> obs-studio-26.1.0.tar.xz/plugins/vlc-video/data/locale/fa-IR.ini Changed
16
 
1
@@ -5,10 +5,14 @@
2
 PlaybackBehavior="کنش های دیداری"
3
 PlaybackBehavior.StopRestart="توقف زمانی که قابل مشاهده نیست، راه اندازی مجدد زمانی که قابل مشاهده است"
4
 PlaybackBehavior.PauseUnpause="توقف زمانی که قابل مشاهده نیست، راه اندازی مجدد زمانی که قابل مشاهده است"
5
+PlaybackBehavior.AlwaysPlay="همیشه حتی وقتی دیده نمی شود اجرا کنید"
6
 NetworkCaching="ذخیره سازی اینترنت (ms)"
7
 PlayPause="پخش/توقف"
8
 Restart="راه اندازی مجدد"
9
 Stop="توقف"
10
 PlaylistNext="بعدی"
11
 PlaylistPrev="قبلی"
12
+AudioTrack="قطعه صدا"
13
+SubtitleTrack="قطعه زیرنویس"
14
+SubtitleEnable="زیرنویس فعال"
15
 
16
obs-studio-26.0.2.tar.xz/plugins/vlc-video/data/locale/fil-PH.ini -> obs-studio-26.1.0.tar.xz/plugins/vlc-video/data/locale/fil-PH.ini Changed
7
 
1
@@ -12,4 +12,5 @@
2
 Stop="Itigil"
3
 PlaylistNext="Susunod"
4
 PlaylistPrev="Nakaraan"
5
+AudioTrack="Track ng Dami"
6
 
7
obs-studio-26.1.0.tar.xz/plugins/vlc-video/data/locale/kab-KAB.ini Added
20
 
1
@@ -0,0 +1,18 @@
2
+VLCSource="Aɣbalu n uvidyu VLC"
3
+Playlist="Tabdart n tɣuri"
4
+LoopPlaylist="Ales tabdart n tɣuri"
5
+Shuffle="Taɣuri tagacurant"
6
+PlaybackBehavior="Tikli n twalit"
7
+PlaybackBehavior.StopRestart="Ḥbes ticki ur yettban ara, ales asekker ticki yettban"
8
+PlaybackBehavior.PauseUnpause="Bedd ticki ur yettban ara, kemmel ticki yettban"
9
+PlaybackBehavior.AlwaysPlay="Ad itteddu yalas ɣas ma ur yettban ara"
10
+NetworkCaching="Tuffirt n uzeḍḍa (ms)"
11
+PlayPause="Ɣer/Bedd"
12
+Restart="Ales asekker"
13
+Stop="Seḥbes"
14
+PlaylistNext="Win ɣers"
15
+PlaylistPrev="Ɣer deffir"
16
+AudioTrack="Tazribt n umeslaw"
17
+SubtitleTrack="Tazribt n iduzwilen"
18
+SubtitleEnable="Iduzwilen remden"
19
+
20
obs-studio-26.0.2.tar.xz/plugins/vlc-video/data/locale/pt-BR.ini -> obs-studio-26.1.0.tar.xz/plugins/vlc-video/data/locale/pt-BR.ini Changed
17
 
1
@@ -1,12 +1,12 @@
2
 VLCSource="Fonte de vídeo do VLC"
3
 Playlist="Lista de reprodução"
4
-LoopPlaylist="Repetir a Lista de reprodução"
5
-Shuffle="Misturar a Lista"
6
+LoopPlaylist="Reproduzir em loop"
7
+Shuffle="Reproduzir aleatoriamente"
8
 PlaybackBehavior="Comportamento de visibilidade"
9
 PlaybackBehavior.StopRestart="Parar quando não visível, reiniciar quando visível"
10
 PlaybackBehavior.PauseUnpause="Pausa quando não visível, resumir quando visível"
11
 PlaybackBehavior.AlwaysPlay="Sempre reproduzir, mesmo quando não visível"
12
-NetworkCaching="Cache de Rede (ms)"
13
+NetworkCaching="Cache de rede (ms)"
14
 PlayPause="Reproduzir/Pausar"
15
 Restart="Reiniciar"
16
 Stop="Parar"
17
obs-studio-26.0.2.tar.xz/plugins/vlc-video/data/locale/ro-RO.ini -> obs-studio-26.1.0.tar.xz/plugins/vlc-video/data/locale/ro-RO.ini Changed
24
 
1
@@ -1,10 +1,10 @@
2
 VLCSource="Sursă video VLC"
3
-Playlist="Listă de redare"
4
-LoopPlaylist="Repetă lista de redare"
5
-Shuffle="Amestecă lista de redare"
6
+Playlist="Playlist"
7
+LoopPlaylist="Repetă playlistul"
8
+Shuffle="Amestecă playlistul"
9
 PlaybackBehavior="Comportamentul vizibilității"
10
 PlaybackBehavior.StopRestart="Oprește când sursa nu este vizibilă, repornește când este vizibilă"
11
-PlaybackBehavior.PauseUnpause="Pune pe pauză când sursa nu este vizibilă, scoate de pe pauză când este vizibilă"
12
+PlaybackBehavior.PauseUnpause="Pune pe pauză când sursa nu e vizibilă, scoate de pe pauză când e vizibilă"
13
 PlaybackBehavior.AlwaysPlay="Redă întotdeauna chiar și atunci când sursa nu este vizibilă"
14
 NetworkCaching="Caching de rețea (ms)"
15
 PlayPause="Redă/Pune pe pauză"
16
@@ -13,6 +13,6 @@
17
 PlaylistNext="Următorul"
18
 PlaylistPrev="Anteriorul"
19
 AudioTrack="Pistă audio"
20
-SubtitleTrack="Pistă subtitrare"
21
+SubtitleTrack="Pistă de subtitrare"
22
 SubtitleEnable="Subtitrări activate"
23
 
24
obs-studio-26.0.2.tar.xz/plugins/vlc-video/vlc-video-source.c -> obs-studio-26.1.0.tar.xz/plugins/vlc-video/vlc-video-source.c Changed
19
 
1
@@ -332,6 +332,8 @@
2
    VLC_META(media, cd, data_id, "album_artist", libvlc_meta_AlbumArtist)
3
    VLC_META(media, cd, data_id, "disc_number", libvlc_meta_DiscNumber)
4
    VLC_META(media, cd, data_id, "disc_total", libvlc_meta_DiscTotal)
5
+
6
+   libvlc_media_release_(media);
7
 #undef VLC_META
8
 }
9
 
10
@@ -554,7 +556,7 @@
11
        else
12
            dstr_copy(&test, b);
13
 
14
-       if (dstr_cmp(&test, ext) == 0) {
15
+       if (dstr_cmpi(&test, ext) == 0) {
16
            valid = true;
17
            break;
18
        }
19
obs-studio-26.0.2.tar.xz/plugins/win-capture/app-helpers.c -> obs-studio-26.1.0.tar.xz/plugins/win-capture/app-helpers.c Changed
25
 
1
@@ -2,8 +2,9 @@
2
 #include <stdio.h>
3
 #include "app-helpers.h"
4
 #include "nt-stuff.h"
5
+#include "util/base.h"
6
 
7
-WINADVAPI WINAPI ConvertSidToStringSidW(PSID sid, LPWSTR *str);
8
+WINADVAPI BOOL WINAPI ConvertSidToStringSidW(PSID sid, LPWSTR *str);
9
 
10
 bool is_app(HANDLE process)
11
 {
12
@@ -16,8 +17,10 @@
13
                           &ret, sizeof(ret),
14
                           &size_ret);
15
        if (!success) {
16
-           DWORD error = GetLastError();
17
-           int test = 0;
18
+           const DWORD error = GetLastError();
19
+           blog(LOG_ERROR,
20
+                "is_app GetTokenInformation failed: 0x%08lX",
21
+                error);
22
        }
23
 
24
        CloseHandle(token);
25
obs-studio-26.0.2.tar.xz/plugins/win-capture/data/locale/de-DE.ini -> obs-studio-26.1.0.tar.xz/plugins/win-capture/data/locale/de-DE.ini Changed
27
 
1
@@ -10,9 +10,9 @@
2
 WindowCapture.Priority.Class="Fenstertitel muss übereinstimmen, ansonsten Fenster des gleichen Typs finden"
3
 WindowCapture.Priority.Exe="Fenstertitel muss übereinstimmen, ansonsten Fenster des gleichen Programms finden"
4
 CaptureCursor="Mauszeiger aufnehmen"
5
-Compatibility="Multi‐Adapter‐Kompatibilität"
6
-ClientArea="Client‐Bereich"
7
-SLIFix="SLI‐/Crossfire‐Aufnahmemodus (langsam)"
8
+Compatibility="Multi-Adapter-Kompatibilität"
9
+ClientArea="Client-Bereich"
10
+SLIFix="SLI-/Crossfire-Aufnahmemodus (langsam)"
11
 AllowTransparency="Transparenz erlauben"
12
 Monitor="Bildschirm"
13
 PrimaryMonitor="Primärbildschirm"
14
@@ -20,9 +20,9 @@
15
 GameCapture.AnyFullscreen="Beliebige Vollbildanwendung erfassen"
16
 GameCapture.CaptureWindow="Bestimmtes Fenster erfassen"
17
 GameCapture.UseHotkey="Fenster im Vordergrund mit Hotkey erfassen"
18
-GameCapture.LimitFramerate="Aufnahme‐FPS limitieren"
19
-GameCapture.CaptureOverlays="Aufnahme von Drittanbieter‐Overlays (z. B. Steam)"
20
-GameCapture.AntiCheatHook="Anti‐Cheat‐Kompatibilitäts‐Hook verwenden"
21
+GameCapture.LimitFramerate="Aufnahme-FPS limitieren"
22
+GameCapture.CaptureOverlays="Drittanbieter-Overlays aufnehmen (z. B. Steam)"
23
+GameCapture.AntiCheatHook="Anti-Cheat-Kompatibilitäts-Hook verwenden"
24
 GameCapture.HotkeyStart="Fenster im Vordergrund erfassen"
25
 GameCapture.HotkeyStop="Erfassung deaktivieren"
26
 GameCapture.HookRate="Hook Rate"
27
obs-studio-26.0.2.tar.xz/plugins/win-capture/data/locale/el-GR.ini -> obs-studio-26.1.0.tar.xz/plugins/win-capture/data/locale/el-GR.ini Changed
22
 
1
@@ -1,6 +1,10 @@
2
 MonitorCapture="Καταγραφή Οθόνης"
3
 WindowCapture="Καταγραφή Παραθύρου"
4
 WindowCapture.Window="Παράθυρο"
5
+WindowCapture.Method="Μέθοδος Λήψης"
6
+WindowCapture.Method.Auto="Αυτόματο"
7
+WindowCapture.Method.BitBlt="BitBlt (για Windows 7 και μετά)"
8
+WindowCapture.Method.WindowsGraphicsCapture="Καταγραφή Γραφικών Windows (Windows 10 1903 και μετά)"
9
 WindowCapture.Priority="Προτεραιότητα Αντιστοίχισης Παραθύρων"
10
 WindowCapture.Priority.Title="Ο τίτλος παραθύρου πρέπει να ταιριάζει"
11
 WindowCapture.Priority.Class="Αντιστοίχιση τίτλου, αλλιώς εύρεση παραθύρου ίδιου τύπου"
12
@@ -20,5 +24,9 @@
13
 GameCapture.AntiCheatHook="Χρήση συμβατότητας για συστήματα anti-cheat"
14
 GameCapture.HotkeyStart="Καταγραφή παραθύρου στο προσκήνιο"
15
 GameCapture.HotkeyStop="Απενεργοποίηση καταγραφής"
16
+GameCapture.HookRate.Slow="Αργό"
17
+GameCapture.HookRate.Normal="Κανονικό (Προτείνεται)"
18
+GameCapture.HookRate.Fast="Γρήγορο"
19
+GameCapture.HookRate.Fastest="Γρηγορότερο"
20
 Mode="Τύπος"
21
 
22
obs-studio-26.0.2.tar.xz/plugins/win-capture/data/locale/es-ES.ini -> obs-studio-26.1.0.tar.xz/plugins/win-capture/data/locale/es-ES.ini Changed
44
 
1
@@ -1,5 +1,5 @@
2
 MonitorCapture="Captura de pantalla"
3
-WindowCapture="Capturar Ventana"
4
+WindowCapture="Captura de ventana"
5
 WindowCapture.Window="Ventana"
6
 WindowCapture.Method="Método de captura"
7
 WindowCapture.Method.Auto="Automático"
8
@@ -7,20 +7,20 @@
9
 WindowCapture.Method.WindowsGraphicsCapture="Windows Graphics Capture (Windows 10 1903 o superior)"
10
 WindowCapture.Priority="Prioridad de captura de ventana"
11
 WindowCapture.Priority.Title="El titulo de la ventana debe coincidir"
12
-WindowCapture.Priority.Class="Coincidir con el titulo, sino buscar ventana del mismo tipo"
13
-WindowCapture.Priority.Exe="Coincidir con el titulo, sino buscar ventana del mismo ejecutable"
14
+WindowCapture.Priority.Class="Coincidir con el título; si no, buscar ventana del mismo tipo"
15
+WindowCapture.Priority.Exe="Coincidir con el título; si no, buscar ventana del mismo ejecutable"
16
 CaptureCursor="Captura de Cursor"
17
-Compatibility="Compatibilidad multi adaptador"
18
+Compatibility="Compatibilidad multiadaptador"
19
 ClientArea="Área del cliente"
20
 SLIFix="Modo de captura SLI/Crossfire (lenta)"
21
 AllowTransparency="Permitir transparencia"
22
 Monitor="Pantalla"
23
 PrimaryMonitor="Monitor principal"
24
-GameCapture="Capturar Juego"
25
-GameCapture.AnyFullscreen="Capturar cualquier aplicación a pantalla completa"
26
+GameCapture="Captura de juego"
27
+GameCapture.AnyFullscreen="Capturar cualquier aplicación de pantalla completa"
28
 GameCapture.CaptureWindow="Capturar ventana específica"
29
 GameCapture.UseHotkey="Capturar ventana en primer plano con teclas de acceso rápido"
30
-GameCapture.LimitFramerate="Limitar velocidad de los fotogramas de la captura"
31
+GameCapture.LimitFramerate="Limitar la tasa de fotogramas de la captura"
32
 GameCapture.CaptureOverlays="Capturar capas de aplicaciones externas (tales como Steam)"
33
 GameCapture.AntiCheatHook="Utilice la compatibilidad anti-trampa"
34
 GameCapture.HotkeyStart="Captura ventana en primer plano"
35
@@ -28,7 +28,7 @@
36
 GameCapture.HookRate="Tasa de captura"
37
 GameCapture.HookRate.Slow="Lenta"
38
 GameCapture.HookRate.Normal="Normal (recomendado)"
39
-GameCapture.HookRate.Fast="Rápido"
40
+GameCapture.HookRate.Fast="Rápida"
41
 GameCapture.HookRate.Fastest="Más rápida"
42
 Mode="Modo"
43
 
44
obs-studio-26.0.2.tar.xz/plugins/win-capture/data/locale/fa-IR.ini -> obs-studio-26.1.0.tar.xz/plugins/win-capture/data/locale/fa-IR.ini Changed
33
 
1
@@ -1,8 +1,31 @@
2
 MonitorCapture="کپچر نمایش"
3
 WindowCapture="ویندوز کپچر"
4
 WindowCapture.Window="ویندوز"
5
+WindowCapture.Method="روش ضبط"
6
+WindowCapture.Method.Auto="خودکار"
7
+WindowCapture.Method.BitBlt="Bitblt (ویندوز 7 به بالا)"
8
+WindowCapture.Method.WindowsGraphicsCapture="ضبط گرافیکی ویندوز (ویندوز 10 1903 به بالا)"
9
+WindowCapture.Priority="اولویت بازی پنجره"
10
+WindowCapture.Priority.Title="عنوان پنجره باید مطابقت داشته باشد"
11
+WindowCapture.Priority.Class="عنوان را انتخاب کنید، در غیر این صورت پنجره ای از همان نوع پیدا کنید"
12
+WindowCapture.Priority.Exe="عنوان بازی را انتخاب کنید ، در غیر این صورت پنجره مشابه اجرایی را پیدا کنید"
13
+CaptureCursor="ضبط مکان نمای ماوس"
14
+Compatibility="سازگاری چند آداپتور"
15
+ClientArea="منطقه کلاینت"
16
+SLIFix="حالت ضبط SLI/Crossfire (آهسته)"
17
 AllowTransparency="اجازه شفافیت"
18
 Monitor="نمایش"
19
+PrimaryMonitor="نمایشگر اصلی"
20
+GameCapture="ضبط بازی"
21
+GameCapture.AnyFullscreen="هر برنامه تمام صفحه را ضبط کنید"
22
+GameCapture.CaptureWindow="پنجره خاصی را ضبط کنید"
23
+GameCapture.UseHotkey="با کلید میانبر پنجره پیش زمینه را ضبط کنید"
24
+GameCapture.LimitFramerate="محدود کردن نرخ فریم ضبط"
25
+GameCapture.CaptureOverlays="ضبط روی صفحه های های شخص ثالث (مانند استیم)"
26
+GameCapture.AntiCheatHook="از قلاب سازگاری ضد تقلب استفاده کنید"
27
+GameCapture.HotkeyStart="پنجره پیش زمینه را ضبط کنید"
28
+GameCapture.HotkeyStop="غیرفعال کردن ضبط"
29
+GameCapture.HookRate="نرخ هوک"
30
 GameCapture.HookRate.Slow="آهسته"
31
 GameCapture.HookRate.Normal="معمولی (پیشنهاد شده)"
32
 GameCapture.HookRate.Fast="سریع"
33
obs-studio-26.1.0.tar.xz/plugins/win-capture/data/locale/kab-KAB.ini Added
31
 
1
@@ -0,0 +1,29 @@
2
+MonitorCapture="Tuṭṭfa n ubeqqeḍ"
3
+WindowCapture="Tuṭṭfa n usfaylu"
4
+WindowCapture.Window="Asfaylu"
5
+WindowCapture.Method="Tarrayt n tuṭṭfa"
6
+WindowCapture.Method.Auto="Awurman"
7
+WindowCapture.Method.BitBlt="BitBlt (Windows 7 neɣ ugar)"
8
+WindowCapture.Method.WindowsGraphicsCapture="Windows Graphics Capture (Windows 10 1903 neɣ ugar)"
9
+WindowCapture.Priority.Title="Ilaq ad inmeɣri uzwel n usfaylu"
10
+WindowCapture.Priority.Class="Azwel inmeɣran, ma ulac af-d asfaylu ysɛan anaw kifkif"
11
+CaptureCursor="Ṭṭef taḥnaccaḍt"
12
+ClientArea="Taɣzut n umsaɣ"
13
+SLIFix="Askar n tuṭṭfa SLI/Crossfire (Ẓẓay)"
14
+AllowTransparency="Sireg tafrawant"
15
+Monitor="Beqqeḍ"
16
+PrimaryMonitor="Agdil agejdan"
17
+GameCapture="Tuṭṭfa n wurar"
18
+GameCapture.AnyFullscreen="Ṭṭef-d isnasen s ugdil aččuran"
19
+GameCapture.CaptureWindow="Ṭṭef-d asfaylu ulmis"
20
+GameCapture.UseHotkey="Ṭṭef-d usfaylu n uɣawas amezwaru s uegzum n unasiw"
21
+GameCapture.LimitFramerate="Eg talast i yikataren ara d-yettwaṭṭfen"
22
+GameCapture.HotkeyStart="Ṭṭef-d asfaylu n uɣawas amezwaru"
23
+GameCapture.HotkeyStop="Sens tuṭṭfa"
24
+GameCapture.HookRate="Arured n tuṭṭfa"
25
+GameCapture.HookRate.Slow="Ẓẓay"
26
+GameCapture.HookRate.Normal="Amagnu (yettwasemter)"
27
+GameCapture.HookRate.Fast="Arurad"
28
+GameCapture.HookRate.Fastest="Arurad maḍi"
29
+Mode="Askar"
30
+
31
obs-studio-26.0.2.tar.xz/plugins/win-capture/data/locale/pt-BR.ini -> obs-studio-26.1.0.tar.xz/plugins/win-capture/data/locale/pt-BR.ini Changed
26
 
1
@@ -1,18 +1,18 @@
2
 MonitorCapture="Captura de tela"
3
-WindowCapture="Captura de Janela"
4
+WindowCapture="Captura de janela"
5
 WindowCapture.Window="Janela"
6
-WindowCapture.Method="Método de Captura"
7
+WindowCapture.Method="Método de captura"
8
 WindowCapture.Method.Auto="Automático"
9
 WindowCapture.Method.BitBlt="BitBlt (Windows 7 ou superior)"
10
 WindowCapture.Method.WindowsGraphicsCapture="Windows Graphics Capture (Windows 10 1903 ou superior)"
11
-WindowCapture.Priority="Prioridade de Correspondência da Janela"
12
+WindowCapture.Priority="Prioridade de correspondência da janela"
13
 WindowCapture.Priority.Title="Título da janela deve combinar"
14
 WindowCapture.Priority.Class="Combinar título, caso contrário buscar janela do mesmo tipo"
15
 WindowCapture.Priority.Exe="Combinar título, caso contrário buscar janela do mesmo executável"
16
-CaptureCursor="Capturar o Cursor"
17
+CaptureCursor="Capturar o cursor"
18
 Compatibility="Compatibilidade com Multi Adaptador"
19
-ClientArea="Ignorar Bordas"
20
-SLIFix="Modo de Captura SLI/Crossfire (Lento)"
21
+ClientArea="Ignorar bordas"
22
+SLIFix="Modo de captura SLI/Crossfire (lento)"
23
 AllowTransparency="Permitir transparência"
24
 Monitor="Monitor"
25
 PrimaryMonitor="Monitor principal"
26
obs-studio-26.0.2.tar.xz/plugins/win-capture/data/locale/pt-PT.ini -> obs-studio-26.1.0.tar.xz/plugins/win-capture/data/locale/pt-PT.ini Changed
9
 
1
@@ -3,6 +3,7 @@
2
 WindowCapture.Window="Janela"
3
 WindowCapture.Method="Método de Captura"
4
 WindowCapture.Method.Auto="Automático"
5
+WindowCapture.Method.BitBlt="BitBlt (Windows 7 ou superior)"
6
 WindowCapture.Priority="Prioridade de emparelhamento de janela"
7
 WindowCapture.Priority.Title="O título da janela tem de corresponder"
8
 WindowCapture.Priority.Class="Corresponder título, caso contrário, encontrar janela do mesmo tipo"
9
obs-studio-26.0.2.tar.xz/plugins/win-capture/data/locale/ro-RO.ini -> obs-studio-26.1.0.tar.xz/plugins/win-capture/data/locale/ro-RO.ini Changed
23
 
1
@@ -1,17 +1,17 @@
2
 MonitorCapture="Captură de display"
3
 WindowCapture="Captură de fereastră"
4
 WindowCapture.Window="Fereastră"
5
-WindowCapture.Method="Metoda de captură"
6
-WindowCapture.Method.Auto="Automat"
7
+WindowCapture.Method="Metodă de captură"
8
+WindowCapture.Method.Auto="Automată"
9
 WindowCapture.Method.BitBlt="BitBlt (Windows 7 și versiunile ulterioare de Windows)"
10
-WindowCapture.Method.WindowsGraphicsCapture="Captură Windows Graphics (Windows 10 1903 și sus)"
11
+WindowCapture.Method.WindowsGraphicsCapture="Windows Graphics Capture (Windows 10 1903 și versiunile ulterioare)"
12
 WindowCapture.Priority="Prioritate de potrivire a ferestrelor"
13
 WindowCapture.Priority.Title="Titlul ferestrei trebuie să se potrivească"
14
 WindowCapture.Priority.Class="Titlul să se potrivească, altminteri găsește o fereastră de același tip"
15
 WindowCapture.Priority.Exe="Titlul să se potrivească, altminteri găsește o fereastră a aceluiași executabil"
16
 CaptureCursor="Capturează cursorul"
17
 Compatibility="Compatibilitate pentru multiadaptoare"
18
-ClientArea="Zona clientului"
19
+ClientArea="Zona de client"
20
 SLIFix="Mod de captură SLI/Crossfire (Lent)"
21
 AllowTransparency="Permite transparență"
22
 Monitor="Display"
23
obs-studio-26.0.2.tar.xz/plugins/win-capture/game-capture.c -> obs-studio-26.1.0.tar.xz/plugins/win-capture/game-capture.c Changed
34
 
1
@@ -273,9 +273,10 @@
2
 static inline HANDLE open_process(DWORD desired_access, bool inherit_handle,
3
                  DWORD process_id)
4
 {
5
-   static HANDLE(WINAPI * open_process_proc)(DWORD, BOOL, DWORD) = NULL;
6
+   typedef HANDLE(WINAPI * PFN_OpenProcess)(DWORD, BOOL, DWORD);
7
+   PFN_OpenProcess open_process_proc = NULL;
8
    if (!open_process_proc)
9
-       open_process_proc = get_obfuscated_func(
10
+       open_process_proc = (PFN_OpenProcess)get_obfuscated_func(
11
            kernel32(), "NuagUykjcxr", 0x1B694B59451ULL);
12
 
13
    return open_process_proc(desired_access, inherit_handle, process_id);
14
@@ -457,6 +458,9 @@
15
 static bool hotkey_start(void *data, obs_hotkey_pair_id id,
16
             obs_hotkey_t *hotkey, bool pressed)
17
 {
18
+   UNUSED_PARAMETER(id);
19
+   UNUSED_PARAMETER(hotkey);
20
+
21
    struct game_capture *gc = data;
22
 
23
    if (pressed && gc->config.mode == CAPTURE_MODE_HOTKEY) {
24
@@ -473,6 +477,9 @@
25
 static bool hotkey_stop(void *data, obs_hotkey_pair_id id, obs_hotkey_t *hotkey,
26
            bool pressed)
27
 {
28
+   UNUSED_PARAMETER(id);
29
+   UNUSED_PARAMETER(hotkey);
30
+
31
    struct game_capture *gc = data;
32
 
33
    if (pressed && gc->config.mode == CAPTURE_MODE_HOTKEY) {
34
obs-studio-26.0.2.tar.xz/plugins/win-capture/get-graphics-offsets/dxgi-offsets.cpp -> obs-studio-26.1.0.tar.xz/plugins/win-capture/get-graphics-offsets/dxgi-offsets.cpp Changed
20
 
1
@@ -102,7 +102,8 @@
2
        DestroyWindow(info.hwnd);
3
 }
4
 
5
-void get_dxgi_offsets(struct dxgi_offsets *offsets)
6
+void get_dxgi_offsets(struct dxgi_offsets *offsets,
7
+             struct dxgi_offsets2 *offsets2)
8
 {
9
    dxgi_info info = {};
10
    bool success = dxgi_init(info);
11
@@ -120,6 +121,8 @@
12
                vtable_offset(info.module, swap1, 22);
13
            swap1->Release();
14
        }
15
+
16
+       offsets2->release = vtable_offset(info.module, info.swap, 2);
17
    }
18
 
19
    dxgi_free(info);
20
obs-studio-26.0.2.tar.xz/plugins/win-capture/get-graphics-offsets/get-graphics-offsets.c -> obs-studio-26.1.0.tar.xz/plugins/win-capture/get-graphics-offsets/get-graphics-offsets.c Changed
26
 
1
@@ -8,6 +8,7 @@
2
    struct d3d8_offsets d3d8 = {0};
3
    struct d3d9_offsets d3d9 = {0};
4
    struct dxgi_offsets dxgi = {0};
5
+   struct dxgi_offsets2 dxgi2 = {0};
6
 
7
    WNDCLASSA wc = {0};
8
    wc.style = CS_OWNDC;
9
@@ -24,7 +25,7 @@
10
 
11
    get_d3d9_offsets(&d3d9);
12
    get_d3d8_offsets(&d3d8);
13
-   get_dxgi_offsets(&dxgi);
14
+   get_dxgi_offsets(&dxgi, &dxgi2);
15
 
16
    printf("[d3d8]\n");
17
    printf("present=0x%" PRIx32 "\n", d3d8.present);
18
@@ -38,6 +39,7 @@
19
    printf("present=0x%" PRIx32 "\n", dxgi.present);
20
    printf("present1=0x%" PRIx32 "\n", dxgi.present1);
21
    printf("resize=0x%" PRIx32 "\n", dxgi.resize);
22
+   printf("release=0x%" PRIx32 "\n", dxgi2.release);
23
 
24
    (void)argc;
25
    (void)argv;
26
obs-studio-26.0.2.tar.xz/plugins/win-capture/get-graphics-offsets/get-graphics-offsets.h -> obs-studio-26.1.0.tar.xz/plugins/win-capture/get-graphics-offsets/get-graphics-offsets.h Changed
11
 
1
@@ -21,7 +21,8 @@
2
    return (uint32_t)(vtable[offset] - (uintptr_t)module);
3
 }
4
 
5
-extern void get_dxgi_offsets(struct dxgi_offsets *offsets);
6
+extern void get_dxgi_offsets(struct dxgi_offsets *offsets,
7
+                struct dxgi_offsets2 *offsets2);
8
 extern void get_d3d9_offsets(struct d3d9_offsets *offsets);
9
 extern void get_d3d8_offsets(struct d3d8_offsets *offsets);
10
 
11
obs-studio-26.0.2.tar.xz/plugins/win-capture/graphics-hook-info.h -> obs-studio-26.1.0.tar.xz/plugins/win-capture/graphics-hook-info.h Changed
38
 
1
@@ -1,5 +1,6 @@
2
 #pragma once
3
 
4
+#include <assert.h>
5
 #include <stdint.h>
6
 #include <stdbool.h>
7
 #include <string.h>
8
@@ -46,6 +47,10 @@
9
    uint32_t present1;
10
 };
11
 
12
+struct dxgi_offsets2 {
13
+   uint32_t release;
14
+};
15
+
16
 struct ddraw_offsets {
17
    uint32_t surface_create;
18
    uint32_t surface_restore;
19
@@ -77,6 +82,7 @@
20
    struct d3d9_offsets d3d9;
21
    struct dxgi_offsets dxgi;
22
    struct ddraw_offsets ddraw;
23
+   struct dxgi_offsets2 dxgi2;
24
 };
25
 
26
 struct hook_info {
27
@@ -106,8 +112,9 @@
28
    /* hook addresses */
29
    struct graphics_offsets offsets;
30
 
31
-   uint32_t reserved[128];
32
+   uint32_t reserved[127];
33
 };
34
+static_assert(sizeof(struct hook_info) == 648, "ABI compatibility");
35
 
36
 #pragma pack(pop)
37
 
38
obs-studio-26.0.2.tar.xz/plugins/win-capture/graphics-hook-ver.h -> obs-studio-26.1.0.tar.xz/plugins/win-capture/graphics-hook-ver.h Changed
10
 
1
@@ -13,7 +13,7 @@
2
 
3
 #define HOOK_VER_MAJOR 1
4
 #define HOOK_VER_MINOR 2
5
-#define HOOK_VER_PATCH 2
6
+#define HOOK_VER_PATCH 3
7
 
8
 #define STRINGIFY(s) #s
9
 #define MAKE_VERSION_NAME(major, minor, patch) \
10
obs-studio-26.0.2.tar.xz/plugins/win-capture/graphics-hook/dxgi-capture.cpp -> obs-studio-26.1.0.tar.xz/plugins/win-capture/graphics-hook/dxgi-capture.cpp Changed
76
 
1
@@ -10,6 +10,7 @@
2
 #include <d3d12.h>
3
 #endif
4
 
5
+typedef ULONG(STDMETHODCALLTYPE *release_t)(IUnknown *);
6
 typedef HRESULT(STDMETHODCALLTYPE *resize_buffers_t)(IDXGISwapChain *, UINT,
7
                             UINT, UINT, DXGI_FORMAT,
8
                             UINT);
9
@@ -17,6 +18,7 @@
10
 typedef HRESULT(STDMETHODCALLTYPE *present1_t)(IDXGISwapChain1 *, UINT, UINT,
11
                           const DXGI_PRESENT_PARAMETERS *);
12
 
13
+static struct func_hook release;
14
 static struct func_hook resize_buffers;
15
 static struct func_hook present;
16
 static struct func_hook present1;
17
@@ -80,6 +82,23 @@
18
    return false;
19
 }
20
 
21
+static ULONG STDMETHODCALLTYPE hook_release(IUnknown *unknown)
22
+{
23
+   unhook(&release);
24
+   release_t call = (release_t)release.call_addr;
25
+   ULONG refs = call(unknown);
26
+   rehook(&release);
27
+
28
+   if (unknown == data.swap && refs == 0) {
29
+       data.free();
30
+       data.swap = nullptr;
31
+       data.free = nullptr;
32
+       data.capture = nullptr;
33
+   }
34
+
35
+   return refs;
36
+}
37
+
38
 static bool resize_buffers_called = false;
39
 
40
 static HRESULT STDMETHODCALLTYPE hook_resize_buffers(IDXGISwapChain *swap,
41
@@ -223,6 +242,7 @@
42
    void *present_addr;
43
    void *resize_addr;
44
    void *present1_addr = nullptr;
45
+   void *release_addr = nullptr;
46
 
47
    if (!dxgi_module) {
48
        return false;
49
@@ -237,6 +257,9 @@
50
    if (global_hook_info->offsets.dxgi.present1)
51
        present1_addr = get_offset_addr(
52
            dxgi_module, global_hook_info->offsets.dxgi.present1);
53
+   if (global_hook_info->offsets.dxgi2.release)
54
+       release_addr = get_offset_addr(
55
+           dxgi_module, global_hook_info->offsets.dxgi2.release);
56
 
57
    hook_init(&present, present_addr, (void *)hook_present,
58
          "IDXGISwapChain::Present");
59
@@ -245,11 +268,16 @@
60
    if (present1_addr)
61
        hook_init(&present1, present1_addr, (void *)hook_present1,
62
              "IDXGISwapChain1::Present1");
63
+   if (release_addr)
64
+       hook_init(&release, release_addr, (void *)hook_release,
65
+             "IDXGISwapChain::Release");
66
 
67
    rehook(&resize_buffers);
68
    rehook(&present);
69
    if (present1_addr)
70
        rehook(&present1);
71
+   if (release_addr)
72
+       rehook(&release);
73
 
74
    hlog("Hooked DXGI");
75
    return true;
76
obs-studio-26.0.2.tar.xz/plugins/win-capture/graphics-hook/vulkan-capture.c -> obs-studio-26.1.0.tar.xz/plugins/win-capture/graphics-hook/vulkan-capture.c Changed
48
 
1
@@ -80,6 +80,8 @@
2
 struct vk_inst_data {
3
    struct vk_obj_node node;
4
 
5
+   VkInstance instance;
6
+
7
    bool valid;
8
 
9
    struct vk_inst_funcs funcs;
10
@@ -489,20 +491,22 @@
11
    return idata;
12
 }
13
 
14
-static void init_inst_data(struct vk_inst_data *data, VkInstance inst)
15
+static void init_inst_data(struct vk_inst_data *idata, VkInstance instance)
16
 {
17
-   add_obj_data(&instances, (uint64_t)GET_LDT(inst), data);
18
+   add_obj_data(&instances, (uint64_t)GET_LDT(instance), idata);
19
+   idata->instance = instance;
20
 }
21
 
22
-static struct vk_inst_data *get_inst_data(VkInstance inst)
23
+static struct vk_inst_data *get_inst_data(VkInstance instance)
24
 {
25
    return (struct vk_inst_data *)get_obj_data(&instances,
26
-                          (uint64_t)GET_LDT(inst));
27
+                          (uint64_t)GET_LDT(instance));
28
 }
29
 
30
-static struct vk_inst_funcs *get_inst_funcs(VkInstance inst)
31
+static struct vk_inst_funcs *get_inst_funcs(VkInstance instance)
32
 {
33
-   struct vk_inst_data *idata = (struct vk_inst_data *)get_inst_data(inst);
34
+   struct vk_inst_data *idata =
35
+       (struct vk_inst_data *)get_inst_data(instance);
36
    return &idata->funcs;
37
 }
38
 
39
@@ -1439,7 +1443,7 @@
40
    /* create device and initialize hook data                   */
41
 
42
    PFN_vkCreateDevice createFunc =
43
-       (PFN_vkCreateDevice)gipa(VK_NULL_HANDLE, "vkCreateDevice");
44
+       (PFN_vkCreateDevice)gipa(idata->instance, "vkCreateDevice");
45
 
46
    ret = createFunc(phy_device, info, ac, p_device);
47
    if (ret != VK_SUCCESS) {
48
obs-studio-26.0.2.tar.xz/plugins/win-capture/inject-library.c -> obs-studio-26.1.0.tar.xz/plugins/win-capture/inject-library.c Changed
59
 
1
@@ -37,16 +37,16 @@
2
    virtual_free_ex_t virtual_free_ex;
3
    FARPROC load_library_w;
4
 
5
-   create_remote_thread =
6
-       get_obfuscated_func(kernel32, create_remote_thread_obf, obf1);
7
-   write_process_memory =
8
-       get_obfuscated_func(kernel32, write_process_memory_obf, obf2);
9
-   virtual_alloc_ex =
10
-       get_obfuscated_func(kernel32, virtual_alloc_ex_obf, obf3);
11
-   virtual_free_ex =
12
-       get_obfuscated_func(kernel32, virtual_free_ex_obf, obf4);
13
-   load_library_w =
14
-       get_obfuscated_func(kernel32, load_library_w_obf, obf5);
15
+   create_remote_thread = (create_remote_thread_t)get_obfuscated_func(
16
+       kernel32, create_remote_thread_obf, obf1);
17
+   write_process_memory = (write_process_memory_t)get_obfuscated_func(
18
+       kernel32, write_process_memory_obf, obf2);
19
+   virtual_alloc_ex = (virtual_alloc_ex_t)get_obfuscated_func(
20
+       kernel32, virtual_alloc_ex_obf, obf3);
21
+   virtual_free_ex = (virtual_free_ex_t)get_obfuscated_func(
22
+       kernel32, virtual_free_ex_obf, obf4);
23
+   load_library_w = (FARPROC)get_obfuscated_func(kernel32,
24
+                             load_library_w_obf, obf5);
25
 
26
    /* -------------------------------- */
27
 
28
@@ -108,7 +108,7 @@
29
    HMODULE user32 = GetModuleHandleW(L"USER32");
30
    set_windows_hook_ex_t set_windows_hook_ex;
31
    HMODULE lib = LoadLibraryW(dll);
32
-   LPVOID proc;
33
+   HOOKPROC proc;
34
    HHOOK hook;
35
    size_t i;
36
 
37
@@ -117,17 +117,17 @@
38
    }
39
 
40
 #ifdef _WIN64
41
-   proc = GetProcAddress(lib, "dummy_debug_proc");
42
+   proc = (HOOKPROC)GetProcAddress(lib, "dummy_debug_proc");
43
 #else
44
-   proc = GetProcAddress(lib, "_dummy_debug_proc@12");
45
+   proc = (HOOKPROC)GetProcAddress(lib, "_dummy_debug_proc@12");
46
 #endif
47
 
48
    if (!proc) {
49
        return INJECT_ERROR_UNLIKELY_FAIL;
50
    }
51
 
52
-   set_windows_hook_ex =
53
-       get_obfuscated_func(user32, set_windows_hook_ex_obf, obf1);
54
+   set_windows_hook_ex = (set_windows_hook_ex_t)get_obfuscated_func(
55
+       user32, set_windows_hook_ex_obf, obf1);
56
 
57
    hook = set_windows_hook_ex(WH_GETMESSAGE, proc, lib, thread_id);
58
    if (!hook) {
59
obs-studio-26.0.2.tar.xz/plugins/win-capture/load-graphics-offsets.c -> obs-studio-26.1.0.tar.xz/plugins/win-capture/load-graphics-offsets.c Changed
57
 
1
@@ -40,6 +40,8 @@
2
        (uint32_t)config_get_uint(config, "dxgi", "present1");
3
    offsets->dxgi.resize =
4
        (uint32_t)config_get_uint(config, "dxgi", "resize");
5
+   offsets->dxgi2.release =
6
+       (uint32_t)config_get_uint(config, "dxgi", "release");
7
 
8
    config_close(config);
9
    return true;
10
@@ -154,11 +156,12 @@
11
    return !ver_mismatch;
12
 }
13
 
14
-bool load_graphics_offsets(bool is32bit, const char *config_path)
15
+bool load_graphics_offsets(bool is32bit, bool use_hook_address_cache,
16
+              const char *config_path)
17
 {
18
    char *offset_exe_path = NULL;
19
-   struct dstr offset_exe = {0};
20
    struct dstr config_ini = {0};
21
+   struct dstr offset_exe = {0};
22
    struct dstr str = {0};
23
    os_process_pipe_t *pp;
24
    bool success = false;
25
@@ -198,15 +201,14 @@
26
        goto error;
27
    }
28
 
29
-   // uncomment this if you enable USE_HOOK_ADDRESS_CACHE
30
-   /*
31
-   dstr_copy(&config_ini, config_path);
32
-   dstr_cat(&config_ini, is32bit ? "32.ini" : "64.ini");
33
+   if (use_hook_address_cache) {
34
+       dstr_copy(&config_ini, config_path);
35
+       dstr_cat(&config_ini, is32bit ? "32.ini" : "64.ini");
36
 
37
-   os_quick_write_utf8_file_safe(config_ini.array, str.array, str.len, false,
38
-           "tmp", NULL);
39
-   dstr_free(&config_ini);
40
-*/
41
+       os_quick_write_utf8_file_safe(config_ini.array, str.array,
42
+                         str.len, false, "tmp", NULL);
43
+       dstr_free(&config_ini);
44
+   }
45
 
46
    success = load_offsets_from_string(is32bit ? &offsets32 : &offsets64,
47
                       str.array);
48
@@ -233,7 +235,7 @@
49
    success = load_offsets_from_file(is32bit ? &offsets32 : &offsets64,
50
                     config_ini.array);
51
    if (!success)
52
-       success = load_graphics_offsets(is32bit, config_path);
53
+       success = load_graphics_offsets(is32bit, true, config_path);
54
 
55
    dstr_free(&config_ini);
56
    return success;
57
obs-studio-26.0.2.tar.xz/plugins/win-capture/plugin-main.c -> obs-studio-26.1.0.tar.xz/plugins/win-capture/plugin-main.c Changed
40
 
1
@@ -19,7 +19,8 @@
2
 
3
 extern bool cached_versions_match(void);
4
 extern bool load_cached_graphics_offsets(bool is32bit, const char *config_path);
5
-extern bool load_graphics_offsets(bool is32bit, const char *config_path);
6
+extern bool load_graphics_offsets(bool is32bit, bool use_hook_address_cache,
7
+                 const char *config_path);
8
 
9
 /* temporary, will eventually be erased once we figure out how to create both
10
  * 32bit and 64bit versions of the helpers/hook */
11
@@ -29,22 +30,22 @@
12
 #define IS32BIT true
13
 #endif
14
 
15
-/* note, need to enable cache writing in load-graphics-offsets.c if you turn
16
- * this back on*/
17
-#define USE_HOOK_ADDRESS_CACHE false
18
+static const bool use_hook_address_cache = false;
19
 
20
 static DWORD WINAPI init_hooks(LPVOID param)
21
 {
22
    char *config_path = param;
23
 
24
-   if (USE_HOOK_ADDRESS_CACHE && cached_versions_match() &&
25
+   if (use_hook_address_cache && cached_versions_match() &&
26
        load_cached_graphics_offsets(IS32BIT, config_path)) {
27
 
28
        load_cached_graphics_offsets(!IS32BIT, config_path);
29
        obs_register_source(&game_capture_info);
30
 
31
-   } else if (load_graphics_offsets(IS32BIT, config_path)) {
32
-       load_graphics_offsets(!IS32BIT, config_path);
33
+   } else if (load_graphics_offsets(IS32BIT, use_hook_address_cache,
34
+                    config_path)) {
35
+       load_graphics_offsets(!IS32BIT, use_hook_address_cache,
36
+                     config_path);
37
    }
38
 
39
    bfree(config_path);
40
obs-studio-26.0.2.tar.xz/plugins/win-capture/window-capture.c -> obs-studio-26.1.0.tar.xz/plugins/win-capture/window-capture.c Changed
91
 
1
@@ -26,19 +26,33 @@
2
 
3
 #define WC_CHECK_TIMER 1.0f
4
 
5
+typedef BOOL (*PFN_winrt_capture_supported)();
6
+typedef BOOL (*PFN_winrt_capture_cursor_toggle_supported)();
7
+typedef struct winrt_capture *(*PFN_winrt_capture_init)(BOOL cursor,
8
+                           HWND window,
9
+                           BOOL client_area);
10
+typedef void (*PFN_winrt_capture_free)(struct winrt_capture *capture);
11
+
12
+typedef BOOL (*PFN_winrt_capture_active)(const struct winrt_capture *capture);
13
+typedef void (*PFN_winrt_capture_show_cursor)(struct winrt_capture *capture,
14
+                         BOOL visible);
15
+typedef void (*PFN_winrt_capture_render)(struct winrt_capture *capture,
16
+                    gs_effect_t *effect);
17
+typedef uint32_t (*PFN_winrt_capture_width)(const struct winrt_capture *capture);
18
+typedef uint32_t (*PFN_winrt_capture_height)(
19
+   const struct winrt_capture *capture);
20
+
21
 struct winrt_exports {
22
-   BOOL *(*winrt_capture_supported)();
23
-   BOOL *(*winrt_capture_cursor_toggle_supported)();
24
-   struct winrt_capture *(*winrt_capture_init)(BOOL cursor, HWND window,
25
-                           BOOL client_area);
26
-   void (*winrt_capture_free)(struct winrt_capture *capture);
27
-   BOOL *(*winrt_capture_active)(const struct winrt_capture *capture);
28
-   void (*winrt_capture_show_cursor)(struct winrt_capture *capture,
29
-                     BOOL visible);
30
-   void (*winrt_capture_render)(struct winrt_capture *capture,
31
-                    gs_effect_t *effect);
32
-   uint32_t (*winrt_capture_width)(const struct winrt_capture *capture);
33
-   uint32_t (*winrt_capture_height)(const struct winrt_capture *capture);
34
+   PFN_winrt_capture_supported winrt_capture_supported;
35
+   PFN_winrt_capture_cursor_toggle_supported
36
+       winrt_capture_cursor_toggle_supported;
37
+   PFN_winrt_capture_init winrt_capture_init;
38
+   PFN_winrt_capture_free winrt_capture_free;
39
+   PFN_winrt_capture_active winrt_capture_active;
40
+   PFN_winrt_capture_show_cursor winrt_capture_show_cursor;
41
+   PFN_winrt_capture_render winrt_capture_render;
42
+   PFN_winrt_capture_width winrt_capture_width;
43
+   PFN_winrt_capture_height winrt_capture_height;
44
 };
45
 
46
 enum window_capture_method {
47
@@ -191,16 +205,16 @@
48
    return TEXT_WINDOW_CAPTURE;
49
 }
50
 
51
-#define WINRT_IMPORT(func)                                        \
52
-   do {                                                      \
53
-       exports->func = os_dlsym(module, #func);          \
54
-       if (!exports->func) {                             \
55
-           success = false;                          \
56
-           blog(LOG_ERROR,                           \
57
-                "Could not load function '%s' from " \
58
-                "module '%s'",                       \
59
-                #func, module_name);                 \
60
-       }                                                 \
61
+#define WINRT_IMPORT(func)                                           \
62
+   do {                                                         \
63
+       exports->func = (PFN_##func)os_dlsym(module, #func); \
64
+       if (!exports->func) {                                \
65
+           success = false;                             \
66
+           blog(LOG_ERROR,                              \
67
+                "Could not load function '%s' from "    \
68
+                "module '%s'",                          \
69
+                #func, module_name);                    \
70
+       }                                                    \
71
    } while (false)
72
 
73
 static bool load_winrt_imports(struct winrt_exports *exports, void *module,
74
@@ -234,7 +248,6 @@
75
 
76
    if (uses_d3d11) {
77
        static const char *const module = "libobs-winrt";
78
-       bool use_winrt_capture = false;
79
        wc->winrt_module = os_dlopen(module);
80
        if (wc->winrt_module &&
81
            load_winrt_imports(&wc->exports, wc->winrt_module,
82
@@ -343,6 +356,8 @@
83
 static bool wc_capture_method_changed(obs_properties_t *props,
84
                      obs_property_t *p, obs_data_t *settings)
85
 {
86
+   UNUSED_PARAMETER(p);
87
+
88
    struct window_capture *wc = obs_properties_get_param(props);
89
    update_settings(wc, settings);
90
 
91
obs-studio-26.0.2.tar.xz/plugins/win-capture/window-helpers.c -> obs-studio-26.1.0.tar.xz/plugins/win-capture/window-helpers.c Changed
14
 
1
@@ -58,9 +58,10 @@
2
 static inline HANDLE open_process(DWORD desired_access, bool inherit_handle,
3
                  DWORD process_id)
4
 {
5
-   static HANDLE(WINAPI * open_process_proc)(DWORD, BOOL, DWORD) = NULL;
6
+   typedef HANDLE(WINAPI * PFN_OpenProcess)(DWORD, BOOL, DWORD);
7
+   static PFN_OpenProcess open_process_proc = NULL;
8
    if (!open_process_proc)
9
-       open_process_proc = get_obfuscated_func(
10
+       open_process_proc = (PFN_OpenProcess)get_obfuscated_func(
11
            kernel32(), "B}caZyah`~q", 0x2D5BEBAF6DDULL);
12
 
13
    return open_process_proc(desired_access, inherit_handle, process_id);
14
obs-studio-26.0.2.tar.xz/plugins/win-dshow/data/locale/de-DE.ini -> obs-studio-26.1.0.tar.xz/plugins/win-dshow/data/locale/de-DE.ini Changed
38
 
1
@@ -9,7 +9,7 @@
2
 ConfigureAudio="Audio konfigurieren"
3
 ConfigureVideo="Video konfigurieren"
4
 ConfigureCrossbar="Crossbar konfigurieren"
5
-ResFPSType="Auflösung/FPS‐Typ"
6
+ResFPSType="Auflösung/FPS-Typ"
7
 ResFPSType.Custom="Benutzerdefiniert"
8
 ResFPSType.DevPreferred="Gerätestandard"
9
 FPS.Matching="An Ausgabe angleichen"
10
@@ -20,21 +20,21 @@
11
 VideoFormat.Unknown="Unbekannt (%1)"
12
 AudioOutputMode="Audioausgabemodus"
13
 AudioOutputMode.Capture="Nur Audio aufnehmen"
14
-AudioOutputMode.DirectSound="Desktop‐Audioausgabe (DirectSound)"
15
-AudioOutputMode.WaveOut="Desktop‐Audioausgabe (WaveOut)"
16
+AudioOutputMode.DirectSound="Desktop-Audioausgabe (DirectSound)"
17
+AudioOutputMode.WaveOut="Desktop-Audioausgabe (WaveOut)"
18
 UseCustomAudioDevice="Benutzerdefiniertes Audiogerät verwenden"
19
 AudioDevice="Audiogerät"
20
 Buffering="Pufferung"
21
-Buffering.ToolTip="Wenn aktiviert, werden die Video‐/Audiodaten gepuffert, um die möglichst flüssigste\nund genaueste Wiedergabe auf Kosten von erhöhter Verzögerung zu gewährleisten.\nWenn eine Capture‐Card‐Pufferung benutzt wird, ist empfohlen, die Karte und\nOBS Studio auf die gleiche FPS‐Anzahl zu setzen, um die besten Ergebnisse zu erzielen.\n\nWenn deaktiviert, wird die niedrigste Verzögerung für die Wiedergabe\nauf Kosten der Framewiedergabegenauigkeit gewährleistet.\nDies ist ideal für Webcams oder wenn Sie das Vorschaufenster des Programms\nbenutzen wollen, um z. B. an einer Spielekonsole zu spielen.\n\nDie automatische Erkennung (Standard) ist abhängig davon,\nob das Gerät Verzögerungen hat, deaktiviert bzw. aktiviert."
22
+Buffering.ToolTip="Wenn aktiviert, werden die Video-/Audiodaten gepuffert, um die möglichst flüssigste\nund genaueste Wiedergabe auf Kosten von erhöhter Verzögerung zu gewährleisten.\nWenn eine Capture-Card-Pufferung benutzt wird, ist empfohlen, die Karte und\nOBS Studio auf die gleiche FPS-Anzahl zu setzen, um die besten Ergebnisse zu erzielen.\n\nWenn deaktiviert, wird die niedrigste Verzögerung für die Wiedergabe\nauf Kosten der Framewiedergabegenauigkeit gewährleistet.\nDies ist ideal für Webcams oder wenn Sie das Vorschaufenster des Programms\nbenutzen wollen, um z. B. an einer Spielekonsole zu spielen.\n\nDie automatische Erkennung (Standard) ist abhängig davon,\nob das Gerät Verzögerungen hat, deaktiviert bzw. aktiviert."
23
 Buffering.AutoDetect="Automatisch erkennen"
24
 Buffering.Enable="Aktivieren"
25
 Buffering.Disable="Deaktivieren"
26
 Activate="Aktivieren"
27
 Deactivate="Deaktivieren"
28
 FlipVertically="Vertikal spiegeln"
29
-DeactivateWhenNotShowing="Deaktivieren, wenn die Quelle nicht angezeigt wird"
30
+DeactivateWhenNotShowing="Deaktivieren, wenn Quelle nicht gezeigt"
31
 
32
 Bitrate="Bitrate"
33
-Encoder.C985="AVerMedia‐H.264‐Encoder (c985)"
34
-Encoder.C353="AVerMedia‐H.264‐Encoder"
35
+Encoder.C985="AVerMedia-H.264-Encoder (c985)"
36
+Encoder.C353="AVerMedia-H.264-Encoder"
37
 
38
obs-studio-26.0.2.tar.xz/plugins/win-dshow/data/locale/el-GR.ini -> obs-studio-26.1.0.tar.xz/plugins/win-dshow/data/locale/el-GR.ini Changed
11
 
1
@@ -1,6 +1,9 @@
2
 VideoCaptureDevice="Συσκευή Λήψης Βίντεο"
3
 Device="Συσκευή"
4
+ColorSpace="Χώρος Χρωμάτων"
5
 ColorSpace.Default="Προεπιλογή"
6
+ColorRange="Εύρος Χρωμάτων"
7
+ColorRange.Default="Προεπιλογή"
8
 ColorRange.Partial="Μερικό"
9
 ColorRange.Full="Πλήρες"
10
 ConfigureAudio="Ρύθμιση Ήχου"
11
obs-studio-26.0.2.tar.xz/plugins/win-dshow/data/locale/fa-IR.ini -> obs-studio-26.1.0.tar.xz/plugins/win-dshow/data/locale/fa-IR.ini Changed
41
 
1
@@ -1,5 +1,32 @@
2
+VideoCaptureDevice="دستگاه ضبط ویدئویی"
3
+Device="دستگاه"
4
+ColorSpace="فضای رنگی"
5
 ColorSpace.Default="پیش فرض"
6
+ColorRange="محدوده رنگ"
7
+ColorRange.Default="پیشفرض"
8
+ColorRange.Partial="جزئی"
9
 ColorRange.Full="کامل"
10
+ConfigureAudio="پیکربندی صدا"
11
+ConfigureVideo="پیکربندی ویدئو"
12
+ConfigureCrossbar="کراس نوار را پیکربندی کنید"
13
+ResFPSType="وضوح/نوع فریم در ثانیه"
14
+ResFPSType.Custom="سفارشی"
15
+ResFPSType.DevPreferred="دستگاه پیش فرض"
16
+FPS.Matching="مطابق با خروجی فریم"
17
+FPS.Highest="بالاترین فریم"
18
+Resolution="رزولوشن"
19
+VideoFormat="فرمت ویدئو"
20
+VideoFormat.Any="همه"
21
+VideoFormat.Unknown="نامشخص (%1)"
22
+AudioOutputMode="حالت خروجی صدا"
23
+AudioOutputMode.Capture="فقط ضبط صدا"
24
+AudioOutputMode.DirectSound="صدای دسکتاپ خروجی (صدای مستقیم)"
25
+AudioOutputMode.WaveOut="خروجی صدای دسک تاپ (موج بیرون)"
26
+UseCustomAudioDevice="استفاده از دستگاه صوتی سفارشی"
27
+AudioDevice="دستگاه صوتی"
28
+Buffering="بافر کردن"
29
+Buffering.ToolTip="هنگامی که فعال است، داده های ویدیویی/صوتی را برای اطمینان از روانترین و\nنادرست ترین پخش ممکن، با هزینه افزایش تأخیر، بافر می کند. هنگام استفاده از \n بافر با کارت ضبط ویدیو، توصیه می شود کارت و \n برنامه را در همان فریم تنظیم کنید تا بهترین نتیجه حاصل شود.\n\nهنگام غیرفعال شدن، کمترین زمان تأخیر را تضمین می کند، اما با هزینه فریم برای \n دقت پخش. این برای دوربینهای چهره ایده آل است، یا هنگامی که می خواهید از پنجره پیش نمایش برنامه\n برای پخش کنسول استفاده کنید.\n\n تشخیص خودکار (پیش فرض) آن را تنظیم می کند تا در صورت تأخیر دستگاه فعال شود و غیرفعال میشود \n اگر تأخیری نباشد."
30
+Buffering.AutoDetect="تشخیص خودکار"
31
 Buffering.Enable="فعال کردن"
32
 Buffering.Disable="غیرفعال کردن"
33
 Activate="فعال شده"
34
@@ -8,4 +35,6 @@
35
 DeactivateWhenNotShowing="غیر فعال کردن زمانی که نمایش داده نشود"
36
 
37
 Bitrate="نرخ بیت"
38
+Encoder.C985="رمزگذار AVerMedia H.264 (c985)"
39
+Encoder.C353="رمزگذار AVerرسانه H.264"
40
 
41
obs-studio-26.1.0.tar.xz/plugins/win-dshow/data/locale/kab-KAB.ini Added
37
 
1
@@ -0,0 +1,35 @@
2
+VideoCaptureDevice="Ibenk n tuṭṭfa n uvidyu"
3
+Device="Ibenk"
4
+ColorSpace="Tallunt n yini"
5
+ColorSpace.Default="Amezwar"
6
+ColorRange="Tagrumma n yini"
7
+ColorRange.Default="Amezwar"
8
+ColorRange.Partial="Abruyan"
9
+ColorRange.Full="Ummid"
10
+ConfigureAudio="Swel ameslaw"
11
+ConfigureVideo="Swel avidyu"
12
+ConfigureCrossbar="Swel afeggag n udrurem"
13
+ResFPSType="Anaw n tbadut/FPS"
14
+ResFPSType.Custom="Yugen"
15
+ResFPSType.DevPreferred="Iɣewwaren n lexṣas n yibenk"
16
+Resolution="Tabadut"
17
+VideoFormat="Amasal n uvidyu"
18
+VideoFormat.Unknown="Arussin (%1)"
19
+AudioOutputMode="Askar n tufγa ameslaw"
20
+AudioOutputMode.Capture="Ṭṭef-d kan ameslaw"
21
+AudioOutputMode.DirectSound="Tuffɣa tameslawt n tnarit (DirectSound)"
22
+AudioOutputMode.WaveOut="Tuffɣa tameslawt n tnarit (WaveOut)"
23
+UseCustomAudioDevice="Seqdec ibenk yugnen n umeslaw"
24
+AudioDevice="Ibenk n umeslaw"
25
+Buffering="Ajmaɛ di tkatut n uḥraz"
26
+Buffering.AutoDetect="Tifin tawurmant"
27
+Buffering.Enable="Sermed"
28
+Buffering.Disable="Sens"
29
+Activate="Sermed"
30
+Deactivate="Sens"
31
+DeactivateWhenNotShowing="Sens ma ur yettwabeqqeḍ ara"
32
+
33
+Bitrate="Aktum"
34
+Encoder.C985="Asettengal AVerMedia H.264 (c985)"
35
+Encoder.C353="Asettengal AVerMedia H.264"
36
+
37
obs-studio-26.0.2.tar.xz/plugins/win-dshow/data/locale/pt-BR.ini -> obs-studio-26.1.0.tar.xz/plugins/win-dshow/data/locale/pt-BR.ini Changed
43
 
1
@@ -1,4 +1,4 @@
2
-VideoCaptureDevice="Dispositivo de Captura de Vídeo"
3
+VideoCaptureDevice="Dispositivo de captura de vídeo"
4
 Device="Dispositivo"
5
 ColorSpace="Espaço de cor"
6
 ColorSpace.Default="Padrão"
7
@@ -7,26 +7,26 @@
8
 ColorRange.Partial="Parcial"
9
 ColorRange.Full="Completo"
10
 ConfigureAudio="Configurar Áudio"
11
-ConfigureVideo="Configurar Vídeo"
12
-ConfigureCrossbar="Configurar Crossbar"
13
-ResFPSType="Tipo de Resolução/FPS"
14
+ConfigureVideo="Configurar vídeo"
15
+ConfigureCrossbar="Configurar crossbar"
16
+ResFPSType="Tipo de resolução/FPS"
17
 ResFPSType.Custom="Personalizado"
18
-ResFPSType.DevPreferred="Padrão do Dispositivo"
19
-FPS.Matching="Igualar FPS de Saída"
20
+ResFPSType.DevPreferred="Padrão do dispositivo"
21
+FPS.Matching="Igualar FPS de saída"
22
 FPS.Highest="Maior FPS possível"
23
 Resolution="Resolução"
24
-VideoFormat="Formato de Vídeo"
25
+VideoFormat="Formato de vídeo"
26
 VideoFormat.Any="Qualquer"
27
 VideoFormat.Unknown="Desconhecido (%1)"
28
 AudioOutputMode="Modo da saída de Audio"
29
 AudioOutputMode.Capture="Capturar apenas o áudio"
30
-AudioOutputMode.DirectSound="Saída de áudio de ambiente de trabalho (DirectSound)"
31
-AudioOutputMode.WaveOut="Saída de áudio do ambiente de trabalho (WaveOut)"
32
+AudioOutputMode.DirectSound="Saída de áudio do desktop (DirectSound)"
33
+AudioOutputMode.WaveOut="Saída de áudio do desktop (WaveOut)"
34
 UseCustomAudioDevice="Utilizar dispositivo de áudio personalizado"
35
 AudioDevice="Dispositivo de Áudio"
36
 Buffering="Buffering"
37
 Buffering.ToolTip="Quando habilitado, acumula os dados de vídeo/áudio necessarios para garantir a reprodução mais lisa e \nprecisa possível, mas à custa de uma maior latência. Quando utilizado\ncom uma placa de captura de vídeo, é recomendável configurar a placa e o\nprograma para a mesma taxa de quadros para melhores resultados.\n\nQuando desativado, garante a menor latência de reprodução, mas à custa de precisão na reprodução\ndos quadros. Isto é ideal para Webcams ou quando você deseja usar a janela de visualização do programa\n para jogos de console.\n\nDetecção Automática (padrão) habilita o acumulo de dados se o dispositivo tiver atraso e desativa\nse não tem nenhum atraso."
38
-Buffering.AutoDetect="Detecção Automática"
39
+Buffering.AutoDetect="Detectar automaticamente"
40
 Buffering.Enable="Ativado"
41
 Buffering.Disable="Desativado"
42
 Activate="Ativar"
43
obs-studio-26.0.2.tar.xz/plugins/win-dshow/data/locale/sv-SE.ini -> obs-studio-26.1.0.tar.xz/plugins/win-dshow/data/locale/sv-SE.ini Changed
10
 
1
@@ -25,7 +25,7 @@
2
 UseCustomAudioDevice="Använd anpassad ljudenhet"
3
 AudioDevice="Ljudenhet"
4
 Buffering="Buffrar"
5
-Buffering.ToolTip="Aktiverad: buffrar data för video/ljud för att försäkra den mest jämna \n och träffsäkra uppspelningen som möjligt, men med mer latens. När buffrandet används med ett capture card är det rekommenderat att sätta kortet och programmet till till samma framerate för optimalt resultat.\n\nAvaktiverad: garanterar lägsta möjliga uppspelningslatens, men på bekostnad av träffsäkerheten för \nuppspelningen av bildrutor. Det här är idealt för facecams, eller när du vill använda programmets förhandsvisningsfönster\nför att spela på en konsol.\n\nUpptäck automatiskt (standard): aktiverar om enheten dröjer, och avaktiverad om den inte dröjer."
6
+Buffering.ToolTip="När detta aktiveras buffras data för video/ljud för att få en så jämn\noch korrekt uppspelning som möjligt, men på bekostnad av mer latens. När\nman buffrar används med ett inspelningskort rekommenderas det att kortet och\nprogrammet har samma bildfrekvens för ett optimalt resultat.\n\n\nNär det inaktiveras får man lägsta möjliga uppspelningslatens på bekostnad\nav bildrutornas uppspelning. Detta är idealt för webbkamror eller när du\nvill använda programmets förhandsvisningsfönster för att spela på en konsol.\n\n\nIdentifiera automatiskt (standard) kommer aktivera detta om enheten har en\nfördröjning och inaktivera om den inte har det."
7
 Buffering.AutoDetect="Upptäck automatiskt"
8
 Buffering.Enable="Aktivera"
9
 Buffering.Disable="Inaktivera"
10
obs-studio-26.0.2.tar.xz/plugins/win-dshow/data/locale/vi-VN.ini -> obs-studio-26.1.0.tar.xz/plugins/win-dshow/data/locale/vi-VN.ini Changed
24
 
1
@@ -1,10 +1,14 @@
2
 VideoCaptureDevice="Thiết bị quay video"
3
 Device="Thiết bị"
4
+ColorSpace="Không gian màu"
5
 ColorSpace.Default="Mặc định"
6
+ColorRange="Dải màu"
7
+ColorRange.Default="Mặc định"
8
 ColorRange.Partial="Một phần"
9
 ColorRange.Full="Đầy đủ"
10
 ConfigureAudio="Cấu hình âm thanh"
11
 ConfigureVideo="Cấu hình Video"
12
+ConfigureCrossbar="Cài đặt thanh ngang"
13
 ResFPSType="Độ phân giải/FPS loại"
14
 ResFPSType.Custom="Tùy chỉnh"
15
 ResFPSType.DevPreferred="Mặc định thiết bị"
16
@@ -21,6 +25,7 @@
17
 UseCustomAudioDevice="Sử dụng thiết bị âm thanh tuỳ chỉnh"
18
 AudioDevice="Âm thanh thiết bị"
19
 Buffering="Bộ đệm"
20
+Buffering.ToolTip="Khi bật, video đệm/dữ liệu âm thanh đảm bảo bản chiếu lại được mượt mà và \nchính xác nhất có thể, nhưng độ trễ sẽ gia tăng. Khi sử dụng\nbộ đệm với thẻ quay video chúng tôi khuyên bạn nên đặt tốc độ khung hình của thẻ và\nchương trình để đạt được kết quả tốt nhất.\n\nKhi tắt, bản chiếu lại sẽ có độ trễ thấp nhất, nhưng phải đánh đổi độ chính xác\ncủa khung hình bản chiếu lại. Thích hợp cho máy quay ghi hình trước mặt, hoặc khi sử dụng\ncửa sổ xem trước của chương trình để chơi máy điện tử cầm tay.\n\nTự động tìm kiếm (mặc định) bật lên nếu thiết bị có độ trễ, và tắt đi\nnếu không có độ trễ."
21
 Buffering.AutoDetect="Tự phát hiện"
22
 Buffering.Enable="Bật"
23
 Buffering.Disable="Tắt"
24
obs-studio-26.0.2.tar.xz/plugins/win-dshow/libdshowcapture/dshowcapture.hpp -> obs-studio-26.1.0.tar.xz/plugins/win-dshow/libdshowcapture/dshowcapture.hpp Changed
10
 
1
@@ -31,7 +31,7 @@
2
 
3
 #define DSHOWCAPTURE_VERSION_MAJOR 0
4
 #define DSHOWCAPTURE_VERSION_MINOR 8
5
-#define DSHOWCAPTURE_VERSION_PATCH 3
6
+#define DSHOWCAPTURE_VERSION_PATCH 5
7
 
8
 #define MAKE_DSHOWCAPTURE_VERSION(major, minor, patch) \
9
    ((major << 24) | (minor << 16) | (patch))
10
obs-studio-26.0.2.tar.xz/plugins/win-dshow/libdshowcapture/source/output-filter.cpp -> obs-studio-26.1.0.tar.xz/plugins/win-dshow/libdshowcapture/source/output-filter.cpp Changed
40
 
1
@@ -30,8 +30,6 @@
2
 #define PrintFunc(x)
3
 #endif
4
 
5
-/* XXX: This is hardcoded for NV12/YV12/I420 */
6
-
7
 #define FILTER_NAME L"Output Filter"
8
 #define VIDEO_PIN_NAME L"Video Output"
9
 #define AUDIO_PIN_NAME L"Audio Output"
10
@@ -348,6 +346,9 @@
11
 {
12
    PrintFunc(L"OutputPin::SetFormat");
13
 
14
+   if (pmt == nullptr)
15
+       return VFW_E_INVALIDMEDIATYPE;
16
+
17
    mt = pmt;
18
 
19
    GetMediaTypeVFormat(mt, curVFormat);
20
@@ -431,9 +432,8 @@
21
    int cx = vih->bmiHeader.biWidth;
22
    int cy = vih->bmiHeader.biHeight;
23
 
24
-   /* TODO: Support formats, you know, other than video NV12/YV12 if
25
-    * needed */
26
-   bufSize = cx * cy * 15 / 10;
27
+   WORD bits = VFormatBits(curVFormat);
28
+   bufSize = cx * cy * bits / 8;
29
 
30
    ALLOCATOR_PROPERTIES props;
31
 
32
@@ -648,6 +648,7 @@
33
               long long interval)
34
    : refCount(0),
35
      state(State_Stopped),
36
+     graph(nullptr),
37
      pin(new OutputPin(this, format, cx, cy, interval)),
38
      misc(new SourceMiscFlags)
39
 {
40
obs-studio-26.0.2.tar.xz/plugins/win-dshow/libdshowcapture/source/output-filter.hpp -> obs-studio-26.1.0.tar.xz/plugins/win-dshow/libdshowcapture/source/output-filter.hpp Changed
10
 
1
@@ -134,7 +134,7 @@
2
 
3
    volatile long refCount;
4
    FILTER_STATE state;
5
-   ComPtr<IFilterGraph> graph;
6
+   IFilterGraph *graph;
7
    ComPtr<OutputPin> pin;
8
 
9
    ComPtr<IAMFilterMiscFlags> misc;
10
obs-studio-26.0.2.tar.xz/plugins/win-dshow/tiny-nv12-scale.c -> obs-studio-26.1.0.tar.xz/plugins/win-dshow/tiny-nv12-scale.c Changed
106
 
1
@@ -6,10 +6,10 @@
2
  * it's nearest neighbor so not really a huge deal.  at the very least it
3
  * should be sse2 at some point. */
4
 
5
-void nv12_scale_init(nv12_scale_t *s, bool convert_to_i420, int dst_cx,
6
+void nv12_scale_init(nv12_scale_t *s, enum target_format format, int dst_cx,
7
             int dst_cy, int src_cx, int src_cy)
8
 {
9
-   s->convert_to_i420 = convert_to_i420;
10
+   s->format = format;
11
 
12
    s->src_cx = src_cx;
13
    s->src_cy = src_cy;
14
@@ -118,16 +118,89 @@
15
    }
16
 }
17
 
18
+static void nv12_scale_nearest_to_yuy2(nv12_scale_t *s, uint8_t *dst_start,
19
+                      const uint8_t *src)
20
+{
21
+   register uint8_t *dst = dst_start;
22
+   const int src_cx = s->src_cx;
23
+   const int src_cy = s->src_cy;
24
+   const int dst_cx = s->dst_cx;
25
+   const int dst_cy = s->dst_cy;
26
+   const int src_cx_d2 = src_cx / 2;
27
+   const int src_cy_d2 = src_cy / 2;
28
+   const int dst_cx_d2 = dst_cx / 2;
29
+   const int dst_cy_d2 = dst_cy / 2;
30
+   const int size = src_cx * src_cy;
31
+
32
+   const uint8_t *src_uv = src + size;
33
+
34
+   register int uv_flip = 0;
35
+
36
+   for (int y = 0; y < dst_cy; y++) {
37
+       const int src_line = y * src_cy / dst_cy * s->src_cx;
38
+       const int src_line_d2 =
39
+           y / 2 * src_cy_d2 / dst_cy_d2 * s->src_cx;
40
+
41
+       for (int x = 0; x < dst_cx; x++) {
42
+           const int src_x = x * src_cx / dst_cx;
43
+           const int src_x_d2 = x / 2 * src_cx_d2 / dst_cx_d2;
44
+           const int pos = src_line + src_x;
45
+           const int pos_uv = src_line_d2 + src_x_d2 * 2 + uv_flip;
46
+
47
+           *(dst++) = src[pos];
48
+           *(dst++) = src_uv[pos_uv];
49
+
50
+           uv_flip ^= 1;
51
+       }
52
+   }
53
+}
54
+
55
+static void nv12_convert_to_yuy2(nv12_scale_t *s, uint8_t *dst_start,
56
+                const uint8_t *src_start)
57
+{
58
+   const int size = s->src_cx * s->src_cy;
59
+   const int size_dst_line = s->src_cx * 4;
60
+
61
+   register const uint8_t *src_y = src_start;
62
+   register const uint8_t *src_uv = src_y + size;
63
+   register uint8_t *dst = dst_start;
64
+   register uint8_t *dst_end = dst + size * 2;
65
+
66
+   while (dst < dst_end) {
67
+       register uint8_t *dst_line_end = dst + size_dst_line;
68
+       const uint8_t *src_uv_start = src_uv;
69
+       while (dst < dst_line_end) {
70
+           *(dst++) = *(src_y++);
71
+           *(dst++) = *(src_uv++);
72
+           *(dst++) = *(src_y++);
73
+           *(dst++) = *(src_uv++);
74
+       }
75
+
76
+       dst_line_end = dst + size_dst_line;
77
+       src_uv = src_uv_start;
78
+       while (dst < dst_line_end) {
79
+           *(dst++) = *(src_y++);
80
+           *(dst++) = *(src_uv++);
81
+           *(dst++) = *(src_y++);
82
+           *(dst++) = *(src_uv++);
83
+       }
84
+   }
85
+}
86
+
87
 void nv12_do_scale(nv12_scale_t *s, uint8_t *dst, const uint8_t *src)
88
 {
89
    if (s->src_cx == s->dst_cx && s->src_cy == s->dst_cy) {
90
-       if (s->convert_to_i420)
91
+       if (s->format == TARGET_FORMAT_I420)
92
            nv12_convert_to_i420(s, dst, src);
93
+       else if (s->format == TARGET_FORMAT_YUY2)
94
+           nv12_convert_to_yuy2(s, dst, src);
95
        else
96
            memcpy(dst, src, s->src_cx * s->src_cy * 3 / 2);
97
    } else {
98
-       if (s->convert_to_i420)
99
+       if (s->format == TARGET_FORMAT_I420)
100
            nv12_scale_nearest_to_i420(s, dst, src);
101
+       else if (s->format == TARGET_FORMAT_YUY2)
102
+           nv12_scale_nearest_to_yuy2(s, dst, src);
103
        else
104
            nv12_scale_nearest(s, dst, src);
105
    }
106
obs-studio-26.0.2.tar.xz/plugins/win-dshow/tiny-nv12-scale.h -> obs-studio-26.1.0.tar.xz/plugins/win-dshow/tiny-nv12-scale.h Changed
28
 
1
@@ -7,8 +7,14 @@
2
 extern "C" {
3
 #endif
4
 
5
+enum target_format {
6
+   TARGET_FORMAT_NV12,
7
+   TARGET_FORMAT_I420,
8
+   TARGET_FORMAT_YUY2,
9
+};
10
+
11
 struct nv12_scale {
12
-   bool convert_to_i420;
13
+   enum target_format format;
14
 
15
    int src_cx;
16
    int src_cy;
17
@@ -19,8 +25,8 @@
18
 
19
 typedef struct nv12_scale nv12_scale_t;
20
 
21
-extern void nv12_scale_init(nv12_scale_t *s, bool convert_to_i420, int dst_cx,
22
-               int dst_cy, int src_cx, int src_cy);
23
+extern void nv12_scale_init(nv12_scale_t *s, enum target_format format,
24
+               int dst_cx, int dst_cy, int src_cx, int src_cy);
25
 extern void nv12_do_scale(nv12_scale_t *s, uint8_t *dst, const uint8_t *src);
26
 
27
 #ifdef __cplusplus
28
obs-studio-26.0.2.tar.xz/plugins/win-dshow/virtualcam-module/virtualcam-filter.cpp -> obs-studio-26.1.0.tar.xz/plugins/win-dshow/virtualcam-module/virtualcam-filter.cpp Changed
59
 
1
@@ -20,6 +20,8 @@
2
 
3
    AddVideoFormat(VideoFormat::I420, DEFAULT_CX, DEFAULT_CY,
4
               DEFAULT_INTERVAL);
5
+   AddVideoFormat(VideoFormat::YUY2, DEFAULT_CX, DEFAULT_CY,
6
+              DEFAULT_INTERVAL);
7
 
8
    /* ---------------------------------------- */
9
    /* load placeholder image                   */
10
@@ -90,13 +92,14 @@
11
    if (new_cx != cx || new_cy != cy || new_interval != interval) {
12
        AddVideoFormat(VideoFormat::NV12, new_cx, new_cy, new_interval);
13
        AddVideoFormat(VideoFormat::I420, new_cx, new_cy, new_interval);
14
+       AddVideoFormat(VideoFormat::YUY2, new_cx, new_cy, new_interval);
15
        SetVideoFormat(VideoFormat::NV12, new_cx, new_cy, new_interval);
16
        cx = new_cx;
17
        cy = new_cy;
18
        interval = new_interval;
19
    }
20
 
21
-   nv12_scale_init(&scaler, false, cx, cy, cx, cy);
22
+   nv12_scale_init(&scaler, TARGET_FORMAT_NV12, cx, cy, cx, cy);
23
 
24
    /* ---------------------------------------- */
25
 
26
@@ -157,7 +160,7 @@
27
    cy = GetCY();
28
    interval = GetInterval();
29
 
30
-   nv12_scale_init(&scaler, false, GetCX(), GetCY(), cx, cy);
31
+   nv12_scale_init(&scaler, TARGET_FORMAT_NV12, GetCX(), GetCY(), cx, cy);
32
 
33
    while (!stopped()) {
34
        Frame(filter_time);
35
@@ -201,15 +204,20 @@
36
                       new_interval);
37
        }
38
 
39
-       nv12_scale_init(&scaler, false, GetCX(), GetCY(), new_cx,
40
-               new_cy);
41
+       nv12_scale_init(&scaler, TARGET_FORMAT_NV12, GetCX(), GetCY(),
42
+               new_cx, new_cy);
43
 
44
        cx = new_cx;
45
        cy = new_cy;
46
        interval = new_interval;
47
    }
48
 
49
-   scaler.convert_to_i420 = GetVideoFormat() == VideoFormat::I420;
50
+   if (GetVideoFormat() == VideoFormat::I420)
51
+       scaler.format = TARGET_FORMAT_I420;
52
+   else if (GetVideoFormat() == VideoFormat::YUY2)
53
+       scaler.format = TARGET_FORMAT_YUY2;
54
+   else
55
+       scaler.format = TARGET_FORMAT_NV12;
56
 
57
    uint8_t *ptr;
58
    if (LockSampleData(&ptr)) {
59
obs-studio-26.0.2.tar.xz/plugins/win-mf/data/locale/de-DE.ini -> obs-studio-26.1.0.tar.xz/plugins/win-mf/data/locale/de-DE.ini Changed
37
 
1
@@ -1,10 +1,10 @@
2
-MFAACEnc="Media‐Foundation‐AAC‐Encoder"
3
+MFAACEnc="Media-Foundation-AAC-Encoder"
4
 Bitrate="Bitrate"
5
 
6
-MF.H264.EncoderName="Media‐Foundation‐H264‐Encoder"
7
+MF.H264.EncoderName="Media-Foundation-H264-Encoder"
8
 MF.H264.Encoder="Encodername"
9
 MF.H264.LowLatency="Niedrige Latenz (deaktiviert Frameneuanordnung)"
10
-MF.H264.BFrames="Konsekutive B‐Frameanzahl"
11
+MF.H264.BFrames="Konsekutive B-Frameanzahl"
12
 MF.H264.CustomBufsize="Benutzerdefinierte Puffergröße verwenden"
13
 MF.H264.BufferSize="Puffergröße"
14
 MF.H264.CustomMaxBitrate="Benutzerdefinierte max. Bitrate verwenden"
15
@@ -17,14 +17,14 @@
16
 MF.H264.CQP="CQP (konstante Qualität)"
17
 MF.H264.MinQP="Minimum QP"
18
 MF.H264.MaxQP="Maximum QP"
19
-MF.H264.QPI="QP‐I‐Frame"
20
-MF.H264.QPP="QP‐P‐Frame"
21
-MF.H264.QPB="QP‐B‐Frame"
22
+MF.H264.QPI="QP-I-Frame"
23
+MF.H264.QPP="QP-P-Frame"
24
+MF.H264.QPB="QP-B-Frame"
25
 MF.H264.Profile="Profil"
26
 MF.H264.Advanced="Erweitert"
27
 
28
-MF.H264.EncoderSWMicrosoft="Microsoft‐Software‐H.264‐Encoder"
29
-MF.H264.EncoderHWAMD="AMD‐Video‐Coding‐Engine‐H.264‐Encoder (Media Foundation)"
30
-MF.H264.EncoderHWIntel="Intel‐Quick‐Sync‐H.264‐Encoder (Media Foundation)"
31
-MF.H264.EncoderHWNVIDIA="NVIDIA‐NVENC‐H.264‐Encoder (Media Foundation)"
32
+MF.H264.EncoderSWMicrosoft="Microsoft-Software-H.264-Encoder"
33
+MF.H264.EncoderHWAMD="AMD-Video-Coding-Engine-H.264-Encoder (Media Foundation)"
34
+MF.H264.EncoderHWIntel="Intel-Quick-Sync-H.264-Encoder (Media Foundation)"
35
+MF.H264.EncoderHWNVIDIA="NVIDIA-NVENC-H.264-Encoder (Media Foundation)"
36
 
37
obs-studio-26.0.2.tar.xz/plugins/win-mf/data/locale/et-EE.ini -> obs-studio-26.1.0.tar.xz/plugins/win-mf/data/locale/et-EE.ini Changed
12
 
1
@@ -12,7 +12,10 @@
2
 MF.H264.KeyframeIntervalSec="Võtmekaadri intervall (sekundit, 0=automaatne)"
3
 MF.H264.CBR="CBR (Pidev bitikiirus)"
4
 MF.H264.VBR="VBR (muutuv bitikiirus)"
5
+MF.H264.MinQP="Miinimum QP"
6
+MF.H264.MaxQP="Miinimum QP"
7
 MF.H264.Profile="Profiil"
8
+MF.H264.Advanced="Täpsemad seaded"
9
 
10
 MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 kodeerija"
11
 MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 Kodeerija (Media Foundation)"
12
obs-studio-26.0.2.tar.xz/plugins/win-mf/data/locale/fa-IR.ini -> obs-studio-26.1.0.tar.xz/plugins/win-mf/data/locale/fa-IR.ini Changed
28
 
1
@@ -3,6 +3,9 @@
2
 
3
 MF.H264.EncoderName="واسط رمزگذار بنیاد H264"
4
 MF.H264.Encoder="نام رمز گذار"
5
+MF.H264.LowLatency="تأخیر کم (غیرفعال کردن سفارش مجدد فریم)"
6
+MF.H264.BFrames="شمارش متوالی B-Frame"
7
+MF.H264.CustomBufsize="استفاده از اندازه بافر سفارشی"
8
 MF.H264.BufferSize="اندازه بافر"
9
 MF.H264.CustomMaxBitrate="استفاده از سفارشی حداکثر میزان ارسال بیت"
10
 MF.H264.Bitrate="نرخ بیت"
11
@@ -12,11 +15,16 @@
12
 MF.H264.CBR="CBR (میزان ارسال بیت ثابت)"
13
 MF.H264.VBR="VBR (سرعت بیت متغیر)"
14
 MF.H264.CQP="CQP (ثابت کیفیت)"
15
+MF.H264.MinQP="حداقل QP"
16
 MF.H264.MaxQP="حداکثر QP"
17
+MF.H264.QPI="فریم-l QP"
18
+MF.H264.QPP="فریم P QP"
19
+MF.H264.QPB="فریم QP B"
20
 MF.H264.Profile="پروفایل"
21
 MF.H264.Advanced="پیشرفته"
22
 
23
 MF.H264.EncoderSWMicrosoft="مایکروسافت نرم افزار تخمین H.264"
24
+MF.H264.EncoderHWAMD="رمزگذار موتور ویدئو AMD H.264 (بنیاد رسانه)"
25
 MF.H264.EncoderHWIntel="اینتل سریع همگام سازی تخمین H.264 (رسانه بنیاد)"
26
 MF.H264.EncoderHWNVIDIA="انویدیا NVENC H.264 رمزگذار (رسانه بنیاد)"
27
 
28
obs-studio-26.1.0.tar.xz/plugins/win-mf/data/locale/kab-KAB.ini Added
22
 
1
@@ -0,0 +1,20 @@
2
+Bitrate="Aktum"
3
+
4
+MF.H264.Encoder="Isem n usettengal"
5
+MF.H264.CustomBufsize="Seqdec tiddi yugnen i tkatut n weḥraz"
6
+MF.H264.BufferSize="Tiddi n tkatut n uḥraz"
7
+MF.H264.CustomMaxBitrate="Seqdec aktum afellay yugnen"
8
+MF.H264.Bitrate="Aktum"
9
+MF.H264.MaxBitrate="Aktum afellay"
10
+MF.H264.KeyframeIntervalSec="Azilal n yikataren yufraren (tasinin, 0=awurman)"
11
+MF.H264.RateControl="Asenqed n uktum"
12
+MF.H264.MinQP="QP adday"
13
+MF.H264.MaxQP="QP afellay"
14
+MF.H264.Profile="Amaɣnu"
15
+MF.H264.Advanced="Anaẓi"
16
+
17
+MF.H264.EncoderSWMicrosoft="Asettengal Microsoft Software H.264"
18
+MF.H264.EncoderHWAMD="Asettengal AMD Video Coding Engine H.264 (Media Foundation)"
19
+MF.H264.EncoderHWIntel="Asettengal Intel Quick Sync H.264 (Media Foundation)"
20
+MF.H264.EncoderHWNVIDIA="Asettengal NVIDIA NVENC H.264 (Media Foundation)"
21
+
22
obs-studio-26.1.0.tar.xz/plugins/win-wasapi/data/locale/kab-KAB.ini Added
7
 
1
@@ -0,0 +1,5 @@
2
+AudioInput="Tuṭṭfa n unekcum n umeslaw"
3
+AudioOutput="Tuṭṭfa n tuffɣa n umeslaw"
4
+Device="Ibenk"
5
+Default="Amezwar"
6
+
7
obs-studio-26.0.2.tar.xz/plugins/win-wasapi/data/locale/pt-BR.ini -> obs-studio-26.1.0.tar.xz/plugins/win-wasapi/data/locale/pt-BR.ini Changed
9
 
1
@@ -1,5 +1,5 @@
2
-AudioInput="Captura de Entrada de Áudio"
3
-AudioOutput="Captura de Saída de Áudio"
4
+AudioInput="Captura de entrada de áudio"
5
+AudioOutput="Captura de saída de áudio"
6
 Device="Dispositivo"
7
 Default="Padrão"
8
 UseDeviceTiming="Usar Data/Hora do Dispositivo"
9
obs-studio-26.0.2.tar.xz/test/cmocka/CMakeLists.txt -> obs-studio-26.1.0.tar.xz/test/cmocka/CMakeLists.txt Changed
12
 
1
@@ -37,3 +37,10 @@
2
 
3
 add_test(test_darray ${CMAKE_CURRENT_BINARY_DIR}/test_darray)
4
 fixLink(test_darray)
5
+
6
+# bitstream test
7
+add_executable(test_bitstream test_bitstream.c)
8
+target_link_libraries(test_bitstream ${CMOCKA_LIBRARIES} libobs)
9
+
10
+add_test(test_bitstream ${CMAKE_CURRENT_BINARY_DIR}/test_bitstream)
11
+fixLink(test_bitstream)
12
obs-studio-26.1.0.tar.xz/test/cmocka/test_bitstream.c Added
36
 
1
@@ -0,0 +1,34 @@
2
+#include <stdarg.h>
3
+#include <stddef.h>
4
+#include <setjmp.h>
5
+#include <cmocka.h>
6
+
7
+#include <util/bitstream.h>
8
+
9
+static void bitstream_test(void **state)
10
+{
11
+   struct bitstream_reader reader;
12
+   uint8_t data[6] = {0x34, 0xff, 0xe1, 0x23, 0x91, 0x45};
13
+
14
+   // set len to one less than the array to show that we stop reading at that len
15
+   bitstream_reader_init(&reader, data, 5);
16
+
17
+   assert_int_equal(bitstream_reader_read_bits(&reader, 8), 0x34);
18
+   assert_int_equal(bitstream_reader_read_bits(&reader, 1), 1);
19
+   assert_int_equal(bitstream_reader_read_bits(&reader, 3), 7);
20
+   assert_int_equal(bitstream_reader_read_bits(&reader, 4), 0xF);
21
+   assert_int_equal(bitstream_reader_r8(&reader), 0xe1);
22
+   assert_int_equal(bitstream_reader_r16(&reader), 0x2391);
23
+
24
+   // test reached end
25
+   assert_int_equal(bitstream_reader_r8(&reader), 0);
26
+}
27
+
28
+int main()
29
+{
30
+   const struct CMUnitTest tests[] = {
31
+       cmocka_unit_test(bitstream_test),
32
+   };
33
+
34
+   return cmocka_run_group_tests(tests, NULL, NULL);
35
+}
36
obs-studio-26.0.2.tar.xz/test/cmocka/test_serializer.c -> obs-studio-26.1.0.tar.xz/test/cmocka/test_serializer.c Changed
9
 
1
@@ -7,6 +7,7 @@
2
 
3
 static void serialize_test(void **state)
4
 {
5
+   UNUSED_PARAMETER(state);
6
    struct array_output_data output;
7
    struct serializer s;
8
 
9
Refresh

No build results available

Refresh

No rpmlint results available

Request History
boombatower's avatar

boombatower created request over 4 years ago

- Update to version 26.1.0:
* UI: Add deferred function to update context bar
* UI: Fix installer/updater check for vs2019 32bit
* Update translations from Crowdin
* Revert #3856
* linux-jack: fix timestamp calculation
* linux-jack: fix deadlock when closing the client
* linux-jack: mark ports as JackPortIsTerminal
* linux-pulseaudio: fix race conditions
* obs-browser: Add obsExit event
* UI: Determine rate control after creating encoders
* UI: Handle (de)select scene items queued
* CI: Update macOS to Qt 5.15.2 and deps 2020-12-11
* libobs: fix the pending stop trick
* UI/updater: Fix dll check
* UI: Remove jansson requirement from UI and updater
* UI/updater: Update redist checks to VS2019
* deps/json11: Update to most recent version
* rtmp-services: Update Steam
* libobs: Update version to 26.1.0
* sndio: remove strerror_l
* UI: Fix weird spacing in adv output FFmpeg recording
* linux-v4l2: Fix bashism in v4l2loopback module detection
* obs-scripting: Fix removing signal handlers in lua
* UI: Correctly unregister Virtual Camera & Source Toolbar hotkeys
* UI: Scale Interact cursor position based on display DPI
* UI: Sync 'Copy Filters' enabled state in the Source context menu
* mac-virtualcam: Build a universal x86_64+arm64 binary for M1 Macs
* vlc-video: Free media struct
* mac-virtualcam: Fix remaining global namespaces


boombatower's avatar

boombatower accepted request over 4 years ago

ok